Kubernetes のログビューアLogbookを作りました。 Kubernetes やその周辺ツールは船に関する名前から由来されることが多いです。 英語で logbook は航海日誌のことを指します。 航海日誌のようにログをパラパラとログを閲覧できる、そんなツールを作りました。

なぜ作ったの?
Web サービスにおいてログは大変重要なものです。
Kubernetes でもログを閲覧するコマンドkubectl logsコマンドがあります。
しかしログを追う時、kubectl podsとkubectl logsを何往復もすることが割と面倒です(自分だけかも知れませんが)。
複数コンテナにまたがるログをtailできるsternは大変便利なツールです。
しかし時として、特定のコンテナのログをじっくり眺めたいときがあります。
そんなツールが欲しくて logbook を作りました。
使い方
Go のツールなので、go getでインストールできます。
$ go get -u github.com/ueokande/logbook起動は kubeconfig と namespace を指定できます。
$ logbook [--kubeconfig KUBECONFIG] [--namespace NAMESPACE]よく使うキーバインドは以下のとおりです。
- Ctrl+n/Ctrl+p: Pod を選択
- Tab: コンテナの切り替え
- j/k: 上下にスクロール
- Ctrl+D/Ctrl+U: 半ページスクロール
- Ctrl+F/Ctrl+B: 1 ページスクロール
- G/g: 最下部、最上部にスクロール
- q: 閉じる
使用技術
Kubernetes API
Kubernetes との通信は k8s.io 以下で配布されてるクライアントライブラリを使いました。 ログ取得のAPIも公式で提供されてるので簡単に取得できました。
デバッグ用に Kubernetes クラスタが欲しかったので、今回kindというツールを試して見ました。 kind は Docker 上で Kubernetes クラスタを容易に建てられるツールです。 個人的な感想ですが、minikube よりもトラブルが少なく使いやすという感じでした。
TUI ライブラリ
TUI(Terminal User Interface)はもう 1 つの技術的チャレンジです。 logbook は単発のコマンドラインツールではなく、リッチな UI を描画します。 使用したライブラリはtcellです。
TUI ライブラリの有名どころといえば、termboxとその Go 実装のtermbox-goです。 しかし現在 termbox-go はメンテナンスされておらず、作者も tcell を勧めてました(ただし本人は使ったことがないらしい)。 自分も初めて使ってみましたが、なかなか癖のある API でした。 tcell に関しては情報が共に少ないので、また時間を見つけて記事を書きたいと思います。
まとめ
今回初めて Kubernetes の周辺ツールを作ってみました。 Kubernetes API は何度か触ったことはあるのですが、周辺ツールや TUI アプリケーションと新しいチャレンジが多かったです。 logbook はとりあえず動くものを公開しただけなので、これから機能追加も続けていきたいと思います。