log_analyzer.shСистемные логи — богатый источник информации о здоровье устройства, но в сыром виде они бесполезны. Чтобы быстро замечать проблемы, я создал скрипт log_analyzer.sh, который ежечасно парсит журнал systemd (journalctl) и считает, сколько раз за день встретились ключевые слова вроде error, failed или warning.
Результаты сохраняются в базу данных и отображаются в веб-панели — так я вижу, например, «5 ошибок и 12 предупреждений сегодня», не лезя в терминал.
journalctl --since today,log_stats.errorfaileddeniedwarningrebootПри желании список легко расширить — достаточно добавить слово в массив KEYWORDS.
#!/bin/bash
# Вместо файла — используем journalctl
MYSQL_USER="iot_user"
MYSQL_PASS="123456"
MYSQL_DB="iot_db"
DATE=$(date '+%Y-%m-%d')
KEYWORDS=("error" "failed" "denied" "warning" "reboot")
# Очищаем данные за сегодня
mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" "$MYSQL_DB" -e "DELETE FROM log_stats WHERE date = '$DATE';"
# Получаем все логи за сегодня в переменную (для многократного использования)
LOGS_TODAY=$(journalctl --since today --no-pager)
# Перебираем ключевые слова
for KEYWORD in "${KEYWORDS[@]}"; do
# Ищем в выводе journalctl (игнорируем регистр)
COUNT=$(echo "$LOGS_TODAY" | grep -i "$KEYWORD" | wc -l)
# Вставляем в БД
mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" "$MYSQL_DB" -e "
INSERT INTO log_stats (keyword, count, date) VALUES ('$KEYWORD', $COUNT, '$DATE');
"
done
💡 Совет: Добавьте в cron для ежечасного запуска:
0 * * * * /opt/iot/log_analyzer.sh
Теперь вы всегда в курсе, «шумит» ли ваша система — без ручного grep’а и прокрутки терминала.
Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!