zabbixアラート発生時にBacklog課題を自動起票する


はじめに

Backlogは利用していますか?
見やすくてチームでの課題管理/チケット管理に便利ですよね。
無料枠でも1プロジェクト,100MB,10名まで利用できるので、ある程度使えます。

かたやzabbixのみではアラートにコメントがつけられる程度。
通常はアラート発生時の担当者決め、対応状況のシェア、クロージングをやりたいかと思うので、これでは不足かと。
つきましてはzabbixアラート発生時にBacklog課題を起票して、垂れ流しにしない状況を作ります。
そもそも対応不要のアラートは通知しないよう、きちんと設定すべきなんです。

※動作確認環境
CentOS Linux release 7.4.1708
Python 2.7.5
zabbix-server 3.0.12

インストール/設定

Backlog準備

既にBacklogスペース、プロジェクトはできているものとします。

プロジェクトのID確認

プロジェクトオーナーの権限で、プロジェクト設定を開きます。
URLの最後に ?project.id=XXXX との表示があるはずです。これがプロジェクトIDです。

アラーム用種別の作成

続いてプロジェクト設定→種別にてアラート用の種別を作成します。

作成後、アラートの種別を開いてください。URLに issueType.id=XXXXX とあるはずです。これが種別IDです。

投稿用のユーザ、APIKey発行

zabbix投稿用のユーザを追加します。通知メールを受けたい携帯アドレス等が良いでしょう。
ユーザ名をzabbix、アイコンも登録するともっともらしくなります。

携帯アドレスへのメール通知は課題の「追加・更新」時、「自分が登録したのみ」、としておけば不要なメールを抑止することができるでしょう。通知を受けたい方は「すべての課題を受信」で。

最後に投稿用ユーザにてAPIKeyを発行し控えておきます。

サーバ設定

モジュール準備

PythonのRequestsモジュールを用います。

# pip install requests

Pythonスクリプト

以下のようなスクリプトを /usr/lib/zabbix/alertscripts/ 以下に置きます。
zabbixユーザをオーナにし実行権限を付与してください。

alermpost.py
#!/bin/python
# coding: utf-8
import requests
import sys

def addissue(summary,description,serverity):
    url = "https://(space).backlog.com/api/v2/issues"
    payload={
        'apiKey'      : '(APIKey)',
        'projectId'   : '(プロジェクトID)',
        'issueTypeId' : '(種別ID)',
        'priorityId'  : serverity,
        'summary'     : summary,
        'description' : description,
    }
    r = requests.post(url, params=payload)
    print(r.text)

args = sys.argv
summary     = '【' + args[1] + '】' + args[2]
description = args[4]

if args[3] == 'Information':
    severity = 4
elif args[3] == 'Warning':
    severity = 4
elif args[3] == 'Average':
    severity = 3
else:
    severity = 2

addissue(summary, description, severity)

スクリプトにも書いてありますがBacklog課題の重要度について、仮に以下としました。
このあたりはお好みで

zabbix Severity(深刻度) Backlog課題重要度
(情報) Information 低 (4)
(警告) Warning 低 (4)
(軽度の障害) Average 中 (3)
(その他) 高 (2)

zabbix設定

新規にアクションを作成します。

  • 実行内容のタイプ:リモートコマンド
  • ターゲットリスト:現在のホスト
  • 次で実行:Zabbixサーバ
  • コマンド:以下の通り
/usr/lib/zabbix/alertscripts/alermpost.py "{TRIGGER.STATUS}" "{TRIGGER.NAME}" "{TRIGGER.SEVERITY}" "{HOST.NAME1} {ITEM.NAME1} {ITEM.KEY1} {ITEM.VALUE1}"

動作

アラート発生時に課題が起票され、プロジェクトメンバーにメールが通知されました。
必要に応じて担当者を決めて障害復旧に当たったり、「対応しない」として「完了」するなり運用を決めてください。

無事動作したらzabbixメール通知を止めてもいいかもですね。

今後

かなり荒削りなので今後、以下のようなことをやりたいですね。

  • 本文の内容を人間に解りやすい文章にする
  • 大量アラートのスロットリング(親子課題として、まとめた課題を1つ作成できればベスト)
  • アラートの内容によってカテゴリーを自動設定する

アラートの運用管理このような向きにはSlack等が良く用いられますが、Backlogもいいですよ。