Не смог найти нормальную актуальную инструкцию по мониторингу линуксовых логов забиксом - сделал свою, под 6.4.
И отвлекусь на установку агента - не зря же писал скрипт...
Установка и настройка агента
Открываем консоль на машине которую собираемся мониторить, локально или подключившись по SSH. Ставим zabbix-agent, рекомендуют использовать вторую версию. Я ставлю из RPM пакета, ссылку на версию под свою ОС берём на https://www.zabbix.com/ru/download
Обычно версию системы можно узнать, введя в консоль.
hostnamectl
В моём случае это восьмая версия "Operating System: Rocky Linux 8.7 (Green Obsidian)"
Однако бывают подлости, например fedora 37 отсутствует в списке дистрибутивов и это не проблема - достаточно спросить у гугла на чём она основана, либо спросить через консоль и посмотреть результат (вторая строка)
cat /proc/version
Linux version 6.2.15-200.fc37.x86_64 (mockbuild@bkernel02.iad2.fedoraproject.org) (gcc (GCC) 12.2.1 20221121 (Red Hat 12.2.1-4), GNU ld version 2.38-27.fc37) #1 SMP...
Соответственно выбираем Red Hat. А вот универсального решения для определения версии ос у меня нет, хотя чтение страницы редхата на википедии намекает на девятую версию.
Проверяем что в данный момент агент не установлен(вывод должен быть пустым):
systemctl list-units --type service | grep -E "*zabbix*"
Непосредственно инсталляцию можно провести так как рекомендует заббикс во втором пункте, но использование rpm не самый удобный способ поэтому я заменил вызов на dnf с ключём автоподтверждения
dnf install https://repo.zabbix.com/zabbix/6.4/rhel/8/x86_64/zabbix-release-6.4-1.el8.noarch.rpm -y
dnf install zabbix-agent2 zabbix-agent2-plugin-* -y
Для получения данных из файла необходимо запускать агент в активном режиме поэтому прописываем в конфиг ip сервера и стираем хостнэйм чтоб он брался из имени компьютера. И запускаем сервис.
sed -i 's/^Server=127.0.0.1/Server=192.168.6.22/' /etc/zabbix/zabbix_agent2.conf
sed -i 's/^ServerActive=127.0.0.1/ServerActive=192.168.6.22/' /etc/zabbix/zabbix_agent2.conf
sed -i 's/^Hostname=Zabbix server/ /' /etc/zabbix/zabbix_agent2.conf
systemctl enable zabbix-agent2 --now
Осталось выдать заббикс агенту правана чтение интересующего файла:
chown root:zabbix /var/log/messages
chmod 640 /var/log/messages*
Настройки на Zabbix сервере
Идём в Сбор данных>Шаблоны>Создать шаблон. Указываем произвольное имя шаблона на английском и группу, добавляем и ищем его в общем списке. Переключаемся на вторую вкладку "Элементы данных" и создаём новый.
Произвольное имя и обязательно тип "Zabbix агент (активный)".
Ключ log[/var/log/messages,kernel] включает в себя:
Log позволяет читать дополняемые файлы, используйте logrt для файлов с ротацией. Не смотря на то messages архивирует старые данные ротацией - нас интересует только свежак, да и заббикс будет хранить в себе копию лога
/var/log/messages - путь к файлу, с этим всё понятно. А вот дальше интереснее - kernel это подстрока при наличии которой данные будут пересылаться на сервер. Нам нужны только важные события поэтому мы и выбираем kernel, разумеется для своих целей смотрим в файл и решаем что интересно именно вам.
Тип информации Журнал (лог). Интервал обновления я поставил в секунду - это не вызывает проблем с производительностью
Но и в кернелах хватает мусора! Переключаем на вкладку Предобработка в столбце Имя (очевидный косяк перевода) выставляем Замена, в параметрах какое значение нам необходимо фильтровать. Обратите внимание что параметры регистрозависимы.
Осталось заставить заббикса выводить оставшуюся информацию на главную панель.
На вкладке Тригер создаём новый Имя произвольное а вот в Имя события можно выводить полезную информацию. Мне удобно выводить имя устройства и всю строку переданную с заббикс агента. К слову ITEM.LASTVALUE2 выведет предпоследнюю строку и т. д.
Выражение - при появлении элемента данных найти в нём то что мы добавили в предобработке и проигнорировать, а остальные строки показать. Если поставим =1 покажет только строку добавленную в предобработку. Формируется этот запрос разумеется через кнопку Добавить - выбираем Элемент данных, Функцию find и всё!
Режим генерации событий ПРОБЛЕМА Множественная позволяет обрабатывать каждую строку по отдельности, хоть и не гарантирует оригинальный порядок строк.
Одиночный режим выводит только одну строку из полученных за последний Интервал обновления.
Генерация ОК события я отключаю, так как выводятся только важные события на которые стоит обратить пристальное внимание, но часто используют выражения вида nodata(/log_messages_kernel/log[/var/log/messages,kernel],15m)=0 - отсутствие событий за последние 15 минут. Вот только это не работает с Множественным режимом генерации проблем и вам придётся городить скрипты или зависимые события.
Ну и разрешить ручное закрытие разумеется.
Последний этап добавить узел сети Сбор данных, Узлы сети, Создать узел сети.
Имя узла сети для активного агента обязательно указывать таким же как в агенте. Если на агенте оно явно не прописано в строке Hostname файла /etc/zabbix/zabbix_agent2.conf, то берётся название из строки Static hostname: вывода команды hostnamectl что удобно для автоматизации процесса развёртывания.
Добавляем в Шаблоны только что созданный и Linux by Zabbix agent active для мониторинга стандартных метрик. Разумеется можно было добавить тригеры и элементы данных в стандартный шаблон, но очевидно это плохая практика.
Так же задаём удобную Группу узлов сети, Интерфейс с типом Агент и IP адресс машины с агентом.
Готово!
Комментарии (18)
kvazimoda24
23.05.2023 15:03+2Странная статья с учётом того, что является практически пересказом документации. При этом, текстовые логи потихоньку выпиливаются и всё переводится на systemd-journald. Потому, открывая статью налеялся увидеть решение чтение логов оттуда, минуя текстовый файл.
CfyCnfh Автор
23.05.2023 15:03Документация немного отличается по синтаксису и в последней версии нифига не работает. Про ту порнографию которую они устраивают в триггерах я вообще молчу
systemd-journald - спасибо, изучу13werwolf13
23.05.2023 15:03есть вот такая штука, она когда-то прекрастно работала, сейчас заброшена (и я не могу сказать работает ли с актуальным заббиксом)
LazyZeroed
23.05.2023 15:03Очень удивляет отсутствие в zabbix нормального (а лучше нативного) решения для работы с логами journald. Неужели у community нет в нем потребности?
dimitrii_z
23.05.2023 15:03А вот универсального решения для определения версии ос у меня нет
У меня дебиан, так что может вопрос глуп, но чем плохи команды:
cat /etc/lsb-release
cat /etc/os-release
?
ilyakruchinin
23.05.2023 15:03'lsb_release -a'
lsb_release входит в Linux Standard Base и должна присутствовать на каждом дистибутиве
CfyCnfh Автор
23.05.2023 15:03Из *release могу извлеч только ссылку на сайт редхата
Как тут это под кат засунуть?
NAME="Fedora Linux"
VERSION="38 (Workstation Edition)"
ID=fedora
VERSION_ID=38
VERSION_CODENAME=""
PLATFORM_ID="platform:f38"
PRETTY_NAME="Fedora Linux 38 (Workstation Edition)"
ANSI_COLOR="0;38;2;60;110;180"
LOGO=fedora-logo-icon
CPE_NAME="cpe:/o:fedoraproject:fedora:38"
DEFAULT_HOSTNAME="fedora"
HOME_URL="https://fedoraproject.org/"
DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f38/system-administrators-guide/"
SUPPORT_URL="https://ask.fedoraproject.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Fedora"
REDHAT_BUGZILLA_PRODUCT_VERSION=38
REDHAT_SUPPORT_PRODUCT="Fedora"
REDHAT_SUPPORT_PRODUCT_VERSION=38
SUPPORT_END=2024-05-14
VARIANT="Workstation Edition"
VARIANT_ID=workstationvasilisc
23.05.2023 15:03Позвольте порекомендовать свой шаблон Operating System Identification, который без лишних скриптов извлекает информацию из /etc/os-release и оформляет в виде элементов.
http://vasilisc.com/template-zabbix-operating-system-identification
https://github.com/zabbix/community-templates/tree/main/Operating_Systems/Linux/template_operating_system_identification/6.0
Ilya_Romashev
23.05.2023 15:03+1Честно говоря, я так и не понял за что люди продолжают любить заббикс. Конфигурировать его сложно. Даже сложнее, чем через богомерзкий yaml. А даже простой мониторинг api сводится к сложностям с кучей кликов мышкой, вместо того, чтобы докинуть это в конфиг. Может я его просто готовить не умею?
13werwolf13
23.05.2023 15:03+3zabbix любят за:
1) он универсален, им можно мониторить любые ОС и любые сервисы при помощи всего одного агента (встречал инсталяции где прометеевских экспортеров на машине стоял десяток порождая чуть ли не больше процессов чем полезные сервисы)
2) у него низкий порог вхождения (натыкать мышкой даже если кликов много справится любой джун и любой профи, а вот первые шаги в освоении того же прометея на моих глазах ставили людей в ступор)
3) не надо путать сложно и неудобно. конфигурировать zabbix неудобно, да, написать ямлик и залить его ансиблом быстрее и удобнее, но точно не проще
4) он одновременно и allinone и распределяемый (можно в пару команд получить рабочий инстанс который уже из коробки будет иметь набор полезных местрик, шаблонов, графиков в удобной вебморде и даже будет сам слать аллерты десятком разных каналов, а можно и разкидать по разным серверам например если надо отделить субд от сервера что полезно при больших инсталяциях (насколько я помню тот же прометей вообще не умеет ни в постгрю ни в мускуль и если он отожрался - страдай))
5) коммюнити (заббикс инструмент зарекомендовавший себя годами, по нему есть очень много инфы, в коммюнити всегда можно найти совет)
6) он всё ещё распространяется в виде собранных и протестированных мейнтейнерами пакетов а не бинарёмя ни сколько не говорю что заббикс это волшебная палочка решающая все проблемы, есть много кейсов где он не подходит, но всё же его есть за что любить. в моей домашней инфре я так его ни на что и не заменил хотя неоднократно пытался при том что на работе его почти нет (остался только для сбора метрик с сетевых железок) и почти всё мониторится одним из форков прометея неравномерным слоем размазанным по кубернетису.
ilyakruchinin
23.05.2023 15:03Конфигурировать можно через API calls. Зачем кликать мышкой, если GUI вообще не обязателен?
vasilisc
23.05.2023 15:03В логах часто повторяется оно и тоже в некоторый промежуток времени. В новых версиях Zabbix можно отбрасывать повторы (Троттлинг), что помогает базе данных не пухнуть так быстро. Поэтому настоятельно рекомендую периодически заменять стандартные шаблоны Zabbix на новые версии, так как они "хорошеют день ото дня". А в вашей наработке тоже можно добавить троттлинг и хранить в базе меньше лишнего.
https://www.zabbix.com/documentation/current/ru/manual/config/items/preprocessing
kaasnake
Забикс не очень хорошая идея для хранения логов. Там MySQL под капотом. Рано или поздно понадобится парсить логи, а их уже накопилось много и поиск превратится в ад. Лучше elasticsearch или Loki.
А забикс оставьте для мониторинга.
kvazimoda24
Чисто ради справедливости, Заббикс умеет и в Постгрес
CherryPah
а форк заббикса в лице Glaber умеет и в кликхаус
CfyCnfh Автор
Пока ресурсы есть - пусть лежат. В случае проблем поставим период хранения в один день
kortanton69
MySql в zabbix уже мало кто использует. В основном это постгря + таймскале дб
В статье вроде не слова о хранении логов, к конечном итоге можно просто отключить хранение по этому ЭД
А если просто стоит задача на какой-то виртуалке реагировать на определенное событие в логах, что ради этого ELK разворачивать?