Не смог найти нормальную актуальную инструкцию по мониторингу линуксовых логов забиксом - сделал свою, под 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)


  1. kaasnake
    23.05.2023 15:03
    +8

    Забикс не очень хорошая идея для хранения логов. Там MySQL под капотом. Рано или поздно понадобится парсить логи, а их уже накопилось много и поиск превратится в ад. Лучше elasticsearch или Loki.

    А забикс оставьте для мониторинга.


    1. kvazimoda24
      23.05.2023 15:03

      Чисто ради справедливости, Заббикс умеет и в Постгрес


      1. CherryPah
        23.05.2023 15:03

        а форк заббикса в лице Glaber умеет и в кликхаус


    1. CfyCnfh Автор
      23.05.2023 15:03

      Пока ресурсы есть - пусть лежат. В случае проблем поставим период хранения в один день


    1. kortanton69
      23.05.2023 15:03

      1. MySql в zabbix уже мало кто использует. В основном это постгря + таймскале дб

      2. В статье вроде не слова о хранении логов, к конечном итоге можно просто отключить хранение по этому ЭД

      3. А если просто стоит задача на какой-то виртуалке реагировать на определенное событие в логах, что ради этого ELK разворачивать?


  1. kvazimoda24
    23.05.2023 15:03
    +2

    Странная статья с учётом того, что является практически пересказом документации. При этом, текстовые логи потихоньку выпиливаются и всё переводится на systemd-journald. Потому, открывая статью налеялся увидеть решение чтение логов оттуда, минуя текстовый файл.


    1. CfyCnfh Автор
      23.05.2023 15:03

      Документация немного отличается по синтаксису и в последней версии нифига не работает. Про ту порнографию которую они устраивают в триггерах я вообще молчу
      systemd-journald - спасибо, изучу


      1. 13werwolf13
        23.05.2023 15:03

        есть вот такая штука, она когда-то прекрастно работала, сейчас заброшена (и я не могу сказать работает ли с актуальным заббиксом)


    1. LazyZeroed
      23.05.2023 15:03

      Очень удивляет отсутствие в zabbix нормального (а лучше нативного) решения для работы с логами journald. Неужели у community нет в нем потребности?


  1. dimitrii_z
    23.05.2023 15:03

    А вот универсального решения для определения версии ос у меня нет

    У меня дебиан, так что может вопрос глуп, но чем плохи команды:

    cat /etc/lsb-release

    cat /etc/os-release

    ?


    1. ilyakruchinin
      23.05.2023 15:03

      'lsb_release -a'

      lsb_release входит в Linux Standard Base и должна присутствовать на каждом дистибутиве


    1. 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=workstation


      1. vasilisc
        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


    1. new_bember
      23.05.2023 15:03

      А надёжнее: cat/etc/*release


  1. Ilya_Romashev
    23.05.2023 15:03
    +1

    Честно говоря, я так и не понял за что люди продолжают любить заббикс. Конфигурировать его сложно. Даже сложнее, чем через богомерзкий yaml. А даже простой мониторинг api сводится к сложностям с кучей кликов мышкой, вместо того, чтобы докинуть это в конфиг. Может я его просто готовить не умею?


    1. 13werwolf13
      23.05.2023 15:03
      +3

      zabbix любят за:
      1) он универсален, им можно мониторить любые ОС и любые сервисы при помощи всего одного агента (встречал инсталяции где прометеевских экспортеров на машине стоял десяток порождая чуть ли не больше процессов чем полезные сервисы)
      2) у него низкий порог вхождения (натыкать мышкой даже если кликов много справится любой джун и любой профи, а вот первые шаги в освоении того же прометея на моих глазах ставили людей в ступор)
      3) не надо путать сложно и неудобно. конфигурировать zabbix неудобно, да, написать ямлик и залить его ансиблом быстрее и удобнее, но точно не проще
      4) он одновременно и allinone и распределяемый (можно в пару команд получить рабочий инстанс который уже из коробки будет иметь набор полезных местрик, шаблонов, графиков в удобной вебморде и даже будет сам слать аллерты десятком разных каналов, а можно и разкидать по разным серверам например если надо отделить субд от сервера что полезно при больших инсталяциях (насколько я помню тот же прометей вообще не умеет ни в постгрю ни в мускуль и если он отожрался - страдай))
      5) коммюнити (заббикс инструмент зарекомендовавший себя годами, по нему есть очень много инфы, в коммюнити всегда можно найти совет)
      6) он всё ещё распространяется в виде собранных и протестированных мейнтейнерами пакетов а не бинарём

      я ни сколько не говорю что заббикс это волшебная палочка решающая все проблемы, есть много кейсов где он не подходит, но всё же его есть за что любить. в моей домашней инфре я так его ни на что и не заменил хотя неоднократно пытался при том что на работе его почти нет (остался только для сбора метрик с сетевых железок) и почти всё мониторится одним из форков прометея неравномерным слоем размазанным по кубернетису.


    1. ilyakruchinin
      23.05.2023 15:03

      Конфигурировать можно через API calls. Зачем кликать мышкой, если GUI вообще не обязателен?


  1. vasilisc
    23.05.2023 15:03

    В логах часто повторяется оно и тоже в некоторый промежуток времени. В новых версиях Zabbix можно отбрасывать повторы (Троттлинг), что помогает базе данных не пухнуть так быстро. Поэтому настоятельно рекомендую периодически заменять стандартные шаблоны Zabbix на новые версии, так как они "хорошеют день ото дня". А в вашей наработке тоже можно добавить троттлинг и хранить в базе меньше лишнего.

    https://www.zabbix.com/documentation/current/ru/manual/config/items/preprocessing