コンテンツにスキップ

リリース:Kubernetes 向けリアルタイムログ検索

Kubetail が昨年リリースされて以来、最も要望の多かった機能はログ検索です。最新の公式リリース(cli/v0.4.3、helm/v0.10.1)でついにログ検索機能が利用可能になったことをお伝えできて嬉しいです。こちらで実際の動作を確認できます:

https://www.kubetail.com/demo

検索の実装に時間がかかった理由は、Kubernetes API がネイティブにサポートしていないため、ゼロから構築する必要があったからです。クライアント側 grep を使って素早く実装することも検討しましたが、検索のたびに大量のログファイルをフルダウンロードする可能性があり、遅くて帯域幅を大量に消費するため、良いユーザー体験とは言えません。回避策はありますが、ユーザーに追加の入力を求めることになり、これも良い体験ではありません。

代わりに、ripgrep をラップするカスタム Rust 製実行ファイルを作成して検索を実装しました。なぜ Rust か?とにかく速いからです。Kubetail のバックエンドの大部分は Go で書かれていますが、ディスク上のログファイルを読み込むこの低レベルコンポーネントは可能な限り高速であることが求められました。結果:1GB ファイルのフルスキャンに約 250ms。クエリごとに、実行ファイルは各ノード上の関連するコンテナログファイルのみをスキャンし、マッチした行だけをブラウザにストリーミングします。ほとんどのクエリは早期終了できるため、フルスキャン前に結果を返すことすら可能です。Kubetail の検索は Kubernetes ログの「リモート grep」と考えることができます。ローカルで grep するためにログファイル全体をダウンロードする必要はもうありません。

検索を有効にするには、クラスターに Kubetail「クラスターリソース」をインストールする必要があります。GUI から「Install」をクリックするか、CLI で kubetail cluster install を実行するだけで簡単にインストールできます。この操作により、各ノードに Kubetail クラスターエージェントと Kubetail クラスター API のインスタンスがデプロイされます。クラスター API が利用可能な場合、ダッシュボードはノード上での検索などの Kubetail カスタム機能にアクセスするためにそれを使用します。利用できない場合は、GUI でそれらの機能を無効にし、Kubernetes API にフォールバックします。

ログ検索はまだ始まったばかりで、改善の余地がたくさんあります。Rust、Go、React の開発者、またはログが大好きな UI デザイナーの方、Kubernetes 向けの最もユーザーフレンドリーなオープンソースロギングプラットフォームの構築に参加してください。Discord でコミュニティに参加しましょう!

Andres