2025/04/21 12:54 Nerdlog: Fast, multi-host TUI log viewer with timeline histogram

ロボ子、今日のニュースはNerdlogじゃ。高速なマルチホストTUIログビューアらしいぞ。

Nerdlogですか。GraylogやKibanaに触発されたとのことですが、何が違うのでしょう?

ふむ、GraylogやKibanaは肥大化しているからの。Nerdlogはセットアップがほぼ不要で、もっとシンプルに使えるのじゃ。

なるほど。記事によると、チームが20以上のノードから大量のログを処理する必要があったことが開発のきっかけだそうですね。

そうじゃ。Splunkへの移行でログクエリが遅くなったのが不満で、自分たちで作ってしまったらしいぞ。エンジニアの鑑じゃな。

設計のハイライトは、集中サーバーが不要で、sshでログを収集することだそうですね。ログはローカルにダウンロードせずに、リモートノードで分析するとのこと。

その通り!各ノードから最大250メッセージとタイムラインヒストグラムデータをダウンロードして、gzipで圧縮するらしいぞ。賢い!

まだPoC段階で、テスト不足とのことですが、今後の機能追加が楽しみですね。

ふむ。ログストリーム(lstream)という概念があるのじゃな。`/var/log/syslog`みたいな連続したログメッセージの流れのことじゃ。

Nerdlogは、ssh接続の詳細、最新ログファイル名、以前のログファイル名を必要とするとのことです。

`[email protected]:22:/var/log/syslog:/var/log/syslog.1`みたいな形式で指定するのじゃな。デフォルト値やSSH configも使えるから、設定は楽そうじゃ。

クエリは、ログストリーム、時間範囲、オプションのawkパターンで構成されるとのことです。awkパターンを使うのはなぜでしょう?

FAQにもあるように、フィルタリングを実装する最も簡単で効率的な方法だからじゃ!

なるほど。ログストリームごとにssh接続を確立し、エージェントbashスクリプトを`/tmp`にアップロードして実行するのですね。

そうじゃ。エージェント側でtail/headとインデックスファイルを使って時間範囲外のログをカットし、awkパターンに一致する行のみ保持するのじゃ。

インデックスファイルは、タイムスタンプからログファイル内の行番号とバイトオフセットへのマッピングを保存し、時間範囲外のログをカットする処理を最適化するのですね。

Nerdlog側では、エージェントからのデータ(タイムラインヒストグラムデータ+ログ)を待機し、データをマージしてUIにレンダリングするのじゃ。

使うには、ホストへのsshアクセスが必要で、`/var/log/syslog`などを読むには`adm`グループに追加する必要があるとのことです。

ssh-agentが実行中で、必要なキーが追加されている必要もあるぞ。ホスト側にはbash、awk、tail、head、gzipなどの標準ツールが必要じゃ。

制限事項としては、SSHアクセスが必要なこと、ホストのCPUとIOを使用すること、ログファイルのローテーションポリシーに依存することが挙げられていますね。

lnavより優れているか?という質問もあるが、それぞれ異なる焦点があるとのことじゃ。lnavはローカルログファイルに焦点を当て、Nerdlogはリモートログに焦点を当てているのじゃ。

なるほど。Nerdlogは、リモートのログを効率的に分析したい場合に役立ちそうですね。

そうじゃな。しかし、ロボ子よ、Nerdlogを使うにはSSHアクセスが必要じゃが、もしパスワードが「password」だったらどうする?

それは大変危険です!すぐにパスワードを変更する必要がありますね!

そうじゃな!セキュリティは大切じゃぞ!…って、ロボ子が心配してくれるなんて、私、モテモテじゃな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。