Заббикс наблюдает за событиями сети. Техподдержка может видеть что происходит, но мы не можем контролировать техподдержку - что было сделано и в каких объёмах. В конце-концов мы не знаем что сделали для того, что бы проблема не появилась в дальнейшем. Таким образом надо или допиливать заббиксу интерфейс инцидентов, или использовать уже существующую систему. Первое сложно, в вот второе уже наверняка стоит в любой более-менее крупной конторе. У нас стоял Redmine.
Итак - задача: Автоматически с саззикса создавать задания для техподдержки в Redmine
Дано:
FreeBSD 10.1
Zabbix 2.4
Redmine
Решение:
Яндекс в помощь, и вот перед нами решение данной проблемы в виде рекламной статьи http://habrahabr.ru/company/centosadmin/blog/243843/ - возьмём её за основу и попробуем реализовать у себя. В пусть
В статье Сказано что пакет использует пакет python-redmine - поверим на слово и поставим нужный пакет как сказано в документации
Код: Выделить всё
pip install python-redmine
Дальше копируем скрипт себе redmine_api_content.py - я немного изменил скрипт под свои реалии
Код: Выделить всё
#!/usr/local/bin/python
import sys, time
from redmine import Redmine
from datetime import datetime, timedelta, date, time as dt_time
if len (sys.argv) != 6:
print "use params: project, status, priority, trigger_name, item_value."
print sys.argv
sys.exit("Erorr! Wrong arguments!")
else:
PROJECT_NAME = sys.argv[1]
TRIGGER_STATUS = sys.argv[2]
TRIGGER_PRIORITY = sys.argv[3]
TRIGGER_NAME = sys.argv[4]
ITEM_VALUE = sys.argv[5]
REDMINE_URL = 'http://redmine.cz6.ru/'
REDMINE_KEY = '15df0c3e22467da4948cb4092603744da3fe6e'
ADMINS_ID = 22
priority = 5
if TRIGGER_PRIORITY == "Disaster":
priority = 14
if TRIGGER_PRIORITY == "High":
priority = 5
redmine = Redmine(REDMINE_URL, key=REDMINE_KEY)
issueExist = redmine.issue.filter(
project_id = PROJECT_NAME,
subject = "PROBLEM: "+ TRIGGER_NAME
)
print datetime.now()
print TRIGGER_STATUS +": "+ TRIGGER_NAME + "\n" + ITEM_VALUE
if TRIGGER_STATUS == "PROBLEM":
if issueExist:
print "Issue already exist. Create comment"
issue = redmine.issue.update(
issueExist[0].id,
notes = TRIGGER_STATUS +": "+ TRIGGER_NAME + "\n" + ITEM_VALUE
)
else:
print "Issue not exist. Create issue"
issue = redmine.issue.create(
project_id = PROJECT_NAME,
subject = TRIGGER_STATUS +": "+ TRIGGER_NAME,
tracker_id = 1,
description = "\n" + ITEM_VALUE,
status_id = 1,
priority_id = priority,
assigned_to_id = ADMINS_ID
)
if TRIGGER_STATUS == "OK":
if issueExist:
print "Add comments"
issue = redmine.issue.update(
issueExist[0].id,
notes = TRIGGER_STATUS +": "+ TRIGGER_NAME + "\n" + ITEM_VALUE
)
Код: Выделить всё
chmode +x redmine_api_content.py
REDMINE_URL - веб морда Redmine
REDMINE_KEY - ключик API - он смотрится под конкретным пользователем ADMINS_ID - это сам пользователь, у которого мы смотрели ключик tracker_id - это тип задачи (задача, ошибка, что-то ещё что у вас там есть)
В самом заббиксе настраиваем действия - Настраивается это по аналогии с оповещение на почту - подсмотрите - вроде всё очевидно. То, что вы укажите на первой вкладки не важно, вторая уже настроена за вас по умолчанию, а вот третью - привожу Получается в начале путь до скрипта, в конце лог файл, а по середине текст. Подчеркнул я - это проект, созданный в Redmine - это для того, что бы все сообщения от zabbix попадали в одно и то же место. Немного логика работы скрипта:
1) если задачи нет - она будет создана
2) если задача есть, в неё будет дописано сообщения
Вот так это выглядит в итоге