Ubuntu 18.04でswatchを使ってログ監視、メールで送信(Gmail利用)
USBの接続が悪いのか、時々認識が外れてエラーが出てしまうのを、メールで知らせてほしかった。
どうもswatchというものでログ監視できるようだったが、まとまった情報が探しづらかったのでまとめる。
インストール
$ sudo apt-get install swatch
コマンドはこれでインストールできるが、実行するコマンドはswatchdog
となる。
実行コマンド
$ sudo swatchdog -c ~/.swatchrc -t [監視したいログファイル]
ただし、以下の設定をすべてした後に起動する。
設定ファイル
ホームディレクトリに.swatchrc
を用意する。
$ vim ~/.swatchrc
記載内容は以下にした。
watchfor /[監視したい文字列]/
echo red
mail addresses=your\@address.com, subject=log_error
pipe /your/script/path/do.py
watchfor /.*/
echo
[監視したい文字列]
を書き換える。例えば、error
としておくと、errorという文字列が出力されたら書かれている内容を実行してくれる。
2つめのwatchforで書いているものは、監視したい文字列を含めて、すべてのログを端末上に表示するため。
ただ、これだけでは外部にメールを送信できるわけではない。
メール送信のためには、postfixが必要。また、Gmailのsmtpサーバを使うことが可能。
メールサーバの設定
メール系のソフトをインストール。
$ sudo apt install mailutils
起動を確認し、起動していなかったら起動する。
$ sudo systemctl status postfix
$ sudo systemctl start postfix
Gmailの設定
Gmailを使用する場合は、設定ファイルに書き込むパスワードを新たに作成する必要がある。
こちらにアクセスして、発行されるパスワードを控えておく。
Googleのアプリパスワード設定
上記のような画面になるので、画面真ん中下の「デバイスを選択→その他(名前を入力)」でわかり易い名前をつけて「生成」をクリックすると、パスワードが発行される。
当初、通常のGmailパスワードを書いていると、ログにApplication-specific password required
と出力され、そんなものがあるのかと知った次第。
設定ファイルに直接書くから、こういう手法を用意していると思われる。
アプリパスワードなら、削除もしやすいし。
メール送信サーバの設定
設定ファイルを編集する。
$ sudo vi /etc/postfix/main.cf
こちらの記事の通り追記する。
# GMail
# relayhostの角括弧はそのまま記述する。
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
認証設定も同記事に従って行う。
ただし、パスワードは先程控えておいたアプリパスワードを記載する。
パーミッションの変更等も済んだら、postfixを再起動する。
これで、監視したい文字列がログに出力されればメールが送信される。
その他
.swatchrcに記載したpipe /your/script/path/do.py
のpipeコマンドは、ログの内容を標準入力に渡す。
Pythonで標準入力を受け取る場合は、スクリプト上で
log_output = input()
とすれば、ログの内容を受け取れる。
参考
Discussion