Ad Widget

Collapse

Мониторить лог, но не с помощью zabbix-агента

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Iskatel
    Junior Member
    • Nov 2021
    • 13

    #1

    Мониторить лог, но не с помощью zabbix-агента

    Допустим нужно создать триггер, который будет срабатывать на слово «Warning» в некоем логе. Прежде чем создать триггер нужно создать элемент данных, тут казалось бы всё просто, в zabbix есть встроенный ключ log, но он требует включения функции активных проверок в агенте, а это не получится сделать, так как активные проверки не работают из-за того, что версии zabbix-agent и zabbix-сервера сильно отличаются. Вопрос, можно ли создать подобный элемент данных используя не zabbix-агент, а snmp-агент или ssh-агент и как это сделать?
  • Hamardaban
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • May 2019
    • 2713

    #2
    Можете попробовать что-то сконструировать из
    vfs.file.regexp или vfs.file.regmatch

    Еще можно эмулировать работу активного агента - запускать по расписанию скрипт проверяющий лог и если нашлось что то нужное слать на заббикс zabbix_sender ом. Или слать через расширение snmp, или писать в файл некий флаг и забирать этот файл в забикс.
    Last edited by Hamardaban; 28-01-2024, 16:34.

    Comment

    • Semiadmin
      Senior Member
      • Oct 2014
      • 1625

      #3
      Не очень понял, как связана способность агента работать в активном режиме с его версией и версией сервера. По-моему, никак. Более старые агенты работают с более новым сервером в любом режиме. Если агент, наоборот, новее сервера, то иногда это работоспособно, иногда нет - зависит от версий. Кстати, агент 4.0, несовместимый с сервером ниже 4.0, может с ним работать в активном режиме.

      Comment

      • Kos
        Senior Member
        Zabbix Certified SpecialistZabbix Certified Professional
        • Aug 2015
        • 3404

        #4
        Hamardaban, при использовании vfs.file.* будет всё время перечитываться одно и то же место файла (либо весь файл заново, либо заданные строки), что не подходит для мониторинга логов.

        При опросе элементов данных в активном и пассивном режимах принципиальная разница, помимо того, с чьей стороны инициируется соединение, заключается ещё и в том, что используются различные протоколы общения Сервер <-> Агент. При этом для пассивного режима этот протокол очень простой, по сути: в запросе пересылается только ключ опрашиваемой метрики, а в ответе - только значение (либо признак ошибки). Для активного же режима протокол значительно сложнее; помимо того, что в одном запросе можно переслать сразу множество значений различных метрик, так для них пересылаются ещё и некоторые метаданные. В частности, для метрик log*[...] и eventlog[...] в обе стороны пересылается значение счётчика прочитанных байт, т.е. местоположение внутри лог-файла, до которого данные уже были проанализированы.

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

        Comment

        • Iskatel
          Junior Member
          • Nov 2021
          • 13

          #5
          Originally posted by Semiadmin
          Не очень понял, как связана способность агента работать в активном режиме с его версией и версией сервера. По-моему, никак. Более старые агенты работают с более новым сервером в любом режиме. Если агент, наоборот, новее сервера, то иногда это работоспособно, иногда нет - зависит от версий. Кстати, агент 4.0, несовместимый с сервером ниже 4.0, может с ним работать в активном режиме.
          Ну потому что в zabbix_agentd.log у меня сыплется:
          Code:
          Message from 172.31.0.196 is missing header. Message ignored.
          Если попробовать чекнуть агент из консоли:
          Code:
          $ zabbix_get -s 172.31.23.18 -k system.uptime
          zabbix_get [50687]: Check access restrictions in Zabbix agent configuration
          Где-то (уже не найду ссылку) вычитал, что это из-за несовместимости версий. Сервер - 3.2.6, агент - 4.0.4​

          Comment

          • Kos
            Senior Member
            Zabbix Certified SpecialistZabbix Certified Professional
            • Aug 2015
            • 3404

            #6
            Originally posted by Iskatel
            Ну потому что в zabbix_agentd.log у меня сыплется:
            Code:
            Message from 172.31.0.196 is missing header. Message ignored.
            Это сообщение относится к работе пассивных проверок, Semiadmin как раз писал про то, что продолжают работать активные.

            Originally posted by Iskatel
            Если попробовать чекнуть агент из консоли:
            Code:
            $ zabbix_get -s 172.31.23.18 -k system.uptime
            zabbix_get [50687]: Check access restrictions in Zabbix agent configuration

            А это вообще относится не к версии агента, а к параметру "Server=".
            Впрочем, допускаю, что и в случае проверок более старой утилитой zabbix_get более нового агента будет аналогичный эффект, поскольку данная утилита, по сути, моделирует запрос от сервера к агенту, который выполняется во время пассивных проверок. Можно убедиться в этом, сопоставив время появления ругани в логе агента (про missing header) со временем опроса этой утилитой.

            Comment

            • Alex_UUU
              Senior Member
              • Dec 2018
              • 541

              #7
              Для проверки лог файлов на сервере, как отмечено выше, версия агента и сервера не имеет значение.
              Выбирается тип "активные проверки" и ЭД - log или logrt. Агент цепляется "параллельно" дескриптору файла логов (типа в линухе tail) и на лету проверяет заданные регекспы.
              Можно также использовать сторонние аналогичные "цеплялки", типа мультилог и т.д.
              Ну и, кажется, лог файл должен быть текстовым и длина строки не более (не помню) символов.

              Comment

              • Iskatel
                Junior Member
                • Nov 2021
                • 13

                #8
                Originally posted by Kos
                Это сообщение относится к работе пассивных проверок, Semiadmin как раз писал про то, что продолжают работать активные.
                Ещё раз, активные проверки могут работать при неработающих пасивных? Хорошо, переведу вопрос не в как мониторить лог, а как сделать так, чтобы проверки работали? Примеры сообщений я привёл. Пробовал уже всё.

                Comment

                • Kos
                  Senior Member
                  Zabbix Certified SpecialistZabbix Certified Professional
                  • Aug 2015
                  • 3404

                  #9
                  Originally posted by Iskatel
                  Ещё раз, активные проверки могут работать при неработающих пасивных?
                  Да, могут.

                  Про ваши предыдущие сообщения об ошибках я вам уже ответил.
                  Опишите, пожалуйста, ещё раз: что именно делаете, что ожидаете получить и что при этом получаете реально.

                  Comment

                  • Iskatel
                    Junior Member
                    • Nov 2021
                    • 13

                    #10
                    Originally posted by Kos
                    Опишите, пожалуйста, ещё раз: что именно делаете, что ожидаете получить и что при этом получаете реально.
                    Есть сервер на Debian 10, на нём стоял пакет snmpd версии 5.7.3 и мониторился он SNMPv2-агентами и ssh-агентами и с ними в отличие от zabbix-агента проблем не было. Установил zabbix-agent версии 4.0.4​, запустил, в Zabbix значок ZBX на странице настройки узла загорелся красным. В течение нескольких дней игрался с опциями в файле zabbix_agentd.conf но так и не смог добиться, чтобы значок стал зелёным. В какой-то момент заметил, что элемент данных с ключём log["/var/log/mylog", "Error",UTF-8"] даже получает данные, по всей видимости это как раз случай когда активные проверки работают при неработающих пассивных, в какой момент они заработали я даже не уловил.
                    Хочу сделать, чтобы значок всё-таки был зелёным и хочу сделать уведомление, чтобы оно содержало фрагмент строки, который попадает в элемент данных.​
                    В лог /var/log/mylog время от времени падают строки содержащие "Error", что может быть критично, хотелось бы получать оперативно уведомления о них. При этом в начале строк стоит время, его можно обрезать как лишнее, так как и так есть время сообщения.
                    Last edited by Iskatel; 01-02-2024, 16:51.

                    Comment

                    • Kos
                      Senior Member
                      Zabbix Certified SpecialistZabbix Certified Professional
                      • Aug 2015
                      • 3404

                      #11
                      Т.е. сейчас у вас сформулировано два вопроса:
                      Хочу сделать, чтобы значок всё-таки был зелёным и хочу сделать уведомление
                      По поводу значка. Вы писали, что версия сервера Zabbix у вас - 3.2.х. Я правильно понимаю, что речь идёт вот об этой странице настроек и колонке "Доступность"?
                      Если так, то что видно во всплывающем окне при наведении указателя мыши на красный значок?

                      По поводу уведомления. Если данные от агента идут, то осталось сделать две вещи: 1) настроить триггер, который бы срабатывал при получении новых данных; 2) настроить действие (Action), отсылающее оповещение нужным пользователям при срабатывании этого триггера.
                      В документации обе темы достаточно нормально описаны, пересказывать не буду. Обычно вопросы возникают лишь с первым, поскольку условие триггера должно предусматривать не только то, когда он должен срабатывать, но и то, когда он должен закрываться (и последнее при мониторинге логов может вызывать проблемы).
                      Одним из стандартных вариантов является закрывание триггера просто по таймеру (когда нет новых данных в течение какого-то времени), для этого можно использовать триггерную функцию nodata(). Т.е. в простейшем случае можно сформулировать, например, так:
                      Code:
                      {ВашХост:log["/var/log/mylog", "Error",UTF-8"].nodata(30)}=0
                      Такой триггер сработает при получении свежих данных от агента (что приведёт к отсылке уведомления, если настроено соответствующее действие), после чего через полминуты закроется.

                      Comment

                      • Semiadmin
                        Senior Member
                        • Oct 2014
                        • 1625

                        #12
                        Если хочется, чтобы работало - зачем устанавливать агент 4.0, несовместимый в пассивном режиме с сервером 3.* ? Установите последний минор агента 3.4

                        Comment

                        • Iskatel
                          Junior Member
                          • Nov 2021
                          • 13

                          #13
                          А возможно ли создать триггер, который сработает при 5-кратном срабатывании другого триггера?

                          Comment

                          • Alex_UUU
                            Senior Member
                            • Dec 2018
                            • 541

                            #14
                            Originally posted by Iskatel
                            А возможно ли создать триггер, который сработает при 5-кратном срабатывании другого триггера?
                            Думаю, что да. В новый триггер включите условия срабатывания старого триггера только в 5 кратном размере. Тут может подойти функция count

                            Comment

                            • Iskatel
                              Junior Member
                              • Nov 2021
                              • 13

                              #15
                              что за функция count? И где подробно можно прочитать про функции, и про .nodata(30)}=0 о которой Kos выше писал?

                              Comment

                              Working...