syslogをslackに転送

あちこちのネットワーク機器からシスログサー(Linux/rsyslog)に転送されてくるメッセージを、slackにも飛ばす方法。

slack token 取得

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

いまはレガシートークンの使用ができない、というかセキュリティ的に危険なのでボットトークンを使うべき。

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

名前つきパイプを作成

mkfifo /var/log/[任意の名前]_pipo

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

vi /etc/rsyslog.conf

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

rsyslog 再起動

service rsyslog restart     # CentOS6
systemctl restart rsyslog   # Centos7 and later

slack転送スクリプトを作成

vi /root/logpost.sh

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

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

上記スクリプトでcurl コマンドの-dオプションで指定したチャンネル名をslack側にて作成する。存在しないチャンネルにはポストできないので。

スクリプトを実行

nohup sh /root/logpost.sh > /dev/null &

以上。

他に考慮すべき点

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

Leave a Comment