あちこちのネットワーク機器からシスログサー(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 再起動したらスクリプト処理が終了してしまうので、再度スクリプトを実行するように工夫する必要はある。