Discord Webhookの利用について

Pocket

Webhookについて

下記の記事でも取り上げましたが、Canned-Catfood Gamingでは最近Discordを導入しました。

Discord導入と発生中のサーバー障害について

このDiscordの特徴として、Slackやその他のサービスと同様に、各種アプリケーションとの連携に
「Webhook」を利用できます。

Webhookの基本的な概念としては、公開されているAPIに対してHTTPリクエストを送ることにより
Discordなどのアプリケーションに特定の動作をさせる点にあります。

Discordでの利用

例えば curlを利用して対象のURLにPOSTすると:

この様にDiscordに投稿されます。({webhook.id}/{webhook.token}には任意の値が入ります。)

リクエストデータの書式としては、Discord Developer Documentsに詳細が書いてありますが、簡単に紹介すると

フィールド タイプ 詳細
content string メッセージ内容(最大、恐らく1byteで2000字、2byteで1000字)。
username string webhookのユーザー名を上書きする。
avatar_url string webhookのアバター画像を上書きする。
tts bool TTSメッセージの場合Trueにセットする。
file file contents ファイルを送付する場合にはファイル名
embeds array of embed objects 埋め込みコンテンツの内容

等が使用できます。(詳細は https://discordapp.com/developers/docs/resources/webhook より。)

今回は、これを利用してNagiosのアラート内容をDiscordにWebhookを利用して流したいと思います。

NagiosとのWebhook連携

NagiosからSlackには、既にGISTにて公開されているPlugin(https://gist.github.com/bakorer/199dd38779440d2f7980)を利用することで
連携することができます。
Discord側でもAPIのURL末尾に”/slack”を付加することにより、Slack形式のWebhookを利用することができますが
折角なので今回はDiscord側の仕様に合わせて調整します。

前提

OSはUbuntu server 16.04LTS、Apache2.4、Nagios3の環境を想定しています。
Nagios3はUbuntuの公式レポジトリより導入したものをVirtual Host下で運用する都合上、一部設定のみ下記configで書き換えています。

cgiのパスは/cgi-bin、/stylesheetsは/stylesheetsになっています。(標準ではそれぞれ/nagios/cgi-bin、/nagios/stylesheetsかと思います。)

DiscordのAPIにPOSTするスクリプトの作成

Shellですが、libcurlが必須となります。

今回は他のNagios Pluginと同ディレクトリ(/usr/lib/nagios/plugins)に保存しました。

Commands.cfgの編集

Nagios上から実行可能にする為、commands.cfgに既定のcommandとして設定します。

(最終行に追記してください。)

Contacts.cfgの編集

CONTACTSの括りに追記してください。
今回はService Notificationのみ使用する為、host_notification_commandsをnotify-host-by-emailに設定したうえで
メールの送付先を/dev/nullに設定し破棄しています。

以上で、DiscordとNagios3の連携は完了です。
設定に問題がなければ、Nagios上でServiceにAlertが発報されると、Discordの特定チャンネルにAlertが流れます。
お好みでcontent内のメッセージ内容に@hereや@channelを混ぜると、携帯で通知として受け取れると思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください