优先参考 zabbix自动发现与监控内存和CPU使用率最高的进程
http://7424593.blog.51cto.com/7414593/1908930
监控网站url code
<code>#!/bin/bash </code>
<code># function:monitor tcp connect status from zabbix </code>
<code># License: GPL </code>
<code># mail:[email protected] </code>
<code># version:1.0 date:2012-12-09 </code>
<code>source </code><code>/</code><code>etc</code><code>/</code><code>bashrc ></code><code>/</code><code>dev</code><code>/</code><code>null </code><code>2</code><code>>&</code><code>1</code>
<code>source </code><code>/</code><code>etc</code><code>/</code><code>profile ></code><code>/</code><code>dev</code><code>/</code><code>null </code><code>2</code><code>>&</code><code>1</code>
<code>#/usr/bin/curl -o /dev/null -s -w %{http_code} http://$1/ </code>
<code>WEB_SITE_discovery () { </code>
<code>WEB_SITE</code><code>=</code><code>($(cat </code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>zabbix</code><code>/</code><code>scripts</code><code>/</code><code>WEB.txt|grep </code><code>-</code><code>v </code><code>"^#"</code><code>)) </code>
<code> </code><code>printf </code><code>'{\n'</code>
<code> </code><code>printf </code><code>'\t"data":[\n'</code>
<code>for</code><code>((i</code><code>=</code><code>0</code><code>;i<${</code><code>#WEB_SITE[@]};++i)) </code>
<code>{ </code>
<code>num</code><code>=</code><code>$(echo $((${</code><code>#WEB_SITE[@]}-1))) </code>
<code> </code><code>if</code> <code>[ </code><code>"$i"</code> <code>!</code><code>=</code> <code>${num} ]; </code>
<code> </code><code>then </code>
<code> </code><code>printf </code><code>"\t\t{ \n"</code>
<code> </code><code>printf </code><code>"\t\t\t\"{#SITENAME}\":\"${WEB_SITE[$i]}\"},\n"</code>
<code> </code><code>else</code>
<code> </code><code>printf </code><code>"\t\t{ \n"</code>
<code> </code><code>printf </code><code>"\t\t\t\"{#SITENAME}\":\"${WEB_SITE[$num]}\"}]}\n"</code>
<code> </code><code>fi </code>
<code>} </code>
<code>web_site_code () { </code>
<code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>curl </code><code>-</code><code>o </code><code>/</code><code>dev</code><code>/</code><code>null </code><code>-</code><code>s </code><code>-</code><code>w </code><code>%</code><code>{http_code} http:</code><code>/</code><code>/</code><code>$</code><code>1</code>
<code>case </code><code>"$1"</code> <code>in</code>
<code>web_site_discovery) </code>
<code>WEB_SITE_discovery </code>
<code>;; </code>
<code>web_site_code) </code>
<code>web_site_code $</code><code>2</code>
<code>*</code><code>) </code>
<code>echo </code><code>"Usage:$0 {web_site_discovery|web_site_code [URL]}"</code>
<code>esac</code>
2.nginx统一监控脚本 Active
<code>#!/bin/bash</code>
<code>#</code>
<code># Filename: nginx_monitor.sh</code>
<code># Revision: 1.0</code>
<code># Date: 2014/09/24</code>
<code># Author: Qicheng</code>
<code># Email:</code>
<code># Website: http://qicheng0211.blog.51cto.com</code>
<code># Description: nginx统一监控脚本</code>
<code># Notes: </code>
<code> </code>
<code># 修改AGENT_CONF的值为本地zabbix agent的配置文件路径</code>
<code>AGENT_CONF</code><code>=</code><code>"/usr/local/zabbix/etc/zabbix_agentd.conf"</code>
<code># nginx站点的配置文件路径</code>
<code>NGINX_SITE_CONF</code><code>=</code><code>"/usr/local/zabbix/scripts/nginx_site.conf"</code>
<code># zabbix_sender的路径</code>
<code>ZBX_SENDER</code><code>=</code><code>"/usr/local/bin/zabbix_sender"</code>
<code>FUNCTION</code><code>=</code><code>$</code><code>1</code>
<code>HOST_NAME</code><code>=</code><code>$</code><code>2</code>
<code>NGINX_SITE</code><code>=</code><code>$</code><code>3</code>
<code>CURL</code><code>=</code><code>"/usr/bin/curl"</code>
<code>TIMEOUT</code><code>=</code><code>30</code>
<code># nginx site low-level discovery</code>
<code>function nginxSiteDiscovery()</code>
<code>{</code>
<code> </code><code>nginx_site</code><code>=</code><code>($(grep </code><code>'^[^#]'</code> <code>${NGINX_SITE_CONF}))</code>
<code> </code><code>max_index</code><code>=</code><code>$[${</code><code>#nginx_site[@]}-1]</code>
<code> </code><code>printf </code><code>'{\n'</code>
<code> </code><code>printf </code><code>'\t"data":['</code>
<code> </code><code>for</code> <code>key </code><code>in</code> <code>`seq </code><code>-</code><code>s</code><code>' '</code> <code>0</code> <code>$max_index`</code>
<code> </code><code>do</code>
<code> </code><code>printf </code><code>'\n\t\t{'</code>
<code> </code><code>printf </code><code>"\"{#NGINX_SITE}\":\"${nginx_site[${key}]}\"}"</code>
<code> </code><code>if</code> <code>[ $key </code><code>-</code><code>ne $max_index ];then</code>
<code> </code><code>printf </code><code>","</code>
<code> </code><code>fi</code>
<code> </code><code>done</code>
<code> </code><code>printf </code><code>'\n\t]\n'</code>
<code> </code><code>printf </code><code>'}\n'</code>
<code>}</code>
<code># 获取nginx status,把数据发送到zabbix server</code>
<code>function getNginxStatus()</code>
<code> </code><code>nginx_status_url</code><code>=</code><code>"${NGINX_SITE}/nginx_status"</code>
<code> </code><code># 获取nginx_status后,保存到下面的文件里</code>
<code> </code><code>nginx_status_file</code><code>=</code><code>"/tmp/nginx_status_$(echo ${NGINX_SITE} | sed 's#^http.*://##; s#/#_#g').log"</code>
<code> </code><code>:></code><code>"$nginx_status_file"</code>
<code> </code><code># curl获取nginx_status</code>
<code> </code><code>${CURL} </code><code>-</code><code>s </code><code>-</code><code>-</code><code>connect</code><code>-</code><code>timeout ${TIMEOUT} </code><code>"$nginx_status_url"</code> <code>2</code><code>>&</code><code>1</code> <code>| tee </code><code>"$nginx_status_file"</code>
<code> </code><code>line_num</code><code>=</code><code>$(cat </code><code>"$nginx_status_file"</code> <code>| wc </code><code>-</code><code>l)</code>
<code> </code><code># 判断是否正确获取nginx_status</code>
<code> </code><code>[ $line_num </code><code>-</code><code>ne </code><code>4</code> <code>] && { echo </code><code>"ERROR: $nginx_status_file is not correct."</code><code>; exit </code><code>1</code><code>;}</code>
<code> </code><code>active</code><code>=</code><code>$(cat </code><code>"$nginx_status_file"</code> <code>| grep </code><code>'Active'</code> <code>| awk </code><code>'{print $NF}'</code><code>)</code>
<code> </code><code>reading</code><code>=</code><code>$(cat </code><code>"$nginx_status_file"</code> <code>| grep </code><code>'Reading'</code> <code>| awk </code><code>'{print $2}'</code><code>)</code>
<code> </code><code>writing</code><code>=</code><code>$(cat </code><code>"$nginx_status_file"</code> <code>| grep </code><code>'Writing'</code> <code>| awk </code><code>'{print $4}'</code><code>)</code>
<code> </code><code>waiting</code><code>=</code><code>$(cat </code><code>"$nginx_status_file"</code> <code>| grep </code><code>'Waiting'</code> <code>| awk </code><code>'{print $6}'</code><code>)</code>
<code> </code><code>accepts</code><code>=</code><code>$(cat </code><code>"$nginx_status_file"</code> <code>| awk NR</code><code>=</code><code>=</code><code>3</code> <code>| awk </code><code>'{print $1}'</code><code>)</code>
<code> </code><code>handled</code><code>=</code><code>$(cat </code><code>"$nginx_status_file"</code> <code>| awk NR</code><code>=</code><code>=</code><code>3</code> <code>| awk </code><code>'{print $2}'</code><code>)</code>
<code> </code><code>requests</code><code>=</code><code>$(cat </code><code>"$nginx_status_file"</code> <code>| awk NR</code><code>=</code><code>=</code><code>3</code> <code>| awk </code><code>'{print $3}'</code><code>)</code>
<code> </code><code>echo </code><code>"Sending the data to zabbix server..."</code>
<code> </code><code># 将特定格式的数据发送到zabbix server,每行的格式为:<hostname> <key> <value></code>
<code> </code><code>cat << EOF | ${ZBX_SENDER} </code><code>-</code><code>c ${AGENT_CONF} </code><code>-</code><code>i </code><code>-</code>
<code>"${HOST_NAME}"</code> <code>"nginx_status[$NGINX_SITE,active]"</code> <code>"${active}"</code>
<code>"${HOST_NAME}"</code> <code>"nginx_status[$NGINX_SITE,reading]"</code> <code>"${reading}"</code>
<code>"${HOST_NAME}"</code> <code>"nginx_status[$NGINX_SITE,writing]"</code> <code>"${writing}"</code>
<code>"${HOST_NAME}"</code> <code>"nginx_status[$NGINX_SITE,waiting]"</code> <code>"${waiting}"</code>
<code>"${HOST_NAME}"</code> <code>"nginx_status[$NGINX_SITE,accepts]"</code> <code>"${accepts}"</code>
<code>"${HOST_NAME}"</code> <code>"nginx_status[$NGINX_SITE,handled]"</code> <code>"${handled}"</code>
<code>"${HOST_NAME}"</code> <code>"nginx_status[$NGINX_SITE,requests]"</code> <code>"${requests}"</code>
<code>EOF</code>
<code>[ $</code><code># -eq 0 ] && { echo "ERROR: The script needs at least one parameter."; exit 1;}</code>
<code>case $FUNCTION </code><code>in</code>
<code> </code><code>nginxSiteDiscovery|getNginxStatus)</code>
<code> </code><code>$FUNCTION</code>
<code> </code><code>;;</code>
<code> </code><code>*</code><code>)</code>
<code> </code><code>echo </code><code>"ERROR: Bad parameters."</code>
<code> </code><code>exit </code><code>1</code>
3.分区
<code>#Fucation:zabbix low-level discovery</code>
<code>partition() {</code>
<code> </code><code>port</code><code>=</code><code>($(grep </code><code>-</code><code>E </code><code>"(vd[a-z]$|sd[a-z]$)"</code> <code>/</code><code>proc</code><code>/</code><code>partitions|awk </code><code>'{print $4}'</code><code>))</code>
<code> </code><code>printf </code><code>'{\n'</code>
<code> </code><code>printf </code><code>'\t"data":[\n'</code>
<code> </code><code>for</code> <code>key </code><code>in</code> <code>${!port[@]}</code>
<code> </code><code>do</code>
<code> </code><code>if</code> <code>[[ </code><code>"${#port[@]}"</code> <code>-</code><code>gt </code><code>1</code> <code>&& </code><code>"${key}"</code> <code>-</code><code>ne </code><code>"$((${#port[@]}-1))"</code> <code>]];then</code>
<code> </code><code>printf </code><code>'\t {\n'</code>
<code> </code><code>printf </code><code>"\t\t\t\"{#PARTITIONNAME}\":\"${port[${key}]}\"},\n"</code>
<code> </code><code>else</code> <code>[[ </code><code>"${key}"</code> <code>-</code><code>eq </code><code>"((${#port[@]}-1))"</code> <code>]]</code>
<code> </code><code>printf </code><code>"\t\t\t\"{#PARTITIONNAME}\":\"${port[${key}]}\"}\n"</code>
<code> </code><code>fi</code>
<code> </code><code>done</code>
<code> </code><code>printf </code><code>'\t ]\n'</code>
<code> </code><code>printf </code><code>'}\n'</code>
<code>$</code><code>1</code>
sh /usr/local/zabbix/bin/partition_low_discovery.sh partition
4.io
<code>[root@xx zabbix_agentd.conf.d]</code><code># cat vfsiojohn.conf </code>
<code>UserParameter</code><code>=</code><code>vfsiojohn.discovery,</code><code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>python </code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>zabbix</code><code>/</code><code>bin</code><code>/</code><code>disk_discovery.py</code>
<code>UserParameter</code><code>=</code><code>disk.status[</code><code>*</code><code>],</code><code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>zabbix</code><code>/</code><code>bin</code><code>/</code><code>disk_status.sh $</code><code>1</code> <code>$</code><code>2</code>
<code>[root@xx zabbix_agentd.conf.d]</code><code># /usr/bin/python /usr/local/zabbix/bin/disk_discovery.py</code>
<code> </code><code>"data"</code><code>:[</code>
<code> </code><code>{</code>
<code> </code><code>"{#DISK_NAME}"</code><code>:</code><code>"sda"</code>
<code> </code><code>}</code>
<code> </code><code>]</code>
<code>[root@xx zabbix_agentd.conf.d]</code><code># cat /usr/local/zabbix/bin/disk_status.sh</code>
<code>#/bin/sh</code>
<code>device</code><code>=</code><code>$</code><code>1</code>
<code>item</code><code>=</code><code>$</code><code>2</code>
<code>case $item </code><code>in</code>
<code> </code><code>rrqm)</code>
<code> </code><code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>tail </code><code>-</code><code>n20 </code><code>/</code><code>tmp</code><code>/</code><code>iostat_output |grep </code><code>"\b$device\b"</code><code>|tail </code><code>-</code><code>1</code><code>|awk </code><code>'{print $2}'</code>
<code> </code><code>;;</code>
<code> </code><code>wrqm)</code>
<code> </code><code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>tail </code><code>-</code><code>n20 </code><code>/</code><code>tmp</code><code>/</code><code>iostat_output |grep </code><code>"\b$device\b"</code><code>|tail </code><code>-</code><code>1</code><code>|awk </code><code>'{print $3}'</code>
<code> </code><code>rps)</code>
<code> </code><code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>tail </code><code>-</code><code>n20 </code><code>/</code><code>tmp</code><code>/</code><code>iostat_output |grep </code><code>"\b$device\b"</code><code>|tail </code><code>-</code><code>1</code><code>|awk </code><code>'{print $4}'</code>
<code> </code><code>wps)</code>
<code> </code><code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>tail </code><code>-</code><code>n20 </code><code>/</code><code>tmp</code><code>/</code><code>iostat_output |grep </code><code>"\b$device\b"</code> <code>|tail </code><code>-</code><code>1</code><code>|awk </code><code>'{print $5}'</code>
<code> </code><code>rKBps)</code>
<code> </code><code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>tail </code><code>-</code><code>n20 </code><code>/</code><code>tmp</code><code>/</code><code>iostat_output |grep </code><code>"\b$device\b"</code> <code>|tail </code><code>-</code><code>1</code><code>|awk </code><code>'{print $6}'</code>
<code> </code><code>wKBps)</code>
<code> </code><code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>tail </code><code>-</code><code>n20 </code><code>/</code><code>tmp</code><code>/</code><code>iostat_output |grep </code><code>"\b$device\b"</code> <code>|tail </code><code>-</code><code>1</code><code>|awk </code><code>'{print $7}'</code>
<code> </code><code>avgrq</code><code>-</code><code>sz)</code>
<code> </code><code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>tail </code><code>-</code><code>n20 </code><code>/</code><code>tmp</code><code>/</code><code>iostat_output |grep </code><code>"\b$device\b"</code> <code>|tail </code><code>-</code><code>1</code><code>|awk </code><code>'{print $8}'</code>
<code> </code><code>avgqu</code><code>-</code><code>sz)</code>
<code> </code><code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>tail </code><code>-</code><code>n20 </code><code>/</code><code>tmp</code><code>/</code><code>iostat_output |grep </code><code>"\b$device\b"</code> <code>|tail </code><code>-</code><code>1</code><code>|awk </code><code>'{print $9}'</code>
<code> </code><code>await)</code>
<code> </code><code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>tail </code><code>-</code><code>n20 </code><code>/</code><code>tmp</code><code>/</code><code>iostat_output |grep </code><code>"\b$device\b"</code> <code>|tail </code><code>-</code><code>1</code><code>|awk </code><code>'{print $10}'</code>
<code> </code><code>svctm)</code>
<code> </code><code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>tail </code><code>-</code><code>n20 </code><code>/</code><code>tmp</code><code>/</code><code>iostat_output |grep </code><code>"\b$device\b"</code> <code>|tail </code><code>-</code><code>1</code><code>|awk </code><code>'{print $11}'</code>
<code> </code><code>util)</code>
<code> </code><code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>tail </code><code>-</code><code>n20 </code><code>/</code><code>tmp</code><code>/</code><code>iostat_output |grep </code><code>"\b$device\b"</code> <code>|tail </code><code>-</code><code>1</code><code>|awk </code><code>'{print $12}'</code>
5.zabbix 监控内存和cpu占用最多的进程
<code># cat discovery_process.sh </code>
<code>#system process discovery script</code>
<code>top </code><code>-</code><code>b </code><code>-</code><code>n </code><code>1</code> <code>> </code><code>/</code><code>tmp</code><code>/</code><code>.top.txt && chown zabbix. </code><code>/</code><code>tmp</code><code>/</code><code>.top.txt</code>
<code>proc_array</code><code>=</code><code>(`tail </code><code>-</code><code>n </code><code>+</code><code>8</code> <code>/</code><code>tmp</code><code>/</code><code>.top.txt | awk </code><code>'{a[$NF]+=$10}END{for(k in a)print a[k],k}'</code><code>|sort </code><code>-</code><code>gr|head </code><code>-</code><code>10</code><code>|cut </code><code>-</code><code>d</code><code>" "</code> <code>-</code><code>f2`)</code>
<code>length</code><code>=</code><code>${</code><code>#proc_array[@]}</code>
<code> </code>
<code>printf </code><code>"{\n"</code>
<code>printf </code><code>'\t'</code><code>"\"data\":["</code>
<code>for</code> <code>((i</code><code>=</code><code>0</code><code>;i<$length;i</code><code>+</code><code>+</code><code>))</code>
<code>do</code>
<code> </code><code>printf </code><code>"\n\t\t{"</code>
<code> </code><code>printf </code><code>"\"{#PROCESS_NAME}\":\"${proc_array[$i]}\"}"</code>
<code> </code><code>if</code> <code>[ $i </code><code>-</code><code>lt $[$length</code><code>-</code><code>1</code><code>] ];then</code>
<code> </code><code>printf </code><code>","</code>
<code> </code><code>fi</code>
<code>done</code>
<code> </code><code>printf </code><code>"\n\t]\n"</code>
<code>printf </code><code>"}\n"</code>
or
<code># cat discovery_process2.sh </code>
<code>proc_array</code><code>=</code><code>`tail </code><code>-</code><code>n </code><code>+</code><code>8</code> <code>/</code><code>tmp</code><code>/</code><code>.top.txt | awk </code><code>'{a[$NF]+=$10}END{for(k in a)print a[k],k}'</code><code>|sort </code><code>-</code><code>gr|head </code><code>-</code><code>10</code><code>|cut </code><code>-</code><code>d</code><code>" "</code> <code>-</code><code>f2`</code>
<code>length</code><code>=</code><code>`echo </code><code>"${proc_array}"</code> <code>| wc </code><code>-</code><code>l`</code>
<code>count</code><code>=</code><code>0</code>
<code>echo </code><code>'{'</code>
<code>echo </code><code>-</code><code>e </code><code>'\t"data":['</code>
<code>echo </code><code>"$proc_array"</code> <code>| </code><code>while</code> <code>read line</code>
<code> </code><code>echo </code><code>-</code><code>en </code><code>'\t\t{"{#PROCESS_NAME}":"'</code><code>$line</code><code>'"}'</code>
<code> </code><code>count</code><code>=</code><code>$(( $count </code><code>+</code> <code>1</code> <code>))</code>
<code> </code><code>if</code> <code>[ $count </code><code>-</code><code>lt $length ];then</code>
<code> </code><code>echo </code><code>','</code>
<code>echo </code><code>-</code><code>e </code><code>'\n\t]'</code>
<code>echo </code><code>'}'</code>
6.zabbix 监控io占用最多的进程
<code>cat pidtest.sh</code>
<code>#Fucation:mysql low-level discovery</code>
<code>#Script_name mysql_low_discovery.sh</code>
<code>pidtest() {</code>
<code> </code><code>port</code><code>=</code><code>($(cat </code><code>/</code><code>tmp</code><code>/</code><code>pidsta|awk </code><code>'{print $2}'</code><code>))</code>
<code> </code><code>printf </code><code>"\t\t\t\"{#PIDSTA}\":\"${port[${key}]}\"},\n"</code>
<code> </code><code>printf </code><code>"\t\t\t\"{#PIDSTA}\":\"${port[${key}]}\"}\n"</code>