Akira's Tech Notes

Java/JVM | GNU/Linux | Emacs/Lisp | 知的好奇心駆動

header-icon
ネイティブでない日本語で思い付くことや気になることをダラダラ書く、体裁とかは気にしない。読みづらいと感じた時に随時更新する。

[tips][Linux]journaldエラーログをメールで通知する

systemdを採用しているdistroのシステムログがjournaldを一元管理してくれる。

ただし、journaldにエラーログを通知する機能が持っていないため監視通知のし掛けが必要で す。

  1. journaldログをsyslogに転送し、従来のsyslog監視方法を適用する
  2. 独自のスクリプトで実現する

自宅のサーバは下記スクリプトでエラーログの通知機能を実現しています。

/etc/cron.hourly/journal_error

#!/bin/sh

# 一時以内のエラーログを標準出力と/var/log/journal_errorファイルへ出力する
journalctl -o short-iso -p err --since -1hours 2>/dev/null | tail -n+2 | tee -a /var/log/journal_error

journalctl コマンドを駆使して1時間以内のエラーログを標準出力に出力するスクリプト。 これをcronの時間単位ジョブディレクトリ /etc/cron.hourly に登録する。 あとはcronのメール通知機能を有効化するだけです。

cronのメール通知先は /etc/cron.d/0hourlyMAILTO 項目にて指定する。

$ cat /etc/cron.d/0hourly
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=<<メールの送信先をここに書く>>
1 * * * * root run-parts /etc/cron.hourly

Comments