Zabbix — Мониторинг лицензии Octopus

Порой лицензия на Octopus Deploy заканчивается неожиданно, особенно если вы используете триальную лицензию на 30 дней и постоянно её продляете 😉
Для мониторинга срока действия лицензии я написал скрипт на Python, который обращается на API октопуса и забирает информацию о дате окончания лицензии и конвертирует её в Unix time. После чего это значение получает Zabbix и, если дата окончания лицензии наступает менее чем через 3 дня, отображает алерт.
Ниже подробнее.

  1. В первую очередь проверяем доступность API по ссылке https://octopus.url/api/licenses/licenses-current (URL меняете на свой), после авторизации должно открыться примерно следующее:

    Информация о лицензии, конфиденциальные данные скрыты.

  2. Для подключения к API скриптом необходимо получить API-KEY для авторизации, делается в профиле пользователя, раздел API keys. Выбираем New API key.

    Создаём ключ и сохраняем его в надёжное место, он пригодится в скрипте.

  3. На Zabbix сервере скачиваем скрипт в директорию внешних скриптов Zabbix (по дефолту /usr/lib/zabbix/externalscripts/), распаковываем и разрешаем выполнение скрипта:
    cd /usr/lib/zabbix/externalscripts/
    wget https://shiningapples.net/stuff/octolicense.tar.gz
    tar -xvf octolicense.tar.gz
    chmod +x octolicense.py
    

    В скрипте необходимо изменить URL октопуса на свой и API KEY. Строки с этими параметрами выделены ниже.

    #!/usr/bin/python
    
    import urllib2
    import time
    import datetime
    import re
    import ssl
    
    # Next block for ignoring ssl validation
    ctx = ssl.create_default_context()
    ctx.check_hostname = False
    ctx.verify_mode = ssl.CERT_NONE
    
    # API URL
    req = urllib2.Request('https://octopus.url/api/licenses/licenses-current')
    
    # Adding header with api key for authentication
    req.add_header('X-Octopus-ApiKey', 'API-KEY')
    
    # Context=ctx for ignoring ssl validation
    sendreq = urllib2.urlopen(req, context=ctx)
    licencejson = sendreq.read()
    
    # Parsing licence info for ValidTo
    prevalidto = re.findall('<ValidTo>(.{10})', licencejson)
    
    # Converting list to string and strips
    validto = str(prevalidto).strip('[\']')
    
    # Converting yyyy-mm-dd to timestamp
    validtostamp = time.mktime(datetime.datetime.strptime(validto, "%Y-%m-%d").timetuple())
    print validtostamp
    
    

    Обратите внимание на используемые в скрипте библиотеки (секция import), возможно некоторые из них придется установить. У меня они уже были предустановлены.
    Так же, в скрипте используется опция игнорирования валидности SSL сертификата, если для вас это критично то блок с ctx можно убрать, и стоку sendreq = urllib2.urlopen(req, context=ctx) поменять на sendreq = urllib2.urlopen(req)


    Проверить работу скрипта можно запустив его из консоли:

    python octolicense.py
    

    Если всё ок то результатом будет отображена дата окончания лицензии в Unix Time:

    Результат работы скрипта

  4. В Zabbix создаём новый элемент данных в любом подходящем для вас узле сети или в новом — нет никакой разницы. В новом узле Ip узла сети можно указать произвольно.
    Тип данных — Внешняя проверка, Ключ — octolicense.py (имя файла скрипта в директории externalscripts), Тип данных — Числовой.
  5. Создаем триггер к этому элементу данных. В моём случае алерт сработает если до конца лицензии останется менее 3х дней. 259200 — это количество секунд в 3х сутках.

    И тут есть небольшая хитрость — функция now() в Zabbix хоть и получает текущее время сервера, должна быть привязана к какому-либо элементу данных, по аналогии с last(). Поэтому она вызывается с тем же самым элементом.

На этом настройка закончена. Для дебага можно смотреть последние данные у узла сети и смотреть приходит ли значение от скрипта.

0
Запись опубликована автором в рубрике Zabbix.

Добавить комментарий

Ваш e-mail не будет опубликован.