54
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ログ監視スクリプト

Last updated at Posted at 2017-01-27

ログ監視スクリプト

目的

  • ログファイルに特定の文字列が出力されたら、何か処理を実行したい。

裏の目的

  • Qiitaに投稿してみたかった。

環境

  • CentOS
  • bash

スクリプト

/var/log/messagesに、"error hogehoge"と出力されたら、touchコマンドで"/tmp/hogedetayo"を作成します。

logchecker.sh
#!/bin/sh
# 検出対象ログファイル
TARGET_LOG="/var/log/messages"

# 検出文字列
_error_conditions="error hogehoge"

# ログファイルを監視する関数
hit_action() {
	while read i
	do
		echo $i | grep -q "${_error_conditions}"
		if [ $? = "0" ];then
			# アクション
			touch /tmp/hogedetayo
		fi
	done
}

# main
if [ ! -f ${TARGET_LOG} ]; then
	touch ${TARGET_LOG}
fi

tail -n 0 --follow=name --retry $TARGET_LOG | hit_action

解説

実行したい処理は、上記スクリプト内のtouch /tmp/hogedetayoの部分に記述してください。

tailコマンドのオプションについて。

tail -n 0 --follow=name --retry $TARGET_LOG

-n : 末尾から表示する行数を指定。ここでは標準出力しないように"0"を指定。

--follow=name :ファイルの内容がどんどん増え続けているものと仮定し、 ファイルの最終部分の文字を読み続けようと無限にループする。 (-fと同じ)
name指定することで、ファイル末尾の追跡を、ファイルが remove された後に行う。tailコマンドは、ファイルが削除 (unlink や rename)されたことを確認すると、もう一度オープンしようと試みる。 (ログローテート対策)

--retry :tail がファイルを名前で追跡していて、ファイルがなくなったことを検知したら、 再オープンを成功するまで繰り返す。このオプションを指定しなければ、 tail は単にファイルが存在しないことを報告して以降のチェックを行わない。(ログローテート対策)

実際の利用では、スクリプトをバックグラウンドで動作させます。
/usr/local/bin/logchecker.sh > /dev/null 2>&1 &

あとがき

文章力が欲しい

54
45
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?