阿骁兄復出...無以為敬.
RRDTOOL sample of DNS Response monitor
RRDTOOL 教學請參考 netman 兄網站
http://phorum.study-area.org/viewtopic.php?t=18496
不在贅述 :wink:
------------------------------------------------------------------------
1. Create RRDFILE
rrdtool create /root/study/dnsquery.rrd -s 300 \
DS:a:GAUGE:600:-100:10000 \
DS:b:GAUGE:600:-100:10000 \
DS:c:GAUGE:600:-100:10000 \
DS:d:GAUGE:600:-100:10000 \
DS:ns:GAUGE:600:-100:10000 \
DS:f:GAUGE:600:-100:10000 \
DS:g:GAUGE:600:-100:10000 \
RRA:AVERAGE:0.5:1:14400 \
RRA:AVERAGE:0.5:6:4800 \
RRA:AVERAGE:0.5:24:1200 \
RRA:AVERAGE:0.5:288:600 \
RRA:MAX:0.5:1:14400 \
RRA:MAX:0.5:6:4800 \
RRA:MAX:0.5:24:1200 \
RRA:MAX:0.5:288:600
建一個 RRDFILE 來存放 DNS 的回應時間值,數值介於 -100~10000 msec 間
RRA 表示存於最近 50 天5分鐘資料....100天 30 分資料,
100 天 2 小時資料,及最近 600 天的一天平均值(AVERAGE)及
最大值(MAX)
2. DNS rrdtool update/graph
#!/bin/sh
RRD_PATH="/root/study/dnsquery.rrd"
image_path="/www/htdocs/snmp.enum.org.tw/html"
host="a.dns.tw b.dns.tw c.dns.tw d.dns.tw ns.twnic.net e.dns.tw f.dns.tw"
rrd_data=""
for dns in $host
do
msec=`/bin/dig @$dns . ns | grep 'Query time' | sed -e 's/.*: \(.*\) [a-
z].*/\1/'`
if [ -z $msec ];then
msec=-100
echo "$dns ?#93;有回應,請您注意"| mail your_email@domain -s "$dns 無回應"
fi
if [ $msec -ge 3000 ];then
msec=-100
echo "$dns 回應遲鈍($msec),請您注意"| mail your_email@domain -s "$dns 無回應"
fi
rrd_data="$rrd_data:$msec"
done
now=`date +%s`
echo $rrd_data
rrdtool update $RRD_PATH ${now}${rrd_data}
#--------------- RRD graph ----------------------------
# CDEF 段主要在用白色蓋掉下面的 AREA
# 以讓每個主機都能有一個 range 顯示 response time(msec)
time="day week "
for t in $time
do
rrdtool graph /www/htdocs/snmp.enum.org.tw/dnsquery-$t.jpg \
-t "DNS Query Response Time (${t}ly)" \
-w 600 -h 250 -s `date -d "-1 $t" +%s` -v "msec" -X b \
-up-limit=1000 \
DEF:a=dnsquery.rrd:a:MAX \
DEF:b=dnsquery.rrd:b:MAX \
DEF:c=dnsquery.rrd:c:MAX \
DEF:d=dnsquery.rrd:d:MAX \
DEF:ns=dnsquery.rrd:ns:MAX \
DEF:f=dnsquery.rrd:f:MAX \
DEF:g=dnsquery.rrd:g:MAX \
CDEF:z0=-1,a,b,c,d,ns,f,g,+,+,+,+,+,+,7,/,* \
CDEF:a1=a,3000,+ \
CDEF:a11=3000,a,a,-,+ \
CDEF:b1=b,2500,+ \
CDEF:b11=2500,a,a,-,+ \
CDEF:c1=c,2000,+ \
CDEF:c11=2000,a,a,-,+ \
CDEF:d1=d,1500,+ \
CDEF:d11=1500,a,a,-,+ \
CDEF:ns1=ns,1000,+ \
CDEF:ns11=1000,a,a,-,+ \
CDEF:f1=f,500,+ \
CDEF:f11=500,a,a,-,+ \
CDEF:g1=g, \
AREA:z0#c0c0c0:"Average Response Time(msec)" \
COMMENT:"\n" \
AREA:a1#ff0000:"a.dns.tw" \
GPRINT:a:MAX:"%12.0lf" \
GPRINT:a:AVERAGE:"%12.0lf" \
GPRINT:a:MIN:"%12.0lf" \
GPRINT:a:LAST:"%12.0lf\n" \
AREA:a11#ffffff \
AREA:b1#800000:"b.dns.tw" \
GPRINT:b:MAX:"%12.0lf" \
GPRINT:b:AVERAGE:"%12.0lf" \
GPRINT:b:MIN:"%12.0lf" \
GPRINT:b:LAST:"%12.0lf\n" \
AREA:b11#ffffff \
AREA:c1#00ff00:"c.dns.tw" \
GPRINT:c:MAX:"%12.0lf" \
GPRINT:c:AVERAGE:"%12.0lf" \
GPRINT:c:MIN:"%12.0lf" \
GPRINT:c:LAST:"%12.0lf\n" \
AREA:c11#ffffff \
AREA:d1#008000:"d.dns.tw" \
GPRINT:d:MAX:"%12.0lf" \
GPRINT:d:AVERAGE:"%12.0lf" \
GPRINT:d:MIN:"%12.0lf" \
GPRINT:d:LAST:"%12.0lf\n" \
AREA:d11#ffffff \
AREA:ns1#0000ff:"ns.twnic.net" \
GPRINT:ns:MAX:"%8.0lf" \
GPRINT:ns:AVERAGE:"%12.0lf" \
GPRINT:ns:MIN:"%12.0lf" \
GPRINT:ns:LAST:"%12.0lf\n" \
AREA:ns11#ffffff \
AREA:f1#000080:"f.dns.tw" \
GPRINT:f:MAX:"%12.0lf" \
GPRINT:f:AVERAGE:"%12.0lf" \
GPRINT:f:MIN:"%12.0lf" \
GPRINT:f:LAST:"%12.0lf\n" \
AREA:f11#ffffff \
AREA:g1#ff8040:"g.dns.tw" \
GPRINT:g1:MAX:"%12.0lf" \
GPRINT:g1:AVERAGE:"%12.0lf" \
GPRINT:g1:MIN:"%12.0lf" \
GPRINT:g1:LAST:"%12.0lf\n" \
COMMENT:"note:<0 means no response\n"
done
結果:
一般人可能感覺很難,但熟rrdtool 就沒有什麼難了,也可以用這套方法
畫出主機的 ping , Web 的反應速度等,用一張圖就可以表示出 N 個數值
結語:
若你照抄 sample ,只要 rrdtool 有裝起來,一定可以 work 的,但請記得
rrdtool create 中的主機數和 script 中的主機數要成對應
記得將你的主機寫上,不是寫我的
rrdtool 比mrtg 難學,但好用很多,沒有研究精神建議不要用,你可以用這個
觀念直接用在 mrtg
mrtg 可直接使用 threshold check 做值的範圍檢查,觸動(Ex:=0 或 >;3000) , 就可以 call alert script, rrdtool 不行,所以要自己寫
阿骁 回复于:2004-10-12 20:56:08
收下大礼! ^_^ 不懈学习之!
abel 回复于:2004-10-12 21:05:35
我有時間再寫二個禮物給您...僅以此三禮
恭祝您回任呀 ...
先出題目...有興趣的人想想,下星期才有空寫 ...
DNS Query/Reply 流量統計~超強版
DNS CPU/Memory Usage 統計~ SNMP 版...
都是從 remote 直接做查詢即可知哦....
阿骁 回复于:2004-10-12 21:18:51
:em09: :em09: :em09: 期待噢!
abel 兄慢慢写没关系,大家也需要时间消化的! ^_^
wingger 回复于:2004-10-12 21:18:51
哇。。。学习,致敬,谢谢 :em02: :em02: :em02:
屠龙 回复于:2004-10-12 21:23:13
大侠风凡呀,感动得想哭,不要理我,让我找个地方好好大哭一场!555....5......... :em10:
starbear 回复于:2004-10-13 23:14:27
我也哭泣中.....因为实在有难度,消化不良了。。。。
skylove 回复于:2004-10-14 11:06:21
第三问我有用mrtg做过类似的。
不过我是用sar来查询的,没有为机器开snmp。
很久前写的了,地址在
http://www.yesky.com/SoftChannel/72356686970486784/20031030/1740516.shtml(2003-10-30发表的,其中有介绍mrtg与snmp,sar+shell的配合来取得网卡,cpu,内存,风扇转速,远程网络设备)
简单改改大概就能满足第三份答案的要求了~~~不知道abel老师能打个及格分不 ??
恭喜阿骁上任
abel 回复于:2004-10-15 17:57:10
skylove 兄寫的文件相當好! :em02:
不過重點是 "Remote" 的某個 Process 所佔的 CPU/Memory 用量
題意有點不一樣哦...本機可能很好解,但 Remote 對一般人而言,
就會很費事...
能 remote monitor 才是最重要的,不是嗎 ?
skylove 兄,有興趣嗎!? 交給您來研究 ?
答案在 net-snmp 的官網上都有哦
(不是完整答案,而是 snmpd.conf 及configure 值,及使用的 MIBS 等)
skylove 回复于:2004-10-16 13:54:44
ok,正好我这段时间要把学校的一些服务都做起来,而正如您说的,是某个process的cpu/memory而不是整体的,有点难度了。
ok,我现在就去snmpd的老家去看看~~~~
skylove 回复于:2004-10-16 22:19:19
http://net-snmp.sourceforge.net/tutorial/mrtg/index.html
这里有查到取system整体的cpu,内存和磁盘io的。。。
单独进程的没找到。。。。。。。
难道是用ps a u 这样的命令来写shell抓?还是mib已经有?? 我没查到。。。。。
skylove 回复于:2004-10-16 22:38:23
刚刚有查到mib里有个
HOST-RESOURCES-MIB
看了看,似乎可能性最大的就是用它了。
今天周末,偶看看连续剧去,明天确认一下
abel 回复于:2004-10-16 22:45:26
引用:还是mib已经有?? 我没查到。。。。。
正解! 沒有錯, MIBs 巳有,您只要將 snmpd.conf 的設定語法都看懂
就沒有問題,不然就得在 complier 時做指定,就可以在 snmp 中找到
某個 process 是否活在 遠端主機串,活著的狀況是 S/R/Z ..等都可以知道
跑了多久,用了多少 CPU/MEMORY 都可以知道
當然,您也可以用 snmpd.conf 中 以exec 方式來做, 但顯然畫蛇添足...
且如果您要監測別的服務就得再弄一個 exec,且不同的 OS 做法有時又會有異
當然,您也可以用 ssh/expect 等做 remote login,執行一個 command
將結果導回來,但還是多少會受 OS 影響(ps 指令在不同的 OS 常有不同的參數)
(有的 OS 可能 /proc 下格式多少都會有點差異)
sky 兄有心可再看看...,我想信對您的功力一定大有助益,重要的是將
net-snmpd 的 configure --help 的功能研究一下,及 snmpd.conf 的語法
您會發現很多您以前不知道的東西,或說 "CU" 文件從沒有人提過的東西也很多
skylove 回复于:2004-10-16 23:02:22
好的,偶继续啃~~~~~娱乐放两旁,学习放中间~~~
skylove 回复于:2004-10-16 23:37:11
在看man snmpd.conf的时候看到
DISMAN-EVENT-MIB中的
monitor [OPTIONS] NAME EXPRESSION
能根据一定的条件取得process的使用内存了。。。但依然没查到cpu的取得方式。。。继续搜索ing
skylove 回复于:2004-10-16 23:52:27
把snmpd.conf基本看完了,只查到
proc NAME [MAX=0] [MIN=0]
能找进程存在与否
monitor [OPTIONS] NAME EXPRESSION
能找到进程的内存。。。。。其中也有个sysUpTimeInstance ,这个值或许就是运行时间。。。。没还是没能查到cpu的。。。。。
abel 回复于:2004-10-17 00:09:49
configure --help 建議您先看這個
其中有個定義 MIBS 的地方,好好看完就夠了
當然, snmpd.conf 也是可以,只是想想我們安裝 net-snmp 的流程
像我的做法,要裝十台的 net-snmpd, 我只要在 configure 時做好 complier
條件即可, snmpd.conf 對我來說,最重要的是改 Communit String 及限制 IP
存取(system.* 我也一定會改,以寫出必要管理人及連絡方法等,供 mrtg 使用),
Timeticks: xxx 是運行後至現在的 CPU 時間
數值型態是累計值(COUNTER)
其他的,其實您快碰到問題的核心所在囉....加油
唯其要再考慮
Index 怎取得 (Index 即 PID)
多執行緒的問題 (同一個 process 會 fork 或 threads)
(像 httpd 可能就會有 N 個進程,要如何 monitor)
sky 兄的能力及求知態度值得大家效法,加油!
skylove 回复于:2004-10-17 01:04:54
框当。。。。。前事未果,后事又来。。。。。。fork和threads。。。想着头都大了!
configure --help 中我看到定义mib的选项,而且我是进mibs目录里直接看的那些mib的txt文件,因此才发现有monitor 这个,本来在snmpd.conf里是没有这个的。。。或许我看得不够仔细,漏掉了关键地方。我再回去看看,多谢。
看来内存/uptime搞定了,我记得timeticks有定义3种方式来显示的,好象有种是dateandtime方式呢。
取pid的办法。。。。。好的没想出来,笨办法倒有个
proc NAME这里name是用的程序名,如果不限制范围,则取出来后用awk处理能得到那个pid字段的吧。。。但是如果遇到进程根本不存在则会有问题??
我再思考一下。。。看来今天要带着问题入梦乡了
汗——我一开始都没考虑到多threads的这些问题去。。。这个用snmp也有办法取??? 我以前只知道pstree能取得树。。。越来越发现自己菜得好厉害!
skylove 回复于:2004-10-21 11:46:37
不好意思,前几天忙着给编辑赶稿去了。
然后今天一上班就遇到一个曙光1700的node挂掉的问题——才用了一个多月啊,就挂了,好垃圾的。。。
明天是俺 25岁生日,所以可能这2天也不太空。
我还在看snmp的configure,依然没头绪。。。不过请abel兄先别提醒,我再看看
ree 回复于:2005-07-08 13:56:13
我的对MRTG不太熟,照着上面的例子做了后,执行update/graph的时候,出现了下面的提示:
:46:14:14:22:20:51:22
ERROR: RPN stack underflow
ERROR: RPN stack underflow
第一行应该是采到的response值,但后面的error是怎么回事就搞不清出了
望答复!谢!
abel 回复于:2005-07-08 14:55:07
引用:原帖由 "ree" 发表: 我的对MRTG不太熟,照着上面的例子做了后,执行update/graph的时候,出现了下面的提示:
:46:14:14:22:20:51:22
ERROR: RPN stack underflow
ERROR: RPN stack underflow
第一行应该是采到的response值,但后面..........
這是用 rrdtool 畫的,不是 mrtg
這種問題你需要自己 debug , 因為別人跟本不知道你做了什麼,
但看來是你的問題是出現在 CDEF 那一段的問題,
你可以自己再檢查一下看看
ree 回复于:2005-07-11 16:45:59
引用:原帖由 "abel" 发表:
這是用 rrdtool 畫的,不是 mrtg
這種問題你需要自己 debug , 因為別人跟本不知道你做了什麼,
但看來是你的問題是出現在 CDEF 那一段的問題,
你可以自己再檢查一下看看
问题找到了,z0的计算时我删掉了一些参数,后来恢复的时候忘了该回来。现在可以了,非常感谢!
还有一个问题,就是我如何能在solaris的环境里运行这些脚本呢?尤其是使用date -d 来得到具体的timestamp的时候,solaris里面的date无法生成这样的数值!
abel 回复于:2005-07-11 16:57:04
這種問題你要自己解決...
不然你要看一下 , rrdtool update N: 的意思
xxd1019 回复于:2007-02-01 18:21:14
学习中
marion 回复于:2007-03-02 14:09:53
感谢abel兄发这么好的贴子,学习中。
|