ログインをrsyslog経由でslackに通知させる


はじめに

サーバ(CentOS)に対するログインを全てslackで通知させたかった.

そこでrsyslogからシェルスクリプトを呼び出してslackに通知させてみる.

Slackトークンの取得

今回はこちらを参考に取得させていただいた.

rsyslogの設定

rsyslogの設定を追加する./etc/rsyslog.d/slack.confを作成して以下を書き込む.これでログイン時にslack.shが実行されるようになる.

/etc/rsyslog.d/slack.conf
$template login_msg, "%fromhost% %msg%"

if \
      ( $msg contains 'pam_unix(' ) \
  and ( $msg contains 'session opened' ) \
then ^/etc/rsyslog.d/slack.sh;login_msg

次に/etc/rsyslog.d/slack.shを作る.例として,チャンネル名はalertとしている.

/etc/rsyslog.d/slack.sh
#!/bin/sh
curl -XPOST -d "token=アクセストークン" -d "channel=#alert" -d "text=${1#* * * * * }" "https://slack.com/api/chat.postMessage"

text=${1#* * * * * * }の部分で下の例のような形にログを切り出している.

pam_unix(sshd:session): session opened for user root by xxxxx(uid=xxxx)
#これを切り出すと
root by xxxxx(uid=0)

動作確認

まずは普通にSSHでログインしてみる.

ちゃんと通知が来た.

次にsudosu -を使ってみる.

rootへのログインも通知が来た.

最後に

自分しかユーザがいないサーバで動かしてるので,不意の通知が来ないよう祈る.

参考文献