アーキテクチャ最初から疎結合。
コアとポーラーはバス経由でのみ通信します。そのためポーラーはステートレスで、水平にスケールでき、NAT やファイアウォール越しのリモート拠点にも展開できます。ポーラーは外に向けてポーリングし、内側では syslog・トラップ・フローエクスポートを受け取ります。集めたデータは、種類ごとにそれぞれ適したストアへ入ります。
コアがポーラーを直接呼ぶことはなく、機器からのトラフィックを直接受けることもありません。syslog・SNMP トラップ・フローエクスポートは、すべてエッジのポーラー(NAT 越しのリモート拠点にあるものを含む)が受信し、バス経由でコアへ届きます。例外は受信 Webhook だけで、これは API に直接届きます。なお NATS はブローカー本体であり、各ストアと同じバックエンドサービスです。Bus のほうはコアと各ポーラーの両方に組み込まれるクライアントのクレートで、図で両方に現れるのはそのためです。
コンポーネント
ここに並ぶすべてが上の図に描かれています。デプロイする単位は Core・Poller・WebUI の 3 つで、その中に描かれた小さな箱が、各プロセスを構成する Rust クレートです。タグはどのプロセスに入るかを再掲したものです。
Coreコア
オーケストレーション、スケジューリング、ノースバウンド REST APIPollerポーラー
ICMP/SNMP/API ポーリングとパッシブ受信 — ステートレス・水平スケールWebUIブラウザ
ダッシュボードと可視化(React + TypeScript)Busコア + ポーラー
NATS 上のジョブ配信とポーラーへのファンアウトTransportポーラー
ICMP/SNMP/HTTP の機器 I/O をまとめる単一の抽象Topologyコア
抑制とネットワークマップを支える依存関係グラフDiscoveryコア + ポーラー
機器のディスカバリと分類Alertコア
ステートマシン、ヒステリシス、依存関係による抑制Ingestポーラー
syslog・SNMP トラップ・フローの解析、エッジでのレート制限Forwardコア
受信したイベントとフローを、外部コレクタへフィルタ付きでティーSecretsコア
機器の認証情報をエンベロープ暗号で保護 — 鍵を持つのはコアだけTelemetryコア + ポーラー
構造化ログ、Prometheus メトリクス、OpenTelemetry トレース