Zabbixからクラウドのデータ転送量をリアルタイムに知る

クラウドのデータ転送量を知る

クラウドサービスの利用においてデータ転送量の把握は重要です。
課金の仕方も異なります。AWSの様にOutのデータのみ課金する場合もあれば、In, Out双方を課金の対象とする場合もあります。
大抵の事業者は過去のデータ転送量を月毎に確認する事ができます。

AWSの場合はCost Explorerを使用して過去のEC2インスタンスのデータ転送量を確認できます。
https://docs.aws.amazon.com/ja_jp/cost-management/latest/userguide/ce-what-is.html

AWS Budgetsを利用すれば予算を決めて、実際の使用量が1日3回アップデートされるので確認を行えます。
https://docs.aws.amazon.com/ja_jp/cost-management/latest/userguide/budgets-managing-costs.html

事業者によっては当月のデータ使用量の確認方法がない場合もあります。
それでRedHat/CentOS系にてリアルタイムにデータ転送量をZabbixを使ってモニタリングする方法をまとめました。

Zabbixはデフォルトで各ネットワークインターフェースが利用している帯域幅をリアルタイムに取得してグラフ化する機能がありますが、積算の転送量を取得するにはアイテムの追加が必要です。

/proc/net/dev

Redhat/CentOS7系では6系まで使われていたifconfigコマンドが非推奨となっています。代わりのip addrコマンドにはデータ転送量が表示されません。

それで/proc/net/devファイルを参照します。

このファイルは、各インターフェースが送受信したバイト数、着信/送信パケット数、エラー発生件数、パケットドロップ数などを表示します。

cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
eth0: 7831528364 23457810    0    0    0     0          0         0 14269217671 19826608    0    0    0     0       0          0
lo: 52557077891 423852292    0    0    0     0          0         0 52557077891 423852292    0    0    0     0       0          0

・第2カラム:受信データ(単位:byte)

受信データー ※eth0の例
cat /proc/net/dev | grep eth0 | awk ‘{ print $2 }’
7833099095

・第10カラム:送信データ(単位:byte)

送信データー ※eth0の例
cat /proc/net/dev | grep eth0 | awk ‘{ print $10 }’
14271328227

Zabbixに設定する

リモートコマンドの許可

zabbix-agentがシェルに対してコマンドを打てる様にリモートコマンドを許可します。

Zabbix5.0以降
sudo vi /etc/zabbix/zabbix_agentd.conf
AllowKey=system.run[*]
.
Zabbix5.0以前
sudo vi /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1
sudo systemctl restart zabbix-agent

UserParameterを設定する

vi /etc/zabbix/zabbix_agent.conf
UserParameter=net.if.in.byte[*],sudo /usr/bin/cat /proc/net/dev | grep $1 | awk ‘{ print $$2 }’
UserParameter=net.if.out.byte[*],sudo /usr/bin/cat /proc/net/dev | grep $1 | awk ‘{ print $$10 }’

UserParameterにて変数が複数存在する時は、awkの位置指定の為に$$の様に$を2つ使用します。

sudo systemctl restart zabbix-agent

テンプレートにLLDを使ってアイテムに設定する

普通にアイテムにシェルを追加する方法の場合、NICの数だけ設定が必要になります。
NICを自動で認識して汎用的に利用出来る様にする為に、テンプレートにアイテムのプロトタイプを作成してLLD(ローレベルディスカバリ)を使ってNICを自動で認識して監視する様にします。

今回はTemplate Module Linux network interfaces by Zabbix agentに既に登録されているNIC検出用キー:net.if.discoveryを利用します。
ネットワーク・インターフェース名称が{#IFNAME}としてマクロで利用出来ます。

すべてのテンプレート > Template Module Linux network interfaces by Zabbix agent > ディスカバリールール > アイテムのプロトタイプ

上記テンプレートはTemplate OS Linux by Zabbix agentとリンクしています。
上記テンプレートに送信/受信の各アイテムのプロトタイプを追加します。

out方向の送信パケット量検出:

名前:Interface {#IFNAME}: Byte sent
タイプ:Zabbixエージェント
キー:net.if.out.byte[{#IFNAME}]
データ型:数値(整数)
単位:B
監視間隔:1m
ヒストリの保存期間:7d (他のアイテムに合わせて変更)

タグを設定します。

in方向の受信パケット量検出:

名前:Interface {#IFNAME}: Byte receive
タイプ:Zabbixエージェント
キー:net.if.in.byte[{#IFNAME}]
データ型:数値(整数)
単位:B
監視間隔:1m
ヒストリの保存期間:7d (他のアイテムに合わせて変更)

タグを設定します。

ホストでデータを確認する

Linux監視のテンプレートが既にホストにアサインされている場合は、送受信の累積Byteが取得出来ているはずです。

※送受信合計データの作成や、ホストグループ全体の合算データ量の計算方法は追って記述します。

TwitterFacebookLinkedInHatenaPocketCopy Link