Powiadomienia z Zabbix w HipChat

Zabbix jest jednym z najpopularniejszych narzędzi monitorujących infrastruktury IT, HipChat natomiast to komunikator wchodzący w skład zespołu aplikacji do pracy grupowej firmowanego przez Atlassian. Korzystając z wbudowanych mechanizmów obu programów oraz skryptów możemy stworzyć kanał powiadamiania o zdarzeniach Zabbix poprzez HipChat.

Nad korzyściami płynącymi z udostępnienia kolejnych kanałów powiadamiania w systemach monitorujących chyba nie ma sensu się rozwodzić 😉 Wysyłanie alertów przez komunikatory ma tę przewagę nad mailami (stosowanymi najczęściej), że najczęściej komunikaty przekazywane w ten sposób zazwyczaj szybciej docierają do użytkowników.

HipChat działa w systemie klient – serwer. Producent udostępnia użytkownikom REST API, które pozwala na interakcję serwerem spoza dostarczonych przez Atlassian aplikacji. Sposoby korzystania z metod API zostały opisane w dość dobrze przygotowanej dokumentacji, a w ramach dostępnych metod możemy m.in. wybrać poziom dostępu do serwera, administrować naszym kontem czy przesyłać wiadomości. Nim jednak rozpoczniemy korzystanie z API musimy wygenerować klucz autoryzacyjny który generowany jest per użytkownik na stronie HipChat, tutaj.

Do wysyłania wiadomości przeznaczone jest kilka metod. Najlepiej skorzystać z jednej z dwóch:

  • Send room notification – umożliwiającej wysyłanie wiadomości do pokojów, której opis dostępny jest tu,
  • Private message user – umożliwiającej wysyłanie wiadomości do konkretnych użytkowników, której opis dostępny jest tutaj.

Możliwość używania API po stronie serwera komunikatora to jednak dopiero części całego systemu. Musimy jeszcze skonfigurować Zabbix tak, aby wysyłał wiadomości z wykorzystaniem dostępnego interfejsu. Zabbix umożliwia powiadamianie niestandardowymi kanałami przy pomocy skryptów dodawanych jako Media types. Skrypty wykorzystywane w Zabbix w wywołaniu przyjmują trzy parametry wg schematu:

script [recipient] [subject] [message]

i powinny znaleźć się w katalogu:

[zabbix install dir]/alertscripts

Kolejną rzeczą, o której musimy pamiętać tworząc skrypt do komunikacji ZabbixHipChat jest fakt, iż używamy REST API, a więc łączymy się z wykorzystaniem metod GET POST, w obrębie protokołu HTTP oraz, w przypadku produktu Atlassian, dodatkowe dane przesyłamy zakodowane jako json.

Wspomniany wyżej skrypt możemy oczywiście przygotować w dowolnym języku skryptowym, który da się „odpalić” na naszej maszynie. Ja zdecydowałem się na implementację w Python. Ze względu na charakter komunikatora nie korzystam w skrypcie z parametru subject (jest on tylko przyjmowany z wywołania), nic nie stoi jednak na przeszkodzie abyśmy zmodyfikowali wiadomość w ten sposób, żeby przekazywała także tytuł alertu.

Moja implementacja skryptu powiadomień z Zabbix do HipChat wygląda następująco:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import urllib2
import json

#zabbix vars
hipchat_user = str(sys.argv[1])
title = str(sys.argv[2])
message = str(sys.argv[3])

#hipchat vars
api_key = 'yours api key'
api_url = "https://api.hipchat.com/v2/user/"+hipchat_user+"/message?auth_token="+api_key

#send notification
headers = {
    "content-type": "application/json"
}
data_str = json.dumps({
    'message': message,
    'message_format': 'html',
    'notify': True})

request = urllib2.Request(api_url, headers=headers, data=data_str)
f = urllib2.urlopen(request)
f.close()

Powyższy skrypt umożliwia wykonanie powiadomienia pojedynczego użytkownika o wskazanej nazwie (którą każdy z użytkowników może skonfigurować dodając odpowiedni Media type do ustawień swojego profilu). Przygotowanie skryptu powiadamiającego pokój wiąże się ze zmianą adresu metody API na wymienioną wyżej metodę powiadamiania pokoi 🙂

Mikołaj Niedbała

I'm a Poland based IT administrator, linux administrator and IT engineer creating professional IT infrastructure solutions based on Linux and virtual environments.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *