Apache KafkaのトピックをTailするIsakaをリリースした

動機

ペパボではKubernetsの環境やプライベートクラウド環境を中心にすべてのログをApache Kafkaを経由し、S3にバックアップしたり、Graylogで取り込んで検索可能にしています。また筆者がそれらの基盤の開発、メンテナンスをやっているのですが、なにか障害があったときにGraylogで検索をかけてそれをダウンロードして、grepしたりawkしたりするのは非常に手間に感じていました。またリアルタイムに tail -f のようなことをやりたくても、なかなかやりづらい状況がありました。

kinessisについては @fujiwara さんが似たようなものかつ、lambdaで検索までできるようなものを実装されているのですが、kafkaはちょっと探しきれなかったので実装しました。

使い方

インストールはhomebrewでインストールできるようにしています。

$ brew install pyama86/homebrew-isaka/isaka

今のところはzookeeperから諸々情報を取得するようにしています。kafka本体がzookeeperをやめると言う方針を出しているので、いずれ移行するかもしれません。zookeeperについてはだいたい同じものを見ると思うので環境変数で指定したほうが便利です。

$ ISAKA_ZOOKEEPERHOST=zookeeper.example.com ISAKA_CLUSTERNAME=example isaka topic-list

上記のようにclusterのtopic-listをシュッと取得することができます。

そいて取得したtopic listの中から、tailしたいtopicを選び、tailするだけです

$ ISAKA_ZOOKEEPERHOST=zookeeper.example.com ISAKA_CLUSTERNAME=example isaka --topic example tail
# ログがずらーーーっとでる

もちろん本家のように -f(follow) も対応しています。ペパボはhashicorpのVaultを利用して、kafkaの通信をTLSクライアント認証しているので、TLS周りも指定できるようにしました。詳細は tail コマンドのヘルプを見てもらえればわかると思います。また、zookeeperにアクセスしたくないケースを想定して、kafka brokerもISAKA_KAFKABROKERS とかで指定可能にしています。

名前の由来

kafkaの由来がフランツ・カフカが好きだったからという理由っぽかったので、最初は海辺のカフカにちなんでharukiとしようと思ったのですが、僕は一番好きなのは金城一紀だけど、最近作品をあまり書かなくなってしまったので、殺し屋シリーズが好きな伊坂幸太郎から取りました。

今後は使ってみて、需要に応じてあれこれ機能追加していきたいと思います。