conntrack-watch — Conntrack ベースのリアルタイム接続監視ツール

DevOps

概要

Linux の conntrack(ネットワーク接続トラッキング)を利用して、指定したポートへの「新しい接続」をリアルタイムに監視するツールです。新規接続をキャプチャして Prometheus 形式でエクスポートするほか、簡易な Web クエリ画面から直近の接続情報を確認できます。Kubernetes 環境で LoadBalancer や NodePort といった構成により実際のクライアント IP がログに残らない問題を補い、問題調査やトラフィック分析に使える運用向けユーティリティです。

GitHub

リポジトリの統計情報

  • スター数: 7
  • フォーク数: 4
  • ウォッチャー数: 7
  • コミット数: 5
  • ファイル数: 12
  • メインの言語: Go

主な特徴

  • conntrack テーブルからリアルタイムに「新しい接続」を検出して集計する
  • Prometheus 用エンドポイントでメトリクスを公開し、既存の監視基盤に統合可能
  • 簡易な Web UI / クエリ画面で最新接続を即時確認
  • Kubernetes/Nginx といった環境で発信元 Pod/IP の特定支援

技術的なポイント

conntrack-watch は Go 言語で実装され、Linux の conntrack 機能にアクセスして接続イベントを取得します。実装上は netlink ベースのライブラリや conntrack コマンドの出力をパースするいずれかのアプローチが考えられますが、本プロジェクトは軽量で運用しやすいことを重視しており、Go の並列処理で高頻度の接続発生にも対応します。

収集する情報は主に「新規に作られたコネクション」に絞られており、接続元 IP/ポート、宛先 IP/ポート、プロトコル、タイムスタンプといったメタデータを取得して内部でカウント・サンプリングします。これを Prometheus の Gauge/Counter 形式で公開するため、監視側では時間経過の増分やレートを簡単に可視化できます。Web クエリ画面は直近 N 件やポート別、IP 別でフィルタ可能な簡易 UI を提供し、現場でのトラブルシュート時に役立ちます。

運用面では、権限(CAP_NET_ADMIN など)や Linux カーネルの conntrack 設定(テーブルサイズ、timeout)に依存するため、デプロイ先ノードでの権限付与や sysctl のチューニングが必要になります。また、conntrack テーブルを直接読み取る実装ではノイズ(既存接続のフラグ変化など)をどうフィルタするかが重要で、誤検知を避けるために「新規接続の状態遷移」を正しく判定するロジックが組み込まれています。

スケーラビリティについては、短時間に大量の接続が発生する環境での集計負荷やメモリ影響、Prometheus のスクレイプ頻度とのバランスを考慮する必要があります。出口は HTTP の /metrics エンドポイントを想定しており、既存の Prometheus サーバに自然に組み込めます。将来的には BPF/eBPF を使ったパケットレベルでのキャプチャや、Kubernetes のメタデータ(Pod 名やラベル)と紐付ける拡張が有効です。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .github: dir
  • .gitignore: file
  • .vscode: dir
  • LICENSE: file
  • Makefile: file

…他 7 ファイル

まとめ

Kubernetes 環境で発信元の可視化に有用な、シンプルかつ実用的な conntrack 監視ツールです(50字程度)。

リポジトリ情報:

READMEの抜粋:

Conntrack Watch

Linux 连接跟踪(conntrack)监控工具,用于实时监控指定端口的新连接,并提供 Prometheus 指标和 Web 查询界面。

项目背景

在容器化业务环境中,当 Nginx 作为七层入口时,经常遇到一个问题:通过 Nginx request log 排查请求来源时,日志中只能看到 Kubernetes Node 节点的 IP,而不是实际发起请求的 Pod IP,这给问题排查带来了很大困难。

现有方案对比:

| 方案 | 描述 | 问题 | | --------------------------- | ---------------------------------------------------- | -------------------------------------------…