zoukankan      html  css  js  c++  java
  • Zabbix之六----Zabbix监控memcached、redis、nginx及邮件分级报警通知

    实战一:Zabbix监控memcached缓存

    1、环境准备:

    192.168.7.100:zabbix-server服务器主机

    192.168.7.101:memcached服务器

    2、配置memcached服务

    1、在node1主机上安装memcached服务(主动模式主机)

    [root@node1 ~]# yum install memcached -y
    

    2、修改memcached配置文件

    [root@node1 ~]# vim /etc/sysconfig/memcached 
    PORT="11211"
    USER="memcached"
    MAXCONN="4096"  # 最大连接数
    CACHESIZE="1024" # 最大缓存
    OPTIONS=""
    

    3、启动memcached服务

    [root@node1 ~]# systemctl start memcached
    

    4、安装nc命令

    [root@node1 ~]# yum install nc  -y
    

    5、用echo -e命令验证:取出线程数和当前连接数的取值效果

    [root@node1 ~]# echo -e "stats
    quit" | nc 127.0.0.1 "11211" | grep "STAT threads"  | awk '{print $3}'  # 取出当前的线程数
    4
    [root@node1 ~]# echo -e "stats
    quit" | nc 127.0.0.1 "11211" | grep "STAT curr_connections"  | awk '{print $3}'  # 取出当前连接数
    10
    [root@node1 yum.repos.d]# echo -e "stats
    quit" | nc 127.0.0.1 "11211"  # 查看所有的数据
    STAT pid 111624
    STAT uptime 2825
    STAT time 1582536863
    STAT version 1.4.15
    STAT libevent 2.0.21-stable
    STAT pointer_size 64
    STAT rusage_user 0.192507
    STAT rusage_system 0.261260
    STAT curr_connections 10
    STAT total_connections 16
    STAT connection_structures 11
    STAT reserved_fds 20
    STAT cmd_get 0
    STAT cmd_set 0
    STAT cmd_flush 0
    STAT cmd_touch 0
    STAT get_hits 0
    STAT get_misses 0
    STAT delete_misses 0
    STAT delete_hits 0
    STAT incr_misses 0
    STAT incr_hits 0
    STAT decr_misses 0
    STAT decr_hits 0
    STAT cas_misses 0
    STAT cas_hits 0
    STAT cas_badval 0
    STAT touch_hits 0
    STAT touch_misses 0
    STAT auth_cmds 0
    STAT auth_errors 0
    STAT bytes_read 66
    STAT bytes_written 5158
    STAT limit_maxbytes 1073741824
    STAT accepting_conns 1
    STAT listen_disabled_num 0
    STAT threads 4
    STAT conn_yields 0
    STAT hash_power_level 16
    STAT hash_bytes 524288
    STAT hash_is_expanding 0
    STAT bytes 0
    STAT curr_items 0
    STAT total_items 0
    STAT expired_unfetched 0
    STAT evicted_unfetched 0
    STAT evictions 0
    STAT reclaimed 0
    END

    6、在/etc/zabbix/zabbix_agentd.d目录下书写memcached.sh脚本,并加上执行权限

    [root@node1 zabbix_agentd.d]# cat memcached.sh 
    #!/bin/bash
    memcached_status(){
    	M_PORT=$1
    	M_COMMAND=$2
    	echo -e "stats
    quit" | nc 127.0.0.1 "$M_PORT" | grep "STAT $M_COMMAND" | awk '{print $3}'
    }
    
    main(){
    	case $1 in
    	  memcached_status)
           	     memcached_status $2 $3
    	  ;;
    	esac
    }
    
    main $1 $2 $3
    

    加上执行权限

    # chmod  +x  memcached.sh
    

    7、验证脚本效果:

    [root@node1 zabbix_agentd.d]# bash memcached.sh  memcached_status 11211 curr_connections
    10
    

    8、编辑/etc/zabbix/zabbix_agentd.conf配置文件

    Include=/etc/zabbix/zabbix_agentd.d/*.conf  # 定义*.conf配置文件的存放目录,默认是打开的
    # UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/tcp_conn.sh $1 $2  # 将原来监控TCP连接数的注释掉,在Include指定的目录下进行创建新的以conf结尾的配置文件。
    

    9、在/etc/zabbix/zabbix_agentd.d/目录下创建zabbix_agent_linux.conf配置文件,修改配置文件,调用memcached.sh脚本文件

    UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/tcp_conn.sh $1 $2  # 这个是调用之前创建的TCP连接数的脚本
    UserParameter=memcached_status[*],/etc/zabbix/zabbix_agentd.d/memcached.sh $1 $2 $3  # 调用最新的memcached.sh的脚本文件路径
    

    10、重启zabbix-agent服务

    [root@node1 zabbix_agentd.d]# systemctl restart zabbix-agent
    

    11、在zabbix-server服务器端验证此时的memcached服务器是否正常,返回正常,就可以再zabbix网页上添加主机和模板

    [root@zabbix ~]# zabbix_get  -s 192.168.7.101 -p 10050 -k "memcached_status[memcached_status,11211,curr_connections]"
    10
    

    3、在zabbix网页上创建memcached模板

    1、在zabbix网页上创建一个通用的memcached模板

     2、在创建好的memcached_linux模板下,创建监控项和图形

     4、创建图形

     5、创建触发器

    6、将触发器命名与监控项一致的名称

     7、将之前创建好的主机进行关联模板(192.168.7.101)

     8、关联创建的memcached_linux模板

     4、在memcached模板的基础上创建线程数

    1、在创建的当前连接数的基础上克隆,创建线程数的监控

    2、修改为当前线程数监控项

     3、创建线程数的图形

     4、 添加监控项的线程数到图形配置里

    5、查看创建的memcached_当前连接数图形状态

     6、查看创建memcached_当前线程数的图形

    实战二:Zabbix监控redis缓存

    1、安装并配置redis服务器

    (1)安装epel源及redis包

    # yum install epel-release  -y
    # yum install redis  -y
    

    (2)简单配置redis文件,将监听地址改为0.0.0.0,允许进行远程连接

    # vim /etc/redis.conf
    bind 0.0.0.0
    
    # systemctl restart redis  # 重启redis服务器
    

    用redis-cli命令进入到redis服务器中,输入info查看关键的键值信息,用来创建监控项:

    [root@node1 zabbix_agentd.d]# redis-cli
    127.0.0.1:6379> info
    # Server
    redis_version:3.2.12
    redis_git_sha1:00000000
    redis_git_dirty:0
    redis_build_id:7897e7d0e13773f
    redis_mode:standalone
    os:Linux 3.10.0-1062.el7.x86_64 x86_64
    arch_bits:64
    multiplexing_api:epoll
    gcc_version:4.8.5
    process_id:22078
    run_id:d6a5acaec70bb2ea0c90add2a6e878b78d0f9c60
    tcp_port:6379
    uptime_in_seconds:2227
    uptime_in_days:0
    hz:10
    lru_clock:5487366
    executable:/usr/bin/redis-server
    config_file:/etc/redis.conf
    
    # Clients
    connected_clients:1
    client_longest_output_list:0
    client_biggest_input_buf:0
    blocked_clients:0
    
    # Memory
    used_memory:813440
    used_memory_human:794.38K
    used_memory_rss:5926912
    used_memory_rss_human:5.65M
    used_memory_peak:813440
    used_memory_peak_human:794.38K
    total_system_memory:1907818496
    total_system_memory_human:1.78G
    used_memory_lua:37888
    used_memory_lua_human:37.00K
    maxmemory:0
    maxmemory_human:0B
    maxmemory_policy:noeviction
    mem_fragmentation_ratio:7.29
    mem_allocator:jemalloc-3.6.0
    
    # Persistence
    loading:0
    rdb_changes_since_last_save:0
    rdb_bgsave_in_progress:0
    rdb_last_save_time:1582543443
    rdb_last_bgsave_status:ok
    rdb_last_bgsave_time_sec:-1
    rdb_current_bgsave_time_sec:-1
    aof_enabled:0
    aof_rewrite_in_progress:0
    aof_rewrite_scheduled:0
    aof_last_rewrite_time_sec:-1
    aof_current_rewrite_time_sec:-1
    aof_last_bgrewrite_status:ok
    aof_last_write_status:ok
    
    # Stats
    total_connections_received:5
    total_commands_processed:6
    instantaneous_ops_per_sec:0
    total_net_input_bytes:83
    total_net_output_bytes:28399
    instantaneous_input_kbps:0.00
    instantaneous_output_kbps:0.00
    rejected_connections:0
    sync_full:0
    sync_partial_ok:0
    sync_partial_err:0
    expired_keys:0
    evicted_keys:0
    keyspace_hits:0
    keyspace_misses:0
    pubsub_channels:0
    pubsub_patterns:0
    latest_fork_usec:0
    migrate_cached_sockets:0
    
    # Replication
    role:master
    connected_slaves:0
    master_repl_offset:0
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    
    # CPU
    used_cpu_sys:2.75
    used_cpu_user:1.16
    used_cpu_sys_children:0.00
    used_cpu_user_children:0.00
    
    # Cluster
    cluster_enabled:0
    
    # Keyspace

    (3)创建redis采取关键信息脚本:/etc/zabbix/zabbix_agentd.d/目录下常见redis_status.sh脚本:

    [root@node1 zabbix_agentd.d]# cat redis_status.sh 
    #!/bin/bash
    redis_status(){
    	R_PORT=$1
    	R_COMMAND=$2
    	(echo -en "INFO 
    ";sleep 1;) | nc 127.0.0.1 "$R_PORT" > /tmp/redis_"$R_PORT".tmp  #在/tmp目录下创建文件
    	REDIS_STAT_VALUE=$(grep ""$R_COMMAND":" /tmp/redis_"$R_PORT".tmp | cut -d ':' -f2) 
    	echo $REDIS_STAT_VALUE
    }
    help(){
    	echo "${0} + redis_status + PORT + COMMAND"
    	}
    	
    main(){
    	case $1 in
    	  redis_status)
    	    redis_status $2 $3
    	    ;;
    	  *)
    	    help
    	    ;;
    	esac
    }
    
    main $1 $2 $3
    

     (4)将脚本加上执行权限

    [root@node1 zabbix_agentd.d]# chmod +x redis_status.sh 
    

    (5)验证脚本是否存在错误,在node1主机上执行脚本看能否取出数据

    [root@node1 zabbix_agentd.d]# bash redis_status.sh redis_status 6379 used_cpu_sys  # 可以生成数据
    1.12
    [root@node1 zabbix_agentd.d]# ll /tmp/redis_6379.tmp  #生成的临时数据是root权限的,需要删除,因为zabbix是用zabbix启动的,此时的数据就会存在问题。
    -rw-r--r-- 1 root root 2136 Feb 24 19:38 /tmp/redis_6379.tmp
    [root@node1 zabbix_agentd.d]# rm -rf  /tmp/redis_6379.tmp 
    -rw-r--r-- 1 root root 2136 Feb 24 19:38 /tmp/redis_6379.tmp
    

    (6)将脚本的路径存放在前面创建的/etc/zabbix/zabbix_agentd.d/zabbix_agent_linux.conf配置文件中

    UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/tcp_conn.sh $1 $2
    UserParameter=memcached_status[*],/etc/zabbix/zabbix_agentd.d/memcached.sh $1 $2 $3
    UserParameter=redis_status[*],/etc/zabbix/zabbix_agentd.d/redis_status.sh $1 $2 $3 # 新添加的redis服务器脚本路径
    

    (7)重启node1主机的zabbix-agent服务

    # systemctl restart zabbix-agent
    

    (8)在zabbix-server服务端验证node1主机,是否可以获取到数据

    [root@zabbix ~]# zabbix_get  -s 192.168.7.101 -p 10050 -k "redis_status[redis_status,6379,used_cpu_sys]"
    1.48
    

    2、在zabbix网页上创建redis-CPU利用率

    1、创建模板

     2、命名redis模板名称并添加群组

     3、针对redis-linux模板,创建监控项

         配置redis-CPU监控项信息

     4、创建图形

    将监控项的关联到图形上

     5、将创建的redis-linux模板关联到node1主机上

     选择模板,关联redis_linux模板

     3、在zabbix网页上创建redis服务器的连接数

    1、将上面redis-CPU监控项进行克隆,节约时间创建新的监控项

    2、配置redis客户端的监控项

     3、创建图形

     4、创建触发器

     配置触发器信息

     5、查看此时redis-CPU利用率情况

     6、查看redis-客户端连接数

     实战三:主动模式监控nginx服务

    1、安装nginx服务,并配置状态页

    (1)安装nginx服务,并配置状态页

    # yum install nginx -y  # 安装nginx服务
    
    # vim /etc/nginx/nginx.conf  # 在server段进行配置
            location /nginx_status {
                 stub_status;
                 allow 127.0.0.1;
                 deny all;
            }
    

    (2)启动nginx服务

    # systemctl start nginx
    

    (3)在node1主机的/etc/zabbix/zabbix_agentd.d目录下创建一个nginx_status.sh脚本

    [root@node1 zabbix_agentd.d]# chmod  +x nginx_status.sh 
    [root@node1 zabbix_agentd.d]# cat nginx_status.sh 
    #!/bin/bash 
    
    nginx_status_fun(){ #函数内容
    	NGINX_PORT=$1 #端口,函数的第一个参数是脚本的第二个参数,即脚本的第二个参数是段端口号
    	NGINX_COMMAND=$2 #命令,函数的第二个参数是脚本的第三个参数,即脚本的第三个参数是命令
    	nginx_active(){ #获取nginx_active数量,以下相同,这是开启了nginx状态但是只能从本机看到
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
            }
    	nginx_reading(){ #获取nginx_reading状态的数量
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
           }
    	nginx_writing(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
           }
    	nginx_waiting(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
           }
    	nginx_accepts(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
           }
    	nginx_handled(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
           }
    	nginx_requests(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{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;
    		esac 
    }
    
    main(){ #主函数内容
    	case $1 in #分支结构,用于判断用户的输入而进行响应的操作
    		nginx_status) #当输入nginx_status就调用nginx_status_fun,并传递第二和第三个参数
    			nginx_status_fun $2 $3;
    			;;
    		*) #其他的输入打印帮助信息
    			echo $"Usage: $0 {nginx_status key}"
    	esac #分支结束符
    }
    
    main $1 $2 $3
    

    (4)加上可执行权限。

    # chmod +x nginx_status.sh
    

    (5)修改/etc/zabbix/zabbix_agentd.d/zabbix_agent_linux.conf配置文件,和监控的memcached、redis一样

    UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/tcp_conn.sh $1 $2
    UserParameter=memcached_status[*],/etc/zabbix/zabbix_agentd.d/memcached.sh $1 $2 $3
    UserParameter=redis_status[*],/etc/zabbix/zabbix_agentd.d/redis_status.sh $1 $2 $3
    UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx_status.sh $1 $2 $3  # 添加最新监控的nginx脚本路径,由于自制的nginx模板是nginx.status,所以将此处也改为nginx.status
    

    重启zabbix-agent服务: systemctl restart zabbix-agent

    (6)在node1主机上验证脚本是否可以执行,返回一个数字,说明可以执行

    [root@node1 zabbix_agentd.d]# bash nginx_status.sh  nginx_status 80 active
    1
    

    (7)然后在zabbix-server服务器端验证node1上是否可以连接

    [root@zabbix ~]# zabbix_get  -s 192.168.7.101 -p 10050 -k "nginx_status[nginx_status,80,active]"
    1
    

    2、在zabbix网页上关联nginx状态页  

    (1)导入自制的nginx模板

    (2)将导入的模板关联到node1主机上(192.168.7.101)上

    (3)查看nginx客户端的连接数

     (4)查看nginx服务端的连接数

     实战四:创建邮件报警机制

    (1)设置qq邮箱,在qq邮箱内开启POP3/SMTP功能,发送短信,获取授权码

     (2)在zabbix网页上创建报警媒介类型

    (3)配置报警媒介的邮件信息

     (4)添加用户报警媒介

     (5)添加报警媒介

     (6)配置报警媒介

     (7)创建一个超级用户(VIP),为下面创建多级发送邮件使用

     (8)创建VIP超级用户

     (9)添加第二个邮箱地址

     (10)权限改为超级管理员

    (11)创建动作

     (12)创建动作

    (13)创建动作---->操作,实现多级邮件发送(实际就是发送多个邮箱地址),此处是1-3个动作发邮件。

        默认标题:业务报警{TRIGGER.STATUS}
        消息内容:上海业务报警服务器:{HOST.NAME},IP:{HOSTNAME1},详情:{ITEM.NAME}:{ITEM.VALUE}

     (14)使用上面创建的VIP用户,实现多级故障发邮件(3-5个动作发邮件)

     创建业务恢复邮件发送机制:

    默认标题:业务恢复
    消息内容:上海业务恢复服务器:{HOST.NAME},IP:{HOSTNAME1},详情:{ITEM.NAME}:{ITEM.VALUE}

    (15)模拟宕机nginx服务器

    # systemctl stop nginx
    

     (16)此时可以看到qq邮箱就收到了报警邮件

     (17)添加的VIP用户关联的邮箱收到了qq邮箱发来的报警,实现了分级报警

    (18)启动nginx服务:systemctl start nginx

    (19)此时就又可以看到业务恢复的邮件

     

      

      

     

      

      

     

     

      

     

      

      

     

      

      

      

      

      

      

      

      

      

  • 相关阅读:
    2017免费获取正版win10的方法
    Apache <Directory>… </Directory>配置
    针对left join以及limit的两条优化小技巧
    win10打印机突然无法启动
    mysql中的分组统计函数及其用法实例
    程序猿的日常生活-雨中
    java中的反射
    mysql中的截取函数及其实例
    集合与数组
    方法重写
  • 原文地址:https://www.cnblogs.com/struggle-1216/p/12359472.html
Copyright © 2011-2022 走看看