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 はとりあえず動くものを公開しただけなので、これから機能追加も続けていきたいと思います。