こんにちは、SCSK株式会社の小寺崇仁です。
今回はZabbixにて検知したSNMPTrapをChatGPTに連携して、対処方法を教えてもらいたいと思います。
機能概要としては、以下となります。
1.CahtGPT用のメディアタイプ(javascript)を作成
2.トリガーアクションでメディアタイプが実行されるように設定
3.障害を検知すると、アクション(メディアタイプ)が実行され、イベントにコメントを付けます。
コメントの内容はChatGPTが考えた対処方法になります。
忙しい方はこちらからメディアタイプがダウンロード可能です。
※拡張子をyamlにして、インポートしてご利用ください。
事前準備
Zabbix | 6.x | 6系以上のZabbixが必要です。 |
GhatGPTのAPIキー | xxxxxxx | ChatGPTの実行アカウントでの発行が必要です。 |
ZabbixのAPIトークン | zzzzzzzz | Zabbixの「管理->一般設定->APIトークン」から発行できます。 |
メディアタイプの作成
メディアタイプのタブ
項目 | 値 | 補足 |
---|---|---|
名前 | 任意 | |
タイプ | webhook | |
↓パラメータ↓ | ||
AI_API_KEY | xxxxxxx | ChatGPTのAPIキーを指定 |
AI_MODEL | gpt-3.5-turbo | |
AI_TEXT | {ALERT.MESSAGE} | ChatGPTへの問い合わせ文字列 メッセージテンプレートを参照するマクロを指定 |
AI_URL | https://api.openai.com/v1/chat/completions | ChatGPTのURLを指定 |
ZB_API_KEY | zzzzzzzz | ZabbixのAPIトークンを指定 |
ZB_EVENT_ID | {EVENT.ID} | コメントをつけるイベントのIDを指定 イベントIDを参照するマクロを指定 |
ZB_URL | https://127.0.0.1/zabbix/api_jsonrpc.php | ZabbixのURLを指定 |
スクリプト | 次に記載 | |
タイムアウト | 60s | ChatGPTの実行に時間がかかるので最大値を指定 |
スクリプト
////////////////////////////////////////// //初期化処理 ////////////////////////////////////////// params = JSON.parse(value); const AI_URL = params.AI_URL; const AI_API_KEY = params.AI_API_KEY; const AI_MODEL = params.AI_MODEL; const AI_TEXT = params.AI_TEXT; const ZB_EVENT_ID = params.ZB_EVENT_ID; const ZB_URL = params.ZB_URL; const ZB_API_KEY = params.ZB_API_KEY; ////////////////////////////////////////// //ChatGPT処理 ////////////////////////////////////////// ai_req = new HttpRequest(); ai_data = {}; //リクエストヘッダー ai_req.addHeader('Content-Type: application/json'); ai_req.addHeader('Authorization: Bearer '+AI_API_KEY); //Postデータ ai_data.model = AI_MODEL; ai_data.messages = [{'role':'user','content': AI_TEXT}]; //送信 ai_resp = ai_req.post(AI_URL,JSON.stringify(ai_data)); ai_resp = JSON.parse(ai_resp); //デバッグログ Zabbix.log(4, 'ai_req:'+JSON.stringify(ai_data)); Zabbix.log(4, 'ai_resp:'+JSON.stringify(ai_resp)); ////////////////////////////////////////// //Zabbix処理 ////////////////////////////////////////// zb_req = new HttpRequest(); zb_data = {}; //リクエストヘッダー zb_req.addHeader('Content-Type: application/json-rpc'); //Postデータ zb_data.auth = ZB_API_KEY; zb_data.method = 'event.acknowledge'; zb_data.id = 1; zb_data.params = {}; zb_data.params.eventids = ZB_EVENT_ID; zb_data.params.action = 4; zb_data.params.message = ai_resp.choices[0].message.content; zb_data.jsonrpc = '2.0'; //送信 zb_resp = zb_req.post(ZB_URL,JSON.stringify(zb_data)); zb_resp = JSON.parse(zb_resp); //デバッグログ Zabbix.log(4, 'zb_data:'+JSON.stringify(zb_data)); Zabbix.log(4, 'zb_resp:'+JSON.stringify(zb_resp)); //処理終了 return 1;
※サンプルプログラムです。自己責任でご利用ください。
※スクリプトの転載はお控えください。
メッセージテンプレートのタブ
項目 | 値 | 補足 |
---|---|---|
メッセージタイプ | 障害 | |
件名 | 任意 | 不使用 |
メッセージ | 次のログを検知しました。対処方法を教えてください。 {ITEM.LASTVALUE} |
ChatGPTに送信する文字列 |
実行イメージ
LinkDownのトラップを送信する
# snmptrap -v2c -c public localhost '' .1.3.6.1.6.3.1.1.5.3
Zabbixで受信する
障害として検知する
GhatGPTからの回答がコメントに記載される
今後の展開について
今回はChatGPTを使用したので、一般的な回答になってしまいます。
これでは障害対応するのは難しいと思います。
そのため、次のような回答がもらえるようにAIをつくっていく必要があると思っています。
・〇〇日前に同様の障害を検知しました。その際は△△の対応を行いました。
・先ほど検知した〇〇の件に関連して発生した可能性があります。
最後に
弊社ではZabbix関連サービスを展開しています。以下ページもご参照ください。
SCSK Plus サポート for Zabbix
★YouTubeに、SCSK Zabbixチャンネルを開設しました!★
★X(旧Twitter)に、SCSK Zabbixアカウントを開設しました!★