中小企业zabbix监控生产案例实践

一、项目规划架构方案

1.1 主机分组

交换机
Nginx
Tomcat
Mysql

1.2 监控对象识别

使用SNMP监控交换机
使用IPMI监控服务器硬件
使用Agent监控服务器
使用JMX监控java
监控Nginx状态
监控Mysql
监控Web状态

一、监控实践

2.1 SNMP监控网络设备

2.1.1交换机上开始SNMP

  1. config t
  2. snmp-server community public ro

2.1.2在zabbix上添加监控

设置SNMP interfaces

2.1.3关联监控模板

选择默认的Template-SNMP-device,(网络设备,可以监控交换机,路由器和防火墙等;模板里面item使用了宏,如下图

所以主机里面要设置宏,替代默认的模板中的宏,配置网络设备时,团体名命名为下面的名字

2.2 添加硬件监控(服务器IPMI)

  • 经验:直接用IPMI监控,经常获取不到数据,模板自带的item也不可能不适合真正的服务器
  • 推荐:使用自定义item,本地执行ipmitool命令监控获取数据,可以用来监控服务器风扇转速或者cpu温度

2.3 添加系统监控

使用zabbix agent监控,略

2.4 添加应用监控

2.4.1 JAVA应用

使用JXM模式+java_gateway代理监控
java_gateway可以运行在任何服务器上,是一个单独的服务

1)安装zabbix-java-gateway

  1. [root@linux-node1 ~]#yum install -y zabbix-java-gateway

2)配置zabbix_java_gateway,其实什么都不用改

  1. [root@linux-node1 ~]#vim /etc/zannox/zabbix_java_gateway

3)启动zabbix_java_gateway,检查端口和进程

  1. [root@linux-node1 ~]#systemctl start zabbix-java-gateway
  2. [root@linux-node1 ~]#ps -ef|grep java
  3. [root@linux-node1 ~]#netstat -lntup|grep 10052

4)告诉zabbix-server服务器,javaGateway服务器的位置,重启server
5)开启jmx远程监控

  1. [root@linux-node2 ~]# vim /usr/local/tomcat/bin/catalina.sh
  2. CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
  3. -Dcom.sun.management.jmxremote.port=8888
  4. -Dcom.sun.management.jmxremote.ssl=false
  5. -Dcom.sun.management.jmxremote.authenticate=false
  6. -Djava.rmi.server.hostname=192.168.56.12"
  7. [root@linux-node2 ~]# /usr/local/tomcat/bin/shutdown.sh
  8. [root@linux-node2 ~]# /usr/local/tomcat/bin/startup.sh

6)在zabbix-server上添加tomcat的主机,并连接Template-JMX-Generic模板,选择JMX interfaces,如下图

2.4.2 Nginx应用

1)开启nginx监控
在nginx配置文件中添加一个location,只允许本地访问

  1. location /nginx_status{
  2. stub_status on;
  3. access_log off;
  4. allow 127.0.0.1;
  5. deny all
  6. }

2)编写脚本来进行数据采集(此脚本可以用来监控redis,memcached,nginx,tcp-status)

  1. [root@linux-node1 ~]# cat redis-memcached-nginx-tcp.sh
  2. #!/bin/bash
  3. ############################################################
  4. # $Name: zabbix_linux_plugins.sh
  5. # $Version: v1.0
  6. # $Function: zabbix plugins
  7. # $Author: Chuck
  8. # $organization: www.52devops.com
  9. # $Create Date: 2014-08-10
  10. # $Description: Monitor Linux Service Status
  11. ############################################################
  12. tcp_status_fun(){
  13. TCP_STAT=$1
  14. #netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,state[key]}' > /tmp/netstat.tmp
  15. ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/netstat.tmp
  16. TCP_STAT_VALUE=$(grep "$TCP_STAT" /tmp/netstat.tmp | cut -d ' ' -f2)
  17. if [ -z $TCP_STAT_VALUE ];then
  18. TCP_STAT_VALUE=0
  19. fi
  20. echo $TCP_STAT_VALUE
  21. }
  22. nginx_status_fun(){
  23. NGINX_PORT=$1
  24. NGINX_COMMAND=$2
  25. nginx_active(){
  26. /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
  27. }
  28. nginx_reading(){
  29. /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
  30. }
  31. nginx_writing(){
  32. /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
  33. }
  34. nginx_waiting(){
  35. /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
  36. }
  37. nginx_accepts(){
  38. /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
  39. }
  40. nginx_handled(){
  41. /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
  42. }
  43. nginx_requests(){
  44. /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
  45. }
  46. case $NGINX_COMMAND in
  47. active)
  48. nginx_active;
  49. ;;
  50. reading)
  51. nginx_reading;
  52. ;;
  53. writing)
  54. nginx_writing;
  55. ;;
  56. waiting)
  57. nginx_waiting;
  58. ;;
  59. accepts)
  60. nginx_accepts;
  61. ;;
  62. handled)
  63. nginx_handled;
  64. ;;
  65. requests)
  66. nginx_requests;
  67. esac
  68. }
  69. memcached_status_fun(){
  70. M_PORT=$1
  71. M_COMMAND=$2
  72. echo -e "stats\nquit" | nc 127.0.0.1 "$M_PORT" | grep "STAT $M_COMMAND " | awk '{print $3}'
  73. }
  74. redis_status_fun(){
  75. R_PORT=$1
  76. R_COMMAND=$2
  77. (echo -en "INFO \r\n";sleep 1;) | nc 127.0.0.1 "$R_PORT" > /tmp/redis_"$R_PORT".tmp
  78. REDIS_STAT_VALUE=$(grep ""$R_COMMAND":" /tmp/redis_"$R_PORT".tmp | cut -d ':' -f2)
  79. echo $REDIS_STAT_VALUE
  80. }
  81. main(){
  82. case $1 in
  83. tcp_status)
  84. tcp_status_fun $2;
  85. ;;
  86. nginx_status)
  87. nginx_status_fun $2 $3;
  88. ;;
  89. memcached_status) memcached_status_fun $2 $3;
  90. ;;
  91. redis_status) redis_status_fun $2 $3;
  92. ;;
  93. *)
  94. echo $"Usage: $0 {tcp_status key|memcached_status key|redis_status key|nginx_status key}"
  95. esac
  96. }
  97. main $1 $2 $3
  98. [root@linux-node1 ~]# chmod +x redis-memcached-nginx-tcp.sh

添加完测试脚本是否正常

  1. [root@linux-node1 ~]# ./redis-memcached-nginx-tcp.sh nginx_status 8080 active
  2. 101

3)设置用户自定义参数

  1. [root@linux-node1 ~]#cat redis-memcached-nginx-tcp.conf
  2. UserParameter=linux_status[\*],/etc/zabbix/zabbix_agetd.d/redis-memcached-nginx-tcp.sh "$1" "$2" "$3"

4)增加zabbix-agent配置,并通过zabbix-server测试
修改agent配置

  1. [root@linux-node1 ~]#Include=/etc/zabbix/zabbix_agentd.d/\*.conf
  2. [root@linux-node1 ~]#service zabbix-agent restart

server端get测试

  1. [root@linux-node1 ~]#zabbix_get -s 192.168.11.11 -k linux_status[nginx_status,8080,active]
  2. 12

5)添加template,添加item,多次克隆添加不同item即可

6)创建图形

7)创建触发器

8)创建通用模板

9)redis,memcached或者tcp-status的监控模板请联系博主,联系方式见博客首页右上方联系方式

2.4.3 使用percona监控插件监控Mysql应用

学习percona请移步percona-mysql, 此原理是php连接mysql数据库,shell脚本获取数据,下面开始部署
1)在agent端安装模板(但是此模板可能不生效,如有需求请联系博主)

  1. [root@linux-node1 ~]#yum install percona-zabbix-templates

2)创建zabbix-agent的配置文件

  1. [root@linux-node1 ~]#mkdir -p /etc/zabbix_agentd.conf.d/
  2. [root@linux-node1 ~]#cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix_agentd.conf.d/userparameter_percona_mysql.conf

3)修改agent配置并重启

  1. [root@linux-node1 ~]#Include=/etc/zabbix/zabbix_agentd.d/\*.conf
  2. [root@linux-node1 ~]#service zabbix-agent restart

4)配置连接Mysql

  1. <?php
  2. $mysql_user = 'zabbix';
  3. $mysql_pass = '123456';<

5)测试脚本是否正常,确认密码争取,否则会连不上mysql

  1. [root@linux-node1 ~]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
  2. 405647

6)配置mysql

  1. [client]
  2. user = zabbix
  3. password = 123456

7)使用zabbix测试脚本,返回0正常,1代表access denied

  1. [root@linux-node1 ~]#sudo -u zabbix -H /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh running-slave
  2. 0

8)import模板,添加mysql主机关联此模板,添加trigger,添加Graph展示

3
未经许可,不得转载,否则将受到作者追究,博主联系方式见首页右上角

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论
取消评论
代码 贴图 加粗 链接 删除线 签到

(5)条精彩评论:
  1. 匿名
    :eek:
    匿名2016-06-19 07:16 回复
    • 匿名
      ke saven estos papa fritas k asen comentarios ablando mal yo creo k cada mago tiene su personalidad es tan los magos serios ,magia con humor ,y muchos mas et3;.82c0&.#vos dale para adelante nomas
      匿名2016-07-04 15:18 回复
  2. 匿名
    Awesome review! I hear you on the weird looking top of the toy… it’s a little ofgf-uttinp, but hey, if it transmits strong vibrations, I guess that’s all that really matters, right?
    匿名2016-07-04 15:01 回复
  3. 匿名
    template模版没有吗?
    匿名2016-09-12 10:30 回复
    • admin
      右上方有作者联系方式,不认真看吗
      admin2016-09-13 15:30 回复