Nagiosからの通知メールをslackに飛ばしたいと思った時のメモ
slackのwebhookを作成
まずはslackのwebhookを作成しましょう
slackを開いてAppをクリック
「Incoming Webhook」で検索
「Slackに追加」をクリック
通知を飛ばしたいチャンネルを選択
※今回の場合は「#hook_teset」
「 Incoming Webhook インテグレーションの追加」をクリック
追加されました
webhook URLをコピーする
windowsのコマンドプロントなどから以下の内容(curlコマンド)を実行してみてください。
うまくできていればSlackに通知が行くはずです
slackに通知を飛ばすcurlを自動で作成する
今回はタイトル通りNode.jsでメールを受信して、slackにcurlで通知を飛ばします。
以下がコードです。(raspberry piで動かしているのでraspberry-botという名前でslackに通知しています)
Node.jsのinboxモジュールでimapメールを受信してメールのタイトルを確認し、
「CRITICAL」が含まれていればslackに通知を送ります。
//inboxモジュール読み込み var inbox = require("inbox"); //メールアカウント情報 const server = "mail.exampl"; const user = "exampl_user"; const password = "examplpass"; //slackの情報 const url = "https://hooks.slack.com/services/exampl1F/exampl2H/examplexamplexampl"; const channel = "#nagios通知アラート"; const username = "raspberry-bot"; const icon_emoji = ":troll:"; const head = "[ラズパイアラート]\n"; //inboxモジュールでメールアカウントに接続 var client = inbox.createConnection(false, server, { secureConnection: true, auth: { user: user, pass: password } }); //メールに接続確認 client.on("connect", function() { console.log("connected"); client.openMailbox("INBOX", function(error) { if (error) throw error; }); }); client.connect(); //新着メールが来たら client.on("new", function(message) { //jsonに変換 const payload = { channel: channel, username: username, icon_emoji: icon_emoji, text: head + "```" + message.title + "```" }; // console.log('日時:' + message.date); // console.log('送信者:' + message.from.name + '-' + message.from.address); // console.log('タイトル:' + message.title); //メールタイトルに「CRITICAL」が含まれていた場合 if (message.title.indexOf("CRITICAL") !== -1) { //コマンド作成 var command = "curl -d '" + JSON.stringify(payload) + "' -H 'Content-Type: application/json' " + url; //コマンド実行 const execSync = require("child_process").execSync; const result = execSync(command); // console.log('command = ' + command); } });
コメント