オープンソース · AGPL-3.0 ·v0.2.1

数万ノードのために設計された、ネットワーク監視。

Yagra は Rust で書かれたオープンソースの NMS です。ICMP・SNMP v2c/v3・HTTP/API 監視、分散ポーラー、オンコール担当者を埋もれさせないアラート。Docker コンテナとして配布し、書き直しではなく設定でスケールアウトします。

Rust · Tokio · Axum · React · PostgreSQL · VictoriaMetrics · NATS

機能

死活からフローまで、ひとつのシステムで。

アクティブ/パッシブ監視、ディスカバリ、アラート、トラフィック分析 — 規模が大きくなっても、見落とさず鳴りすぎないことを狙った設計です。

アクティブ監視

  • raw ソケットによる ICMP 死活監視
  • SNMP v2c / v3(USM)、GETBULK でインターフェースごとに収集
  • HTTP / URL 監視 — 応答時間・本文キーワード・JSON 値・TLS 有効期限
  • DNS 名前解決監視と CNAME チェーンの履歴
  • 読み取り専用の Dashboard API 経由で Cisco Meraki を監視
  • ポーリング間隔のジッタと、機器ごとのレート制限

ディスカバリと分類

  • IP レンジ探索 — 通る認証情報も自動で探します
  • sysObjectID / sysDescr による自動分類
  • CDP/LLDP・サブネット・OSPF・BGP から自動導出するネットワークマップ
  • ルータの ARP キャッシュから見つける「監視していないホスト」
  • 編集できるデバイスプロファイルと収集テンプレート
  • 分類ルールと、厳選した MIB/OID カタログ

アラート品質

  • ドウェル時間によるヒステリシスとフラッピング検知
  • 依存関係による抑制と、根本原因へのロールアップ
  • 依存関係グラフは Yagra が自動導出 — 適用前に変更点を確認できます
  • メンテナンスウィンドウ、ミュート、重複排除とグルーピング
  • PagerDuty / Jira Service Management への転送

パッシブイベント

  • syslog(RFC 5424 / 3164)と受信 Webhook
  • SNMP v1/v2c トラップ + inform、OID→名前を解決
  • オペレーターが決めるルール — 重大度・自動クローズ TTL・解消パターン
  • VictoriaLogs による全文イベント検索
  • そのまま次へ転送 — SIEM へフィルタ付きでティー、BigQuery へは行として

トラフィックフロー

  • NetFlow v5/v9・IPFIX・sFlow v5 を ClickHouse へ
  • トップトーカー・ポート・プロトコル
  • AS 間の通信を Sankey 図で、IP→ASN はオフラインで補完
  • どの軸をクリックしてもフローを絞り込めます

オペレーター UX

  • カスタマイズできる共有ダッシュボードとユーザー個別ダッシュボード
  • 機器が報告しているメトリクスを、想定済みのものだけでなくすべてグラフ化
  • トポロジと依存関係マップ
  • HTML・CSV・PDF へのレポート出力とスケジュール実行
  • 完全なモバイル対応、EN/日本語、ライト/ダーク

AI と自動化

  • AI アシスタント向けの MCP サーバーを内蔵(オプトイン・既定 OFF)
  • 状態・メトリクス・フロー・イベントを照会し、Troubleshoot 分析を実行
  • 書き込みは監査付き — 確認・メンテナンス・即時ポーリングのみで、機器設定には触れません
  • ロールとスコープを持つ API トークン、ツール単位の RBAC
アーキテクチャ

最初から疎結合。

コアとポーラーはバス経由でのみ通信します。そのためポーラーはステートレスで、水平にスケールでき、NAT やファイアウォール越しのリモート拠点にも展開できます。ポーラーは外に向けてポーリングし、内側では syslog・トラップ・フローエクスポートを受け取ります。集めたデータは、種類ごとにそれぞれ適したストアへ入ります。

WebUIbrowserCoreorchestration · REST APIAlertTopologyDiscoveryForwardSecretsBusTelemetryNATSmessage brokerPollerpool · A / pool · BTransportIngestDiscoveryBusTelemetryNetworkdevicesRESTICMP · SNMP · APIsyslog · SNMP traps · NetFlow · sFlowPostgreSQLmetadataRedisephemeral stateVictoriaMetricsmetricsVictoriaLogseventsClickHouseflows

コアがポーラーを直接呼ぶことはなく、機器からのトラフィックを直接受けることもありません。syslog・SNMP トラップ・フローエクスポートは、すべてエッジのポーラー(NAT 越しのリモート拠点にあるものを含む)が受信し、バス経由でコアへ届きます。例外は受信 Webhook だけで、これは API に直接届きます。なお NATS はブローカー本体であり、各ストアと同じバックエンドサービスです。Bus のほうはコアと各ポーラーの両方に組み込まれるクライアントのクレートで、図で両方に現れるのはそのためです。

コンポーネント

ここに並ぶすべてが上の図に描かれています。デプロイする単位は Core・Poller・WebUI の 3 つで、その中に描かれた小さな箱が、各プロセスを構成する Rust クレートです。タグはどのプロセスに入るかを再掲したものです。

Coreコア
オーケストレーション、スケジューリング、ノースバウンド REST API
Pollerポーラー
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 トレース
スケールと耐障害性

書き直さずに成長できる設計。

MVP は数個のコンテナに同居して動きます。同じビルドのまま、設定だけで分散ポーラーや高可用なストアへスケールアウトできます。

50,000負荷試験で検証したノード数
プール拠点に寄せたポーラー割り当て
分断耐性バッファして乗り切り、後からメトリクスを補完
HAコアのリーダー選出とフェイルオーバー

ポーラーは監視対象ごとの状態を持ちません。そのためコーディネーターは、コンシステントハッシュで稼働中のポーラーにノードを割り当て、ハートビートが途絶えたら割り当て直せます。リモートポーラーは中央のバスへ自分から接続しにいき、ネットワークが分断されている間は結果を手元にためます。再接続すると、ためたメトリクスをまとめて送ります。一方アラートは後追いで送らないので、回線が復旧した瞬間に古いイベントで埋め尽くされることはありません。

セキュリティの考え方

WebUI は最初から HTTPS です — 自分の証明書を UI から取り込め、再起動も要りません。監視用の認証情報はエンベロープ暗号(AES-256-GCM)で保護し、鍵はデータベースの外に置きます。OIDC によるシングルサインオン(Microsoft Entra ID・Okta・Google Workspace はガイド付き設定で、その製品が必要とする項目だけを尋ねます)、LDAP / Active Directory アカウントでのサインイン、ロールベースのアクセス制御、改ざんできない監査ログ、ポーラーごとにスコープを絞ったバス接続用の認証情報。高度な分散・HA 機能はすべてオプトインで、既定値は保守的かつ後方互換のままです。

クイックスタート

ワンコマンドで起動。

コア・ポーラー・WebUI と、背後のストア(PostgreSQL・Redis・NATS・VictoriaMetrics)を Docker Compose でまとめて起動します。

  • WebUIhttps://localhost:8443
  • APIhttp://localhost:8080
はじめにガイドを読む →
$ docker compose up --build

初回起動時、使い捨ての admin パスワードがコアのログに出力されます。次のコマンドで確認してください。

docker compose logs core

公開しているイメージ

ghcr.io/horryworks/yagra-core
ghcr.io/horryworks/yagra-poller
ghcr.io/horryworks/yagra-web
オープンソース

AGPL-3.0 の下、オープンに開発。

ソースを読み、自分で動かし、GitHub ですべてのリリースを追えます。サインアップも、テレメトリの壁もありません。

オープンベータ公開中です。バグ報告・質問は GitHub Issue へ(このプロジェクトの唯一の連絡窓口で、問い合わせ用のメールアドレスはありません)。Pull Request は現時点では受け付けていません。