post Image
logmon-goで簡単ログ監視

概要

logmonというファイルを監視し、正規表現で指定した文字パターンが現われると、指定したコマンドが実行できるツールがあります。
設定が簡単で、100行ちょっとのスクリプトという手軽さなので、いろいろなサーバ上でエラーを検出するとその内容をメールで通知するツールとして使っていました。

ただ使っている内に下記の問題点がありました。

  1. パターンに一致した行しかコマンドに送ることができないため、エラー行の後にスタックトレースが表示されるようなログの場合は、スタックトレースをコマンドに渡せない。
  2. 指定したパターンに一致してても、コマンド実行の対象外としたい文字列があった場合に、除外指定ができない。

そこで新たにGo言語で実装し、上記も対応できるよう実装しました。
go getできるサーバが1台あれば、同じOS環境のマシンに対してバイナリを置くだけで簡単にインストールすることが可能です。

実行

foregroundで実行

1.go getでインストール

go get github.com/takeshy/logmon-go

2.実行(設定ファイルについては後述)

#設定の確認のみ
logmon-go -f 設定ファイルのパス -c
#実行
logmon-go -f 設定ファイルのパス

デーモンとして実行

1.実行ファイルを各サーバの/usr/local/binに配置

scp $GOPATH/bin/logmon-go サーバ:/usr/local/bin

2.起動スクリプトを記述

touch /etc/init.d/logmon
chmod +x /etc/init.d/logmon
vi /etc/init.d/logmon
/etc/init.d/logmon
#!/bin/sh
LOGMON_CONF=/etc/logmon/logmon.conf
LOGMON_BIN=/usr/local/bin/logmon-go

logmon_opts="-f $LOGMON_CONF"

check_start() {
    $0 status > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "Success."
        exit 0
    fi
    echo "Failed."
    exit 1
}

case "$1" in
    start)
        $0 status > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            echo "logmon is alredy running."
            exit 1
        fi
        echo -n $"Starting logmon: "
        $LOGMON_BIN $logmon_opts >/dev/null 2>&1 &
        sleep 1
        check_start
        ;;
    stop)
        echo -n "Stopping logmon: "
        pkill -TERM -of $LOGMON_BIN
        echo Done.
        ;;
    restart)
        $0 stop
        sleep 1
        $0 start
        ;;
    check)
        $LOGMON_BIN -c $logmon_opts
        ;;
    status)
        pid=`pgrep -of $LOGMON_BIN`
        if [ -n "$pid" ]; then
            echo "logmon (pid $pid) is running..."
            exit 0
        fi
        echo "logmon is stopped"
        exit 3
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|status|check}"
        exit 1
esac

3.設定ファイルを記述(設定ファイルについては後述)

vi /etc/logmon/logmon.conf

4.実行

/etc/init.d/logmon start

設定ファイルについて

logmonの設定ファイルの設定に監視対象除外Regexpと待機ミリ秒の設定を追加したもの。監視対象除外Regexpと待機ミリ秒の設定はオプションのため、既存のlogmonの設定がそのまま使えるはず。

/etc/logmon/logmon.conf
#監視ファイルパス :を先頭につける必要
:/var/log/nginx/error.log
#監視対象のRegexp ()で囲む必要
(ERROR|Error)
#監視対象除外Regexp []で囲む必要。指定しなくてもよい
[SSL_BYTES_TO_CIPHER_LIST]
#この指定ミリ秒数の間、一致行に続く出力文字列をつけ加える。{}で囲む必要。指定しなくてもよい 
{1000}
#監視対象Regexpにマッチかつ監視対象外Regexpにマッチしなかった場合に実行されるコマンド. 
#<%%%%>は一致した文字列に置き換えられる。
#<%%%%>を含む箇所は意図せぬ展開を防ぐため'(シングルクォート)で囲む
echo '<%%%%>' | mail -s "nginx error" takeshy
#複数監視ファイルがある場合は上記を繰り替えす
:/var/www/app/shared/log/unicorn.log
(ERROR|FATAL)
echo '<%%%%>' | mail -s "unicorn error" takeshy

参照

logmon-go
logmon でかんたんにログ監視


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。