Zabbixのアラート確認を自動化し、Google Chatで通知する方法

Zabbixのアラート確認を自動化し、Google Chatで通知する方法

はじめに

システムの保守業務では、複数のZabbixサーバーを毎日チェックする必要があります。特に、踏み台やVPNを使って環境を切り替えながら確認するのは非常に煩雑です。
このような手間を省くために、Zabbixサーバーの状態を自動的に確認し、その結果をGoogle Chatに通知する方法をご紹介します。これにより、日々の確認作業を効率化できます。
課題
日々のルーチン作業で複数のZabbixサーバーをチェックする際、次のような問題があります。

  • 環境切り替えの手間(踏み台やVPNを利用する際の手間)
  • 手動での確認作業の煩雑さ

これらの問題を解決するために、Zabbixサーバーで定期的に状態を確認し、Google Chatに自動的に通知するスクリプトを設置することにしました。
Zabbixのレポート機能も利用できますが、環境依存のため、スクリプトでの実現を選びました
目標

  • 現時点での障害アラートの有無を確認す
  • その結果を自動的にGoogle Chatに通知する

必要な準備

Zabbixサーバーの情報

● ZabbixサーバーのURL
● ユーザー名
● パスワード

Google ChatのWebhook URL

Google ChatのWebhook URLを取得します。
このURLを使ってGoogle Chatにメッセージを送信します

スクリプトの設定手順

Rootユーザーに切り替える

まず、rootユーザーに切り替えます。これにより、システム全体の設定を変更する権限が得られます。

sudo su

スクリプトファイルを作成する

次に、viエディタを使ってPythonスクリプトファイルを作成します。以下のコマンドを実行してください。

vi /etc/zabbix/test_alert_check.py

ファイルが開いたら、iキーを押して編集モードに入り、以下のコードをコピーして貼り付けます。
貼り付けが終わったら、Escキーで編集モードを終了し、:wqと入力してファイルを保存して終了します。

import requests
import json
from datetime import datetime
# Zabbix API設定
zabbix_url = ‘ZabbixサーバーURL/api_jsonrpc.php’
zabbix_user = ‘Zabbixユーザー名’
zabbix_password = ‘Zabbixパスワード’# Google Chat Webhook URL
webhook_url = ‘Google Chat Webhook URL’# Zabbix APIトークンを取得する関数
def get_zabbix_token():
payload = {
‘jsonrpc’: ‘2.0’,
‘method’: ‘user.login’,
‘params’: {
‘user’: zabbix_user,
‘password’: zabbix_password
},
‘id’: 1,
‘auth’: None
}
response = requests.post(zabbix_url, json=payload, verify=False)
return response.json()[‘result’]# 現在の未解決トリガーを取得する関数
def get_current_triggers(token):
payload = {
‘jsonrpc’: ‘2.0’,
‘method’: ‘trigger.get’,
‘params’: {
‘output’: [‘triggerid’, ‘description’, ‘status’, ‘value’],
‘filter’: {
‘value’: 1 # 1はトリガーが問題状態であることを示します
},
‘selectHosts’: [‘host’],
‘sortfield’: ‘description’,
‘sortorder’: ‘ASC’
},
‘auth’: token,
‘id’: 2
}
response = requests.post(zabbix_url, json=payload, verify=False)
return response.json()[‘result’]

# Google Chatにメッセージを送信する関数
def send_to_google_chat(message):
payload = {
‘text’: message
}
response = requests.post(webhook_url, json=payload, verify=False)
return response.status_code

if __name__ == “__main__”:
token = get_zabbix_token()

# 現在の未解決トリガーを取得
triggers = get_current_triggers(token)

if triggers:
trigger_count = len(triggers)
message = f”現在、障害アラートが {trigger_count} 件あります:\n\n”
for trigger in triggers:
message += (f”ホスト: {‘, ‘.join(h[‘host’] for h in trigger.get(‘hosts’, []))}\n”
f”説明: {trigger[‘description’]}\n”
f”状態: {‘障害’ if trigger[‘value’] == ‘1’ else ‘正常’}\n”
f”———————-\n”)
else:
message = “現在、障害アラートはありません。”

status_code = send_to_google_chat(message)
if status_code == 200:
print(“メッセージが正常に送信されました”)
else:
print(“メッセージの送信に失敗しました”)

スクリプトの実行権限を変更する

作成したスクリプトに実行権限を付与します。これにより、スクリプトを実行できるようになります。

chmod +x /etc/zabbix/test_alert_check.py

Cronジョブの設定

スクリプトを定期的に実行するために、Cronジョブを設定します。以下のコマンドでCronジョブの設定を行います。

crontab -e

Cronジョブに次の行を追加し、テストのため、スクリプトが毎日午前11時53分に実行されるようにします:

53 11 * * * /usr/bin/python3 /etc/zabbix/test_alert_check.py

iキーを押して編集モードに入り、Escキーで編集モードを終了し、:wqと入力してファイルを保存して終了します。

確認

スクリプトが正常に動作しているか確認するために、次回の実行時間が来たときにGoogle Chatで通知を確認してください。
障害アラートがある場合、その詳細が通知されるはずです。

この手順で、定期的にZabbixサーバーの状態をGoogle Chatに自動的に通知することができ、監視業務が大幅に効率化されます。

いいね (1 いいね)
読み込み中...

ITインフラカテゴリの最新記事