Создаём задания техподдержки

Примеры из жизни как развернуть и настроить систему мониторинга zabbix
Ответить
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Создаём задания техподдержки

Сообщение RomA »

Задача:
Заббикс наблюдает за событиями сети. Техподдержка может видеть что происходит, но мы не можем контролировать техподдержку - что было сделано и в каких объёмах. В конце-концов мы не знаем что сделали для того, что бы проблема не появилась в дальнейшем. Таким образом надо или допиливать заббиксу интерфейс инцидентов, или использовать уже существующую систему. Первое сложно, в вот второе уже наверняка стоит в любой более-менее крупной конторе. У нас стоял Redmine.

Итак - задача: Автоматически с саззикса создавать задания для техподдержки в Redmine

Дано:
FreeBSD 10.1
Zabbix 2.4
Redmine

Решение:
Яндекс в помощь, и вот перед нами решение данной проблемы в виде рекламной статьи http://habrahabr.ru/company/centosadmin/blog/243843/ - возьмём её за основу и попробуем реализовать у себя. В пусть

В статье Сказано что пакет использует пакет python-redmine - поверим на слово и поставим нужный пакет как сказано в документации

Код: Выделить всё

pip install python-redmine
Усли у вас не стоит pip - установите из портов - он там есть и без проблем ставится. У меня в системе он был

Дальше копируем скрипт себе 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 - он смотрится под конкретным пользователем
1.jpg
ADMINS_ID - это сам пользователь, у которого мы смотрели ключик
2.jpg
tracker_id - это тип задачи (задача, ошибка, что-то ещё что у вас там есть)
В самом заббиксе настраиваем действия - Настраивается это по аналогии с оповещение на почту - подсмотрите - вроде всё очевидно. То, что вы укажите на первой вкладки не важно, вторая уже настроена за вас по умолчанию, а вот третью - привожу
1.jpg
Получается в начале путь до скрипта, в конце лог файл, а по середине текст. Подчеркнул я - это проект, созданный в Redmine - это для того, что бы все сообщения от zabbix попадали в одно и то же место.
3.jpg
Немного логика работы скрипта:
1) если задачи нет - она будет создана
2) если задача есть, в неё будет дописано сообщения

Вот так это выглядит в итоге
4.jpg
Ответить