指定回数実行スクリプト

あるMIB値を5秒間隔で20回取得して下さいという依頼がありました。しかも同時に複数のMIB値を取得、さらに違うコマンドも実行しろとか・・・手は2つしかないのでそんなに同時にできませんよ(・ω・;)

という事でMIB取得はスクリプトにて取得するよう書きました。

——————————
#!/bin/sh

i=1
while [ $i -le 20 ]
do
DATE=`date +%Y%m%d,%T`
SNMP=`snmpwalk -v2c -c public 10.57.9.51 UCD-SNMP-MIB::ssCpuIdle.0`
echo $DATE,$SNMP >> snmp_cpu_idle.txt
i=`expr $i + 1`
sleep 5

done

exit 0
——————————
標準MIBでCPUIdleを取得する方法をサンプルとして書いています。
複数SNMPを登録したい場合はSNMP=の下にSNMP2=とかSNMP3=とか複数作ってやって、echoで$SNMPの後ろにくっつけて下さい。
行を分けたかったらechoを複数行にするといいですが、連続で取得するので行を分けると分かりにくくなるのでお勧めしません。

zabbixデータ取得スクリプト

個人的なメモですが、zabbixのhistoryの値を手っ取り早く抽出する為にスクリプトを作りました。

itemidを入れて、tableを指定(historyを指定する事がほとんどですが、私の環境ではhistory_uintもあるので自分で指定する形にしました。historyに無かったらuintに探しに行くようにしてもいいですがあまり負荷をかけたくなかったのでシンプルなものにしました。

—–ここから—–
#!/bin/sh
#
#####################################################################
DATE=`date +%Y%m%d`

## pickup itemid select
echo ” please input id number ”

read id

echo ” please input table ”

read table

## id check
CHECK=`mysql –user=zabbix –password=zabbix zabbix -N -s -e ” select itemid fro
m items where itemid=$id ;”`
CHECK=`expr $CHECK + 0`

## exec
if [ $CHECK -gt 0 ] ; then
mysql –user=zabbix –password=zabbix zabbix -e “select from_unixtime(clock),val
ue from ${table} where itemid=${id} ;” > csvfile/${DATE}_${id}.csv
else
echo ” No id !!”
fi

exit

—–ここまで—–

時間指定とか期間指定とかもできますがとりあえずベースとしてシンプルなテンプレートにしてます。
あと当たり前ですがuserとpasswordとDBは自分の設定に合わせて下さい。
全部仮でzabbixにしてますけど。

zabbixアイテムでのCPU使用率の取得

linuxのCPU使用率をSNMPで取得しようとした際に特定のOIDで確認できるものではないので
計算を使って100からIdle値を引いた値で算出します。

まずは普通にCPUのIdleをOIDを登録します。
UCD-SNMP-MIB::ssCpuIdle.0(.1.3.6.1.4.1.2021.11.11.0)

ホスト:CPU使用率を取得したいホストを選択
説明:分かりやすく「CPUアイドル」とかにしてます
タイプ:SNMPv2エージェントを選択。ここは対向先のSNMPバージョンに合わせて下さい
SNMP OID:MIB値を登録。ここでは、UCD-SNMP-MIB::ssCpuIdle.0を取得しています
SNMPコミュニティ:設定しているSNMPのコミュニティ値。デフォルトはpublic
SNMPポート:SNMPのポートはデフォルトは161です
キー:全体を通したユニークな値を記載。判断する為の値で特に決まりはなさそうです
私はいつもOIDをそのまま入れてます
データ型:数値(整数)
データの形式:10進数
単位:%
乗数を使用:チェックなし
更新間隔(秒):ひとまず60にしてます。デフォルトは30
例外の更新間隔(秒):例外の更新間隔はありません
例外の更新間隔の作成:例外設定
ヒストリの保存期間(日):デフォルトは90日
トレンドの保存期間(日):デフォルトは365日
ステータス:有効
保存時の計算:なし
値のマッピングの使用:なし
アプリケーションの作成:なし
アプリケーション:なし

Idleの登録が完了したら続いて計算アイテムを登録します。

ホスト:先ほど設定したホストを選択
説明:分かりやすく「CPU使用率」とかにしてます
タイプ:計算を選択
式:100-last(.1.3.6.1.4.1.2021.11.11.0)
()内は先ほど登録したOIDを入れます。英表記で登録した場合は
100-last(“ssCpuIdle.0”)となります。
lastは直近の値。
データ型:数値(整数)
データの形式:10進数
単位:%
乗数を使用:チェックしない。
更新間隔(秒):30秒。
例外の更新間隔(秒):例外の更新間隔はありません
例外の更新間隔の作成:そのまま。
ヒストリの保存期間(日):90日
トレンドの保存期間(日):365日
ステータス:有効
保存時の計算:なし
値のマッピングの使用:なし
アプリケーションの作成:なし
アプリケーション:なし

これでCPU使用率が分かります。
使用率とIdleと2つ値をとるのでデータ量としては2倍になりますが、
元のIdle値は要らないのであれば保存期間をギリギリまで減らせば
多少は削減できると思います。
Idleは計算用だから1日あれば十分かも!?

—-追記—-
ついでにメモリの使用率についても下記のような計算で取得しています。

実メモリサイズ
UCD-SNMP-MIB::memTotalReal.0(.1.3.6.1.4.1.2021.4.5.0)
実メモリ空き容量:UCD-SNMP-MIB::memAvailReal.0(.1.3.6.1.4.1.2021.4.6.0)
バッファ使用量
UCD-SNMP-MIB::memBuffer.0(.1.3.6.1.4.1.2021.4.14.0)
キャッシュ使用量
UCD-SNMP-MIB::memCached.0(.1.3.6.1.4.1.2021.4.15.0)

計算部分
((last(.1.3.6.1.4.1.2021.4.5.0)-last(.1.3.6.1.4.1.2021.4.6.0)-last(.1.3.6.1.4.1.2021.4.14.0)-last(.1.3.6.1.4.1.2021.4.15.0))/last(.1.3.6.1.4.1.2021.4.5.0))*100

バッファやキャッシュ領域も空きとしています。
%にする為に使用量/最大値*100をしています。