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

スクリーンショット
ueokande/logbook Another log viewer for Kubernetes github.com

なぜ作ったの?

Webサービスにおいてログは大変重要なものです。 Kubernetesでもログを閲覧するコマンドkubectl logsコマンドがあります。 しかしログを追う時、kubectl podskubectl 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はとりあえず動くものを公開しただけなので、これから機能追加も続けていきたいと思います。