设为首页 收藏本站
查看: 817|回复: 0

[经验分享] Zabbix监控实践

[复制链接]

尚未签到

发表于 2019-1-20 06:02:39 | 显示全部楼层 |阅读模式
Zabbix监控实践
  硬件监控:Zabbix IPMI Interface
  系统监控:Zabbix Agent Interface
  Java监控:Zabbix JMX Interface
  网络设备监控:Zabbix SNMP Interface
  应用服务监控:Zabbix Agent UserParameter
  MySQL数据库监控:percona-monitoring-plulgins
  URL监控:Zabbix Web 监控
  这一下子把之前干的工作全集成到一个平台上了。而且之前编写的所有的应用服务的监控脚本,简单修改就可以使用。
  同时也可以灵活的设置报警阈值、告警方式、告警升级、告警去重、告警依赖等等,同时还使用Zabbix的自动发现功能实现上线一台服务器后,自动添加监控。
  使用Zabbix Proxy实现了多机房的分布式监控,这简直太棒了。
  对于告警通知:邮件、微信、短信、钉钉等,都可以与Zabbix快速的集成,网上有很多此类文档。同时,针对某些可以进行直接处理的报警,Zabbix可以触发Action来轻松帮你实现,故障的自动处理。+
1.1硬件监控
  通常我们的服务器上都会有远程控制卡,如Dell的iDRAC,HP的ILO和IBM的IMM等,可以通过Web界面来进行硬件的监控和管理工作,如果购买企业级的授权,还可以使用控制台进行管理。
  在Linux下,通常我们使用IPMI来完成物理设备的监控工作,使用ipmi工具获取温度传感器的数据,大于50就发一份邮件给维护人员
  故障回想:之前我司托管在北京某机房的设备就出现过,因为刚好所在机柜区域的空调坏了,导致服务器温度过高,然后系统宕机。
1.2系统监控
  系统监控标准(CPU、内存、硬盘、网络、进程、TCP连接数)可以通过  基础模板Template OS Linux(完全足够) 来监控,根据自己的业务来调整合适的触发器以及图形等,即可。
  CPU关于CPU,有3个重要的概念:上下文切换(context switchs),运行队列(Run queue)和使用率(utilization)。这也是我们CPU监控的三个重点。
  通常情况下,每个处理器的运行队列要小于等于3,CPU 利用率中user/system比例维持在70/30,上下文切换要根据系统繁忙程度来综合考量。监控工具有:top vmstat mpstat
  内存:Linux虚拟内存是一个庞大的东东,通常我们需要监控内存的使用率、SWAP使用率、同时可以通过内存的使用率曲线来发现某些服务的内存溢出等。监控工具有:free vmstat
  IOIO分为磁盘IO和网络IO。除了在做性能调优我们要监控更详细的数据外,那么日常监控,只关注磁盘使用率、io wait即可,网络也是监控网卡流量即可。监控工具有iostat iotop iftop
  TCP监控:在很多情况下有必要监控TCP的状态,可以使用netstat或者ss来获取所有的TCP连接,来展现11种不同的TCP连接状态的数量,可以在大并发中及时发现TCP的相关故障。
  其它的系统监控:运行的进程数、登陆用户、文件加密等。
1.3应用监控
1.3.1TCP监控
  1.配置所有Agent(标准化目录结构)
  [root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #编辑配置文件引用key
  Include=/etc/zabbix/zabbix_agentd.d/*.conf
  [root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell脚本
  2.编写Shell脚本
  [root@linux-node1 ~]# cd /etc/zabbix/scripts
  [root@linux-node1 scripts]# vim tcp_status.sh
  #!/bin/bash
  ############################################################
  # $Name:         tcp_status.sh
  # $Version:      v1.0
  # $Function:     TCP Status
  # $Author:       xuliangwei
  # $organization: www.xuliangwei.com
  # $Create Date:  2016-06-23
  # $Description:  Monitor TCP Service Status
  ############################################################
  [  $# -ne 1 ] && echo  "Usage:CLOSE-WAIT|CLOSED|CLOSING|ESTAB|FIN-WAIT-1|FIN-WAIT-2|LAST-ACK|LISTEN|SYN-RECV  SYN-SENT|TIME-WAIT" && exit 1
  tcp_status_fun(){
  TCP_STAT=$1
  ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/ss.txt
  TCP_STAT_VALUE=$(grep "$TCP_STAT" /tmp/ss.txt | cut -d ' ' -f2)
  if [ -z "$TCP_STAT_VALUE" ];then
  TCP_STAT_VALUE=0
  fi
  echo $TCP_STAT_VALUE
  }
  tcp_status_fun $1;
  添加执行权限
  [root@linux-node1 scripts]# chmod +x tcp_status.sh
  2.key的linux_tcp.conf的子配置文件如下:
  [root@linux-node1 ~]# cat /etc/zabbix/zabbix_agentd.d/tcp.conf
  UserParameter=tcp_status
  • ,/bin/bash /etc/zabbix/scripts/tcp_status.sh "$1"
      3.重启zabbix-agent,修改配置文件必须重启
      [root@linux-node1 ~]# systemctl restart  zabbix-agent
      4.测试一定使用Zabbix_get获取值(不要直接执行脚本)
      [root@linux-node1 scripts]# zabbix_get -s 192.168.90.11 -k tcp_status[ESTAB]
      8
      5.展示所有Key(记得将模板关联主机)

      图 4-1
      6.查看图形(图形是自定义)

      图4-2
      7.完成后,将模板导出保存,方便以后二次使用,这辈子在也不用添加11次Key了。
    1.3.2Nginx监控
      1.配置所有Agent(标准化目录结构)
      [root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #编辑配置文件引用key
      Include=/etc/zabbix/zabbix_agentd.d/*.conf
      [root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell脚本
      2.在nginx.conf的Server标签中添加如下内容(如果nginx通过saltstack等配置管理工具进行统一管理,则需要在模板中统一加入这段配置)
      location /nginx_status {
      stub_status on;
      access_log  off;
      allow 127.0.0.1;
      deny all;
      }
      3.本地访问Nginx Status测试
      [root@linux-node1 ~]# curl http://127.0.0.1/nginx_status
      Active connections: 1
      server accepts handled requests
      1 1 1
      Reading: 0 Writing: 1 Waiting: 0
      Nginx状态解释:
      Active connectionsNginx正处理的活动链接数1个
      server              Nginx启动到现在共处理了1个连接。
      accepts             Nginx启动到现在共成功创建1次握手。
      handled requests   Nginx总共处理了1次请求。
      Reading             Nginx读取到客户端的 Header 信息数。
      Writing             Nginx返回给客户端的 Header 信息数。
      Waiting             Nginx已经处理完正在等候下一次请求指令的驻留链接,开启。
      Keep-alive的情况下,这个值等于active-(reading + writing)。
      请求丢失数=(握手数-连接数)可以看出,本次状态显示没有丢失请求。
      4.编写Nginx的Shell脚本(如果端口不一致,只需要修改脚本端口即可)
      [root@linux-node1 ~]# cd /etc/zabbix/scripts
      [root@linux-node1 scripts]# vim nginx_status.sh
      #!/bin/bash
      ############################################################
      # $Name:         nginx_status.sh
      # $Version:      v1.0
      # $Function:     Nginx Status
      # $Author:       xuliangwei
      # $organization: www.xuliangwei.com
      # $Create Date:  2016-06-23
      # $Description:  Monitor Nginx Service Status
      ############################################################
      NGINX_PORT=80  #如果端口不同仅需要修改脚本即可,否则修改xml很麻烦
      NGINX_COMMAND=$1
      nginx_active(){
      /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Active/ {print $NF}'
      }
      nginx_reading(){
      /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Reading/ {print $2}'
      }
      nginx_writing(){
      /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Writing/ {print $4}'
      }
      nginx_waiting(){
      /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Waiting/ {print $6}'
      }
      nginx_accepts(){
      /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $1}'
      }
      nginx_handled(){
      /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $2}'
      }
      nginx_requests(){
      /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $3}'
      }
      case $NGINX_COMMAND in
      active)
      nginx_active;
      ;;
      reading)
      nginx_reading;
      ;;
      writing)
      nginx_writing;
      ;;
      waiting)
      nginx_waiting;
      ;;
      accepts)
      nginx_accepts;
      ;;
      handled)
      nginx_handled;
      ;;
      requests)
      nginx_requests;
      ;;
      *)
      echo $"USAGE:$0 {active|reading|writing|waiting|accepts|handled|requests}"
      esac
      给脚本添加执行权限
      [root@linux-node1 scripts]# chmod +x nginx_status.sh
      5.key的nginx_status.conf的子配置文件如下:
      [root@linux-node1 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx_status.conf
      UserParameter=nginx_status
  • ,/bin/bash /etc/zabbix/zabbix_agentd.d/scripts/nginx/nginx_status.sh "$1"
      6.重启zabbix-agent
      [root@linux-node1 ~]# systemctl restart  zabbix-agent
      7.测试一定使用Zabbix_get来获取值
      [root@linux-node1 ~]# zabbix_get -s 192.168.90.11 -k nginx_status[writing]
      1
      8.展示所有Key(记得将模板关联主机)如图4-3

      图4-3
      9.查看图形,如图4-4(图形自定义)

      图4-4
    1.3.3PHP-FPM监控
      1.配置所有Agent(标准化目录结构)
      [root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #编辑配置文件引用key
      Include=/etc/zabbix/zabbix_agentd.d/*.conf
      [root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell脚本
      2.PHP-FPM工作模式通常与Nginx结合使用,修改php-fpm.conf(找到自己的php-fpm.conf存放路径)
      [root@linux-node1 ~]# vim /etc/php-fpm.d/www.conf  #我php-fpm存放路径
      pm.status_path = /phpfpm_status
      3.修改nginx.conf的配置文件,通过Nginx访问PHP-FPM状态。
      location ~ ^/(phpfpm_status)$ {
      include fastcgi_params;
      fastcgi_pass    127.0.0.1:9000;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      }
      4.访问测试phpfpm_status
      [root@linux-node4 conf.d]# curl http://127.0.0.1/phpfpm_status
      pool:                 www
      process manager:      dynamic
      start time:           05/Jul/2016:15:30:56 +0800
      start since:          409
      accepted conn:        22
      listen queue:         0
      max listen queue:     0
      listen queue len:     128
      idle processes:       4
      active processes:     1
      total processes:      5
      max active processes: 2
      max children reached: 0
      PHP-FPM状态解释:
      pool #fpm池名称,大多数为www
      process manager #进程管理方式dynamic或者static
      start time #启动日志,如果reload了fpm,时间会更新
      start since #运行时间
      accepted conn #当前池接受的请求数
      listen queue #请求等待队列,如果这个值不为0,那么需要增加FPM的进程数量
      max listen queue #请求等待队列最高的数量
      listen queue len #socket等待队列长度
      idle processes #空闲进程数量
      active processes #活跃进程数量
      total processes #总进程数量
      max active processes #最大的活跃进程数量(FPM启动开始计算)
      max children reached #程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量过小,可以适当调整。
      4.编写php-fpm的Shell脚本(如果端口不一致,只需要修改脚本端口即可)
      [root@linux-node1 ~]# cd /etc/zabbix/scripts
      [root@linux-node1 scripts]# vim phpfpm_status.sh
      #!/bin/bash
      ############################################################
      # $Name:         phpfpm_status.sh
      # $Version:      v1.0
      # $Function:     Nginx Status
      # $Author:       xuliangwei
      # $organization: www.xuliangwei.com
      # $Create Date:  2016-06-23
      # $Description:  Monitor Nginx Service Status
      ############################################################
      PHPFPM_COMMAND=$1
      PHPFPM_PORT=80
      start_since(){
      /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^start since:/ {print $NF}'
      }
      accepted_conn(){
      /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^accepted conn:/ {print $NF}'
      }
      listen_queue(){
      /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^listen queue:/ {print $NF}'
      }
      max_listen_queue(){
      /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^max listen queue:/ {print $NF}'
      }
      listen_queue_len(){
      /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^listen queue len:/ {print $NF}'
      }
      idle_processes(){
      /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^idle processes:/ {print $NF}'
      }
      active_processes(){
      /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^active processes:/ {print $NF}'
      }
      total_processes(){
      /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^total processes:/ {print $NF}'
      }
      max_active_processes(){
      /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^max active processes:/ {print $NF}'
      }
      max_children_reached(){
      /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^max children reached:/ {print $NF}'
      }
      slow_requests(){
      /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^slow requests:/ {print $NF}'
      }
      case $PHPFPM_COMMAND in
      start_since)
      start_since;
      ;;
      accepted_conn)
      accepted_conn;
      ;;
      listen_queue)
      listen_queue;
      ;;
      max_listen_queue)
      max_listen_queue;
      ;;
      listen_queue_len)
      listen_queue_len;
      ;;

      >
      >  ;;
      active_processes)
      active_processes;
      ;;
      total_processes)
      total_processes;
      ;;
      max_active_processes)
      max_active_processes;
      ;;
      max_children_reached)
      max_children_reached;
      ;;
      slow_requests)
      slow_requests;
      ;;
      *)
      echo  $"USAGE:$0  {start_since|accepted_conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processes|total_processes|max_active_processes|max_children_reached}"
      esac
      给脚本添加执行权限
      [root@linux-node1 scripts]# chmod +x phpfpm_status.sh
      5.key的phpfpm_status.conf的子配置文件如下:
      [root@linux-node1 ~]# cat /etc/zabbix/zabbix_agentd.d/phpfpm_status.conf
      UserParameter=phpfpm_status
  • ,/bin/bash /etc/zabbix/scripts/phpfpm_status.sh "$1"
      6.重启zabbix-agent
      [root@linux-node1 ~]# systemctl restart  zabbix-agent
      7.测试一定使用Zabbix_get来获取值
      [root@linux-node1 zabbix_agentd.d]# zabbix_get -s 192.168.90.11 -k phpfpm_status[accepted_conn]
      45
      7.展示所有Key(记得将模板关联主机)如图4-5

      图4-5
      8.查看图形,如图4-4(图形自定义)

      图4-6
    1.3.4MySQL监控
      percona Monitoring Plugins是一个高质量的组件,为MySQL数据库添加企业级的监控和图表功能。其脚本使用PHP实现,故而Zabbix-Agent需要安装php环境。
      1.配置所有Agent(标准化目录结构)
      [root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #编辑配置文件引用key
      Include=/etc/zabbix/zabbix_agentd.d/*.conf
      [root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell脚本
      2.安装percona Monitoring Plugins   percona工具集https://www.percona.com/software/documentation
      [root@linux-node1 ~]# yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
      [root@linux-node1 ~]# yum install percona-zabbix-templates -y
      3.查看目录结构
      [root@linux-node1 percona]# tree /var/lib/zabbix/percona
      /var/lib/zabbix/percona
      ├── scripts#脚本文件路径
      │   ├── get_mysql_stats_wrapper.sh
      │   └── ss_get_mysql_stats.php
      └── templates
      ├── userparameter_percona_mysql.conf#key文件位置
      └── zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6.xml #模板文件位置
      4.将key的的自配置文件复制至/etc/zabbix_agentd.conf.d目录下(以实际目录为准)
      [root@linux-node1 ~]# cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf/etc/zabbix/zabbix_agentd.d/percona_mysql.conf
      5.重启zabbix-agent
      [root@linux-node1 ~]# systemctl restart zabbix-agent
      6.修改脚本中的MySQL用户名和密码(可以单独建立一个用来做监控)
      [root@linux-node1 scripts]# vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
      $mysql_user = 'root';
      $mysql_pass = 'xuliangwei.com';
      $mysql_port = 3306;
      7. 测试一定使用Zabbix_get来获取值(否则会失败),
      [root@linux-node1 scripts]# zabbix_get -s 192.168.90.11 -k MySQL.pool-read-requests
      223003813
      8.如果获取不到值常见问题
      1.看是否是MySQL密码错误
      2.不要直接执行脚本来获取
      3.删除/tmp/localhost-mysql_cacti_stats.txt文件(因为所有的值都会写入到这个文件)
      4.权限问题导致
      9.导入percona自带模板,如图4-7、图4-8、
      [root@linux-node1 templates]# sz/var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6.xml #下载percona官网提供的模板

      图4-7

      图4-8
      10.导入后将模板应用于主机,如图4-9

      图4-9
    1.3.5Tomcat监控
      在Zabbix中,JMX监控数据的获取由专门的代理程序来实现,即Zabbix-Java-Gateway来负责数据的采集,Zabbix-Java-Gateway和JMX的Java程序之间通信获取数据
      JMX在Zabbix中的运行流程:
      a)Zabbix-Server找Zabbix-Java-Gateway获取Java数据
      b)Zabbix-Java-Gateway找Java程序(zabbix-agent)获取数据
      c)Java程序返回数据给Zabbix-Java-Gateway
      d)Zabbix-Java-Gateway返回数据给Zabbix-Server
      e)Zabbix-Server进行数据展示
      配置JMX监控的步骤:
      a)安装Zabbix-Java-Gateway。
      b)配置zabbix_java_gateway.conf参数。
      c)配置zabbix-server.conf参数。
      d)Tomcat应用开启JMX协议。
      e)ZabbixWeb配置JMX监控的Java应用。
      1.配置所有Agent(标准化目录结构)
      [root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #编辑配置文件引用key
      Include=/etc/zabbix/zabbix_agentd.d/*.conf
      [root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell脚本
      2.安装java以及zabbix-java-gateway (如果源码安装加上--enable-java参数)
      [root@linux-node1 ~]# yum install  zabbix-java-gateway java-1.8.0-openjdk -y
      3.启动zabbix-java-gateway
      [root@linux-node1 ~]# systemctl start zabbix-java-gateway
      [root@linux-node1 ~]# netstat -lntup|grep 10052
      tcp6       00 :::10052:::*                    LISTEN      13042/java
      4.修改zabbix-server 配置文件
      [root@linux-node1 ~]# vim /etc/zabbix/zabbix_server.conf
      JavaGateway=192.168.90.11  # java gateway地址(如果和zabbix-server装一起可以写127.0.0.1)
      JavaGatewayPort=10052  #java gateway端口,默认端口10052
      StartJavaPollers=5  #启动进程轮询java gateway
      5.重启zabbix-server
      [root@linux-node1 ~]# systemctl restart zabbix-server
      6.开启tomcat的远程jvm配置文件
      [root@linux-node1 ~]# vim /usr/local/tomcat/bin/catalina.sh­#找到自己本机tomcat路径(如果是salt来管,修改salt模板即可)
      CATALINA_OPTS="$CATALINA_OPTS
      -Dcom.sun.management.jmxremote
      -Dcom.sun.management.jmxremote.port=12345
      -Dcom.sun.management.jmxremote.authenticate=false
      -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.90.11"
      7. 远程jvm配置文件解释
      CATALINA_OPTS="$CATALINA_OPTS
      -Dcom.sun.management.jmxremote # #启用远程监控JMX
      -Dcom.sun.management.jmxremote.port=12345 #jmx远程端口,Zabbix添加时必须一致
      -Dcom.sun.management.jmxremote.authenticate=false #不开启用户密码认证
      -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.90.11" #运行tomcat服务IP(不要填写错了)
      5.重启tomcat服务
      [root@linux-node1 ~]# /usr/local/tomcat/bin/shutdown.sh
      [root@linux-node1 ~]# /usr/local/tomcat/bin/startup.sh
      6.zabbix添加tomcat主机,并添加Zabbix自带java监控模板,如图4-10、图4-11、图4-12

      图4-10

      图4-11

      图4-12
      9.查看图形,如图4-13

      图4-13
      10.自带的监控可能无法满足企业需求,大家可以根据公司的业务定制不同的JVM监控模板。
    1.3.6Redis监控
      Redis使用自带的INFO命令,进行状态监控。以一种易于解释且易于阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。
      1.配置所有Agent(标准化目录结构)
      [root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #编辑配置文件引用key
      Include=/etc/zabbix/zabbix_agentd.d/*.conf
      [root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell脚本
      2.编写Shell脚本
      q   脚本端口、连接redis服务地址根据具体情况进行修改
      q   AUTH认证没有开启,将PASSWD修改为空即可。
      [root@linux-node1 ~]# cd /etc/zabbix/scripts
      [root@linux-node1 scripts]# vim redis_status.sh
      #!/bin/bash
      ############################################################
      # $Name:         redis_status.sh
      # $Version:      v1.0
      # $Function:     Redis Status
      # $Author:       xuliangwei
      # $organization: www.xuliangwei.com
      # $Create Date:  2016-06-23
      # $Description:  Monitor Redis Service Status
      ############################################################
      R_COMMAND="$1"
      R_PORT="6379"  #根据实际情况调整端口
      R_SERVER="127.0.0.1"  #根据具体情况调整IP地址
      PASSWD="123"        #如果没有设置Redis密码,为空即可
      redis_status(){
      (echo -en "AUTH $PASSWD\r\nINFO\r\n";sleep 1;) | /usr/bin/nc "$R_SERVER" "$R_PORT" > /tmp/redis_"$R_PORT".tmp
      REDIS_STAT_VALUE=$(grep "$R_COMMAND:" /tmp/redis_"$R_PORT".tmp | cut -d ':' -f2)
      echo "$REDIS_STAT_VALUE"
      }
      case $R_COMMAND in
      used_cpu_user_children)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      used_cpu_sys)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      total_commands_processed)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      role)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      lru_clock)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      latest_fork_usec)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      keyspace_misses)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      keyspace_hits)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      keys)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      expires)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      expired_keys)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      evicted_keys)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      connected_clients)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      changes_since_last_save)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      blocked_clients)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      bgsave_in_progress)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      bgrewriteaof_in_progress)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      used_memory_peak)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      used_memory)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      used_cpu_user)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      used_cpu_sys_children)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      total_connections_received)
      redis_status "$R_PORT" "$R_COMMAND"
      ;;
      *)
      echo  $"USAGE:$0  {used_cpu_user_children|used_cpu_sys|total_commands_processed|role|lru_clock|latest_fork_usec|keyspace_misses|keyspace_hits|keys|expires|expired_keys|connected_clients|changes_since_last_save|blocked_clients|bgrewriteaof_in_progress|used_memory_peak|used_memory|used_cpu_user|used_cpu_sys_children|total_connections_received}"
      esac
      Redis状态解释:
      server : Redis 服务器信息,包含以下域:
      redis_version : Redis 服务器版本
      redis_git_sha1 : Git SHA1
      redis_git_dirty : Git dirty flag
      os : Redis 服务器的宿主操作系统
      arch_bits : 架构(32 或 64 位)
      multiplexing_api : Redis 所使用的事件处理机制
      gcc_version : 编译 Redis 时所使用的 GCC 版本
      process_id : 服务器进程的 PID
      run_id : Redis 服务器的随机标识符(用于 Sentinel 和集群)
      tcp_port : TCP/IP 监听端口
      uptime_in_seconds : 自 Redis 服务器启动以来,经过的秒数
      uptime_in_days : 自 Redis 服务器启动以来,经过的天数
      lru_clock : 以分钟为单位进行自增的时钟,用于 LRU 管理
      clients : 已连接客户端信息,包含以下域:
      connected_clients : 已连接客户端的数量(不包括通过从属服务器连接的客户端)
      client_longest_output_list : 当前连接的客户端当中,最长的输出列表
      client_longest_input_buf : 当前连接的客户端当中,最大输入缓存
      blocked_clients : 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
      memory : 内存信息,包含以下域:
      used_memory : 由 Redis 分配器分配的内存总量,以字节(byte)为单位
      used_memory_human : 以人类可读的格式返回 Redis 分配的内存总量
      used_memory_rss : 从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps 等命令的输出一致。
      used_memory_peak : Redis 的内存消耗峰值(以字节为单位)
      used_memory_peak_human : 以人类可读的格式返回 Redis 的内存消耗峰值
      used_memory_lua : Lua 引擎所使用的内存大小(以字节为单位)
      mem_fragmentation_ratio : used_memory_rss 和 used_memory 之间的比率
      persistence : RDB AOF 的相关信息
      stats : 一般统计信息
      replication : 主/从复制信息
      cpu : CPU 计算量统计信息
      commandstats : Redis 命令统计信息
      cluster : Redis 集群信息
      keyspace : 数据库相关的统计信息
      参数还可以是下面这两个:
      all : 返回所有信息
      default : 返回默认选择的信息
      当不带参数直接调用 INFO 命令时,使用 default 作为默认参数。
      3.给脚本添加执行权限
      [root@linux-node1 scripts]# chmod +x redis_status.sh
      4.Zabbix权限不足处理办法
      [root@linux-node1 ~]# rm -f /tmp/redis_6379.tmp
      5.key的redis_status.conf的子配置文件如下:
      [root@linux-node1 ~]# cat /etc/zabbix/zabbix_agentd.d/redis_status.conf
      UserParameter=redis_status
  • ,/bin/bash /etc/zabbix/scripts/redis_status.sh "$1"
      6.重启zabbix-agent
      [root@linux-node1 ~]# systemctl restart  zabbix-agent
      7.测试一定使用Zabbix_get来获取值
      [root@linux-node1 ~]# zabbix_get -s 192.168.90.11 -k redis_status[used_cpu_sys]
      16.81
      8.展示所有Key(记得将模板关联主机)如图4-14

      图4-14
      9.查看图形,如图4-15、图4-16(图形自定义)

      图4-15

      图4-16
    1.3.7Memcached监控
    1.3.8RabbitMQ监控
    1.4WEB监控
      Web监控是用来监控Web程序的,通过模拟用户访问网站,对特定的结果进行比较,下载速度、响应时间、返回状态码、返回字符串等特定的数据进行比较和监控,从而判断网站的Web服务的可用性。其实这些操作我们可以通过脚本、程序来进行自定义监控。如:Linux下的curl命令、以及现有的程序和http库都可以帮我们完成这项需求。
      了解监控性能指标如表4-1
      监控项
      特征
      解释说明
      HTTP响应速度
      服务器性能
      网络速度
      缓存和压缩
      对特定的指标进行抽样监控,即使发现服务的可用性和性能指标
      HTTP下载速度
      对特定的文件抽样下载
      HTTP状态码
      重点监控40X、50X
      404空连接是影响性能的一个重要指标,50X表示服务器内部故障
      表4-1
      以监控Zabbix的web程序为例展开监控,展示如何使用Web minitoring
      1.单击Configuration→Templates→点击Web→Create Web scanario,创建一个Scenario(可以在host或者templates上创建)如图4-17

      图4-17
      2.单击Create web Scenario 出现如图4-18界面

      图4-18
      其中各参数含义:
      q   Name:Web监控的名称,具有唯一性。(支持使用宏)。
      q   Application:选择Web监控属于哪个组。
      q   New Application:创建新的组。
      q   Update interval:Scenari间隔的时间,单位是秒。
      q   Attempts:重试次数。
      q   Agent:浏览器类型,支持自定义。
      q   HTTP proxy:HTTP代理格式,端口使用1080
      q   Variables:Scenario的变量。
      q   Headers:标题
      3.steps表示可以按步骤设置多个监控项,如图4-19是添加Steps的监控项。

      图4-19
      其中,各参数的含义如下:
      Name:名称。
      URL:监控的web页面(全路径带页面名)。
      Post:传递给页面的参数,多个参数之间用&连接。(可以引用定义好的变量)。
      Variables:设置变量。
      Timeout:超时时间。
      Required string:页面中嗯那个匹配到字符,若不匹配,则认为出错。
      Required Status code:页面返回码。
      如果有多个Url,依次添加,如图4-20

      图4-20
      4.Authentication认证,Zabbix登陆需要用户名密码,如图4-21

      图4-21
      5.添加好后的监控数据,点击Monitoring→Web(不要忘记将模板link到一台主机)如图4-22

      图4-22
      6.创建web 主页返回时间的触发器Configration→template(对应web监控模板)→trigger→create trigger(Zabbix的web监控自带itme)如图4-23

      图4-23
    1.5流量分析
      piwik(开源产品)、google分析、百度统计、站长工具等等一堆统计的东西,只需要在页面嵌入一个js即可。
      流量分析对于一家电商公司来说,通过对订单来源的统计和分析,可以了解我们在某个网站上的广告投入有没有收到预期的效果。可以区分不同地区的访问人数、甚至商品交易额等。
      作为一名运维工程师很有必要掌握公司站点的各种访问详情。
      作为运维人员应该注意的问题? 例如:现在有一个在一个活动产品上线?
      1.了解业务部门此次产品上线时间以及推广费用为多少,然后调整机房服务器带宽流量
      2. 查看没有上线和上线之后网站的pv 、uv、ip数目,结合piwik 和zabbix截图分析
      3.上线之后了解业务部门订单数量,增长率等等
      4.查看数据库和前端web是否有性能瓶颈
    1.6网络监控
      网络监控是我们构建监控平台是必须要考虑的,尤其是针对有多个机房的场景,各个机房之间的网络状态,机房和全国各地的网络状态都是我们需要重点关注的对象,那么如何掌握这些状态信息呢?我们需要借助于网络监控工具Smokeping。
      Smokeping 是rrdtool的作者Tobi Oetiker的作品,是用Perl写的,主要是监视网络性能,www 服务器性能,dns查询性能等,使用rrdtool绘图,而且支持分布式,直接从多个agent进行数据的汇总。
      同时,由于自己监控点比较少,还可以借助很多商业的监控工具,比如监控宝、基调、博瑞等。同时这些服务提供商还可以帮助你监控CDN的状态。
    1.7安全监控
      针对四层物理设备可以使用iptables、以及硬件防火墙。云环境可以直接使用自带防火墙功能。
      针对七层Web层面通过Nginx + Lua编写了一个WAF,然后把相关的日志记录到了Elasticsearch中,通过kibana可以图形化的展示不同的×××类型的统计。
      同时可以使用安全产品,放DDOS×××,安全保、百度加速乐,牛盾云安全。等等。
    1.8日志监控
      通常情况下,系统会产生系统日志、应用程序会有应用的访问日志、错误日志,服务有运行日志等,可以使用ELK来进行日志监控。
      对于日志来说,最常见的需求就是收集、存储、查询、展示,开源社区正好有相对应的开源项目:
      logstash(收集)
      elasticsearch(存储+搜索)
      kibana(展示)
      我们将这三个组合起来的技术称之为ELK Stack,所以说ELK Stack指的是Elasticsearch、Logstash、Kibana技术栈的结合。
      如果收集了错误日志,那么如果部署更新有异常出现,可以立即在kibana上看到。当然也可以使用Zabbix来进行错误日志的过滤来进行告警。
    1.9业务监控
      小王再去向经理汇报,刚走到门口被总经理碰上了,张总说:小王啊,你们经理汇报你最近监控工作干的不错,你给我说下,咱们现在10点的时候总订单是多少,每分钟平均订单有多少?
      小王又蒙了,我自己也曾经就是那个小王!
      没有业务指标监控的监控平台是一个不完善的监控平台,通常在我们做监控系统中,必须将我们重要的业务指标进行监控,并设置阈值进行告警通知。
      比如每分钟的订单、每分钟注册、日活用户、短信使用量等重要的业务指标都可以加入到Zabbix上。
    1.10可视化监控
      经过小王的各种努力,终于一个相对完善的监控平台使用Zabbix构建起来了,小王为此还做一个漂亮的screen,来进行展示,但是有一天突然订单量特别少,张总又一次到了运维部,但失望而归,因为整个监控体系并不能反映出来订单量为什么减少了?
      运维的重要目标之一就是数据的可视化,一个监控平台不能很好的反映出来业务的波动,就是耍流氓。之前的一切努力在业务部门的领导中变得一文不值!!!我们能做的有以下几点:
      面向传统运维:
      尽可能的完善业务监控,如果有专门的业务分析系统,要想办法和运维的监控平台进行结合。
      梳理清楚各个子系统之间和业务的关系,比如如果突然间流量增加了50M,能够快速的知道这50M流量到了那个业务系统上,访问的哪些URL,以及这个业务系统的相关状态。
      面向DevOps
      将所有的监控项和业务之间建立关系树,比如业务、网络、系统、数据库、流量、推广活动(流量分析)之间可以形成一个庞大的关系链。这是一个比较庞大的工程,业务是多变的,如何让监控平台能尽可能的适应多变的业务是一个艰巨的任务。
      转载:http://www.cnblogs.com/xuliangwei/p/6658842.html


  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-665320-1-1.html 上篇帖子: zabbix 3.0.2自定义脚本 下篇帖子: 安装zabbix 3.0.3 LNMP
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表