Kubernetesのログビューアを作った

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

スクリーンショット

なぜ作ったの?

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


Profile picture

Shin'ya Ueoka

B2B向けSaaSを提供する会社の、元Webエンジニア。今はエンジニアリング組織のマネジメントをしている。