イケてる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のようにオプション自体にリストを渡す時に ,
で区切ったほうが見た目が良かったのでそちらに変えたためです。