Ad Widget

Collapse

Мониторить произвольные данные в linux

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

    #1

    Мониторить произвольные данные в linux

    Умеет ли zabbix-агент запускать произвольные скрипты и передавать результаты их работы в виде строк и цифр в zabbix? Как это сделать? Допустим нужно мониторить данные об использовании памяти неким процессом, данные брать из /proc, PID процесса брать из файла.
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Originally posted by Iskatel
    Умеет ли zabbix-агент запускать произвольные скрипты и передавать результаты их работы в виде строк и цифр в zabbix? Как это сделать?
    Может. Смотрите в сторону UserParameter (ссылка).
    Originally posted by Iskatel
    Допустим нужно мониторить данные об использовании памяти неким процессом, данные брать из /proc, PID процесса брать из файла.
    Использование памяти процессом с данным именем или командной строкой можно брать агентом безо всяких скриптов (см. параметр proc.mem[...]). Для чего пихать в Zabbix PID процесса - не могу себе представить; но если хочется - то через скрипты можно (про UserParameter я уже сказал).

    Comment

    • Iskatel
      Junior Member
      • Nov 2021
      • 13

      #3
      А если агент настолько старый, что некоторые параметры не поддерживает? Вобщем про UserParameter​ я не до конца понял, в zabbix_agentd.conf, как теперь выловить собираемые данные в zabbix. И не улавливаю разницу между агентом и активным агентом, некоторые параметры будут работать только в активном агенте?

      Comment

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

        #4
        Originally posted by Iskatel
        А если агент настолько старый, что некоторые параметры не поддерживает?
        Вы прикалываетесь, что ли? Какого ответа Вы ожидаете?
        Тем не менее, отвечу.
        Во-первых - таки да, если агент старый, то какие-то из возможностей, появившихся в более новых версиях, могут в нём отсутствовать.
        Во-вторых - у Zabbix-а хорошая документация; в числе прочих достоинств - сгруппированная по версиям, и достаточно легко найти, в какой версии та или иная "фича" есть, а в какой - нет.
        В-третьих - а что мешает обновить агента, хотя бы до той же версии, что и сервер?
        Наконец, в четвёртых - если обновить агента по какой-то причине нельзя, то всё равно остаётся вариант прикрутить к нему внешний скрипт (через тот же UserParameter).

        Originally posted by Iskatel
        Вобщем про UserParameter​ я не до конца понял, в zabbix_agentd.conf, как теперь выловить собираемые данные в zabbix.
        Опять же: какого ответа Вы ожидаете? Пересказа документации?
        Опишите свою задачу, что вы делаете, какого результата ожидаете и что именно не получается - тогда, возможно, сможем помочь.

        Originally posted by Iskatel
        не улавливаю разницу между агентом и активным агентом, некоторые параметры будут работать только в активном агенте?
        ​Ну, это я могу объяснить.

        Основное отличие - то, что при работе агента в пассивном режиме за расписанием проверок следит Zabbix-сервер (либо Zabbix-прокси при работе через прокси): на каждую такую проверку он посылает запрос агенту, агент собирает нужные данные и отсылает их в качестве ответа. Каждый такой запрос-ответ - это своя TCP-сессия.

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

        В общем случае, агент способен работать в обоих режимах одновременно, собирая какие-то метрики в активном режиме, а какие-то - в пассивном, но есть нюансы.
        Большинство параметров может собираться в любом из режимов, хотя есть и исключения: например, мониторинг логов (и Windows Event Log-ов) может работать только в активном режиме.
        ​Это связано с тем, что для опроса таких параметров недостаточно только имени параметра, но требуется передать ещё некоторые служебные данные (например, до какого места этот файл был просмотрен в последний раз), и эти служебные данные передаются только вместе со списком проверок в активном режиме, в то время как при опросе в пассивном режиме агенту пересылается лишь имя параметра (т.е. item key).
        Для работы агента в пассивном режиме нужно, чтобы сервер (Zabbix-сервер либо Zabbix-прокси) мог к нему обратиться, для этого в конфигурации сервера должны быть указаны "контакты" агента (его IP-адрес либо DNS-имя). Соответственно, для активного режима требуется обратное: в конфигурации агента нужно указать ссылку на сервер (IP-адрес либо DNS-имя), плюс правильно (с учётом регистра букв) указать имя агента (оно должно совпадать с именем агента, указанном через веб-интерфейс на сервере Zabbix).

        Важным также может оказаться конфигурация сети - например, наличие фаерволов между сервером и агентом (тогда надо знать, какие порты и куда пропускать), а также наличие NAT-маршрутизаторов.
        Last edited by Kos; 23-09-2022, 16:38.

        Comment

        • Iskatel
          Junior Member
          • Nov 2021
          • 13

          #5
          Ну давайте тогда никто не будет заходить на этот форум, и закроем его, ведь есть же документация, достаточно её просто читать, обсуждать же не надо?
          Да, zabbix и zabbix_agent обновлять нельзя, это такое условие задачи, по факту на сервере стоит Debian 5.0, версия агента там - 1.4.6, версия заббикса - 3.4.15. Заббикс и агент друг друга увидели, значения таких параметров как system.hostname, system.uptime в "последние данные" приходят. Теперь как разобраться с UserParameter, для 3.4 документацию на сайте я не вижу, недавно была для 4.0, но видимо уже убрали, ладно, будем считать, что общий принцип не поменялся. Допустим, в zabbix_agentd.conf добалена строка
          UserParameter=uifaces,/etc/zabbix/uifaces.sh
          как этот параметр выловить в zabbix? Насколько я понял нужно создать элемент данных с ключём uifaces (это просто - тестовый пример, неважно какую именно строку выдаст парамерт uifaces, если он выдасть то, что надо, то начну писать скрипты с реальными рабочими задачами). Я всё это сделал, но у меня в последних данных парамерт uifaces не появился. Как отлаживать проблему, чтобы понять, где происходит затык?​

          Comment

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

            #6
            И снова здравствуйте!
            Originally posted by Iskatel
            Ну давайте тогда никто не будет заходить на этот форум, и закроем его, ведь есть же документация, достаточно её просто читать, обсуждать же не надо?
            А я вот я не понимаю, чего ожидают люди, задавая вопрос: "Прочитал, но ничего не понял" (без какой-либо конкретики).
            Ну напишите подробнее - что поняли, чего не поняли; сформулируйте вопрос таким образом, чтобы на него вообще можно было ответить...

            Originally posted by Iskatel
            Да, zabbix и zabbix_agent обновлять нельзя, это такое условие задачи, по факту на сервере стоит Debian 5.0, версия агента там - 1.4.6, версия заббикса - 3.4.15. Заббикс и агент друг друга увидели, значения таких параметров как system.hostname, system.uptime в "последние данные" приходят. Теперь как разобраться с UserParameter, для 3.4 документацию на сайте я не вижу, недавно была для 4.0, но видимо уже убрали [...]
            ​Самая старая из поддерживаемых на данный момент версий - 4.0. Документация на неё вполне доступна, как и документация на ещё целый ряд очень старых версий - вплоть до 1.8 (см. скриншот).
            Уже в версии 1.8 UserParameter присутствовал, насчёт 1.4 - не уверен, но весьма вероятно.
            Скорее всего, что тоже есть - если бы не было, то наверняка при старте агента он бы ругался на неизвестную опцию в конфиге.


            Originally posted by Iskatel
            будем считать, что общий принцип не поменялся. Допустим, в zabbix_agentd.conf добалена строка
            UserParameter=uifaces,/etc/zabbix/uifaces.sh
            как этот параметр выловить в zabbix? Насколько я понял нужно создать элемент данных с ключём uifaces (это просто - тестовый пример, неважно какую именно строку выдаст парамерт uifaces, если он выдасть то, что надо, то начну писать скрипты с реальными рабочими задачами). Я всё это сделал, но у меня в последних данных парамерт uifaces не появился. Как отлаживать проблему, чтобы понять, где происходит затык?​
            Да, всё верно: общий принцип не поменялся.
            Добавляете эту строку в конфиг агента, перезапускаете агента (чтобы он перечитал обновлённый конфиг), смотрите его лог (чтобы убедиться, что там нет ругани, да вообще что он запустился успешно).
            Агент должен вернуть то, что ваш скрипт выводит в stdout. Самый простой пример - написать в скрипте:
            Code:
            echo 1
            и ожидать, что вернётся строка с единицей.
            Элемент данных, пока отлаживаетесь, создаёте не только с указанным ключом, но и с типом данных "Text" - чтобы видеть, что возвращает ваш скрипт в случае, если он вернёт не число (или не только число), но какую-нибудь ругань. Тип самого элемента данных - "Zabbix agent" или "Zabbix agent (active)", смотря какой режим у вас настроен и используется.

            Ещё есть полезная утилита zabbix_get - с её помощью можно сделать запрос к агенту (аналогичный тому, какой делает и сервер Zabbix), а затем посмотреть, что агент на это отвечает.
            Я обычно её для тестирования запускаю с той же машины, где работает сервер Zabbix:
            Code:
            zabbix_get -s IP-адрес-агента -k uifaces
            ​​ Click image for larger version  Name:	screenshot-2022-10-03_01.png Views:	0 Size:	126.0 KB ID:	452179
            Last edited by Kos; 03-10-2022, 09:50.

            Comment

            • Iskatel
              Junior Member
              • Nov 2021
              • 13

              #7
              Originally posted by Kos
              И снова здравствуйте!
              Ещё есть полезная утилита zabbix_get - с её помощью можно сделать запрос к агенту (аналогичный тому, какой делает и сервер Zabbix), а затем посмотреть, что агент на это отвечает.
              работает
              Code:
              $ zabbix_get -s 10.75.1.61 -k uifaces
              eth0 10.68.156.53/22 br0 192.168.68.254/24 ppp0 10.75.1.61​
              А вот... а... всё, нашёл ошибку, я в настройках указал активный агент вместо просто агент. Спасибо, помогли.

              Comment

              Working...