クラウドのデータ転送量を知る
クラウドサービスの利用においてデータ転送量の把握は重要です。
課金の仕方も異なります。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ファイルを参照します。
このファイルは、各インターフェースが送受信したバイト数、着信/送信パケット数、エラー発生件数、パケットドロップ数などを表示します。
・第2カラム:受信データ(単位:byte)
・第10カラム:送信データ(単位:byte)
Zabbixに設定する
リモートコマンドの許可
zabbix-agentがシェルに対してコマンドを打てる様にリモートコマンドを許可します。
UserParameterを設定する
UserParameterにて変数が複数存在する時は、awkの位置指定の為に$$の様に$を2つ使用します。
テンプレートに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が取得出来ているはずです。
※送受信合計データの作成や、ホストグループ全体の合算データ量の計算方法は追って記述します。