4
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

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です。

アラーム用種別の作成

続いてプロジェクト設定→種別にてアラート用の種別を作成します。
alert.png
作成後、アラートの種別を開いてください。URLに issueType.id=XXXXX とあるはずです。これが種別IDです。

投稿用のユーザ、APIKey発行

zabbix投稿用のユーザを追加します。通知メールを受けたい携帯アドレス等が良いでしょう。
ユーザ名をzabbix、アイコンも登録するともっともらしくなります。
user.png
携帯アドレスへのメール通知は課題の「追加・更新」時、「自分が登録したのみ」、としておけば不要なメールを抑止することができるでしょう。通知を受けたい方は「すべての課題を受信」で。
mail.png
最後に投稿用ユーザにて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}"

action.png

動作

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

exec.png

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

今後

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

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
4
Help us understand the problem. What are the problem?