■前回のあらすじ。
Debian Lenny + MRTGでCPU、メモリ、ディスク監視
http://d.hatena.ne.jp/labunix/20120110
■snmptranslateのツリーから「miblist.txt」を作成
$ snmptranslate -Tp | grep Integer | \
sed s/" "/"\n"/g | sort | uniq | \
grep -v "Integer\|\-\||" | awk -F \( '{print $1}' > miblist.txt
$ wc -l miblist.txt
160 miblist.txt
■ループを使ってごっそり取得。
$ for list in `cat miblist.txt`;do snmpwalk -v 1 -c public localhost ${list};done > miblist.check
■使えないと思われる最後の値が「0」のリスト
$ grep " 0\$" miblist.check > zero_miblist.txt
■使えると思われる最後の値が「0」以外のリスト
$ grep -v " 0\$" miblist.check > use_miblist.txt
■「essy_miblist.txt」として保存、一覧する
$ awk -F\. '{print $1}' use_miblist.txt | grep -v "Index\|End" | uniq | sed s/".*::"//g > easy_miblist.txt
$ column -c 100 easy_miblist.txt
dskAvail inetCidrRouteMetric3 memTotalReal
dskMinPercent inetCidrRouteMetric4 memTotalSwap
dskMinimum inetCidrRouteMetric5 mteResourceSampleMinimum
dskPercent ipCidrRouteMetric2 nsModuleTimeout
dskPercentNode ipCidrRouteMetric3 ssCpuIdle
dskTotal ipCidrRouteMetric4 ssCpuSystem
dskUsed ipCidrRouteMetric5 ssCpuUser
hrMemorySize ipDefaultTTL ssIOReceive
hrProcessorLoad ipReasmTimeout ssIOSent
hrSWRunPerfCPU ipv6IpDefaultHopLimit ssSwapIn
hrSWRunPerfMem laLoadInt ssSwapOut
hrStorageAllocationUnits logMatchMaxEntries ssSysContext
hrStorageSize memAvailReal ssSysInterrupts
hrStorageUsed memAvailSwap tcpConnLocalPort
hrSystemInitialLoadDevice memBuffer tcpConnRemPort
ifMtu memCached tcpMaxConn
ifNumber memMinimumSwap tcpRtoMax
inetCidrRouteMetric1 memShared tcpRtoMin
inetCidrRouteMetric2 memTotalFree udpLocalPort
■ディスクIOを知りたいが、OBJECTの名前が正しいか不安。。。
$ vmstat | cut -c 45-56
-----io----
bi bo
8 9
$ grep IO easy_miblist.txt
ssIOReceive
ssIOSent
■データを取ってみる
$ snmpwalk -v 1 -c public localhost ssIOSent
UCD-SNMP-MIB::ssIOSent.0 = INTEGER: 43 blocks/s
$ snmpwalk -v 1 -c public localhost ssIOReceive
UCD-SNMP-MIB::ssIOReceive.0 = INTEGER: 0 blocks/s
■各OIDと一つ上位のOIDを引いてみる。
$ snmptranslate -On -IR ssIOReceive
.1.3.6.1.4.1.2021.11.6
$ snmptranslate -On -IR ssIOSent
.1.3.6.1.4.1.2021.11.5
$ snmptranslate -Tp .1.3.6.1.4.1.2021.11 | head -1
+--systemStats(11)
■データを取って見た際の「::」の左側がMIBファイルの名前。
debianでは「/usr/share/snmp/mibs」配下にある。
以下の通り期待している値であることが分かる。
$ grep -A 26 ssIOSent /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
ssIOSent OBJECT-TYPE
SYNTAX Integer32
UNITS "blocks/s"
MAX-ACCESS read-only
STATUS deprecated
DESCRIPTION
"The average amount of data written to disk or other
block device, calculated over the last minute.
This object has been deprecated in favour of
'ssIORawSent(57)', which can be used to calculate
the same metric, but over any desired time period."
:= { systemStats 5 }
ssIOReceive OBJECT-TYPE
SYNTAX Integer32
UNITS "blocks/s"
MAX-ACCESS read-only
STATUS deprecated
DESCRIPTION
"The average amount of data read from disk or other
block device, calculated over the last minute.
This object has been deprecated in favour of
'ssIORawReceived(58)', which can be used to calculate
the same metric, but over any desired time period."
:= { systemStats 6 }
■最大値が必要。
※ファイルシステム、ディスクサイズによって異なる。
参考:ext3フォーマット時のブロックサイズ
http://blog.hirokikana.com/?p=104
$ whereis -b dumpe2fs
dumpe2fs: /sbin/dumpe2fs
■最大値とブロックサイズを得る。
$ sudo /sbin/dumpe2fs /dev/sda1 | grep "Block size\|Block count"
dumpe2fs 1.41.3 (12-Oct-2008)
Block count: 12207384
Block size: 4096
■mrtg.cfg用のチェック
$ snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.11.5.0
UCD-SNMP-MIB::ssIOSent.0 = INTEGER: 2 blocks/s
$ snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.11.6.0
UCD-SNMP-MIB::ssIOReceive.0 = INTEGER: 0 blocks/s
■「mrtg.cfg」に追加
dumpe2fs 1.41.3 (12-Oct-2008)
12207384
echo '
# IO Sent/Reveive
Target[DiskIO]: .1.3.6.1.4.1.2021.11.5.0&.1.3.6.1.4.1.2021.11.6.0:public@localhost
MaxBytes1[DiskIO]: '${BLOCKMAX}'
MaxBytes2[DiskIO]: '${BLOCKMAX}'
Options[DiskIO]: gauge,absolute,growright
Unscaled[DiskIO]: dwmy
Title[DiskIO]: Disk Sent / Reveive
PageTop[DiskIO]: <H1>Disk Sent / Reveive</H1>
YLegend[DiskIO]: Disk Sent / Reveive(Blocks/s)
ShortLegend[DiskIO]: (Blocks)
Legend1[DiskIO]: Disk Sent Blocks
Legend2[DiskIO]: Disk Reveive Blocks
LegendI[DiskIO]: Sent
LegendO[DiskIO]: Reveive
' >> /etc/mrtg.cfg
add DiskIO
■mrtgコマンドでhtml作成
$ sudo LANG=C mrtg
2012-01-11 22:50:29, Rateup WARNING: /usr/bin/rateup could not read the primary log file for diskio
2012-01-11 22:50:29, Rateup WARNING: /usr/bin/rateup The backup log file for diskio was invalid as well
2012-01-11 22:50:29, Rateup WARNING: /usr/bin/rateup Can't remove diskio.old updating log file
2012-01-11 22:50:29, Rateup WARNING: /usr/bin/rateup Can't rename diskio.log to diskio.old updating log file
$ sudo LANG=C mrtg
2012-01-11 22:50:32, Rateup WARNING: /usr/bin/rateup Can't remove diskio.old updating log file
$ sudo LANG=C mrtg
■トップページの更新
$ sudo indexmaker /etc/mrtg.cfg --columns=1 --output /var/www/mrtg/index.html
■ログのチェック
※「tail -f」では無いことに注意
$ tac /var/www/mrtg/diskio.log | tail -5
1326289500 0 0 0 0
1326289800 0 0 0 0
1326290078 15 40 38 46
1326290102 65 46 65 46
1326290102 65 46
■例えばメモリキャッシュは?
$ grep -i cache easy_miblist.txt
memCached
$ snmpwalk -v 1 -c public localhost memCached
UCD-SNMP-MIB::memCached.0 = INTEGER: 33564 kB
■メモリキャッシュをクリアするのに適したタイミングを得る。
※恐らくvmplayerを終了したらクリアするべきだろうと思う。他のタイミングが無いかも確認したい。
Linux のメモリキャッシュをクリアする
http://futuremix.org/2009/09/clear-linux-memory-cach
$ sudo sysctl -a 2> /dev/null | grep ^vm | grep cache
vm.drop_caches = 1
vm.vfs_cache_pressure = 100
■指定するべき値は「man proc」にある。
1 -> ページキャッシュ解放
2 -> ダーティキャッシュ、inode解放
3 -> ページキャッシュとダーティキャッシュ、inode解放
$ env LANG=C man proc | grep -A 11 '/proc/sys/vm/drop_caches '
/proc/sys/vm/drop_caches (since Linux 2.6.16)
Writing to this file causes the kernel to drop clean caches,
dentries and inodes from memory, causing that memory to become
free.
To free pagecache, use echo 1 > /proc/sys/vm/drop_caches; to
free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 >
/proc/sys/vm/drop_caches.
Because this is a non-destructive operation and dirty objects
are not freeable, the user should run sync(8) first.
■上記から、あるタイミングに以下のコマンドを実行したい。
※「sync」を3回やるのは古い人。
echo "[Before]"
free
sync
sync
sync
sleep 1
sysctl -w vm.drop_caches=3
echo "[After]"
free
■「キャッシュ」はメモリの一部。よって以下の計算式で暫定の最大値を得る。
※メモリ空き容量、スワップメモリの空き容量と併せて見る前提であれば、必要充分な精度だと思う。
★以下の計算式から整数値を取り出す(小数点以下切捨て & 2^10の倍数)
$ free | head -1 | sed s/^/"header:"/ | head -1 | awk '{print "( "$2" - ( "$3" + "$6" + "$7" ) )/1024/1024"}'
( total - ( used + buffers + cached ) )
★暫定計算
$ CACHEMAX=$(free | grep Mem | awk '{print ($2-$3+$6+$7)/1024/1024}' | awk -F\. '{print $1*1024*1024}')
$ echo $CACHEMAX
■バッファ値も取れるので、併せてグラフ化する。
$ grep -i "buffer\|cache" use_miblist.txt
UCD-SNMP-MIB::memBuffer.0 = INTEGER: 24276 kB
UCD-SNMP-MIB::memCached.0 = INTEGER: 30380 kB
■OIDチェック
$ snmptranslate -On -IR memBuffer
.1.3.6.1.4.1.2021.4.14
$ snmptranslate -On -IR memCached
.1.3.6.1.4.1.2021.4.15
■mrtg.cfg用チェック
$ snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.4.14.0
UCD-SNMP-MIB::memBuffer.0 = INTEGER: 71776 kB
$ snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.4.15.0
UCD-SNMP-MIB::memCached.0 = INTEGER: 106664 kB
■「mrtg.cfg」に追加
echo '
# Used Cache/Buffer
Target[cache]: .1.3.6.1.4.1.2021.4.14.0&.1.3.6.1.4.1.2021.4.15.0:public@localhost
MaxBytes1[cache]: '${CACHEMAX}'
MaxBytes2[cache]: '${CACHEMAX}'
Options[cache]: gauge,absolute,growright
Unscaled[cache]: dwmy
Title[cache]: Used Cache/Buffer
PageTop[cache]: <H1>Used Cache/Buffer</H1>
YLegend[cache]: Used Cache/Buffer(Bytes)
ShortLegend[cache]: (Bytes)
Legend1[cache]: Used Cache Bytes
Legend2[cache]: Used Buffer Bytes
LegendI[cache]: Cache
LegendO[cache]: Buffer
' >> /etc/mrtg.cfg
add Used Cache/Buffer
■mrtgコマンドでhtml作成
2012-01-11 23:40:29, Rateup WARNING: /usr/bin/rateup could not read the primary log file for cache
2012-01-11 23:40:29, Rateup WARNING: /usr/bin/rateup The backup log file for cache was invalid as well
2012-01-11 23:40:29, Rateup WARNING: /usr/bin/rateup Can't remove cache.old updating log file
2012-01-11 23:40:29, Rateup WARNING: /usr/bin/rateup Can't rename cache.log to cache.old updating log file
2012-01-11 23:40:31, Rateup WARNING: /usr/bin/rateup Can't remove cache.old updating log file
# LANG=C mrtg
■トップページの更新
$ sudo indexmaker /etc/mrtg.cfg --columns=1 --output /var/www/mrtg/index.html
■ログのチェック
※「tail -f」では無いことに注意
$ tac /var/www/mrtg/cache.log | tail -5
1326292500 0 0 0 0
1326292800 0 0 0 0
1326292830 2398 3555 71960 106668
1326292832 71960 106668 71960 106668
1326292832 71960 106668