温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

nagios监控squid的脚本

发布时间:2020-06-20 06:26:15 阅读:750 作者:zhhmj 栏目:移动开发
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

   最近一直都在忙工作上的事情,没有时间来写点东西了,公司用的cache是squid,之前有过监控,但是nagios中看不到squid的命中率,于是就写了这么一个脚本来通过pnp4nagios查看squid的一些图。下面是脚本:

#!/bin/bash # 这个脚本主要是检测squid的每分钟http的请求熟、cpu的使用率、可用的文件描述符、5min的请求命中率、5min的内存请求命中率和5min的硬盘请求命中率。 # 并且可以通过pnp4nagios画图。  PROGNAME=`basename $0` VERSION="Version 1.1" AUTHOR="zhhmj (tgariltg@gmail.com)"  #DEFINES ST_OK=0 ST_WR=1 ST_CR=2 ST_UK=3 #VARS hostname="localhost" port=8001 running=0 warn_descriptors=100 crit_descriptors=30 warn_hits=70 crit_hits=50  print_version() {         echo "$PROGNAME $VERSION $AUTHOR" }  print_help() {         echo ""         print_version         echo ""         echo "Description:"         echo "Gets percentage of hits  for a squid reverse proxy"         echo "Options:"         echo "  -h|--help"         echo "   Print help info."         echo "  -H|--hostname)"         echo "   Sets the hostname, default is localhost"         echo "  -P|--port)"         echo "   Sets the port, default is 8001"         echo "  -wd)"         echo "   Sets the number of available file descriptors to warn at, default 100"         echo "  -cd)"         echo "   Sets the number of available file descriptors to go critical at, default 30"         echo "  -wh)"         echo "   Sets the percentage of hits to warn at, default 70"         echo "  -ch)"         echo "   Sets the percentage of hits to go critical at, default 50"         echo ""         echo "Example:"         echo "  ./check_squid -H 127.0.0.1 -P 8001 -wd 100 -cd 30 -wh 70 -ch 50"         echo "  WARNING - Squid is serving an average of 7.2 per minute since start with 655349 file descriptors left and 0.04 percent of CPU use and Hits as 64% of all requests"         exit $ST_UK }  #获取squid的信息 get_status_text() {         status_text=$(squidclient -h ${hostname} -p ${port} mgr:info 2>&1) }  #确保服务器回复正常 is_replying() {         case "$status_text" in                 *Denied.*)                         echo "Error gettings metrics.(Access control on squid?)"                         exit $ST_CR                         ;;                 *ERROR*)                         echo "Error connecting to host"                         exit $ST_CR                         ;;         esac }  #下面是获取有用的信息: #Available file descriptors #CPU Usage #Average HTTP requests per minute #Hits as % of all requests by 5min #Memory hits as % of hit requests by 5min #Disk hits as % of hit requests by 5min get_statistics() {         available_descriptors=$(echo "${status_text}" | grep "Available number of file descriptors" | cut -d: -f 2 | sed -e 's/^[ \t]*//')         cpu_usage=$(echo "${status_text}" | grep "CPU Usage:" | cut -d: -f2 | cut -d% -f 1 | sed -e 's/^[ \t]*//')         avg_http_requests=$(echo "${status_text}" | grep "Average HTTP requests per minute since start" | cut -d: -f2 | cut -d% -f 1 | sed -e 's/^[ \t]*//')         all_requests_hits=$(echo "${status_text}" | grep "Hits as % of all requests" | awk '{print $8}' | awk -F\. '{print $1}')         memory_hits=$(echo "${status_text}" | grep "Memory hits as % of hit requests" | awk '{print $9}' | awk -F\. '{print $1}')         disk_hits=$(echo "${status_text}" | grep "Disk hits as % of hit requests" | awk '{print $9}' | awk -F\. '{print $1}')         #buid perfdata string         perfdata="'avail_descriptors'=$available_descriptors 'cpu_usage'=$cpu_usage 'avg_http_requests'=$avg_http_requests 'all_requests_hits'=$all_requests_hits% 'memory_hits'=$memory_hits% 'disk_hits'=$disk_hits%" }  #报警对比的判断 build_output() {         out="Squid is serving an average of $avg_http_requests per minute since start with $available_descriptors file descriptors left and $cpu_usage percent of CPU use and Hits as $all_requests_hits% of all requests"         if [ $available_descriptors -le $crit_descriptors ] || [ $all_requests_hits -le $crit_hits ]         then                 echo "CRITICAL - ${out} | ${perfdata}"                 exit $ST_CR        elif [ $available_descriptors -le $warn_descriptors ] || [ $all_requests_hits -le $warn_hits ]         then                 echo "WARNING - ${out} | ${perfdata}"                 exit $ST_WR         else                 echo "OK - ${out} | ${perfdata}"                 exit $ST_OK         fi }  #主程序 #获取参数 while test -n "$1"do         case "$1" in                 --help|-h)                         print_help                         exit $ST_UK                         ;;                 --version|-v)                         print_version                         exit $ST_UK                         ;;                 --hostname|-H)                         hostname=$2                         shift                         ;;                 --port|-P)                         port=$2                         shift                         ;;                 -wd)                         warn_descriptors=$2                         shift                         ;;                 -cd)                         crit_descriptors=$2                         shift                         ;;                 -wh)                         warn_hits=$2                         shift                         ;;                 -ch)                         crit_hits=$2                         shift                         ;;                 *)                         echo "Unknown argument: $1"                         print_help                         exit $ST_UK                         ;;         esac         shift done  #sanity if [ $warn_descriptors -lt $crit_descriptors ] || [ $warn_hits -lt $crit_hits ] then    echo "Warn descriptors must not be lower than critical and crit hits must not be lower than warn hits!"    print_help fi  get_status_text is_replying get_statistics build_output 

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×