Reading Time: 2 minutes

はじめまして、ゾーホージャパンが提供するManageEngineのエンジニアをしております園部です。

突然ですが「連携してみたシリーズ」はじめました。よろしくお願いいたします!

記念すべき1本目は、「ZabbixにSNMPだけでなくNetFlow監視で得たトラフィックの内訳情報も表示するには?」と題しまして、「Zabbix」と永年無料版※も提供している弊社のフローコレクター「NetFlow Analyzer」を連携する方法を紹介していきたいと思います。

「Zabbixでトラフィックの内訳まで見たいよー」というというニーズは結構多いのではないかなと思います!

現在、会社内のルーターの一つを、Zabbixで監視しています。
Zabbixダッシュボードに表示しているウィジェットは、以下の通りです。

  1.  障害情報
  2.  ルーターのCPU使用率、メモリー使用率
  3.  ルーターの温度
  4.  ルーターの応答時間(Zabbixサーバー⇒ルーターへのPing応答時間)
  5.  インターフェースのトラフィック量(IN)
  6.  インターフェースのトラフィック量(OUT)

これらの監視はすべてSNMPを使用した監視をベース(計算も一部含む)に実現しています。
使用しているZabbixはバージョン3.4です。

ここに、フローコレクターからのデータを連携して表示することで、ZabbixでSNMP+NetFlow/sFlow監視を実現していきたいと思います!

私が試した連携方法を3種類ご紹介いたします。

目次

そもそもNetFlowやsFlowとは……

そもそも、NetFlowやsFlowとは何たるかというと、

トラフィックの詳細情報を収集するための技術です。アプリケーション/IPアドレス/ポート/プロトコルなどの情報を収集できます。

ということだそうで、これらの技術をまとめてxFlowと言ったりもします。

SNMPではわからない部分を調査したい。しかし常時パケットキャプチャしているわけにもいかない。

そこで、機器から取得可能なNetFlowやsFlowなどのフローデータを駆使して、解析や可視化を行い、より詳細な調査をしやすくしようというのが「フローコレクター」と呼ばれるツールです。

それでは実際に、Zabbixでトラフィックの内訳情報を表示する方法を模索していきたいと思います。

連携レベル0:ZabbixとNetFlow Analyzerダッシュボードを両方見る

ちなみに、NetFlow Analyzerのダッシュボードは下のような見た目です。

Zabbixとの連携を考えない状態の場合、NetFlow Analyzerの画面と、Zabbixの画面を同時に見ていくことになります。

※イメージ

…同時に開いて見ているのは若干手間です。

そして、ZabbixのSNMPでのトラフィック監視で異常を検知していた時間帯を確認し、NetFlow Analyzerで同時間帯に遡って見るのも、少々面倒です。

もう少しスマートな連携方法がないかを模索していきます。

連携レベル1:NetFlow AnalyzerウィジェットをZabbixに埋め込み

NetFlow Analyzerの「埋め込みウィジェット」機能を使用して連携を考えてみます。

まずNetFlow Analyzerのダッシュボードを開き、Zabbixのダッシュボードに表示させたいウィジェットを作成します。

作成したウィジェットの右上から[埋め込みウィジェット]アイコンをクリックします。
下記のようなiframe用のHTMLタグが表示されます。

<iframe src='https://netflow-analyzer:8080/embedView.do?type=widget&widgetID=5406&authKey=aaaaaaa-bb11-1234-5678-a1b2c3d4e5f6g7h8' frameborder='0' scrolling='no' width='687px' height='560px'/>

このHTMLの中から、「src=’http://~~~~~’」という部分を探し、中に記載されているURLをコピーします。

Zabbixに戻りまして、[ダッシュボードの変更] -> [ウィジェットの追加]からウィジェットタイプ[URL]を選択後、URLに、上記手順でコピーしたURLを入力。

ウィジェットを保存してみてみますと……Zabbixダッシュボードに、そのままNetFlow Analyzerのウィジェットを表示させることができます!

また、『ここからここへのどんな通信がどれくらい』ということも特定できたらと思うので、それを実現する「通信」ウィジェットもZabbixに表示させます。

いい感じ!

……しかし、「〇日の△時のトラフィックを調査したい」というような場合を考えてみますと、結局は「連携レベル0」と同じように、ZabbixとNetFlow Analyzerを両方開く必要が出てきます。

フローの詳細調査の場合はNetFlow Analyzerを直接参照したほうが良いですが、普段の簡単な状況確認と傾向把握くらいは、一画面でやりたいなー……

ということでもう一声!

連携レベル2:Zabbixの外部チェックでNetFlow Analyzer APIからフロー解析データを取得する

見出しの通りですが、NetFlow Analyzer APIでデータを取得するスクリプトを作成し、Zabbixの外部チェック機能を使用して定期的にスクリプト実行していけば、データをZabbixに統合できるのでは、と考えました。

そこで、以下のようなPHPのスクリプトを作成しました。

getAppData.php

#!/usr/bin/php
<?php
error_reporting(E_ALL & ~E_NOTICE);

// 引数1はインターフェースID,引数2でIN、OUTを指定
if (!$argv[2]) {
    echo 'Kindly specify arg.'.PHP_EOL;
}else if(($argv[2]!='IN') && ($argv[2]!='OUT')){
    echo 'Kindly specify a valid arg.'.PHP_EOL;
}else{
// 第1引数でNFAでのインターフェースIDを指定
    $devID = $argv[1];
// 第2引数でIN、OUTの指定
    $inout = $argv[2];

/* ******************************************************** */
    // 連携先NetFlow Analyzerの情報を入力してください!
    $nfaHost='hostname:port';
    $apiKey='abcdefghijklmn123456opqrstu7890';
/* ******************************************************** */

    $apiUrl = 'http://' . $nfaHost . '/api/json/v2/nfadevice/getAppData?apiKey=' . $apiKey . '&DeviceID=' . $devID . '&rows=10&chartType=line&TimeFrame=hourly&Type=Application&pageCount=1&tablegridviewtype=Chart&Data=' . $inout;

    // データの取得と変換
    $deviceList_json = @file_get_contents($apiUrl);
    $dataList = json_decode($deviceList_json, true);

    if (empty($dataList["result"])){
        echo 'Error..'.PHP_EOL;
    }else{
        for ($i=0; $i<10; $i++){
            echo $dataList["GraphData"][$i]["seriesname"].",".floatval($dataList["GraphData"][$i]["data"][4][1]).PHP_EOL;
        }
    }
}

引数1でインターフェースID、引数2で受信(IN)送信(OUT)を指定するようにしています。

ZabbixのフロントはPHPでできているので、Zabbixが動いているサーバーであれば、特に追加の環境構築等をしなくても、配置してそのまま動くはずです。

…ちなみに、弊社のManageEngine製品はJavaでできているので、「Javaを勉強しろ!」「Javaで作れ!」という声が社内から聞こえてきそうな気がしますが、気にしません。笑

上記のスクリプトをターミナル実行すると、次のような結果が取得されます。
指定したインターフェースで受信または送信されたトラフィック量(MB)をアプリケーション毎に上から10アプリ分表示しています。

# php getAppData 5000003 IN
https,5.85944324
http,0.22686416
Unknown_App,0.6233544
domain,0.19369668
m2mservices,0.27887601333333
ssh,0.0030425733333333
ms-wbt-server,0.00558116
microsoft-ds,0.0050142666666667
ndl-aas,0.030504293333333
hl7,0

アプリケーション名,トラフィック
※ここで出力されるアプリケーション名はのちの手順で使用しますので、トラフィックを計測したいアプリケーションの名前をひかえておきます。(☆)

このスクリプトでデータを取得できることを確認できましたので、こちらをZabbixにて外部実行し、結果を保存前処理してデータ取得します。

やったこと

  1. スクリプトをZabbixサーバーの所定のディレクトリに配置します。
    Zabbix3.4~の場合は、デフォルトでは「/usr/lib/zabbix/externalscripts」のようです。
  2. スクリプトに実行権限を付与します。Zabbixを実行しているユーザーが、getAppData.phpを実行できるように設定してください。
    #chmod 755 getAppData.php ※今回は適当ですが、ファイルのパーミッションは適切で最小限のものを付与することをお勧めします…!
  3. ZabbixのUIを操作します。
    [設定] -> [ホスト] -> 該当機器の[アイテム] -> [アイテムの作成]から、外部チェックでスクリプトを作成した通りに実行できるようにします。
    名前:任意の名前を付けます
    タイプ:外部チェック
    キー:getAppData.php[引数1,引数2]
    データ型:テキスト
    監視間隔:NetFlow Analyzer側の設定に合わせると効率が良い
    ヒストリの保存期間:1d ※

    ※後に作成する依存アイテムの保存期間を長く設定すればデータを長期保存できます。このアイテムの保存期間は短く設定し、データベースの肥大化を防ぎます。

  4. 続いて、Zabbixにてアイテムを追加します。手順3で作成したアイテム行の左の[…]から[依存アイテムの作成]を選択し、アイテムを作成します。

    名前:任意の名前を付けます
    タイプ:依存アイテム
    キー:任意の一意の名前
    マスターアイテム:手順3で作成したアイテムが指定されていることを確認
    データ型:数値(浮動小数)
    ヒストリの保存期間:トラフィックデータを保存したい期間を入力

  5. 画面上部の[保存前処理]に移動し、保存前処理を[追加]してから、以下のように設定します。

    名前:正規表現
    パターン:(アプリケーション名,)(.*)
    出力:\2
    失敗時のカスタマイズにチェック -> [エラーを設定]:0アプリケーション名には、スクリプト実行で出力されたアプリケーション名(当記事少し上の(☆)箇所のアプリケーション名))を指定します。Zabbixの設定画面 - NetFlow AnalyzerとZabbix連携
    スクリプトの出力からhttpsのトラフィックを取得して保存するアイテムの例

これで、保存前処理で指定したアプリケーション名のトラフィックデータを取得するアイテムが作成されました。

他のアプリケーションのトラフィックデータを取得するには、同様にして依存アイテムを作成します。

その後、必要に応じてグラフを作成。
([ホスト] -> 該当のルーターの[グラフ] -> [グラフの作成])

こちらを、ダッシュボードに配置してみます。

これで無事、トラフィックの内訳データをZabbixと連携することに成功しました!
スクリプトで取得したデータについては、Zabbixのデータと同じデータベース上に保存されますので、のちにデータをさかのぼって調査する必要が出てきたときにも、画面を行ったり来たりする面倒くささは解消されるかと思います。

まとめ

  • SNMPでの監視に合わせて、フローコレクターのデータを合わせることで、より詳細なトラフィックの監視、調査が可能となる
  • Zabbix自体にはフローコレクターの機能はないため、フローコレクターとの連携が必要

SNMPを使用したネットワーク機器監視だけでも多くのことができますが、より詳細な原因把握まで行うのは困難です。

そこで、NetFlow AnalyzerをはじめとしたフローコレクターをZabbixと連携することにより、

「この送信元からこの宛先の通信量が多いので、ネットワークのボトルネックになっている!」

であったり、

「SNMPで出てきたトラフィック総量のうち、何%がSSHの通信だった」
「この時間にこんな量のSSHトラフィックがあるのはおかしい!」

というセキュリティ的な問題を発見できる助けにもなります。

是非既にあるネットワーク監視にプラスしてフローコレクターの監視を実施いただき、快適なネットワーク監視ライフを体感してみてください!

▼▼ 関連記事 ▼▼

YAMAHAのルーター「RTX」を流れるトラフィックの内訳を可視化する方法とは?

▼▼ 【連携してみた】シリーズ ▼▼
Zabbixでネットワーク装置のコンフィグも管理する方法とは?【連携してみた02】

関連リンク

Zabbix公式ホームページ
Zabbixのダウンロードはこちら
NetFlow Analyzer公式ホームページ
NetFlow Analyzerのダウンロードはこちら
NetFlow Analyzer APIはこちら
NetFlow Analyzer製品概要資料のダウンロードはこちら

※永年無料版の利用をご希望の方は、30日間フル機能ご利用いただける「評価版」をダウンロードしてください。30日が過ぎると自動的に2インターフェースまで監視可能の永年無料版となります。


フィードバックフォーム

当サイトで検証してほしいこと、記事にしてほしい題材などありましたら、以下のフィードバックフォームよりお気軽にお知らせください。