вторник, 29 июля 2014 г.

Мониторинг HASP ключей 1с в Zabbix

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

Велосипед изобретать не хотел. Поэтому первым делом начал искать готовые решения. Решения, которые   удовлетворяли бы меня, я не нашел. Но наткнулся на интересную тему на форуме 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.

25 комментариев:

  1. Доброго времени суток!
    Наткнулся на вашу статью и с реализацией у меня возникли проблемы...
    1) Вероятно после обновления скрипта на powershell вы забыли поменять в статье значение ключей прототипов данных.
    2) Значение макроса {#ID} остается пустым?

    Проблема не могу получить элементы данных по данному правилу обнаружения...

    Подскажите может я что то упустил из виду?

    ОтветитьУдалить
  2. Здравствуйте!

    1)Да. Вы правы. Спасибо! Поправил. Архив в порядке, а вот названия ключей исправил.
    2) Убрал упоминание о макросе, видимо в старом варианте для чего-то использовал его. Сейчас он не нужен.

    Можете проверить. Теперь должно заработать.

    ОтветитьУдалить
    Ответы
    1. К сожалению моей проблемы это не решило(
      Элементы данных по правилу обнаружения не создаются
      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

      Удалить
    2. Этот комментарий был удален автором.

      Удалить
    3. но в логе сервера есть вот такая строчка:
      Zabbix agent item "hasp_id" on host "server-test" failed: first network error, wait for 15 seconds

      Удалить
    4. 1. Откройте cmd, перейдите в папку с хаспом и выполните
      HaspMonitor.exe "set config,filename=.\NETHASP.INI" "scan servers" "get serverinfo" . Есть вывод? Если есть то идем дальше.
      2. Откройте powershell и выполните powershell -File "C:\zabbix\hasp\hasp.ps1" get_id . Есть вывод?

      Удалить
    5. да, в обоих случаях вывод есть.
      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" }

      ]
      }

      Удалить
    6. проблема решилась переустановкой агента на x86 версию
      но обнаружился интересный эффект

      HS,ID=193975093,NAME="server-test2.domain.local",PROT="UDP(192.168.1.2)",VER="8.310
      ",OS="WIN32"

      ID ключа меняется раз в 5 минут... пока не понял с чем это связанно...

      Удалить
    7. Это уже вряд ли связано с Забиксом

      Удалить
    8. Это связано с тем, что ключи 1С сами меняют свои ID для поддержки защиты от взлома))) Но это должно быть не раньше чем через 1 час.

      Удалить
  3. Этот комментарий был удален автором.

    ОтветитьУдалить
    Ответы
    1. Странно. У меня на такой же системе все работало без ошибок. К сожалению после смены работы у меня нет в данный момент возможности проверить Ваше предложение, так как тут нет сервера 1С.

      Удалить
  4. a7lanov, спасибо за хорошую статью!
    Антон Коротков, у меня наблюдалась аналогичная проблема. Помогло увеличение Timeout в zabbix.server.conf, в моём случаи до 10 секунд.

    ОтветитьУдалить
    Ответы
    1. Кстати да, забыл про это упомянуть в статье. Таймаут надо увеличивать.

      Удалить
  5. Еще раз возвращаюсь в Эту тему, может быть кто нибудь подскажет.
    Изначально я настраивал мониторинг ключей на CentOS 7 и у меня все работало. Потом мы перенесли на другой рабочий заббикс только он уже на FreeBSD. И на FreeBSD мониторинг не работает. В чем может быть причина?

    ОтветитьУдалить
    Ответы
    1. дополню . Вот ошибка из Zabbix Agenta
      (( Get value from agent failed: ZBX_TCP_READ() failed: [54] Connection reset by peer ))

      Удалить
    2. Ну как бы в ошибке все написано. Хост разрывает подключение. Проверьте видят ли друг друга они без проблем. Фаерволы проверьте. Откройте нужные порты.

      Удалить
    3. Спасибо большое за ответ! Буду копать дальше в правильном направлении.

      Удалить
  6. Я проверил, пинг есть. Ошибка уже другая. Проблема в том, что я с FreeBSD не работал.
    Вот ошибка (
    Get value from agent failed: ZBX_TCP_READ() failed: [4] Interrupted system call

    ОтветитьУдалить
    Ответы
    1. 1. Наличие пинга еще не обещает работоспособность. Проверьте открыты ли порты в фаерволе
      2. Проверьте для начала с помощью zabbix_get.
      3. Если не работали с бсд, для чего нужно было переходить?

      Удалить
    2. нашел причину, проверил по telnet порт 10050 закрыт. а 10051 открыт это на Freebsd. Проверил так же на CentOS все порты открыты по Telnet. Теперь буду искать как их открывать)

      Удалить
    3. Этот комментарий был удален автором.

      Удалить
    4. Этот комментарий был удален автором.

      Удалить
  7. Если возникает ошибка в 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

    ОтветитьУдалить