gNMI(gRPC Network Management Interface) じーえぬえむあい
gNMIとは
gNMI(gRPC Network Management Interface) は、Googleが開発した高速通信フレームワーク「gRPC」の上に構築された、ネットワーク機器を管理・監視するためのインターフェース仕様です。OpenConfigプロジェクトが推進しており、シスコ・ジュニパー・アリスタなど主要ベンダーが広くサポートしています。
従来のネットワーク管理は、SNMP(Simple Network Management Protocol)やSSH経由のCLI(コマンドライン)が主流でした。しかしこれらは「ポーリング型」(定期的に機器に問い合わせる方式)のため、大量の機器を扱うと遅延や管理コストが膨大になる課題がありました。gNMIは、機器側からリアルタイムにデータを「プッシュ配信」するストリーミング型テレメトリをサポートし、この問題を根本から解決します。
データモデルには YANG(ネットワーク機器の設定・状態をツリー構造で定義する言語)を使い、Protocol Buffers(protobuf)でシリアライズして高速・軽量に通信します。ベンダー独自のコマンドに依存せず、標準化されたデータ形式で機器を操作できるため、マルチベンダー環境の自動化が格段に楽になります。
gNMIの4つの主要操作
gNMIが定義する操作は、シンプルな4つのRPC(Remote Procedure Call:遠隔手続き呼び出し)で構成されています。
| 操作名 | 種類 | 何をするか | 例え |
|---|---|---|---|
| Get | 単発リクエスト | 機器の現在の設定・状態を取得する | 「今のインターフェース設定を見せて」 |
| Set | 単発リクエスト | 機器の設定を変更・追加・削除する | 「このインターフェースをオンにして」 |
| Subscribe | ストリーミング | 指定データを継続的にプッシュ配信させる | 「5秒ごとにCPU使用率を送り続けて」 |
| Capabilities | 単発リクエスト | 機器がサポートするモデルや機能を確認する | 「あなたは何ができますか?」 |
Subscribeのサブモード:3つの配信スタイル
Subscribeはgの目玉機能で、さらに3つのモードがあります。
| モード | 動作 | 用途 |
|---|---|---|
| STREAM | データが変化したとき・または一定間隔でプッシュ | リアルタイム監視・障害検知 |
| ONCE | 1回だけデータを送って終了 | スナップショット取得 |
| POLL | クライアントが要求したときだけ送る | 従来型ポーリングとの互換 |
覚え方:「G線上のネット管理」
- Get → Get(そのまま取得)
- Set → Setting(設定変更)
- Subscribe → Stream(流し続ける)
- Capabilities → Check(できること確認)
「ゲット・セット・サブスク・ケーパビリティ」と唱えるだけ!
歴史と背景
- 2013年頃:Googleが社内ネットワーク管理の課題解決のためにgRPCを開発。大規模DCネットワークの管理自動化が動機
- 2015年:OpenConfigプロジェクト始動。Googleを中心にFacebook・Microsoft・Appleなど大手がネットワーク管理のベンダー非依存化を推進
- 2016年:gNMIの初版仕様(v0.1)が公開。OpenConfigのgithubリポジトリでオープンに開発
- 2018年:主要ベンダー(Cisco IOS XR・Juniper Junos・Arista EOS)が本格サポート開始。業界標準として定着
- 2019年:gNOI(gRPC Network Operations Interface)も登場。gNMIと組み合わせてOSアップグレードや証明書管理なども自動化可能に
- 2020年以降:クラウドネイティブなネットワーク管理スタックの標準コンポーネントとして定着。Telemetry収集基盤(gnmic・gNMIc)や可視化ツール(Grafana/Prometheusとの連携)が充実
gNMI vs 従来技術の比較
gNMIがどれだけ進化しているか、従来手法と比べてみましょう。
| 比較項目 | SNMP(旧来) | NETCONF(中間世代) | gNMI(現代) |
|---|---|---|---|
| 通信方式 | UDP(信頼性低) | SSH over TCP | HTTP/2(gRPC) |
| データ形式 | MIB(独自) | XML/YANG | Protobuf/YANG |
| 配信方式 | ポーリングのみ | ポーリング中心 | ストリーミング対応 |
| 速度 | 遅い | 中程度 | 高速・低遅延 |
| 設定変更 | 基本不可 | 可能 | 可能 |
| マルチベンダー対応 | 部分的 | OpenConfigで改善 | OpenConfigで統一 |
| 開発しやすさ | 難しい | やや複雑 | gRPCライブラリで簡単 |
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 6241 | NETCONF プロトコル仕様(gNMIの前世代にあたるネットワーク管理プロトコル) |
| RFC 7950 | YANG 1.1 データモデリング言語の仕様(gNMIのデータ定義に使用) |
| RFC 8040 | RESTCONF プロトコル仕様(gNMIと同世代のREST型ネットワーク管理API) |
| RFC 8342 | ネットワーク管理データストアのアーキテクチャ(NMDA)定義 |
※ gNMI本体はIETF RFCではなく、OpenConfigプロジェクト(github.com/openconfig/gnmi)で仕様管理されています。
関連用語
- gRPC — GoogleのHTTP/2ベース高速RPC通信フレームワーク。gNMIの通信基盤
- YANG — ネットワーク設定・状態をツリー構造で定義するデータモデリング言語
- NETCONF — gNMIの前世代にあたるXMLベースのネットワーク管理プロトコル
- OpenConfig — ベンダー非依存のネットワーク管理モデルを推進するオープンな取り組み
- SNMP — 旧来型のネットワーク監視プロトコル。gNMIが解決しようとした課題の元凶
- ストリーミングテレメトリ — 機器が自発的にデータをプッシュ配信する現代的な監視手法
- Protocol Buffers — Googleが開発した高速・軽量なデータシリアライゼーション形式。gNMIのデータ転送に使用
- ネットワーク自動化 — インフラ設定・管理をコードで自動化する取り組みの総称