Ad Widget

Collapse

UserParameter не так отрабатывает

Collapse
This topic has been answered.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Magikanin
    Junior Member
    • Dec 2018
    • 4

    #1

    UserParameter не так отрабатывает

    Добрый день.

    На клиенте выполнение команды
    Code:
    sudo -u zabbix grep -silm1 "This is a Borg Backup" /home/*/*/README | sed 's/\/README//' | awk 'BEGIN{printf "{\"data\":["}; {i=split($1,path,"/"); printf c"{\"{#PATH}\":\""$1"\", \"{#HOST}\":\"" path[i-1
    ] "\", \"{#DIR}\":\"" path[i] "\"}";c="," }; END{print "]}"}'
    Возвращает нормальные данные:
    Code:
    {"data":[{"{#PATH}":"/home/borg/dir1", "{#HOST}":"borg", "{#DIR}":"dir1"},{"{#PATH}":"/home/borg/dir2", "{#HOST}":"borg", "{#DIR}":"dir2"}]}
    Если это прописать в zabbix-agentd.conf
    Code:
    UserParameter=borg.discover, grep -silm1 "This is a Borg Backup" /home/*/*/README | sed 's/\/README//' | awk 'BEGIN{printf "{\"data\":["}; {i=split($1,path,"/"); printf c"{\"{#PATH}\":\""$
    1"\", \"{#HOST}\":\"" path[i-1] "\", \"{#DIR}\":\"" path[i] "\"}";c="," }; END{print "]}"}'
    то на сервер данные не попадают:
    Code:
    zabbix_get -s host -p 10050 -k borg.discover
    Code:
    {"data":[]}
    Подскажите в чем ошибка и как исправить
    Заранее благодарен​
  • Answer selected by Kos at 09-05-2023, 08:20.
    Magikanin
    Junior Member
    • Dec 2018
    • 4

    Благодарю за помощь!
    Selinux не давал читать чужой каталог и grep выдавал пустой список

    Comment

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

      #2
      Судя по тому, что: 1) возвращается вообще какой-то ответ на запрос (а не ругань на неизвестный ключ); 2) возвращается то, что выводится утилитой awk, - то можно сделать вывод, что, как минимум, запись UserParameter в конфиг-файле синтактически корректна, а awk вызывается. Другое дело, что, похоже, на вход этому awk-у через конвейер ничего не поступает, либо где-то ошибка в самом awk-шном скрипте.

      Есть стандартная (оговоренная в документации) мелочь, что если ключ в директиве UserParameter прописан с параметрами (например, "UserParameter=borg.discover[*],..."), то выражения "$1", "$2" и т.д. в указанной далее командной строке означают первый, второй и т.д. переданные в ключе параметры; а если нужно оставить их как есть (в частности, как раз для awk, где они имеют свой смысл), то знак доллара надо удваивать. Но в данном случае, насколько я вижу, параметры не используются. Тем не менее, мне смутно припоминается, что в какой-то версии агента (кажется, это относилось к Agent 2, но не уверен) был баг, где агент ожидал удвоения знака доллара даже если никакие параметры не использовались.

      Ещё бы я проверил, что передаётся на вход этому awk-у, временно сделав тестовый элемент данных:
      Code:
      UserParameter=borg.discover.test,grep -silm1 "This is a Borg Backup" /home/*/*/README | sed 's/\/README//'
      и опросив его через zabbix_get:
      Code:
      zabbix_get -s host -p 10050 -k borg.discover.test
      (просто чтобы убедиться, что на этой стадии всё отрабатывает корректно).

      Ну и третий момент - не уверен, насколько это критично (скорее всего, нет), но я бы в строке UserParameter убрал бы пробел после запятой между именем ключа и первой командой (grep).

      Comment

      • kharkov_max
        Member
        • Mar 2016
        • 83

        #3
        Могут быть пути к утилям grep, sed и т.д.
        Лог на агенте включите и там все будет видно, что запрашивает и какая ошибка.

        Comment

        • Magikanin
          Junior Member
          • Dec 2018
          • 4

          #4
          Благодарю за помощь!
          Selinux не давал читать чужой каталог и grep выдавал пустой список

          Comment

          Working...