ログファイルをgrep head tailして取り出すHTTPサーバ

サーバ上にあるログファイルなどをgrep head tailして取り出せる、変なHTTPサーバを作ったので紹介します。

イケてるIT技術者ならばイケてるWebサービス・アプリの1つや2つは余裕で運営しているもの。Webサービスを運営しているものの悩みの1つにログなどのファイルがありますね。

いや大事なログはちゃーんとfluetdやRabbitMQを駆使してS3とかに流しているハズ。なのでいま話題にしたいのはなんてこと無い普通のログ、それに各種設定ファイル。UNIXで言えば/var/log/messagesとか、/etc/hostsとかです。サービスを運営しているとちょっとそれらのファイルを見たいとかgrepしたいとかheadしたいとかtailしたいとか、そういうことがままあるものです。

イケてるIT技術者ならばそんな時はsshでログインしてコマンドをちょちょいと叩くわけですが、このWeb全盛の時代にそろそろダルくなってきたころでしょう。どうせならWebからgrepしてheadしてtailしたいじゃないですか。

というわけで今日ご紹介するのはそれを実現するWebサーバ night です。Node.jsで動きます。

$ node night.js &

このnightをWebサーバ上で動かして

$ curl http://127.0.0.1:8080/night/var/log/messages?tail

こんなリクエストを投げると /var/log/messages のtailが覗けるって寸法です。これはsshログインしてこうしたのと同じですね。

$ tail /var/log/messages

もちろん -n {行数} 相当のこともできます。50行みたければ

$ curl http://127.0.0.1:8080/night/var/log/messages?tail=limit:50

こうすれば良いのです。

このサーバが面白いのはココからです。なんと複数のフィルタを組み合わせることができるんです。コマンドラインではこんなことを良くしますよね。

$ grep error /var/log/messages | tail -n 30

この night では同じことができます。

$ curl http://127.0.0.1:8080/night/var/log/messages?grep=re:error&tail=limit:30

やったねたえちゃん!ファイルが見えるよ。

さらに一例として /etc/hosts から空白行とコメント行を除いた上で、3件目から5件を取得したい場合には

$ curl 'http://127.0.0.1:8080/night/etc/hosts?grep=re:^$;match:false&grep=re:^#;match:false&head=start:3;limit:5'

こんな複雑なこともできちゃいます。night スゴイ=カワイイ ヤッター!

このちょっと変なHTTPサーバ night は、今ならなんとgithubでforkし放題!

まじめな話

この先、認証とかアクセス制御とかUIとかを作る予定ですが、今は設置すると中のファイルが筒抜けになります。くれぐれも重要なサーバでは実行しっぱなしにしないでください。


2013/04/07 追記

各フィルタに渡すオプション間の区切りを , から ; に変更しました。これはcutのlistのようにオプション自体にリストを渡す時に , で区切ったほうが見た目が良かったのでそちらに変えたためです。