一、环境搭建
1. zabbix程序结构
zabbix-server:用于数据处理及写入到数据库
zabbix-agent:用于获取被监控端的性能检测数据
zabbix-web:用于数据的展示及远程操控
数据库:用于存储监控数据
zabbix-proxy:实现zabbix分布式监控
2. zabbix-agent支持的协议
1) ssh
2) snmp:用于交换机路由器流量监控(OID)
3) IPMI:硬件监控
4) JMX: 专用于java服务监控
5) 结合procona:实现针对数据库监控
3. zabbix监控环境搭建
安装方式
1)yum自动化安装
2)源码编译安装
3)二进制包
3.1 配置zabbix官方yum源
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm yum list|grep zabbix
3.2 安装服务端与客户端
yum install zabbix-server-mysql zabbix-agent -y
3.3 安装zabbix-web
1) cd /etc/yum.repos.d/
repos.d]# vim zabbix.repo
cd /etc/yum.repos.d/ vim zabbix.repo 在/etc/yum.repos.d/zabbix.repo文件中打开zabbix-frontend [zabbix-frontend] enabled=1
2) 安装依赖源
yum install -y epel-release centos-release-scl
3)yum install -y zabbix-web-mysql-scl zabbix-apache-conf-scl
yum install -y zabbix-web-mysql-scl zabbix-apache-conf-scl
安装存储数据库
yum install -y mariadb-server mariadb
yum install -y mariadb-server mariadb
安装完成启动数据库
systemctl start mariadb #启动数据库
systemctl enable mariadb #设置开机自启
数据库配置
进入数据库
mysql
创建存储数据的库,并支持中文(库名:zabbix)
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
#授权连接数据库的用户,并设置密码(用户名:zabbix)
MariaDB [(none)]> create user zabbix@localhost identified by '123456';
#数据库授权
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost;
#查看所有库
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| zabbix |
+--------------------+
5 rows in set (0.01 sec)
#进入zabbix库
MariaDB [(none)]> use zabbix;
Database changed
#查看当前库下表
MariaDB [zabbix]> show tables;
Empty set (0.00 sec) #空
#在Zabbix服务器主机上,导入初始架构和数据。系统将提示您输
入新创建的密码
zcat /usr/share/doc/zabbix-server- mysql*/create.sql.gz | mysql -uzabbix -p zabbix
Enter password: password #输入zabbix用户密码
#Zabbix服务器配置数据库
vim /etc/zabbix/zabbix_server.conf
100 DBName=zabbix #存储监控数据的库名
116 DBUser=zabbix #连接数据库的用户
124 DBPassword=123456 #设置zabbix用户密码
#为Zabbix配置正确的时区
vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
php_value[date.timezone] = Asia/Shanghai #亚洲/上海
进入数据库
mysql create database zabbix character set utf8 collate utf8_bin; create user zabbix@localhost identified by "123456"; grant all privileges on zabbix.* to zabbix@localhost; show databases;
创建存储数据的库,并支持中文(库名:zabbix)
在Zabbix服务器主机上,导入初始架构和数据。系统将提示您输入新创建的密码(要先退出数据库)
zcat /usr/share/doc/zabbix-server- mysql*/create.sql.gz | mysql -uzabbix -p zabbix
#Zabbix服务器配置数据库 vim /etc/zabbix/zabbix_server.conf 100 DBName=zabbix #存储监控数据的库名 116 DBUser=zabbix #连接数据库的用户 124 DBPassword=123456 #设置zabbix用户密码
#为Zabbix配置正确的时区 vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf php_value[date.timezone] = Asia/Shanghai #亚洲/上海
进入数据库
mysql show databases; use zabbix; show tables; exit 启动并查看 systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm.service systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm.service netstat -anptu |grep zabbix #启动所有服务 systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm #设置服务随机自启 systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm #查看zabbix服务占用端口信息 netstat -anptul | grep zabbix tcp LISTEN 0 128 *:10051 #zabbix-server端口 tcp LISTEN 0 128 *:10050 #zabbix-agent端口
web服务访问
服务器输入
192.168.28.4/zabbix
web界面登陆
zabbix前端已经安装完成!超级用户名是Admin,密码是zabbix
为了防止暴力破解和词典攻击,如果发生连续五次尝试登陆失败,Zabbix接口将暂停30秒。
在下次成功登陆后,将会在界面上显示登录尝试失败的IP地址。
修改界面的语言
修改登录密码(此处我设置为123456)
4. 配置客户端添加监控主机
客户端安装zabbix-agent
客户端配置服务端信息即可
# 配置源
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# 安装客户端
yum install zabbix-agent -y
# 配置客户端
server=服务端IP
# 添加监控主机
web页面→ 配置→ 主机→ 添加主机
添加相应的信息
添加模板监控
5. zabbix中核心的资源介绍
监控项→触发器→动作→ 模板、
6. 监控项配置
首先规划风险值
通过设计取值命令 :
配置监控项
vim /etc/zabbix/zabbix_agent.conf
UserParameter=User_num,w |awk 'NR>2{print $3}'|uniq |wc -l
客户端测试监控项
zabbix_agent2 -t User_num
User_num [s|2]
重启客户端
web端添加监控项
1)选择需要添加监控项的主机
2)根据客户端所自定义的监控项添加即可
slave1的主机创建一个
主机下载zabbix-get
zabbix_get -s 192.168.28.4 -k memUser
3)注意:添加监控项页面中的值要和监控项的key名一致
回到zabbix监控平台配置主机选择
配置触发器
出图形了就OK了,自定义完事
二、触发器及报警
1. 监控项获取失败排查(面试)
1)web添加监控项页面测试获取监控项值
2)服务端安装zabbix_get
yum install zabbix-get -y
zabbix_get 用于服务端测试获取客户端中自定义的监控项
zabbix_get -s 指定客户端IP -k 监控项名
3)在客户端通过zabbix-agent -t 检测获取监控项
如果能获取到则,客户端定义配置有问题,如果获取不到,则自定义监控项定义有问题
三、zabbix监控nginx
1、配置
slave1安装nginx
yum -y install nginx nginx -v
vim /etc/nginx/nginx.conf location /status { stub_status on; access_log off; allow 192.168.28.0/24; deny all; } 上面的代码是 Nginx 虚拟主机配置,它可以用来配置一个名为 status 的路径,来检查 Nginx 的运行状态。它包括: stub_status on:启用 Nginx 的 stub_status 功能,可用于检查 Nginx 的运行状态。 access_log off:关闭访问日志,防止大量的日志数据记录。 allow 192.168.28.0/24:允许 192.168.28.0 网段的访问,可以通过这个网段来检查 Nginx 的运行状态。 deny all:禁止其他 IP 地址访问 status 路径。 此外,请确保 Nginx 支持 stub_status 功能,要启用 stub_status 功能,需要添加 --with-http_stub_status_module 参数到 nginx 的编译参数列表中。
systemctl restart nginx 重启之后看一下有没有这个统计结果
2、编写脚本
[root@slave1 ~]# cd /etc/zabbix [root@slave1 zabbix]# vim chk_nginx.sh 编写脚本 #!/bin/bash #function: monitor nginx1.16 for zabbix5.0 #blog: www.qiufeng5.cn #version: 1.0 #date: 2020-09-17 #定义Nginx status页面 ngx_status="http://127.0.0.1/status" #判断status页面是否存活 ngx_status_code() { http_code=`curl -o /dev/null -s -w %{http_code} ${ngx_status}` if [ ${http_code} == "200" ];then return 1 else echo "Nginx status is not running." fi } #获取当前活动的客户端连接数 active() { ngx_status_code || curl -s ${ngx_status} | grep "Active" | awk '{print $NF}' } #获取接收客户端连接的总数量 accepts() { ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $1}' } #获取已处理的连接总数量 handled() { ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $2}' } #获取客户端请求总数量 requests() { ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $3}' } #获取正在读取请求标头的当前连接数量 reading() { ngx_status_code || curl -s ${ngx_status} | grep "Reading" | awk '{print $2}' } #获取正在将响应写回到客户端的当前连接数量 writing() { ngx_status_code || curl -s ${ngx_status} | grep "Writing" | awk '{print $2}' } #获取当前正在等待响应的客户端连接数量 waiting() { ngx_status_code || curl -s ${ngx_status} | grep "Waiting" | awk '{print $2}' } #使用位置变量控制脚本输出 case $1 in active) active;; accepts) accepts;; handled) handled;; requests) requests;; reading) reading;; writing) writing;; waiting) waiting;; *) echo "Unknown options" esac 给权限 [root@slave1 zabbix]# chmod +x chk_nginx.sh 测试一下 [root@slave1 zabbix]# ./chk_nginx.sh active [root@slave1 zabbix]# ./chk_nginx.sh accepts
3、配置一下zabbix-agent
PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 Server=192.168.28.3 ServerActive=192.168.28.3 Hostname=master Timeout=10 Include=/etc/zabbix/zabbix_agentd.d/*.conf UnsafeUserParameters=1
cd /etc/zabbix/zabbix_agentd.d/ vim userparameter_nginx.conf UserParameter=nginx.active,bash /etc/zabbix/ngx_status.sh active UserParameter=nginx.accepts,bash /etc/zabbix/ngx_status.sh accepts UserParameter=nginx.handled,bash /etc/zabbix/ngx_status.sh handled UserParameter=nginx.requests,bash /etc/zabbix/ngx_status.sh requests UserParameter=nginx.reading,bash /etc/zabbix/ngx_status.sh reading UserParameter=nginx.writing,bash /etc/zabbix/ngx_status.sh writing UserParameter=nginx.waiting,bash /etc/zabbix/ngx_status.sh waiting
全篇替换多行字符%s#script/##g
改完之后重启一下
systemctl restart zabbix-agent 回主机验证一下 zabbix_get -s 192.168.28.4 -k nginx.active 出来了下列东西就算OK了
回监控台
在对应模板中创建相关监控项
4、创建监控主机,链接模板
创建监控主机
点击图形看值
解决图形乱码的办法
打开主机输入
打开监控端进入目录
把字体脱进服务器覆盖就OK了
四、zabbix监控mysql
1、配置
在slave1上安装mariadb
yum -y install mariadb-server mariadb
启动一下数据库
systemctl start mariadb
mysql CREATE USER 'zabbix'@'%' IDENTIFIED BY "123456"; GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zabbix'@'%';
2、添加一条数据
在zabbix客户端默认配置路径下 /etc/zabbix 目录下新建 .my.cnf 文件,然后新增一个监控帐号,上面我们新建了一个zabbix帐号
[client]
user='zabbix'
password='123456'
3、复制模板
将原有的mysql模板先备份,然后复制新模板
cd /etc/zabbix/zabbix_agentd.d mv userparameter_mysql.conf userparameter_mysql.conf.bak cp /usr/share/doc/zabbix-agent-5.0.4/userparameter_mysql.conf .
修改模板中的默认路径
在命令行新增默认路径 HOME=/etc/zabbix/
vim userparameter_mysql.conf #template_db_mysql.conf created by Zabbix for "Template DB MySQL" and Zabbix 4.2 #For OS Linux: You need create .my.cnf in zabbix-agent home directory (/var/lib/zabbix by default) #For OS Windows: You need add PATH to mysql and mysqladmin and create my.cnf in %WINDIR%\my.cnf,C:\my.cnf,BASEDIR\my.cnf https://dev.mysql.com/doc/refman/5.7/en/option-files.html #The file must have three strings: #[client] #user=zbx_monitor #password=<password> # UserParameter=mysql.ping[*],HOME=/etc/zabbix/ mysqladmin -h"$1" -P"$2" ping UserParameter=mysql.get_status_variables[*],HOME=/etc/zabbix/ mysql -h"$1" -P"$2" -sNX -e "show global status" UserParameter=mysql.version[*],HOME=/etc/zabbix/ mysqladmin -s -h"$1" -P"$2" version UserParameter=mysql.db.discovery[*],HOME=/etc/zabbix/ mysql -h"$1" -P"$2" -sN -e "show databases" UserParameter=mysql.dbsize[*],HOME=/etc/zabbix/ mysql -h"$1" -P"$2" -sN -e "SELECT SUM(DATA_LENGTH + INDEX_LENGTH) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'" UserParameter=mysql.replication.discovery[*],HOME=/etc/zabbix/ mysql -h"$1" -P"$2" -sNX -e "show slave status" UserParameter=mysql.slave_status[*],HOME=/etc/zabbix/ mysql -h"$1" -P"$2" -sNX -e "show slave status" "userparameter_mysql.conf" 15L, 1200C 重启zabbix客户端 systemctl restart zabbix-agent
重启完毕去服务器上验证一下
[root@master zabbix]# zabbix_get -s 192.168.28.4 -k mysql.ping[192.168.28.4,3306] mysqld is alive 出现这个就说明没有问题了
4、添加zabbix的模版
查看模版的宏
更新完毕查看图形就OK了
五、zabbix报警系统连接网易邮箱
1、开启网易邮箱的监听功能
2、配置server的服务
yum -y install mailx dos2unix
vim /etc/mail.rc set from=17533611657@163.com smtp=smtp.163.com set smtp-auth-user=17533611657@163.com smtp-auth-password=输入上面的密码 set smtp-auth=login echo "test mail from zabbix.server.com" | mail -s "test mail" m17533611657@163.com
3、上网易邮箱查看
回机子上创建脚本
vim /etc/mail.rc echo "test mail from zabbix.server.com" | mail -s "test mail" m17533611657@163.com cd /etc/zabbix/ mkdir alertscripts cd alertscripts/ vim mail.sh #!/bin/bash #export.UTF-8 bt=$2 sjr=$1 FILE=/tmp/mailtmp.txt echo "$3" >$FILE /usr/bin/dos2unix -k $FILE /bin/mail -s "$bt" "$sjr" <$FILE [root@master alertscripts]# touch /tmp/mailtmp.txt [root@master alertscripts]# chmod 777 /tmp/mailtmp.txt [root@master alertscripts]# chown zabbix.zabbix /tmp/mailtmp.txt [root@master alertscripts]# ./mail.sh 17533611657@163.com "bbbb" "qwetryr"
在配置文件添加一条命令
cd .. vim zabbix_server.conf AlertScriptsPath=/etc/zabbix/alertscripts systemctl restart zabbix-server
4、创建发送邮件动作
邮件主题:
故障:{TRIGGER.STATUS},服务器:{HOSTNAME1},发生:{TRIGGER.NAME}故障!
邮件消息:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE}{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件 ID:{EVENT.ID}
slave1关闭mariadb
看zabbix的监控出现掉了就OK了
六、zabbix监控钉钉邮件报警
1、zabbix 钉钉告警机制
群机器人是钉钉群的高级扩展功能,群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步。例如:通过聚合GitHub,GitLab等源码管理服务,实现源码更新同步;通过聚合Trello,JIRA等项目协调服务,实现项目信息同步。不仅如此,群机器人支持Webhook协议的自定义接入,支持更多可能性. 比如我们可将Zabbix运维报警提醒通过自定义机器人聚合到钉钉群中,以实现钉钉告警。
2、钉钉配置
注册钉钉
到钉钉官网下载pc版钉钉,安装、注册、登陆:
钉钉下载地址:https://www.dingtalk.com/创建群聊和钉钉机器人
进入群聊添加机器人
【复制webhook,这个链接很重要,后面钉钉脚本需要用到此链接】
2、配置master
报警脚本配置
取消注释AlertScriptsPath # grep -Ev '^$|#' /etc/zabbix/zabbix_server.conf | grep ^A AlertScriptsPath=/usr/lib/zabbix/alertscripts 创建脚本 入该定义的脚本存放路径下创建用来推送告警消息的脚本,使用自己的webhook # cd /etc/zabbix/alertscripts/ # vim dingding.py #!/usr/bin/env python #coding:utf-8 #zabbix钉钉报警 import requests,json,sys,os,datetime webhook="https://oapi.dingtalk.com/robot/send?access_token=3a7191b12c8e8f5580b9bedc9e48938421845e7629c8ff0fe2833f1ede9e8b30" (修改为自己的webhook) user=sys.argv[1] text=sys.argv[3] data={ "msgtype": "text", "text": { "content": text }, "at": { "atMobiles": [ user ], "isAtAll": False } } headers = {'Content-Type': 'application/json'} x=requests.post(url=webhook,data=json.dumps(data),headers=headers) if os.path.exists("/var/log/zabbix/dingding.log"): f=open("/var/log/zabbix/dingding.log","a+") else: f=open("/var/log/zabbix/dingding.log","w+") f.write("\n"+"--"*30) if x.json()["errcode"] == 0: f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送成功"+"\n"+str(text)) f.close() else: f.write("\n"+str(datetime.datetime.now()) + " " + str(user) + " " + "发送失败" + "\n" + str(text)) f.close() 安装完事之后下载一个 yum -y install python-requests python
脚本赋予可执行权限
cd /etc/zabbix/alertscripts/ chmod +x dingding.py touch /var/log/zabbix/dingding.log chown zabbix.zabbix /var/log/zabbix/dingding.log 发送一条告警信息测试 [root@master alertscripts]# ./dingding.py xiejin test "这是一条告警测试信息,请忽略"
3、zabbix监控台配置
创建报警媒介
【管理——报警媒介类型——创建媒体类型】
添加媒介名称,类型脚本,脚本名称为刚创建的dingding.py,点击更新
添加动作
配置——动作——创建动作
创建动作名称,并添加一个条件,触发报警条件为大于等于警告
添加操作和恢复操作
告警操作
主题:
Problem: {EVENT.NAME}
消息:
-=【告警啦】=-
告警组:{TRIGGER.HOSTGROUP.NAME}
告警主机:{HOSTNAME1}
告警主机别名:{HOST.NAME}
主机IP:{HOST.IP}
主机描述:{HOST.DESCRIPTION}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
警报类别:{TRIGGER.NAME}
当前状态:{ITEM.LASTVALUE}
告警平台:http://192.168.28.3/zabbix
告警恢复
主题:
Problem: {EVENT.NAME}
消息:
-=【告警啦】=-
告警组:{TRIGGER.HOSTGROUP.NAME}
告警主机:{HOSTNAME1}
告警主机别名:{HOST.NAME}
主机IP:{HOST.IP}
主机描述:{HOST.DESCRIPTION}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
警报类别:{TRIGGER.NAME}
当前状态:{ITEM.LASTVALUE}
点击添加
可以看到新加的动作
定义需发送消息的告警级别
配置完成即可。
4、测试报警效果
将一台监控主机关闭