Zabbix监控软件部署及使用
1、运维工作中遇到难题

国内的互联网大厂,拥有几百,几千台服务器是很常见的,因此运维很大,每天在几干台服务器上敲命令,查看系统状态发布代码,任务是非常繁琐的。
-
服务器崩溃,网站后台500挂了,由于没有监控,大伙都还不知道,直到其他部门的同事打来电话
-
代码发布太过于繁琐,每一台机器都要自己手动执行部署,一台一台的检查。【Jenkins(版本构建系统)+Git(版本控制)+GitLab(代码仓库)】+ansible宝塔服务器管理软件 可实现一键部署 CI/CD部署
-
机器之间环境不统一,代码一样,但是这台能行,另一台就不行。(ansible宝塔服务器管理软件或Docker)
-
分析问题困难,比如想要知道服务器历史状态,就比较麻烦
-
资产统计困难,作为运维新人,都不清晰公司的服务器架构,资产状况,那那能行?(CMDB资产管理系统)
提示
# 部署监控系统,实时监测,实时报警。
# 自动化构建系统搭建+shell+ansible完成统一化部署
# 查看history命令,部署堡垒机做好历史监控,资产管理,组织架构管理。
2、运维自动化

3、监控生命周期
运维如何从0到1,部署一套监控系统
-
服务器上架机柜
-
进行基础设施监控
-
服务器温度、风扇转速(ipmitool命令对服务器进行远程管理,注意只能用在物理机,vmware不行)
-
存储容量,内存(df、fdisk、dd、iotop)
-
CPU性能(lscpu、uptime、top、htop、glances)
-
内存容量(free)
-
网络情况(iftop、nethogs)
-
-
应用监控
-
数据库mysql、redis
-
nginx
-
java、python
-
-
注意:若是服务器在维护中,还得暂停监控指标,否则监控不停的报警
-
监控系统在运维自动化系统中,实现如下功能:
-
监控数据收集,可视化展示(图表)
-
异常数据报警
-
结合如CMDB等系统协同工作
-
理想中的监控软件应该支持那些功能:
监控系统能够自定义监控的内容,自己通过脚本采集所需的数据。
数据需要存入到数据库,日后对该数据进行分析计算。
监控系统可以简易,快速的部署到报务器
数据可视化直观清浙
异常告警通知:
可以定义复杂度告警逻辑,做到监控项之间的关联告警,例如程序之间的依检测,而不是只单独检测某一个指标
告警可以确认响应,让运维组内的人知道已经有人在处理告警问题了
报警方式可以自定义,如短信,邮件,以及微信,钉钉等
告警内容可以自定义,能够写入一些简单的分析,便于运维人员直观了解数据,否则还得去服务器查看
报警后,可以预处理一些任务,如自我修复,重启,采集数据等
协同工作:
监控系统有强大的API,提供给研发同学调用,其他系统调用
监控数据是开放性,数据结构主流,便于解析。
监控可视化可以简易的插件使用,而非复杂的js文件
4、监控系统总结
为什么要有监控
1.对系统不间断7*24的实时监控 2.实时反馈、可视化展示服务器运行状态 3.保证业务高度可用性,提前预警 4.保证了业务的可靠性、稳定性、安全性
主流监控软件
zabbix监控王者:https://www.zabbix.com/cn
普罗米休斯:https://prometheus.io/
新时代监控王者,主要结合容器,k8s使用
如何着手监控工作
以下思路作为参考,属于全链路的监控搭建,具体从哪个环节开始以你工作需求为切入点。 1.硬件监控、路由器、交换机、防火墙的流量监控 2.系统资源监控、cpu、内存、磁盘、网络流量、进程存活、tcp链接数 3.服务监控、nginx、php-fpm、tomcat、mysql、redis、django 4.web监控、nginx-status、http请求响应耗时 5.日志监控、所有服务的日志收集、存储、分析、展示(部署ELK架构)、或者购买日志易系统5. 6.安全监控、系统防火墙firewa11d、web应用防火墙(nginx+lua)、牛盾(http://antid.newdun.com/#/)、安全狗(https://www.safedog.cn/) 7.网络监控、smokeping 8.业务监控 分析公司搞秒杀、抢购等活动时产生的瞬时流量、注册量、判断产生的价值
5、Zabbix安装部署
产品手册:https://www.zabbix.com/cn/manuals


Zabbix4.0部署全流程
单机在线部署:https://www.cnblogs.com/cjzzz/p/15946664.html
官网手册:https://www.zabbix.com/documentation/4.0/zh/manual/
zabbix服务器和代理源码下载:https://cdn.zabbix.com/zabbix/sources/stable/7.0/
依赖包下载:
wget http://xmlsoft.org/sources/libxml2-2.9.7.tar.gz
wget http://curl.haxx.se/download/curl-7.61.1.tar.gz
默认端口:10051
服务端部署
1、配置yum仓库
# 清华大学开源软件镜像站
https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/
# 安装两zabbix.repo仓库文件
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
# 修改repo文件,改为清华源
sed -i 's#repo.zabbix.com#mirrors.tuna.tsinghua.edu.cn/zabbix#g' /etc/yum.repos.d/zabbix.repo
2、安装zabbix服务瑞(前端)、zabbix连接数据库、zabbix-agent(客户端)
# zabbix-server-mysql:以mysql为存储开发的zabbix-server服务端程序
# zabbix-web-mysql:php核心程序,zabbix-ui页面,也是以mysql为存储版本
# zabbix-agent:采集客户端数据的核心程序 (服务端安装是因为自身也要被监控)
# mariadb-server:安装mysql服务端程序
# 离线安装必要的运行依赖包
yum install -y gcc gcc-c++ make openssl-devel curl wget net-snmp net-snmp-utils net-snmp-libs net-snmp-devel gnutls gnutls-devel libxml2 libxml2-devel iksemel-devel unixODBC
yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server
# 启动mariadb数据库,设置开机自启
systemctl start mariadb && systemctl enable mariadb
3、设置Mariadb数据库,创建zabbix库,存储监控数据且创建账号
# 重置密码
mysqladmin -u root password Abc@123456
# 创建zabbix库
mysql -u root -pAbc@123456 -e 'create database zabbix character set utf8 collate utf8_bin;'
# 创建账号并设置密码为abc123456 并给予权限是zabbix库下的所有表,都是最大权限
mysql -u root -pAbc@123456 -e "grant all privileges on zabbix.* to 'zabbix'@'%' identified by 'abc123456';"
# 测试zabbix用户
mysql -u zabbix -pabc123456 -e 'show databases;'
4、导入zabbix服务端数据库的数据
# 用zcat命令直接读取gz压缩包的数据,切管道符交给mysql命令往zabbix库导入数据
zcat /usr/share/doc/zabbix-server-mysq1-4.0.41create.sql.gz | mysql -u root -pAbc@123456 zabbix
5、编辑zabbix-server服务端配置文件(修改数据库部分即可),指明自己ip,便于agent去链接
# 根据正则表达式找出配置文件中以大小写字母开头的文件行
grep "^[a-Z]" /etc/zabbix/zabbix_server.conf
# 修改为以下内容 配置文件不支持中文,注释用拼音或英文
cat > /etc/zabbix/zabbix_server.conf <<'EOF'
LogFile=/var/log/zabbix/zabbix_server.log
LogFilesize=0
PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/var/run/zabbix
# database ip
DBHost=localhost
# database name
DBName=zabbix
# database user and pwd
DBUser=zabbix
DBPassword=abc123456
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
# store custom monitoring project script catalog
AlertscriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
EOF
6、启动zabbix服务端且开机自启
systemctl start zabbix-server && systemctl enable zabbix-server
7、检查zabbix-server端口(10051)是否运行
ps -ef | grep zabbix
# netstat/ss任选其一
netstat -tunlp | grep zabbix
ss -tunlp | grep zabbix
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 2145/zabbix server
tcp6 0 0 :::10051 :::* LISTEN 2145/zabbix server
至此,zabbix-server 服务端核心程序安装完成!
zabbix-ui也已安装,但还无法访问页面(还得基于LNMP或LAMP)
zabbix不同版本不一样,4.0版本只支持apache版本
离线部署
zabbix离线部署:https://www.cnblogs.com/cjzzz/p/15955806.html
zabbix下载地址:https://cdn.zabbix.com/zabbix/sources/stable/7.0/
Zabbix-Server部署
该部署使用的Centos7为例
1、找一台有网的设备进行下载打包
rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
yum clean all
# 检查缓存 列出软件包 显示详细信息
yum repolist
yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-agent --downloadonly --downloaddir=/zabbix4.0
2、将打包好的安装包上传至内网
cd zabbix4.0
yum install -y *
3、安装MYSQL
参考博客:https://www.cnblogs.com/aerfazhe/p/17167429.html
4、创建zabbix数据库,创建zabbix账号
# 重置密码
mysqladmin -u root password Abc@123456
# 创建zabbix库
mysql -u root -pAbc@123456 -e 'create database zabbix character set utf8 collate utf8_bin;'
# 创建账号并设置密码为abc123456 并给予权限是zabbix库下的所有表,都是最大权限
mysql -u root -pAbc@123456 -e "grant all privileges on zabbix.* to 'zabbix'@'%' identified by 'abc123456';"
# 测试zabbix用户
mysql -u zabbix -pabc123456 -e 'show databases;'
5、导入默认的zabbix数据库信息
# 用zcat命令直接读取gz压缩包的数据,切管道符交给mysql命令往zabbix库导入数据
zcat /usr/share/doc/zabbix-server-mysql-4.0.50/create.sql.gz | mysql -u zabbix -pabc123456 zabbix
6.修改zabbix_server.conf的配置文件
vim /etc/zabbix/zabbix_server.conf
# 找到下面三项,这里其实即使配置的zabbix数据库里的信息
# 库名
DBName=zabbix
# 账号和密码
DBUser=zabbix
DBPassword=zabbix
7.修改配置文件/etc/httpd/conf.d/zabbix.conf,时区改成 Asia/Shanghai
vim /etc/httpd/conf.d/zabbix.conf
#找到该项,修改成Asia/Shanghai
php_value date.timezone Asia/Shanghai
8、启动zabbix-server服务并设置为开机启动
systemctl restart httpd zabbix-server
systemctl enable httpd zabbix-server
9、查看zabbix端口
#10051为zabbix-server端口
#10050为zabbix-agent端口(此处没有安装agent)
ss -ntl

Zabbix-agent的部署
zabbix-agent是负责完成对硬件信息或操作系统有关的内存,CPU等信息的采集的,所以我们需要在被监控端安装上zabbix-agent。
1.修改agent配置文件
之前安装zabbix-server服务是我们已经把agen安装了
vim /etc/zabbix/zabbix_agentd.conf
# 修改以下配置
# (zabbix-server的IP)
Server=192.168.36.190
# 本服务器的主机名称hostname
Hostname="主机名"
2、设置zabbix-agent开机自启
systemctl start zabbix-agent.service
systemctl enable zabbix-agent.service
apache配置
# 安装httpd
sudo yum install httpd
# 修改配置
vim /etc/httpd/conf.d/zabbix.conf
# 修改完可以通过grep命令查看
grep -i shanghai /etc/httpd/conf.d/zabbix.conf
# 输出结果
php_value date.timezone Asia/Shanghai
修改配置里面的时区:

关于apache和zabbix如何结合的?
看apache配置文件就行了,你可以访问zabbix路由即可,apache自动加载php模块,解析请求
# 启动apache服务
systemctl start httpd
访问:ip:80
测试apache装好后,是一个LAMP环境
基于phpinfo页面测试,看是否能解析php代码
进入apache默认网页根目录,存放html地方
cd /var/www/html
echo "HELLO WORLD" > index.html
cat index.html
访问:ip:80
# 基于phpinfo页面测试,看是否能解析php代码
touch phpinfo.php
cat > phpinfo.php <<'EOF'
<?php
echo "测试PHP代码解析成功!";
phpinfo();
?>
EOF
访问:ip:80/phpinfo.php
PHP什么时候装的?
zabbix-web-mysql 该程序封装了php程序,httpd程序
这里的部署没有单独启动php进程,因为http是支持php的,而Nginx是不支持php的(需要安装)
zabbix-UI前端配置
访问地址:ip/zabbix
默认端口:80
页面显示如下:

前置检查都是ok,点击Next step,根据页面显示进行配置
最终配置完成显示以下页面:

配置完成后,默认账号/密码:Admin/zabbix
登录后界面如下:
修改zabbix为中文语言

在选项Language中选择Chinese(zh_CN)点击Update按钮修改即可。
中文界面如下:


修复中文乱码
图形数据展示中文乱码

下载字体,修改zabbix的字体支持
# 解决办法,这里确实zabbix所需字体
# 文泉仪微黑字体
yum install wqy-microhei-fonts -y
# 拷贝字体到zabbix,覆盖图形字体,完成后刷新页面即可
cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/zabbix/assets/fonts/graphfont.ttf
6、Zabbix架构理念
Server 服务端 Zabbix Server 是 Zabbix的核心组件,其功能为将 Agent 采集到的数据持久化 存储到数据库里。
数据库存储 存储所有由Agent采集到的数据,Zabbix支持多种数据存储,例如:Mysql,Oracle,PostgreSQL,Elasticsearch
Web 界面 Zabbix提供了友好的 Web界面方便我们操作,Web 界面的运行环境可以是 Nginx+PHP或者Apache+PHP服务组成。 Web界面也是ZabbixServer的一部分。
Proxy 代理端 对于分布式环境,Zabbix也提供了代理的方案,可以代替Zabbie server收集多个Agent 采集的数据,然后在将收集到的数据汇总到Zabbix Server,Proxy可以起到分担ZabbixServer负载的作用。
Agent客户端 Zabbix Agent 被部署在需要监控主机上,用于采集监控数据并发送到Zabbix Server 端。

7、Zabbix核心知识点
主机(HOST):就是具体的一个监控对象,某一个被监控的实例,可以是一个数据库,也可以是一个操作系统。
模板(Template):定义了具体一类监控对象的抽象,比如Windows模板,就是用来专门在监控Windows的时候,直接选择这个模板就可以实现开箱即用的数据采集。
监控项(ITEM):监控项定义了具体的某一项采集指标,比如CPU使用率,设备温度等,采集方式可以是多种支持的采集协议。
触发器(Trgger):触发器是基于监控项存在的,通过WEB页面定义触发器表达式创建。比如CPU温度大于90度,可以定义为:last(/zabbix_server/cpu temp)> 90
动作(Action):动作是基于触发器存在的,创建动作时可以选择具体的某个触发器,当触发器表达式满足要求时,会触发对应的Action执行,具体的动作定义可以执行avaScript,Shell脚本等。
Zabbix-server进程作用
Zabbix Server 是C语言开发的Zabbix服务端,有着 强悍的采集和计算性能,而且资源使用率很低。主要的功能如下:
定时读取 Zabbix 数据库,同步Zabbix UI配置的信息到级存,下发到Zabbix Agent 或者 Zabbix Proxy。
关于这俩不同的采集进程,可以通过(ps -ef | grep zabbix 查看进程列表)
对于被动采集(主动和被动是从设备侧角度来看的),Xabbixserver 会有专门的Poler 线程去采集数据,可以定义特定的时间区间或者特定的频率。
对于主动采集,就是Agent或者设备主动上报数据,ZabbixServer也会有专门的Trapper线程来接收数据,时间间隔或者频率取决于设备侧或者Agent上报配置。
接收到的历史数据(来自于Agent、Proxy、设备侧),Zbbixserver会缓存下来,进行告警表达式计算,进行动作触发,最终会同步到数据库的历史记录表,history开头的表。
Zabbix-Proxy
8、快速实践
zabbix添加添加主机监控
给Zabbix-server机器安装上agent进程,修改配置,启动即可
1、目标机器安装zabbix-agent(先做好实践同步)
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.11-1.el7.x86_64.rpm
1.1、时间同步(重要)
ntpdate -u ntp.aliyun.com
2、修改zabbix-agent配置文件
官方资料,关于zabbix-agent配置文件解释:https://www.zabbix.com/documentation/4.0/zh/manual/appendix/config/zabbix_agentd
修改配置如下(配置文件中不能有任何中文,否则会报错):
# LogFilesize=0 日志切割,0:不切割
# Server=10.0.0.61 填写zabbix-server地址
# Hostname=主机名 主机名称是服务器的hostname主机名
cat > /etc/zabbix/zabbix_agentd.conf <<'EOF'
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFilesize=0 #日志切割,0:不切割
Server=10.0.0.61 #填写zabbix-server地址
Hostname=主机名 #主机名称是服务器的hostname主机名
Include=/etc/zabbix/zabbix_agentd.d/*.conf
EOF
3、启动agent
systemctl start zabbix-agent
systemctl enable zabbix-agent
4、检查agent的端口是10050
netstat -tunlp | grep zabbix_agentd
5、小结
zabbix-server地址是10.0.0.61:10051
zabbix-agent地址是10.0.0.61:10050
已经添加agent,问题已修复,刷新页面,确认问题已修复,如下:


agent装好后,查看最新数据
zabbix-agent装好后,就已经有了采集数据的功能。
继续来看zabbix-UI的操作,如何查看采集了什么数据。

发现红灯有一场,连接被拒绝,是因为接口地址是127.0.0.1,没有具体到采集的具体IP,配置如此:

修改后点击更新,等待几分钟后,刷新页面
同样的操作,可以添加其他主机进行监控。
进入到zabbix-UI界面---》配置---》主机--》 创建主机
添加一个db-server组,专门管理数据库的组
添加主机
查看添加的主机
查看最新采集数据,是否拿到数据,默认有了监控项,因为会有采集的目标数据
最新数据没有值,继续刷新,多等待一会。
Zabbix-UI添加主机监控
1、配置--》主机----》创建主机

2、添加一个主机群组,专门管理同一类的服务器(如数据库)

3、创建主机
主机名称是服务器的hostname主机名


注意看:刚添加的主机没有模板;没有模板就检测不到监控服务器,是不会亮灯的
安装zabbix-get命令,检测是否通信了
从两个角度,验证server和agent是否通信
1、看日志(客户端):
tail -f /var/log/zabbix/*
2、zabbix-get命令(服务端)
yum -install zabbix-get -y通过自带的zabbix key 检查server和agent是否通信,如果通信返回1,否则连接拒绝
zabbix-get -s '目标地址' -k '应用key' # 示例 zabbix_get -s 10.0.0.52 -k agent.ping
4、给主机绑定模板,即可使用这个key,亮灯。
选择之后,点击添加,然后点击更新。
模板、监控项图解,以及结合zabbix-get命令
描述模板和监控项的关系

如果是Linux系统,默认使用:Template OS Linux模板

基于命令行主动采集数据

案例
1、完成自定义Tcp链接状态的监控(学习如何自定义监控项,自定义你要监控的内容玩法)
完成触发器设置
思路:
自定义监控项
1、为什么要自定义监控项
模板里面提供了大量的监控项,但你想要的监控内容,模板里面没有
zabbix支持自定义监控项,所以才那么流行,就是这么牛。
2、自定义监控项流程
自定义监控项的表现形式是(命令、脚本),只要能获取到值,就可以通过zabbix展示
完整流程:
写命令、脚本
编写zabbix的自定义监控项的配置文件
重启zabbix-agent
试试zabbix-get能否拿到数据
去zabbix-ui 添加监控项
3、采集TCP连接状态(实战)
精确分析tcp连接状态,可以精确得知服务器的链接情况,确保web服务器的健康。
命令获取tcp的状态
# -a 显示所有socket、-t显示tcp协议连接 -n 只显示ip netstat -ant提取精准的状态数据
# -c 统计行数 netstat -ant | grep -c 'TIME_WAIT' # 有6个tcp已经确认建立了连接 netstat -ant | grep -c 'LISTEN'zabbix自定义监控11种TCP状态全操作
netstat -ant | grep -c 'TCP状态'
编写zabbix-agent的配置文件,自定义key的配置文件
当前机器没安装agent的话,安装上就有zabbix-agent配置文件了。
自定义key写法:
配置文件中写法:
UserParameter="自定义监控项的key","执行的命令"对照执行命令:
zabbix_get -s ip -k "自定义监控项的key"# 进入agent配置文件目录中 cd /etc/zabbix/zabbix_agent.d/ # 编辑新配置文件 touch tcp_status.conf # 自定义添加监控key内容 cat > /etc/zabbix/zabbix_agent.d/tcp_status.conf <<'EOF' UserParameter=LISTEN,netstat -ant | grep -c LISTEN UserParameter=TIME_WAIT,netstat -ant | grep -c TIME_WAIT UserParameter=ESTABLISHED,netstat -ant | grep -c ESTABLISHED EOF # 修改了配置文件,重启agent systemctl restart zabbix-agent.service # 去服务端执行对应命令进行验证 zabbix_get -s ip -k LISTEN zabbix_get -s ip -k TIME_WAIT zabbix_get -s ip -k ESTABLISHED如果要监控11中TCP状态,那得写很多key,支持传参,配置文件改进如下:
cat > /etc/zabbix/zabbix_agent.d/tcp_status.conf <<'EOF' UserParameter=tcp_status[*],netstat -ant | grep -c $1 EOF # 修改了配置文件,重启agent systemctl restart zabbix-agent.service # 去服务端执行对应命令进行验证 zabbix_get -s ip -k tcp_status[LISTEN]
确认OK后,前往web页面,添加监控项,采集数据了
图形化zabbix添加监控项,监控TCP的状态
添加模板,模板中包含11个监控项(TCP状态)
那台机器想检测TCP数据,就和这个模板关联即可。
但是先由简到难,先对单独的机器添加即可
配置选项卡
点击主机(创建主机、添加模板Template OSLinux)
![]()
点击监控项
创建监控项
给web7机器添加监控项(自定义的监控项)
克隆监控项
针对LISTEN状态的监控项,直接克隆,修改key值即可。
找到需要克隆的监控项,点击监控项名称
进入编辑栏,点击克隆
修改key和监控项名称确认添加即可
查看添加的监控项最新数据
查看图形数据
添加自定义监控项的图形数据
查看WEB7的图形数据
可以模拟同时大量请求压力测试
ab -c 10 -n 1000 http://ip::80/执行后查看图形数据变化即可;
TCP11中状态报文:
完成触发器设置
设置触发器(zabbix判断什么时候报警的一个条件)
自定义触发器
针对TCP的四次挥手,TIME_WAIT链接数,超过500个就报警
配置--》主机--》----》选择需要配置的主机 ----》触发器



当你的监控项,设置的采集时间到了,采集到了新数据,这里的触发器会立即报警。
报警媒介设置:微信、钉钉、QQ

























浙公网安备 33010602011771号