Появилась недавно необходимость мониторинга ключей 1с через Zabbix, так как в один момент упустили тот факт, что клиентов 1с было больше, чем количество имеющихся лицензий. Поэтому, чтоб избежать повторения подобного, решили прикрутить мониторинг Zabbix и настройки триггеров.
Велосипед изобретать не хотел. Поэтому первым делом начал искать готовые решения. Решения, которые удовлетворяли бы меня, я не нашел. Но наткнулся на интересную тему на форуме Zabbix. Правда то решение мне не особо нравилось. Потому что практически на все у меня настроены LLD. Руками каждый раз вбивать элементы данные в какой-то момент мне надоело, и я настроил на все что мог LLD. Поэтому и для HASP я решил пойти этим путем.
Делать все будем на Windows сервере. В вышеприведенной ссылке один из участников форума написал небольшую программу, которая обращается к библиотеке hsmon.dll из состава Aladdin Monitor. Ее и будем использовать. Так же нам понадобиться утилиты sed и grep. Чтоб не заниматься поиском, в конце будет ссылка на архив.
Итак. Предположим что zabbix-agent у нас в папке C:\zabbix. Создаем в этой папке еще одну папку и называем ее hasp. Содержимое архива кидаем туда. В конфиг zabbix добавляем строки
Скрипт занимается 2 вещами. Для начала он выводит в формате JSON ID ключей Hasp. Это необходимо для работы LLD. Если скрипту в качестве переменной передать ему get_load ID, то он выдаcт количество активных подключений. Если передать get_max ID, то выдаст еще и максимально возможное количество.
В самом Zabbix создаем шаблон. Называем как угодно, например Template Hasp. Переходим в Правила Обнаружения. Создаем новое. Пусть называется оно Hasp discovery. В графе ключ вписываем hasp_id, интервал 3600. Сохраняем. Дальше в прототипы данных. Создаем прототип. Назовем Hasp keys used for id {#ID}, ключ hasp_used[{#ID}], Интервал обновления можно 60 сек. И еще один такой же элемент, но с именем Hasp keys max for id {#ID}, а в строке ключ hasp_max[{#ID}]. Первый покажет сколько занято. Второй максимальное количество. На основе этих элементов создаем график с таким же именем. В качестве прототипа выбираем наши созданные элементы данных. Так же можно создать триггер, который будет сравнивать текущее количество с максимальным. Как создавать такой триггер описывать не стану. Ничего сложного в этом нет.
Вот и все. Все необходимое есть в этом архиве. Возможно скрипт написан не совсем элегантно. Делал на скорую руку.
UPD. Перевел на Powershell.
Не забываем разрешить выполнение скриптов Powershell.
Велосипед изобретать не хотел. Поэтому первым делом начал искать готовые решения. Решения, которые удовлетворяли бы меня, я не нашел. Но наткнулся на интересную тему на форуме Zabbix. Правда то решение мне не особо нравилось. Потому что практически на все у меня настроены LLD. Руками каждый раз вбивать элементы данные в какой-то момент мне надоело, и я настроил на все что мог LLD. Поэтому и для HASP я решил пойти этим путем.
Делать все будем на Windows сервере. В вышеприведенной ссылке один из участников форума написал небольшую программу, которая обращается к библиотеке hsmon.dll из состава Aladdin Monitor. Ее и будем использовать. Так же нам понадобиться утилиты sed и grep. Чтоб не заниматься поиском, в конце будет ссылка на архив.
Итак. Предположим что zabbix-agent у нас в папке C:\zabbix. Создаем в этой папке еще одну папку и называем ее hasp. Содержимое архива кидаем туда. В конфиг zabbix добавляем строки
UserParameter=hasp_id,powershell -File "C:\zabbix\hasp\hasp.ps1" get_id
UserParameter=hasp_used[*],powershell -File "C:\zabbix\hasp\hasp.ps1" get_load $1
UserParameter=hasp_max[*],powershell -File "C:\zabbix\hasp\hasp.ps1" get_max $1
Скрипт занимается 2 вещами. Для начала он выводит в формате JSON ID ключей Hasp. Это необходимо для работы LLD. Если скрипту в качестве переменной передать ему get_load ID, то он выдаcт количество активных подключений. Если передать get_max ID, то выдаст еще и максимально возможное количество.
В самом Zabbix создаем шаблон. Называем как угодно, например Template Hasp. Переходим в Правила Обнаружения. Создаем новое. Пусть называется оно Hasp discovery. В графе ключ вписываем hasp_id, интервал 3600. Сохраняем. Дальше в прототипы данных. Создаем прототип. Назовем Hasp keys used for id {#ID}, ключ hasp_used[{#ID}], Интервал обновления можно 60 сек. И еще один такой же элемент, но с именем Hasp keys max for id {#ID}, а в строке ключ hasp_max[{#ID}]. Первый покажет сколько занято. Второй максимальное количество. На основе этих элементов создаем график с таким же именем. В качестве прототипа выбираем наши созданные элементы данных. Так же можно создать триггер, который будет сравнивать текущее количество с максимальным. Как создавать такой триггер описывать не стану. Ничего сложного в этом нет.
Вот и все. Все необходимое есть в этом архиве. Возможно скрипт написан не совсем элегантно. Делал на скорую руку.
UPD. Перевел на Powershell.
Архив обновил.Не забываем разрешить выполнение скриптов Powershell.
Доброго времени суток!
ОтветитьУдалитьНаткнулся на вашу статью и с реализацией у меня возникли проблемы...
1) Вероятно после обновления скрипта на powershell вы забыли поменять в статье значение ключей прототипов данных.
2) Значение макроса {#ID} остается пустым?
Проблема не могу получить элементы данных по данному правилу обнаружения...
Подскажите может я что то упустил из виду?
Здравствуйте!
ОтветитьУдалить1)Да. Вы правы. Спасибо! Поправил. Архив в порядке, а вот названия ключей исправил.
2) Убрал упоминание о макросе, видимо в старом варианте для чего-то использовал его. Сейчас он не нужен.
Можете проверить. Теперь должно заработать.
К сожалению моей проблемы это не решило(
УдалитьЭлементы данных по правилу обнаружения не создаются
Hasp key max for {#ID} [нет данных]
Hasp key used for {#ID} [нет данных]
Конфиг агента:
LogFile=c:\zabbix\zabbix_agentd.log
LogFileSize=10
DebugLevel=3
EnableRemoteCommands=1
Server=192.168.1.1
ListenPort=10050
ServerActive=192.168.1.1
Hostname=server-test
Timeout=30
UnsafeUserParameters=1
UserParameter=hasp_id,powershell -File "C:\zabbix\hasp\hasp.ps1" get_id
UserParameter=hasp_used[*],powershell -File "C:\zabbix\hasp\hasp.ps1" get_load $1
UserParameter=hasp_max[*],powershell -File "C:\zabbix\hasp\hasp.ps1" get_max $1
zabbix_agentd -t
hasp_id
hasp_load
hasp_max [m|ZBX_NOTSUPPORTED]
В логе по этому поводу ничего не говорится
Проблема явно какая-то тривиальная, но бьюсь уже сутки((
з.ы через батники данные получить могу...
з.ы.ы Zabbix 2.4.4
Этот комментарий был удален автором.
Удалитьно в логе сервера есть вот такая строчка:
УдалитьZabbix agent item "hasp_id" on host "server-test" failed: first network error, wait for 15 seconds
1. Откройте cmd, перейдите в папку с хаспом и выполните
УдалитьHaspMonitor.exe "set config,filename=.\NETHASP.INI" "scan servers" "get serverinfo" . Есть вывод? Если есть то идем дальше.
2. Откройте powershell и выполните powershell -File "C:\zabbix\hasp\hasp.ps1" get_id . Есть вывод?
да, в обоих случаях вывод есть.
Удалитьcmd:
C:\Zabbix\hasp>HaspMonitor.exe "set config,filename=\\server-8\deploy\nethasp.ini" "scan servers" "get serverinfo"
OK
OK
HS,ID=193975093,NAME="server-test2.domain.local",PROT="UDP(192.168.1.2)",VER="8.310
",OS="WIN32"
HS,ID=50031,NAME="Server-test.domain.local",PROT="UDP(192.168.1.1)",VER="8.310",O
S="WIN32"
PowerShell:
PS C:\zabbix\hasp> C:\Zabbix\hasp\hasp.ps1 get_id
{
"data":[
{ "{#ID}":"27177687" },
{ "{#ID}":"50031" }
]
}
проблема решилась переустановкой агента на x86 версию
Удалитьно обнаружился интересный эффект
HS,ID=193975093,NAME="server-test2.domain.local",PROT="UDP(192.168.1.2)",VER="8.310
",OS="WIN32"
ID ключа меняется раз в 5 минут... пока не понял с чем это связанно...
Это уже вряд ли связано с Забиксом
УдалитьЭто связано с тем, что ключи 1С сами меняют свои ID для поддержки защиты от взлома))) Но это должно быть не раньше чем через 1 час.
УдалитьИсправил статью.
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьСтранно. У меня на такой же системе все работало без ошибок. К сожалению после смены работы у меня нет в данный момент возможности проверить Ваше предложение, так как тут нет сервера 1С.
Удалитьa7lanov, спасибо за хорошую статью!
ОтветитьУдалитьАнтон Коротков, у меня наблюдалась аналогичная проблема. Помогло увеличение Timeout в zabbix.server.conf, в моём случаи до 10 секунд.
Кстати да, забыл про это упомянуть в статье. Таймаут надо увеличивать.
УдалитьЕще раз возвращаюсь в Эту тему, может быть кто нибудь подскажет.
ОтветитьУдалитьИзначально я настраивал мониторинг ключей на CentOS 7 и у меня все работало. Потом мы перенесли на другой рабочий заббикс только он уже на FreeBSD. И на FreeBSD мониторинг не работает. В чем может быть причина?
дополню . Вот ошибка из Zabbix Agenta
Удалить(( Get value from agent failed: ZBX_TCP_READ() failed: [54] Connection reset by peer ))
Ну как бы в ошибке все написано. Хост разрывает подключение. Проверьте видят ли друг друга они без проблем. Фаерволы проверьте. Откройте нужные порты.
УдалитьСпасибо большое за ответ! Буду копать дальше в правильном направлении.
УдалитьЯ проверил, пинг есть. Ошибка уже другая. Проблема в том, что я с FreeBSD не работал.
ОтветитьУдалитьВот ошибка (
Get value from agent failed: ZBX_TCP_READ() failed: [4] Interrupted system call
1. Наличие пинга еще не обещает работоспособность. Проверьте открыты ли порты в фаерволе
Удалить2. Проверьте для начала с помощью zabbix_get.
3. Если не работали с бсд, для чего нужно было переходить?
нашел причину, проверил по telnet порт 10050 закрыт. а 10051 открыт это на Freebsd. Проверил так же на CentOS все порты открыты по Telnet. Теперь буду искать как их открывать)
УдалитьЭтот комментарий был удален автором.
УдалитьЭтот комментарий был удален автором.
УдалитьЕсли возникает ошибка в Zabbix Agente такого типа на платформе FreeBSD 10.1 :
ОтветитьУдалитьGet value from agent failed: ZBX_TCP_READ() failed: [4] Interrupted system call
Необходимо проверить сервер на котором стоит Zabbix по telnet на доступность, порт 10050 и 10051
telnet 192.168.*.* 10050
В нашем случае порт 10050 не доступен.
Затем проверяем на самом сервере Zabbix какие порты слушаются.
netstat -na
Эта команда показывает нам тоже самое. Порт не прослушивается.
Начнем смотреть дальше. По этим портам работает Zabbix. Если серверная часть работает по порту 10051. То нужно проверить Zabbix-Agent .
zabbix-agent 10050
zabbix-server 10051
Проверяем установлен ли zabbix - agent.
Оказалось, его не было.
Ставим Zabbix – Agent
Перезапускаем службы
Агент service zabbix_agentd stop (start)
Сервер service zabbix_server stop (start)
Проверяем какие порты слушаются. Командой
netstat -na
Теперь порт 10050 на сервере работает.
Проверяем на доступность .
по telnet порт 10050 и 10051
Потом смотрим снова, что нам говорит заббик агент. Опять ошибка.
Get value from agent failed: ZBX_TCP_READ() failed: [4] Interrupted system call
Смотрим в правило Hasp Discovery которые мы создали.
Видим ошибку. Нужно её исправить !
Timeout
Дальше идем по пути
/usr/local/etc/zabbix24/
Ищем файлы конфигурации.
zabbix_agentd.conf
zabbix_server.conf
В конфигурации находим строчку Timeout, и убираем комментарий (#). Приводим строчку в такой вид:
Timeout =30
Все сохраняем.
Необходимо добавить дорты для работы сервиса. Переходим по этому пути
/etc/services
zabbix-agent 10050/tcp #Zabbix Agent
zabbix-agent 10050/udp #Zabbix Agent
zabbix-trapper 10051/tcp #Zabbix Trapper
zabbix-trapper 10051/udp #Zabbix Trapper
Сохраняем и выходим.
Еще раз делаем рестарт службы
service zabbix_agentd stop (start)
service zabbix_server stop (start)
Ждем, проверяем! Работает!
Проблема была на платформе FreeBSD 10.1
Добрый день. Сделал все по инструкции, однако Заббикс не получает данные.
ОтветитьУдалитьВыводы команд есть как Антон Коротков от 26 марта 2015 г., 21:01.
В чем может быть причина?
Была опечатка в имени ключа. Исправил все заработало.
УдалитьСделал все по инструкции. Ошибка.
ОтветитьУдалитьInvalid discovery rule value: cannot parse as a valid JSON object: invalid object format, expected opening character '{' or '[' at: 'Processing -File '"C:\zabbix_agent2\hasp\hasp.ps1"' failed: Illegal characters in path. Specify a valid path for the -File parameter.
Windows PowerShe
К сожалению я уже давно не работаю уже там. Нет под рукой инсталяции 1с, чтоб проверить. Для начала проверьте работает ли команда HaspMonitor.exe "set config,filename=.\NETHASP.INI" "scan servers" "get serverinfo" у вас (предварительно закинув в C:\zabbix\hasp exe файл и перейдя в этот каталог)
Удалить