サクッとログ収集できる「oklog」を試してみた
ログ管理でこんな悩みはないですか?
- ログを手動でtailしてるけど、どっかに簡単に集約してログを見たい
- ElasticSearchを使ってるけど、操作も難しいし機能が多くて使いこなせない
- FluentdやLogstashみたいなものを使ってログを送ってるけど、パフォーマンスに問題を抱えている
- 集約したログのgrepだけしたいのに、なんでこんなややこしいんだ!?
そんなときは「oklog」を使ってみてはいかがでしょうか?
みたいなことがoklogのREADMEに書いてあったので、実際に使ってみた!
https://github.com/oklog/oklog
oklog とは
oklog は、Go言語製のログ管理システムです。
インストールは、Go言語製ということもあり、1バイナリを置くだけで済むので楽ちんです。
oklogの持っている機能は以下になります。
- ログの転送
- ログの集約
- ログクエリーの実行
詳しい使い方を見ていきましょう。
oklog の導入
oklogの導入をしていきます。
前提として、Ubuntu16.04で進めていきます。
oklog インストール
oklogはバイナリファイルで提供されています。
https://github.com/oklog/oklog/releases
ということで、サクッとインストールできます。
$ wget https://github.com/oklog/oklog/releases/download/v0.2.2/oklog-0.2.2-linux-amd64 -O /usr/local/bin/oklog $ sudo chmod 755 /usr/local/bin/oklog
oklog の使用方法
ヘルプを見てみましょう。
$ oklog -h USAGE oklog <mode> [flags] MODES forward Forwarding agent ingest Ingester node store Storage node ingeststore Combination ingest+store node, for small installations query Querying commandline tool stream Streaming commandline tool testsvc Test service, emits log lines at a fixed rate VERSION 0.2.2 (go1.8.3)
- forward
- ログの転送モード
- ingest
- forwarderからの書き込みを受信するモード
- store
- ingestで受け取ったデータをディスクに書き込むモード
- ingeststore
- ingestとstoreを合わせたモード
- query
- 取集したログに対してクエリーを実行するモード
- stream
- 上記queryをリアルタイムで受け取る
1つのコマンドで
- Fluentd
- ElasticSearch
- Kibana
的なことができるようです。
試してみた
じゃあサクッと試してみましょう!
# ingeststoreモードでログを受け取れるようにしておく $ oklog ingeststore -store.segment-replication-factor 1 ts=2017-09-14T12:39:04.875025109Z level=info cluster_bind=0.0.0.0:7659 ts=2017-09-14T12:39:04.887173939Z level=info fast=tcp://0.0.0.0:7651 ts=2017-09-14T12:39:04.887289145Z level=info durable=tcp://0.0.0.0:7652 ts=2017-09-14T12:39:04.8873812Z level=info bulk=tcp://0.0.0.0:7653 ts=2017-09-14T12:39:04.887478776Z level=info API=tcp://0.0.0.0:7650 ts=2017-09-14T12:39:04.890380114Z level=info ingest_path=data/ingest ts=2017-09-14T12:39:04.891325655Z level=info store_path=data/store # テスト用に適当にログを吐く $ touch /tmp/test.log # forwardモードでログを転送する $ tail -f /tmp/test.log | oklog forward localhost # ログを流してみる $ echo -e "number:1\tname:田中" >> /tmp/test.log $ echo -e "number:2\tname:鈴木" >> /tmp/test.log $ echo -e "number:3\tname:佐藤" >> /tmp/test.log # クエリーを流してみる $ oklog query -from 5m -q "田中" number:1 name:田中
ご覧のとおり、かなり楽に収集してクエリーでログをフィルタリングできました!
複数台の場合も試してみます。
# 別々のサーバーでingeststore起動 # host1, host2はそれぞれのサーバーのPrivate IP host1$ oklog ingeststore -cluster host1 -peer host1 -peer host2 host2$ oklog ingeststore -cluster host2 -peer host1 -peer host2 # テスト用に適当にログを吐く host3$ touch /tmp/test.log host4$ touch /tmp/test.log # forwardモードでログを転送する host3$ tail -f /tmp/test.log | oklog forward host1 host4$ tail -f /tmp/test.log | oklog forward host1 # ログを流してみる host3$ echo -e "number:1\tname:ホンダ" >> /tmp/test.log host4$ echo -e "number:2\tname:スズキ" >> /tmp/test.log host3$ echo -e "number:3\tname:カワサキ" >> /tmp/test.log # クエリーを流してみる host3$ oklog query -from 5m -q "スズキ" -store host1 host2 number:2 name:スズキ host3$ oklog query -from 5m -q "ホンダ" -store host1 host2 number:1 name:ホンダ # クラスターなのでforwardしてないingeststoreサーバーにもデータが存在する host3$ oklog query -from 5m -q "スズキ" -store host2 number:2 name:スズキ
この通り、サクッと複数台の集約&クラスタ構成ができました!
最後に
かなりお手軽にログ集約とその検索ができるので
FluentdやElasticSearchをわざわざ用意するほどでもない…というケースではかなり有用ではないでしょうか。
ログの取得がコマンドで簡単に行えるため、ログ監視もしやすそうです。
またコマンドラインだけでなく、UI機能も提供されてます。
ログの可視化というよりは、queryをブラウザで実行できる くらいの機能です。
画面はこんな感じ。
負荷試験など一時的にログ収集したいってケースが多々あるので、
今後使っていきたいなぁと思いました。
では!