zabbix官方的一句话描述zabbix:

  • 监视任何事情适用于任何IT基础架构,服务,应用程序和资源的解决方案

  • Monitor anythingSolutions for any kind of IT infrastructure, services, applications, resources

  • 监控基础概论

  1. zabbix并非监控,而是实现监控的工具

  2. Zabbix-server是一个c/s和b/s结构

  3. 安装zabbbix的服务器安装时和php7.1有冲突:若此机器上已经安装php7.1就安装不上zabbix

为什么要使用监控?

1.对系统不间断实时监控

2.实时反馈系统当前状态

3.保证服务可靠性安全性

4.保证业务持续稳定运行

我们去一家新的公司应该如何入手?

1.硬件监控–路由器、交换机、防火墙

2.系统监控–cpu、内存、磁盘、网络、进程、tcp

3.服务监控–nginx、php、tomcat、redis、memcache、mysql

4.web监控–响应时间、加载时间、渲染时间

5.日志监控–ELK、(收集、存储、分析、展示)日志

6.安全监控–firewalld、WAF(nginx+lua)、安全宝、牛盾云、安全狗

安装zabbix

(单机)–> LAMP

(架构)–> LAP + MYSQL

服务端端口:10051

客户端端口:10050

Java-gateway:10052

基础模板应该如何制作?

1.编写脚本或者命令,能够获取指定监控对象的数据 并发连接
2.在zabbix agent配置文件添加自定义监控项
    指定key的名称和脚本路径
    key在同一个zabbix agent不能重名
    重启zabbix agent 
    UserParameter=redis_monitor[*],/bin/bash /etc/zabbix/zabbix_agentd.d/redis_monitor.sh $1 $2 $3
3.在zabbix server使用zabbix_get命令测试监控项能不能获取到数据
    避免出现权限问题
    数据格式问题
    路径问题
    # zabbix_get -s 172.31.0.106 -p 10050 -k "redis_monitor["redis_status","6379","connected_clients"]"    

4.在zabbix web界面创建模板或者创建监控项、如果已经有模板就直接把模板关联到指定主机
5 配置触发器(邮件'微信),用来报警
6 宕机测试

zabbi-agent的主动模式被动模式

  • 无论是主动模式还是被动模式都是站在zabbix-agent的角度来讲的

  • 主动模式

    主动模式是由zabbix agent主动向zabbix server的10051端口发起tcp连接请求,因此主动模式下必须在zabbix

agent配置文件中指定zabbix server的IP或者主机名(必须可以被解析为IP地址),在连接到zabbix server之前
zabbix agent是不知道自己要采集那些数据以及间隔多久采集一次数据的,然后在连接到zabbix server以后获取到
自己的监控项和数据采集间隔周期时间,然后再根据监控项采集数据并返回给zabbix server,在主动模式下不再需
要zabbix serve向zabbix agent发起连接请求,因此主动模式在一定程度上可减轻zabbix server打开的本地随机端
口和进程数,在一定程度就减轻看zabbix server的压力。

  • 被动模式

    被动模式的特点就是,在默认的被动模式下zabbix-agent什么都不做,zabbix-server什么时候发生什么事情,zabbix-agent就去采集什么数据,优点就是配置简单,安装就是被动模式,缺点就是数百上千台机器会导致zabbix-server轮训想每个zaibbix-agent发送数据采集指令,如果server负载过高可能导致不能及时获取到最新数据

优点是配置简单
公司规模非常小的时候 ,几十个服务器 在被动模式下的模板直接使用就可以
公司规模比较大的时候几百个服务器,这个时候决定使用主动还是被动,结合zabbix-proxy

zabbix-proxy 介绍

zabbix 作为一个分布式监控系统(分布式监控解决方案),支持通过代理(proxy)收集zabbix agent的监控数据然后由 zabbix proxy再把数据发送给zabbix server,也就是zabbix proxy 可以代替 zabbix server 收集监控数据,然后把数据汇报给 zabbix server,所以zabbix proxy可以在一定程度上分担了zabbix server 的数据收集压力,从而降低了数据的采集时间、也相应的增加了zabbix server的监控能力。

zabbix 作为一个分布式监控系统(分布式监控解决方案),支持通过代理(proxy)收集zabbix agent的监控数据然后由 zabbix proxy再把数据发送给zabbix server,也就是zabbix proxy 可以代替 zabbix server 收集监控数据,然后把数据汇报给 zabbix server,所以zabbix proxy可以在一定程度上分担了zabbix server 的数据收集压力,从而降低了数据的采集时间、也相应的增加了zabbix server的监控能力。

proxy主动模式和被动模式的区别

另外zabbix proxy也区分主动模式和被动模式,通信方式与zabbix server主动模式和被动模式一样,区别是zabbixproxy由于没有zabbix agent的配置,所以zabbix proxy在主动模式下要向zabbix server周期性的向zabbix server申请获取zabbix agent的监控项信息,但是zabbix proxy在被动模式下也是等待zabbix server的连接并接受zabbixserver发送的监控项指令,然后再有zabbix proxy向zabbix agent发起请求获取数据。- 另外zabbix proxy也区分主动模式和被动模式,通信方式与zabbix server主动模式和被动模式一样,区别是zabbixproxy由于没有zabbix agent的配置,所以zabbix proxy在主动模式下要向zabbix server周期性的向zabbix server申请获取zabbix agent的监控项信息,但是zabbix proxy在被动模式下也是等待zabbix server的连接并接受zabbixserver发送的监控项指令,然后再有zabbix proxy向zabbix agent发起请求获取数据。

被动模式的proxy

server并不主动连接agent而是由proxy去替代server去连接,这样proxy相当于代理,每个proxy都有数据库,把agent返回的数据存在自己的数据库里。因为如果和server连接错误,数据会暂时放在proyx的数据里面,防止数据丢失。 等可以连接server之后就会主动放在server的数据库里面 这个是被动模式

主动模式的proxy

主动模式下 agent的配置文件 ServerActice= 指向我的代理(proxy) ,而且还要告诉proxy我的server是哪个 ,proxy才会把agent的数据传给server ,相互转发,
好处是缓解我们server的负载压力

实战案例 监控 redis

zabbix最主要的就是自定义监控项获取数据,以及做模板等等

正常redis的连接数1500 左右应该就没问题,如果在多可能就会造成服务器宕机的情况
学习一个模板中创建多个监控项、多个触发器和多个图形,在模板中创建监控项,创建图形
我们希望我们的redis内存,状态,连接数等等,一般都是通过命令行连接过去,然后输入info 查看我们的监控项。

#在zabbix-agent安装redis让我们的server去监控
apt install redis
grep "^bind" /etc/redis/redis.conf
sed -ri 's/bind 127.0.0.1/\bind 0.0.0.0/' /etc/redis/redis.conf
systemctl restart redis && systemctl enable redis
# 编辑监控redis的脚本,创建存放脚本的路径
vim /etc/zabbix/zabbbix_agent.d/redis_monitor.sh
#!/bin/bash
#Author:Mr.yang
redis_status(){
        R_PORT=$1
        R_COMMAND=$2
        (echo -en "INFO \r\n";sleep 1;) ' ncat 127.0.0.1 "$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
}
help(){
        echo "${0} + redis_status + PORT + COMMAND"
}
main(){
        case $1 in redis_status)
                redis_status $2 $3
                        ;;
                *)
                        help
                            ;;
                esac
}
main $1 $2 $3
本机测试是否可以取到监控项
cd /etc/zabbix/zabbix_agent.d/
bash redis_monitor.sh redis_status 6379 used_memory
#测试成功我们添加可执行权限
chomod a+x redis_mointor.sh
在配置文件添加脚本路径让我们的server可以执行远程命令
vim /etc/zabbix/zabbix_agentd.conf
UserParameter=redis_monitor[*],/bin/bash /etc/zabbix/zabbix_agentd.d/redis_monitor.sh $1 $2 $3
#在zabbix-server测试
zabbix_get -s 10.0.0.12 -p 10050 -k "redis_monitor["redis_status","6379","used_memory"]"
然后我们就可以在web界面创建模板--创建应用集--创建监控项(key的值就是我们测试的key)--然后在创建图形查看监控项的值,后续如果还有redis的监控,我们就直接添加redis的模板就可以了

实战案例 监控memcached

根据上面的案例我直接写了memcached的脚本,和监控redis一样的操作

root@ubuntu1804:/etc/zabbix/zabbix_agentd.d# vim /etc/zabbix/zabbix_agentd.d/memcached_monitor.sh 
#!/bin/bash
#Author:Mr.yang
memcached_status(){
        M_PORT=$1
        M_COMMAND=$2
        echo -e  "stats\nquit" ' ncat 127.0.0.1 "$M_PORT" ' grep "STAT $M_COMMAND" 'awk '{print $3}' #ubuntu使用ncat, 安装nmap
}
main(){
        case $1 in
          memcached_status)
                memcached_status $2 $3
                  ;;
    esac
}
main $1 $2 $3