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