CloudSigma APIとRRDtoolを使ってVM上のトラフィックを測定する方法

目次

CloudSigma APIとRRDtoolを使ってVM上のトラフィックを測定する方法

次の手順に従います。

最初のステップでは、指定したディレクトリに、監視するネットワークインターフェースのトラフィックを保存するデータベースを作成します。

rrdtool create your_file_name.rrd --step 300 \
    DS:traffic_in:COUNTER:600:0:100000000 DS:traffic_out:COUNTER:600:0:100000000 \
    RRA:AVERAGE:0.5:1:600 RRA:AVERAGE:0.5:6:700 RRA:AVERAGE:0.5:24:775 
    RRA:AVERAGE:0.5:288:797 \
    RRA:MAX:0.5:1:600 RRA:MAX:0.5:6:700 RRA:MAX:0.5:24:775 RRA:MAX:0.5:288:797

このコマンドを使用して、2つのデータソース(DS)を持つデータベースを作成します。ひとつは受信トラフィック用 (traffic_in)で、もうひとつは発信トラフィック用(traffic_out)です。次のパートでは、CloudSigma APIを使用してインターフェースの統計を取得します。まず、CloudSigma APIで認証するための文字列を取得します。

echo -n "username @ usermail: password '| base64

ここから、Base64のユーザー名とパスワードを含むテキスト文字列を取得します。次に、スクリプトでこれらを使用してデータを取得します。

#!/bin/bash
# Filename: update_script.sh
 
location="zrh"
authentication="Your_username_and_password_in_base64"
server="uuid_of_your_guest"
 
data=`curl -sLH "Authorization: Basic $authentication" -H "Content-type: application/json" https://$location.cloudsigma.com/api/2.0/servers/$server/?limit=0`
 
tx=`echo $data | jq  '.nics[] | .runtime | select(.interface_type=="public") | .io | .bytes_recv'`
rx=`echo $data | jq  '.nics[] | .runtime | select(.interface_type=="public") | .io | .bytes_sent'`
 
rrdtool update $server.rrd N:$rx:$tx

このスクリプトは、パブリックIPのインターフェースで送受信されたバイト数を取得し、rddファイルに保存します。txとrxの符号 は、パブリックインターフェース上のトラフィックを測定する方法に応じて反転することに注意してください。つまり、APIが20MBの受信(rx)をレ ポートした場合、仮想マシンは、20MBの送信(tx)をレポートします。次に例を示します。

API			        VM
tx 75 Mb ---------> rx 75 Mb
rx 20 Mb <--------- tx 20 Mb

統計のフローを取得するために、このコマンドを定期的に実行する必要があります。そのため、5分ごとに実行されて、データを供給するcronジョブをcrontab -eコマンドで作成します。それから、ファイルの最後に次の行を追加します。

* / 5 * * * * /path_to_update_script.sh

これにより、データがrrdファイルに供給されます。 最後に、rrdtoolを使用してデータをグラフ化したり、特定のデータ間隔でクエリしたりします。たとえば、グラフと過去7日間に消費された帯域幅を取得するとします。時間間隔を指定するには、次のパラメータを使用します --end now --start end-7d

server="uuid_of_your_guest"
rrdtool graph $server.png --imgformat=PNG \
    --end now --start end-7d \
    --title='Bandwidth used by my Server' \
    --base=1000 --height='120' --width='500' --alt-autoscale-max  --lower-limit='0' \
    DEF:rx=$server.rrd:traffic_in:AVERAGE \
    DEF:tx=$server.rrd:traffic_out:AVERAGE \
    CDEF:cdef_rx='rx,8,*' CDEF:cdef_tx='tx,8,*' \
    CDEF:rx_mb='rx,1000000,/' CDEF:tx_mb='tx,1000000,/' \
    AREA:cdef_rx#00CF00FF:'Inbound' LINE1:cdef_tx#002A97FF:'Outbound\n' \
    VDEF:rx_total=rx_mb,TOTAL VDEF:tx_total=tx_mb,TOTAL \
    GPRINT:rx_total:'Total rx\:%8.2lf MB' \
    GPRINT:tx_total:'Total tx\:%8.2lf MB'

これを使用して、VDEF関数で計算された帯域幅全体のサマリーを示すグラフを作成します。時間間隔をエポック時間(Unix時間)を使用して秒として計算するか、参照を指定して計算することができます。 最後に、RRDtoolのドキュメントと公式サイトを共有します。ここでは、このツールが提供するさらに多くの優れた機能について詳しく知ることができます。

https://oss.oetiker.ch/rrdtool/doc/index.en.html

ここでは、仮想マシンのトラフィックを測定する方法について説明しました。お役に立てば幸いです。

目次