Ad Widget

Collapse

запуск внешнего скрипта на сервере

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • demfer
    Junior Member
    • May 2012
    • 14

    #1

    запуск внешнего скрипта на сервере

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

    попробовал настроить элемент данных для хоста №1 как внешнюю проверку, предполагая, что сервер будет запускать этот локальный скрипт(расоложенный на сервере в ExternalScripts) с параметрами, взятыми из описания хоста {HOST.DNS} и парой ручных макросов логин и пароль. в таком случае при копировании данного элемента данных в другой хост нужно было бы только чтобы у хоста эти макросы были прописаны, тогда элемент данных отрабатывал бы совершенно идентично вообще без правки.

    однако наткнулся на ошибку became not supported: /usr/share/zabbix/externalscripts/ blablabla : file not found.
    хотя в /etc/zabbix/zabbix_server.conf
    ### Option: ExternalScripts
    ExternalScripts=/opt/zabbix/externalscripts

    (откуда он вообще берет этот путь??? /usr/share/zabbix/externalscripts/)

    т.е. получается, что сервер запускать пытается скрипт на удаленном хосте, и чтобы использовать этот скрипт мне надо создавать внешнюю проверку как элемент данных хоста, на котором находится сервер? и для каждого sftp-сервера придется создавать новый элемент данных с новыми параметрами?

    возможно ли реализовать описанную выше ситуацию на заббикс-сервере как-то по другому? в доке написано, что внешняя проверка работает без участия заббикс-агентов, а реально получается, что только с ними?
    Last edited by demfer; 05-12-2012, 20:06.
  • demfer
    Junior Member
    • May 2012
    • 14

    #2
    и что означает поле "Интерфейс узла сети" в случае типа элемента данных "Внешняя проверка" ?

    Comment

    • dima_dm
      Senior Member
      • Dec 2009
      • 2697

      #3
      Скорее всего, вы используете версию Zabbix 2.0.X, а в ней, по умолчанию, используется конфигурационный файл /usr/local/etc/zabbix_server.conf
      Интерфейс узла сети обозначает, какой IP будет подставлен в макросе {HOST.CONN}

      Comment

      • demfer
        Junior Member
        • May 2012
        • 14

        #4
        Originally posted by dima_dm
        Скорее всего, вы используете версию zabbix 2.0.x, а в ней, по умолчанию, используется конфигурационный файл /usr/local/etc/zabbix_server.conf
        Интерфейс узла сети обозначает, какой ip будет подставлен в макросе {host.conn}
        т.е. я правильно описал ситуацию и внешняя проверка всегда будет запускать локальный файл (находящийся на заббикс сервере) независимо от того, на каком хосте элемент данных был создан? ну и соответственно для разных хостов просто параметры, выдаваемые скрипту, просто будут принимать значения в зависимости от хоста? тогда это отлично я я смогу запилить то что хочу


        в мануале написано,что внешние проверки могут повлиять на производительность. а есть ли где описание этого процесса? как понять насколько они влияют и насколько можно их использовать без злоупотребления?
        Last edited by demfer; 10-12-2012, 18:08.

        Comment

        • dima_dm
          Senior Member
          • Dec 2009
          • 2697

          #5
          1) Да, правильно.
          2) Для каждого Item будет каждый раз запускаться ваш скрипт на zabbix_server. Если планируется собирать много данных таким способом, лучше использовать zabbix_sender с ключём -i и посылать сразу много значений за один вызов.
          http://www.zabbix.com/documentation/.../zabbix_sender

          Comment

          • demfer
            Junior Member
            • May 2012
            • 14

            #6
            однако что-то у меня не то:

            root@root:~# tail -f /var/log/zabbix/zabbix_server.log
            2485:20121211:090357.781 executing housekeeper
            2485:20121211:090359.526 housekeeper deleted: 31132 records from history and trends, 0 records of deleted items, 0 events, 0 alerts, 0 sessions
            2502:20121211:094805.881 Sending configuration data to proxy 'MandS UK'. Datalen 94306
            2485:20121211:100400.148 executing housekeeper
            2485:20121211:100401.868 housekeeper deleted: 31182 records from history and trends, 0 records of deleted items, 0 events, 0 alerts, 0 sessions
            2496:20121211:104218.674 item [msfs1:new_check_sftp.sh["params"]] became not supported: /usr/share/zabbix/externalscripts/new_check_sftp.sh: [2] No such file or directory
            соответственно msfs1 это хост и new_check_sftp.sh это скрипт, локально расположенный на заббикс сервере:
            root@root:~# ls -l /usr/share/zabbix/externalscripts/
            total 4
            -rwxr-xr-x. 1 root root 776 Dec 4 15:10 new_check_sftp.sh

            но как вы говорили, конф, лежит не там:
            root@root:~# less /usr/local/etc/zabbix_server.conf
            /usr/local/etc/zabbix_server.conf: No such file or directory

            а:
            root@root:~# locate zabbix_server.conf
            /etc/zabbix_server.conf
            /etc/zabbix/zabbix_server.conf
            (один является ссылкой на второй)
            и
            root@OSTROV:~# grep script /etc/zabbix/zabbix_server.conf
            # Full path to location of custom alert scripts.
            AlertScriptsPath=/opt/zabbix/alertscripts
            # Full path to location of external scripts.
            ExternalScripts=/opt/zabbix/externalscripts

            соответственно откуда сервер вообще берет такой путь?
            became not supported: /usr/share/zabbix/externalscripts/new_check_sftp_.sh: [2] No such file or directory

            Comment

            • dima_dm
              Senior Member
              • Dec 2009
              • 2697

              #7
              Я думаю, что ошибка No such file or directory относиться к первой строчке вашего скрипта ( где вы shell определяете
              Пример:
              #!/bin/bash
              )
              new_check_sftp.sh
              Проверьте путь к shell.
              Проверьте, что в скрипте используются Unix символы перевода строки LF, а не Windows CR/LF
              Привести переводы строк к Unix формату можно командой
              tr -d '\r' < new_check_sftp.sh > new_check_sftp1.sh
              new_check_sftp1.sh и будет файл с правильными для Unix символами перевода строки LF.
              Last edited by dima_dm; 12-12-2012, 07:33.

              Comment

              • demfer
                Junior Member
                • May 2012
                • 14

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

                вот я и не понимаю, вроде внешняя проверка, по спеке она должна дергать команды с директории ExternalScripts=/opt/zabbix/externalscripts, независимо от хоста, на котором заведена, а получается, что если заводишь внешнюю проверку не на хосте сервера, то глючит

                Comment

                • demfer
                  Junior Member
                  • May 2012
                  • 14

                  #9
                  какие данные хоста используются для внешней проверки, что меняется, если я ее клонирую на другой хост в ui?

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

                  Comment

                  • screeble
                    Member
                    • Dec 2011
                    • 34

                    #10
                    Если не против я влезу в тему с подобной проблемой.

                    Создал скрипт на php, добавил его в действия:
                    Выполнить пользовательские команды на Zabbix сервере:
                    sudo /usr/bin/php /usr/local/etc/zabbix/externalscripts/ext.php

                    Дал права на его запуск.

                    Code:
                    su - zabbix
                    /usr/bin/php /usr/local/etc/zabbix/externalscripts/ext.php
                    отрабатывает в шеле без сучка и задоринки создает графики по триггеру все как надо.

                    В интерфейсе zabbix напротив триггера пишет что команду выполнил, но ... графики так и не били созданы.

                    Кто знает в чем принципиальная разница между выполнением такого скрипта в забикс и шелле и что нужно учесть при его непосредственном использовании в самом интерфейсе?

                    Comment

                    • dima_dm
                      Senior Member
                      • Dec 2009
                      • 2697

                      #11
                      Originally posted by demfer
                      какие данные хоста используются для внешней проверки, что меняется, если я ее клонирую на другой хост в ui?

                      в забиксе есть хост А, на нем болтается сервер, там же болтается мой скрипт в упомянутой в конфиге папке. Если я завожу внешнюю проверку на заббиксе на хосте А, то скрипт отрабатывает с параметрами, которые я ему задаю в созданном элементе данных, но если я завожу точно такой же элемент данных (внешняя проверка) на хосте Б, то он мне выдает ошибку, да еще и в лог пишет не тот путь, который прописан в конфиге сервера.
                      Может речь идет про команду system.run[команда,<режим>] http://www.zabbix.com/documentation/...s/zabbix_agent,
                      а не внешнюю проверку?
                      http://www.zabbix.com/documentation/...types/external

                      Comment

                      • demfer
                        Junior Member
                        • May 2012
                        • 14

                        #12
                        Нет, я не ошибался, именно внешние проверки. моя проблема заключалась в том, что я закидывал скрипт в папку на хосте сервера, а хосты наблюдались через прокси, соответственно внешняя проверка искала скрипт в папке на хосте с заббикс прокси. что вполне логично. теперь разобрался, спасибо. но вопросы еще есть, напишу позже

                        Comment

                        Working...