NerdLog - タイムラインヒストグラムを備えた高速なマルチホスト TUI ログビューア
(github.com/dimonomid)- 中央サーバーなしで、SSH 接続だけでリモートログの収集と分析が可能な、高速でリソース効率に優れた TUI マルチホストログビューア
- タイムラインヒストグラムの可視化と時間フィルタリングにより、ログの流れを把握しやすい
- 基本的な
awk、tail、headの組み合わせを使い、高速処理と簡単な構築をサポート - ログクエリは ローカルにダウンロードせずリモートで処理し、ネットワーク使用量を最小化して大容量ログ処理を最適化
- 基本はシンプルだが、さまざまな設定ファイル、SSH config、UI 操作による拡張性を備える
Nerdlog の紹介
- Nerdlog は 中央サーバーなしで動作するテキストベース UI のログビューア
- Graylog/Kibana のようにログを分析できるが、導入や保守の負担がない軽量な代替ツール
- 初期の開発動機は、遅く非効率な Splunk への失望から始まった
- 複数のリモートサーバーのログを 同時にフィルタリングおよび可視化するのに最適化されている
- 主にシステムログ(
/var/log/messages、/var/log/syslog)を処理するよう設計されているが、ほかのフォーマットにも対応 - 1GB を超える大容量ログも高速に処理可能
- 中核となる目標は マルチノードでのログ参照の速度と効率を最大化すること
設計上の特徴
- 中央サーバーなしで動作し、各ノードに対して ssh 接続を作成して待機状態を維持
- ログ全体をダウンロードせず、クエリごとに最大 250 件のログメッセージとヒストグラムデータのみを転送
- すべての応答をマージして 統合ビューを提供
- 転送時に Gzip 圧縮を使用してネットワークコストを削減
プロジェクトの状態と歴史
- 2022 年に個人ハッカソンで遅い Splunk の代替として作られ、2025 年にオープンソースとして公開された
- 急いで実装されたためスパゲッティコードがあり、テストカバレッジも不足している
- Linux 環境でのみ実運用テストが行われている
- Proof-of-concept 段階だが、実運用に十分なほど高速で安定している
使い方の概要
- アプリを起動するとクエリ入力欄が表示される
- ログストリームは、ssh でアクセス可能なサーバー上の連続したログファイル群を意味する
- ssh ポートやログファイルのパスなどを明示することも、ssh config や別の設定ファイルを使うことも可能
- Select field expression では、UI に表示するフィールドを SQL スタイルで指定する
例:
myuser@myserver.com
myuser@myserver.com:1234:/some/other/logfile
設定ファイルの例(~/.config/nerdlog/logstreams.yaml):
log_streams:
myhost-01:
hostname: actualhost1.com
port: 1234
user: myuser
log_files:
- /some/custom/logfile
UI 構成
- Awk パターン入力フィルタ:
/foo/、( /bar/ || /baz/ ) && !/qux/などをサポート - Edit ボタン: クエリ全体の入力ウィンドウを開く
- Menu ボタン: 戻る、進む、クエリのコピーなどの機能を提供
- ヒストグラム: 時間帯ごとのログ密度を可視化し、時間範囲を選択可能
- ログテーブル: 最新ログは下部に表示され、右スクロールで詳細フィールドを確認可能
- ステータスバー:
- 緑: 接続済みで待機中のログストリーム数
- オレンジ: 現在クエリ中のログストリーム数
- 赤: 接続中のログストリーム数
- 右側の数字: 全一致ログ数 / 現在読み込まれているログ数 / カーソル位置
- コマンドライン:
:キーでアクセスし、Vim スタイルのコマンドを入力可能
ナビゲーション方法
- 一般キー:
Tab、Shift+Tab、Enter、Esc、PgUp、PgDnなど - Vim スタイルキー:
h、j、k、l、g、G、Ctrl+U、Ctrl+D、i、aなど - 入力フィールド内では
Up、Down、Ctrl+P、Ctrl+Nで履歴を移動 Ctrl+K、Ctrl+J: クエリ履歴全体を巡回
主なコマンド
:xcまたは:xclip: 現在のクエリ状態をコマンド文字列としてクリップボードにコピーnerdlog --lstreams 'localhost' --time -3h --pattern '/something/':back、:fwd: ブラウザのように前後のクエリへ移動:edit: クエリ編集ウィンドウを開く:write [filename]: 現在読み込まれているログをファイルに保存:reconnect、:disconnect: ログストリームの再接続 / 切断:set オプション=値: 設定を変更(numlines、timezoneなどをサポート):q: プログラムを終了
要件
- リモートホストへの SSH アクセス権が必要
- ローカルで SSH agent が動作している必要がある
- ホストには gawk がインストールされている必要があり、mawk はサポートされない
/var/log/syslogを利用するには、rsyslogなどのシステムログ記録サービスが動作している必要がある- 詳細は 要件と制約 を参照
まとめ
- Nerdlog は、インストールなしでもリモートログを高速かつ視覚的に確認できる効率的なツール
- 複雑な設定は不要で、ネットワークリソースを節約しながらリアルタイム分析が可能
- 特に Vim ユーザーや CLI ツールを好むユーザーに最適なログ分析ツール
1件のコメント
Hacker Newsのコメント
--mergeを使って検索できる組み込み機能があります