• EOS Network Telemetryの概要〜サードパーティ連携

 
 
Print Friendly, PDF & Email

粒度の細かい状態監視や適切なトラフィックエンジニアリング実現のためにテレメトリデータの活用が注目されています。

ARISTA EOSは、従来からテレメトリデータを取得するための機能を提供してきました。EOSスイッチ、スイッチ上のワークロードに着目したLANZ over gRPCやVMTracer, Container Tracerに代表される機能です。これらの機能に加えて、EOS4.17から粒度やネットワークワイドに着目したテレメトリ機能を強化しました。Network Telemetryです。今回は、EOS Network Telemetryの概要とサードパーティツールを活用したTeremetryデータの利活用について紹介します。

 

EOS Network Telemetry

Network Telemetryは、新たに実装されたEOS TerminAttrプロセスにより実現されます。TerminAttrは、EOS SysDBのデータ、レイヤ2、レイヤ3のテーブル情報(ARP, MAC, IP)、カウンタ情報、カーネルが管理するリソース情報(CPUやメモリ)を収集し、外部にストリーミングする機能を提供します。ストリーミングされたデータは、外部のリポジトリに蓄積されます。このデータをアプリケーションが解析します。SMNP MIBに限定されることなく、テレメトリデータを取得、蓄積してデータの再利用性を高めることで、見落としていた可能性のある状態情報を把握することが可能になります。Network Telemetryは、いわば、ネットワーク版のビッグデータ解析とも言えます。

ここからは、EOS Network Streamingを”ストリーミング”、”データ”、”蓄積と活用”の3つの視点で整理していきます。 

ストリーミングの仕組み

データのストリーミングは、TerminAttrプロセスが担います。トランスポートには、gRPCを利用します。現在、gNMI gRPCおよびOpenConfig gRPCの二つをサポートしています。一般的にストリーミングは、ストリーミング開始のきっかけによって二つの方式が検討されています。Dial Out方式とDial In方式です。
Dial Out方式では、スイッチがクライアントとして動作し、自ら指定したデータを外部のサーバにストリーミングします。Dial In方式では、スイッチがサーバとして動作し、外部のクライアントからストリーミングしたいデータパスにサブスクライブします。EOS TerminAttrは、Dial In方式のストリーミングをサポートしています。ARISTAは、EOS TerminAttrにサブスクライブメッセージを発行するためのサンプルクライアント(Ockafka)を公開しています。今回は、このクライアントを利用し、Kafkaにストリーミングする例を紹介します。

ストリーミングされるデータ

eAPIを介してEOSにアクセスする場合と同様のJSON形式のデータが得られます。JSON形式になりますので、外部のプラグラムにとっても極めて加工が容易なデータ形式です。既存のデータ解析システムにも取り込みが容易です。実際に出力されるデータは、以下のような形式になっています。なお、EOS4.18.1Fから順次、OpenConfigデータモデルにも対応していく予定です。

nt-image-2

データ蓄積と活用

EOS Network Streamingでは、二通りのデータ蓄積と活用を想定しています。CloudVision Telemetryとサードパーティソフトウェアの利用です。CloudVision Telemetryは、EOSがストリームするデータを解析する専用パッケージソフトウェアになります。EOSデバイスから外部のサーバを指定するだけで、ストリーミングが開始され、簡単にデータの蓄積が可能になります。サードパーティと連携するには、外部クライアントからTerminAttrにサブスクライブすることにより、ストリーミングが開始され、データの蓄積が可能になります。

最後にARISTAのNetwork Telemetryは、プラットフォーム非依存であることに触れておきます。EOSのNetwork Telemetryは、ソフトウェアで実装されています。EOSにTerminAttrプロセスさえポーティングですれば、スイッチに搭載されるシリコンの種類によらず、すべてのスイッチからストリーミングが可能になります。ハードウェアの制約を受けることはありません。TerminAttrプロセスは、EOS4.17からネイティブに実装されています。(/usr/bin/TerminAttr) EOS4.17以前のバージョンでもTerminAttrバイナリ(Extensionとして提供)をインストールすることで、ストリーミングが可能になります。(別途、Zライセンスが必要になります)

さて、ここからは、ARISTAが提供するサンプルクライアント(Ockafka)を介してサードパーティと連携する方法について紹介していきます。今回は、KafkaとELK Stack(Elasticsearch, Logstash, Kibana)を利用します。データは、継続してストアされてこそ、その再利用性の価値が高まります。大容量データの蓄積とネットワークレイヤを意識せず拡張性を確保することを想定してメッセージングミドルウェアの代表格Kafkaを利用しています。EOSとELK Stackの間にKafkaを適用、Kafka PublisherとしてOckafkaを利用します。Kafkaに蓄積されたデータのConsumerとしてLogstashを利用します。Logstashには、Kafkaのデータを取り込むためのプラグインが提供されており、Elasticsearch/Kibanaでの可視化が容易になっています。それでは、データのPublisher側(EOS)とConsumer側(Kafka/ELK Stack)に分けて必要な作業を紹介していきます。

サードパーティ連携事例

♦Consumer側(Kafka/ELK Stack)♦
今回は、OSX上にVirtualBoxで構築した仮想環境上で構築を行ないました。利用したOSとアプリケーションは、以下のとおりです。

 アプリケーション/OS  バージョン  
VirtualBox 5.1.18 Kafka/ELK Stack、vEOSを展開する仮想環境
vEOS 4.18.0F StreamningするEOS(仮想EOSイメージ) 
Ubuntu 16.10  Kafka/ELK Stackをホストするサーバ(VirtualBox上に展開)
Kafka  0.10.0.1  vEOS/OckafkaがPublishしたデータをストア
Zookeeper 3.4.9 Kafkaブローカ間の同期と設定を管理
Elasticsearch 5.4.0 LogstashがKafkaから取り込んだデータをインデックス化 
Logstash (*1) KafkaのデータをConsumeしてElasticsearchのためにデータを取得
Kibana 5.4.0 Elasticsearchのインデックスを可視化 
Ockafka (*2) vEOSにSubscribeするOpenConfigクライアント
Go (Golang) 1.6.3 Ockafkaの実行環境

(*1) https://github.com/aristanetworks/docker-logstash
(*2) https://github.com/aristanetworks/goarista/tree/master/cmd/ockafka

Ubuntuへのアプリケーションインストールは、Debian系のパッケージ管理ツールapt-getで実行しています。(各アプリケーションのバージョンは、インストール当時のバージョンになります) Ockafkaは、 ARISTAが提供しているOpenConfigクライアントです。Ockafkaの実行には、Go環境が必要になります。UbuntuにGoをインストールして、Go実行環境を整えます。Go環境が整えば、上記のリンクからクローン(git clone)で、Ockafkaがクローンされます。今回、Go環境は、以下のように整備しています。

~$ sudo apt-get install golang

Goがインストールされれば、goコマンドが有効になります。コマンドが有効になったらGoの実行環境を整え、GitからOckafkaをクローンします。クローンできれば、Ockafkaがコマンドとして利用可能になります。(環境変数については、それぞれの環境に合わせて整える必要があります)

 ~$ go version
  go version go1.6.3 linux/amd64
 
 ~$ export GOPATH=$HOME/gopath
 ~$ export PATH=$PATH:$HOME/go/bin:$GOPATH/bin 
 ~$ go get github.com/aristanetworks/goarista/cmd/ockafka 

 

♦Publisher側(EOS)♦
(a) EOS TerminAttrの起動
以下のパラメータを設定します。実行している内容は、TerminAttrバイナリのパス指定とgRPCポート指定とその起動(no shutdown)になります。

daemon TerminAttr
   exec /mnt/flash/TerminAttr-v0.16.3 -disableaaa -grpcaddr 172.20.10.9:6042
   no shutdown

(b) コントロールプレーンポリシ
EOSは、デフォルトでコントロールプレーンポリシを適用しています。gRPC用のポートを許可することが必要です。EOS CLIからデフォルトコントロールプレーンポリシを置き換えるか、bashからiptablesにgRPCポートを追加します。ここでは、bashからiptablesにポリシを追加することにします。

sudo iptables -A INPUT -p tcp --dport 6042 -j ACCEPT

(c) 起動確認
ここまで準備ができたら、bashからcurlを実行してgRPCポートの起動状況を確認していきます。

curl 127.0.0.1:6060/rest/Sysdb

[admin@vEOS-9 agents]$ curl 127.0.0.1:6060/rest/Sysdb
  {
  "Sysdb": {
  "_ptr": "/Sysdb/Sysdb"
  },
  "acl": {
  "_ptr": "/Sysdb/acl"
  },

(以下、出力省略)
このような情報が出力されれば、gRPCポートは起動しています。Ubuntu VMにインストールしたOckafkaからEOS Sysdbにサブスクライブしてみます。

(d) サブスクライブ
Ockafkaを利用して、EOSにサブスクライブしてストリーミングを開始します。実行している内容は、EOSデバイスの指定とKafka Brokerの指定および、サブスクライブするパスの指定になります。Ockafkaからのサブスクライブメッセージを受信したEOSは、指定されたパスに応じてデータのストリームを開始します。(ストリームさせたいパスについては、お近くのARISTAエンジニアまでお問い合わせください)

ockafka -addrs 172.20.10.13 -kafkaaddrs 172.20.10.13:9092 -subscribe /Sysdb/

users@ubuntu-1610:~$ ockafka -addrs 172.20.10.13 -kafkaaddrs 172.20.10.9:9092 -subscribe /Sysdb/

I0404 03:11:42.127025    4421 main.go:30] Connected to Kafka brokers at [172.20.10.9:9092]
 I0404 03:11:42.131825    4421 main.go:58] Initialized Kafka producer for 172.20.10.13
 I0404 03:11:42.132292    4421 client.go:43] Connected to 172.20.10.13:6042
 I0404 03:11:42.133484    4421 client.go:104] Sending subscribe request: subscribe:<subscription:<path:<element:"" element:"Sysdb" element:"" > > >

(以下、出力省略)

Ockafka を実行してサブスクライブが成功すると、上記のような情報が出力されます。ここまでの作業が完了すれば、Kibana上で以下のような出力が得られます。ここでは、インターフェースのカウンタ情報を出力しています。デフォルトでは、2秒ごとにカウンタ情報がストリームされていることを確認できます。

nt-image-1

取得したカウンタデータをKibanaの機能を活用して可視化してみます。従来、ポーリングで取得していたデータをさらに細かい単位で表示していくことが可能になります。

image-1s

image-200ms-2

このようにEOS Network TelemetryのデータをELKなどのオープンソースに投入することで、容易にデータを可視化することが可能になります。わたしたちが日々、運用するネットワーク上のワークロードは、従来と異なるトラフィックパターンを示しており、そのバースト性は、SNMPやSyslogだけでプロファイルすることが困難になってきています。EOS Telemetryは、現在の運用を補完する有用な選択肢になるはずです。

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: