10 ポイント 投稿者 GN⁺ 2025-04-23 | 1件のコメント | WhatsAppで共有
  • 中央サーバーなしで、SSH 接続だけでリモートログの収集と分析が可能な、高速でリソース効率に優れた TUI マルチホストログビューア
  • タイムラインヒストグラムの可視化と時間フィルタリングにより、ログの流れを把握しやすい
  • 基本的な awktailhead の組み合わせを使い、高速処理と簡単な構築をサポート
  • ログクエリは ローカルにダウンロードせずリモートで処理し、ネットワーク使用量を最小化して大容量ログ処理を最適化
  • 基本はシンプルだが、さまざまな設定ファイル、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 スタイルのコマンドを入力可能

ナビゲーション方法

  • 一般キー: TabShift+TabEnterEscPgUpPgDn など
  • Vim スタイルキー: hjklgGCtrl+UCtrl+Dia など
  • 入力フィールド内では UpDownCtrl+PCtrl+N で履歴を移動
  • Ctrl+KCtrl+J: クエリ履歴全体を巡回

主なコマンド

  • :xc または :xclip: 現在のクエリ状態をコマンド文字列としてクリップボードにコピー
    nerdlog --lstreams 'localhost' --time -3h --pattern '/something/'  
    
  • :back:fwd: ブラウザのように前後のクエリへ移動
  • :edit: クエリ編集ウィンドウを開く
  • :write [filename]: 現在読み込まれているログをファイルに保存
  • :reconnect:disconnect: ログストリームの再接続 / 切断
  • :set オプション=値: 設定を変更(numlinestimezone などをサポート)
  • :q: プログラムを終了

要件

  • リモートホストへの SSH アクセス権が必要
  • ローカルで SSH agent が動作している必要がある
  • ホストには gawk がインストールされている必要があり、mawk はサポートされない
  • /var/log/syslog を利用するには、rsyslog などのシステムログ記録サービスが動作している必要がある
  • 詳細は 要件と制約 を参照

まとめ

  • Nerdlog は、インストールなしでもリモートログを高速かつ視覚的に確認できる効率的なツール
  • 複雑な設定は不要で、ネットワークリソースを節約しながらリアルタイム分析が可能
  • 特に Vim ユーザーや CLI ツールを好むユーザーに最適なログ分析ツール

1件のコメント

 
GN⁺ 2025-04-23
Hacker Newsのコメント
  • 素晴らしい仕事です。TUI が本当に洗練されていて、上部のヒストグラムが気に入りました。今日これで遊んでみるつもりです
  • 今日学んだこと: awk のパターンは単なる正規表現以上のもので、ブール演算子と組み合わせられます。awk は少し使ったことがありますが、この点は知りませんでした
  • 本当に素晴らしいプロジェクトです。特にタイムラインヒストグラムと、リモートファースト設計のシンプルさ、そして TUI アプローチが気に入っています
    • 複数ホストのログを扱うときに似たような苦労をし、その結果 Logdy というツールを作ることになりました
    • Logdy は Web ベースで、リアルタイムテイリング、構造化ログ検索、複数ソースに対する高速フィルタリングに重点を置いています。中央サーバーは不要です
    • 直接比較するつもりはありませんが、この分野を探っているなら、補完的なアプローチや別のシナリオで役立つかもしれません
    • 複数ホストに対するクエリ機能を追加する作業が必要です
    • とにかく nerdlog に賛辞を送ります。複数のサービスを動かす必要がない簡潔なツールを見るのは、いつも良いものです
  • ランディングページでは journalctl への言及が一度あり、ログが旧式の syslog に平文で保存されている必要があることを示唆しています
    • 平文ログを保存して、logrotate のような古い解決策を使いたくはありません
    • journald 自体に、リモートホストからログを受信し、--merge を使って検索できる組み込み機能があります
  • 後でぜひこれで遊んでみるつもりです。gzipped ログアーカイブがサポートされていないため、個人的には用途がかなり限定されます
    • 人々が注目しそうな制限として言及している点を見ると、十分に考慮されているようです。最終的にサポートする計画があるのか気になります
  • 見た目が良いです。もっと多くのユーザーを望むなら、主要な Linux ディストリビューション向けにパッケージ化するためにコミュニティの助けを借りられるでしょう
  • とても良いです。自分の小さなログビューア一覧に追加しました https://github.com/dloss/klp#alternative-tools
  • 良いですね。数年前に必要としていました。ライセンスファイルがありませんか?
  • 良さそうです。ソースコードを変更せずに RFC 3339 形式の日付/時刻を使う方法があるのか気になります
    • runit (Void Linux) と一緒に動くのか気になります
  • 素晴らしいです。こういうものを探していました
  • AWS CloudWatch でログを見られるのか気になります