tally - The top command for log streams
tally aggregates log lines from stdin in real time and shows a ranked top list.
Unlike sort | uniq -c | sort -nr, you can see “what’s hot right now” as the stream flows.
Features
- Real-time aggregation: continuously updated Top N while the stream is flowing
- TUI display: bar-chart ranking in the terminal
- Fast: Rust-based and optimized for high throughput
- Simple: works as a drop-in pipe with no query language
Use Cases
- Live monitoring of popular paths in access logs
- Detect spikes in error levels or messages
- First-pass troubleshooting for fast-moving logs
Installation
# Cargo (Rust)
# Homebrew / binary releases are planned
Note: crates.io package name may differ from binary name. See Cargo.toml.
Usage
| |
Field selection (no need for cut)
# 7th field (space-separated)
|
# 3rd field (comma-separated)
|
Options (some planned)
-f, --field <N>: Aggregate the Nth field after splitting-d, --delimiter <CHAR>: Delimiter character (1 char)-n, --top <N>: Show top N entries (default: 10)--interval <MS>: Refresh interval in ms (clamped to 50–2000)
Spec Notes
- Input is processed as UTF-8; invalid bytes are replaced and processing continues
- Set
NO_COLOR=1to disable ANSI color output
Performance (quick check)
# Release build
# Quick check with sample input
|
Examples
# 1) Popular paths in access log
|
# 2) Second column in CSV
|
# 3) Top 5 with faster refresh
|
FAQ
Q. The output does not refresh
A. Check if --interval is too large and whether input is actually flowing.
Q. The aggregation looks wrong
A. -f is 1-based. Check delimiter settings and how consecutive delimiters are treated.
Q. I see mojibake
A. Ensure the input is UTF-8; verify your LC_ALL.
Development
# Build
# Test
# Format
# Lint
Contributing
- Review
ROADMAP.mdandPRD.mdfirst - See
CONTRIBUTING.mdfor development workflow and rules
Documents
CONTRIBUTING.mdCODE_OF_CONDUCT.mdSECURITY.mdCHANGELOG.mdRELEASE.mdLICENSE
License
- MIT License (
LICENSE)
Security
- See
SECURITY.mdfor reporting
tally - The top command for log streams (日本語)
tally は標準入力のログをリアルタイムで集計し、頻出項目をランキング表示するCLIツールです。
sort | uniq -c | sort -nr のように全件読み込み完了を待たず、実行直後から「今多いもの」を見られます。
主な特徴
- リアルタイム集計: 入力が流れ続けてもトップNが更新され続ける
- TUI表示: バーチャート付きの見やすいランキング
- 高速: Rust実装で高スループットに対応
- シンプル: パイプで繋ぐだけ、複雑なクエリ不要
使いどころ
- アクセスログの人気パスをライブ監視
- 失敗ステータスやエラー文言の急増を検知
- バッチでは追いにくいトラブルシューティングの一次調査
インストール
# Cargo (Rust)
# 将来的に Homebrew / バイナリ配布を予定
※ crates.ioのパッケージ名はバイナリ名と異なる場合があります(Cargo.toml を参照)。
使い方
| |
フィールド指定(cut不要)
# 空白区切りの7番目を集計
|
# カンマ区切りの3番目を集計
|
オプション(予定含む)
-f, --field <N>: 区切り文字で分割したN番目の要素を集計-d, --delimiter <CHAR>: 区切り文字を指定(1文字)-n, --top <N>: 上位N件のみ表示(デフォルト: 10)--interval <MS>: 描画更新間隔(ミリ秒、50〜2000に丸め)
仕様メモ
- UTF-8として処理し、不正なバイト列は置換して継続処理する
NO_COLOR=1を設定するとANSIカラーを無効化できる
性能計測(簡易)
# リリースビルド
# サンプル入力での簡易計測
|
使用例
# 1) アクセスログの人気パス
|
# 2) CSVの2列目を集計
|
# 3) 上位5件だけ表示、更新間隔を短く
|
FAQ
Q. 出力が更新されません
A. --interval が大きすぎないか確認してください。入力が流れているかも確認してください。
Q. 集計結果が期待と違います
A. -f は1始まりです。区切りが空白か -d 指定か、連続区切り時の空フィールド扱いを確認してください。
Q. 文字化けします
A. UTF-8以外の入力が混在していないか、LC_ALL の設定を確認してください。
開発
# ビルド
# テスト
# フォーマット
# リント
コントリビューション
- まずは
ROADMAP.mdとPRD.mdを確認してください - 開発フローとルールは
CONTRIBUTING.mdを参照してください
ドキュメント
CONTRIBUTING.mdCODE_OF_CONDUCT.mdSECURITY.mdCHANGELOG.mdRELEASE.mdLICENSE
ライセンス
- MIT License(
LICENSE)
セキュリティ
- 報告手順は
SECURITY.mdを参照してください