APRESIA Technical Blog

Edgecore SONiCをZabbixの標準テンプレートにて監視してみる

はじめに

こちらにて、Edgecore Networks社がテストを実施した”Enterprise SONiC Distribution by Edgecore Networks, Inc.”(以降、"Edgecore SONiC"と記載)の無償ダウンロードを実施しています。このEdgecore SONiCをZabbixの標準テンプレートにて、どこまで監視可能か確認しました。結果としては、以下を監視することはできました。
・Linux OSとして収集可能な情報(CPU使用率やメモリ使用率)
・ネットワークインタフェースの状態監視
ただし、以下の情報は正しく収集できませんでした。
・中継トラフィックの統計情報(パケット、バイトカウンタ)
以降、確認した内容の詳細を共有いたします。

確認した条件

今回、動作確認をした条件は以下です。

ホワイトボックススイッチ Edgecore AS7326-56X
Edgecore SONiC Edgecore-SONiC_20210917_063104_ec202012_172.bin

※SONiCコミュニティの202012ブランチがベースです

Zabbixサーバ zabbix/zabbix-server-pgsql:alpine-5.4-latest

※Dockerイメージ

Zabbixエージェント zabbix-agent_6.0.4-1+debian10_amd64.deb

Zabbixサーバは、以下の手順に従い、インストールしました。本記事では、Zabbixサーバ 6.0をインストールしています。
https://www.zabbix.com/documentation/current/en/manual/installation/containers

ZabbixエージェントをSONiCにインストール

ZabbixエージェントをSONiCが起動しているホワイトボックススイッチにインストールします。SONiC 202012ブランチは、Debian 10ベースのため、Debian 10ベースのZabbixエージェントを使用します。こちらのサイトから"zabbix-agent_6.0.4-1+debian10_amd64.deb"をダウンロードして、ホワイトボックススイッチにコピーします。以下のようにapt updateを実施してから、Zabbixエージェントをホワイトボックススイッチにインストールします。

sudo apt update
sudo apt install ./zabbix-agent_6.0.4-1+debian10_amd64.deb

Zabbixエージェントの設定ファイル「/etc/zabbix/zabbix_agentd.conf」の以下の箇所を、ZabbixサーバのIPアドレスに変更します。

Server=127.0.0.1
ServerActive=127.0.0.1

また、以下をSONiCのホストネームに変更します。(今回の実験ではsonicを使用)

Hostname=Zabbix server

Zabbixエージェントの設定ファイルを更新したら、以下のコマンドにて、動作に反映させます。

sudo systemctl restart zabbix-agent

以下のようにZabbixエージェントがrunning状態になっていれば、Zabbixエージェントのインストールは完了です。

Zabbixサーバ側の設定

ここでは、ZabbixサーバにSONiCを登録します。まずは、SONiC用に新しいホストグループを作成します。以下の"Configuration" -> "Host groups"の画面の右上の"Create host group"を押します。

今回は、以下のように"sonic switches"のホストグループを作ります。

次に、ホストに、SONiCを追加します。以下のように、"Configuration" -> "Hosts"の画面にて、右上の"Create host"を押します。

SONiCを監視対象のホストに登録します。以下の図のように、Host nameはSONiCに設定したホスト名を登録し、Groupsは作成した"sonic switches"ホストグループを選択、IP addressにはZabbixサーバからアクセス可能なSONiCのIPアドレスを登録します。

ホストを追加すると、以下のようにホストの一覧の表示に、追加したsonicが表示されます。

次に、このsonicホストに監視テンプレートをリンクさせます。上記の一覧表示のsonicをクリックした後、以下のように"Templates"のタブを開きます。その上で、"Linux by Zabbix agent"を選択し、Updateボタンを押します。

以下のようにsonicホストに監視テンプレートがリンクされます。

監視テンプレートを追加した直後は、sonicの状態を取得できていません。ですので、以下のようにsonicを選択してから、Discovery rulesのタブを選択し、各discoveryをチェックした上で、"Execute now"を実行すると、sonicホストに対して各情報をZabbixサーバから取得する処理を走らせることができます。

Discoveryの処理を実行すると、以下のようにsonicホストのAvailabilityが緑色に変わります。これで、Zabbixサーバからsonicの各種情報を監視できている状態になりました。

 

Zabbixサーバから監視可能なEdgecore SONiCの情報の動作確認

ここからは、ZabbixサーバからEdgecore SONiCの状態をどこまで監視できるか確認していきます。Zabbixでは監視対象の情報を「アイテム」と呼びます。sonicホストを選択して、"Items"のタブを選択すると以下のように、どのようなアイテムを収集できるているか一覧で見ることが可能です。

Edgecore SONiCはLinux OSとしての操作もできるため、CPUやメモリの使用量などの情報をZabbixサーバから監視できます。これらの値を時系列データとして取得しGraphとして表示すると、以下のようになります。

また、Edgecore SONiCの物理ポート(Ethernet0など)は、Linux OSにてネットワークインタフェースとして認識されるため、これら物理ポートの状態もZabbixサーバにて監視できています。これらのアイテムの状態の変化によって、Zabbixサーバにて障害を検知することができます。この障害の検知条件をZabbixではトリガーと呼びます。sonicホストを選択した上で、"Triggers"のタブを選択すると、標準テンプレートにより登録されたトリガーを確認することができます。

試しに、物理ポートのリンク状態を変化させて、Zabbixサーバにて検知が可能かを確認します。以下のように、Edgecore SONiCにてEthernet0とEthernet1をリンクアップさせたとします。


その上で、Ethernet0とEthernet1の対向装置にて、リンクを落とします。標準テンプレートの初期設定では、物理ポートのリンク状態は、1分周期で監視しているため、リンクを落としてからしばらくして待つ必要がありますが、以下のようにリンク断を検知します。

次に物理ポートのカウンタの時系列データをグラフに表示して、動作確認をします。Ethernet0からEthernet1の方向に対して、iperfを使い10Mbpsの通信負荷をかけます。Edgecore SONiCのCLIでは以下のように、Ethernet0にて1297.57KB/s (約10Mbps)の通信負荷がかかっていることが確認できます。

一方、Zabbixサーバにて取得したEthernet0のカウンタをグラフ表示させると、以下のように、100bps程度の通信負荷しかかかっていない結果となりました。

これは、SONiCのCLIで確認できるカウンタ情報が、Linux OSが管理しているネットワークインタフェースのカウンタには反映されていない(Linux OSにまで上がってきた通信のみカウントしている)ため、Zabbixの標準テンプレートではSONiCの物理ポートに流れている通信のカウンタを取得できないことを示しています。もし、ZabbixでもSONiCの物理ポートのカウンタを収集したい場合は、独自の拡張テンプレートを用意して、SONiCの物理ポートのカウンタをZabbixサーバにプッシュさせる必要があります。

最後に

以上、Edgecore SONiCをZabbixの標準テンプレートで、どこまで監視が可能かを共有させていただきました。SONiCはホワイトボックススイッチの上で動作するネットワークOSですが、LinuxのCLIをそのまま実行することもできますので、SONiCに対してもZabbixサーバからLinuxサーバと同レベルの監視が可能であることを確認できました。カウンタなど、Zabbixの標準テンプレートにて監視できない情報もありましたが、SONiCにて独自のスクリプトを実行させることもできますので、独自で拡張したテンプレートを用意すれば、SONiCの任意の情報をZabbixにて監視させることもできます。他にもSONiCと連携可能なツールについて試した結果を、今後も共有していきたいと思います。