keima's caprice diary

気付いたことをメモのように綴ります。なるべく義務っぽくならないように気まぐれに記録します。

centosのsyslogをslackに転送する

あちこちの機器からシスログサーに転送されてくるログメッセージをslackでも眺めてみたいという衝動に駆られ、それとなくslackに転送することにした

 

シスログサーバへの前提条件

  • OSはcentOs6.8
  • ログ監視ソフトとしてrsyslogを使用
  • シスログ受信サーバとして稼働中
    (rsyslogの基本的な設定については割愛)
  • slackのtokenを取得できること(権限的要件)

くらいかな。

 

01. slack token 取得

"Legacy tokens | Slack" にて "Legacy token generator" を使用してtokenを控える。

"xoxp-" で始まる文字列がそれ。

 

02. 名前つきパイプを作成

mkfifo /var/log/[任意のパイプ名]_pipo

03. ログ出力先をパイプに指定する

vi /etc/rsyslog.conf

:fromhost-ip, isequal, "[ログ転送元IPアドレス]" |/var/log/[任意のパイプ名]_pipo

04. rsyslog 再起動

service rsyslog restart

 

05. slack転送スクリプトを作成

vi /root/[任意のスクリプト名].sh

 

while : ; do 
while read LINE ; do
TEXT=$LINE
curl -XPOST -d "token=[slackトークン]" -d "channel=#[slackチャンネル名]" -d "text=$TEXT" -d "username=[slack投稿者名(何でもOK)]" "https://slack.com/api/chat.postMessage"
done < /var/log/[任意のパイプ名]_pipo
done

06. slackに転送用チャンネルを作成

スクリプトにて curl コマンドのオプションパラメータ -d で指定したチャンネルをslack側にて作成する。

07. スクリプトを実行

nohup sh /root/[スクリプトファイル名] > /dev/null &

 

以上。

 

実行環境がシャットダウン or 再起動したらスクリプト処理が終了してしまうので、再度スクリプトを実行するように工夫する必要はある。

"/etc/rc.local" に追記する等、いくつか方法が思いつくけど、後ほど本ブログに記述することに、しようかな(怪しい)。