- 从 http://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/ 下载需要的安装包
- 实验环境
-
Zabbix-Server 192.168.2.3 CentOS 7.6 主服务器
Zabbix-Proxy 192.168.2.4 CentOS 7.6 代理服务器
Zabbix-Agent 192.168.2.5 CentOS 7.6 Web 服务器
Zabbix-Agent 192.168.2.6 CentOS 7.6 Mysql 服务器
- 首先在 192.168.2.5 上 配置 Zabbix 监控 Apache 服务
-
yum -y install httpd
启用 Apache 服务器状态,开启 Apache 的 server-status
- vim /etc/httpd/conf/httpd.conf
- 在文件最后插入以下内容
<location /server-status>
SetHandler server-status
Order allow,deny
Allow from 127.0.0.1 192.168.2.0/24
</location>
注:允许访问 status 页面的主机,在生产环境中,可以直接固定为 zabbix-server 端的 IP 地址或者 zabbix 代理地址。
- zabbix 关联 apache 模板
- 配置 ----- 主机 ----- 模板
- 如果长时间获取不到数据,重启 proxy 服务
- systemctl restart zabbix-proxy
- 配置 Zabbix 监控 MySQL
-
mysql 数据库配置监控用户
Zabbix 默认提供了 MySQL 的监控模板,我们直接使用即可。
-
配置 Zabbix 监控 mysql 服务的过程:
1、配置 mysql 性能监控页面。创建一个 mysql 用户,让 agent 使用此用户来获得 mysql 数据
2、在 zabbix 平台上,给被监控主机上关联 mysql 监控模板
3、查看最新监控数据数据库用户授权
- 在 192.168.2.6 配置数据库用户授权
- 注:usage 权限:该权限只能用于数据库登录,不能执行任何操作。
- 拷贝监控配置文件模板
- cp /usr/share/doc/zabbix-agent-5.0.13/userparameter_mysql.conf /etc/zabbix/zabbix_agentd.d/
- 注:这里记录了,zabbix-agent 要对 mysql 监控的数据。 模板文件中提示我们需要创建.my.cnf 配置文件, 我们直接在数据库的/etc/my.cnf.d/client.cnf 文件中,添加 zabbix 监控 mysql 使用的帐号就可以了。
-
建立数据库和 zabbix 的链接信息
vim /etc/my.cnf.d/client.cnf
[client]
user=zabbix #添加之前授权的用户和密码
password=123456
- 注:MySQL 用户设置密码后,只要在 client 字段下添加用户名和密码就可以免密码登录。每次登录MySQL 的交互界面,只需键入 mysql 命令,即可默认将 host, user, password 的值根据 client.cnf中的内容传给 mysql 命令,进行 mysql 的登录操作。
- 在 zabbix server 单独给 192.168.2.6 主机增加一个 mysql 监控模版
- 如果长时间收不到信息
- 依次重启 mysqld ----- zabbix-agent -------- zabbix-proxy
-
对 mysql 进行压力测试 :
mysqlslap 是 Mysql 自带的压力测试工具,可以模拟出大量客户端同时操作数据库的情况,通过结果信息来了解数据库的性能状况。
mysqlslap -uroot -p --concurrency=100 --number-of-queries=1000 --number-int-cols=5 --number-char-cols=20 --auto-generate-sql
-
参数说明:
--concurrency=100 #指定同时有 100 个客户端连接; concurrence [kənˈkʌrəns] 同时,并
发
--number-of-queries=1000 #指定总的测试查询次数(并发客户端数 * 每个客户端的查询次
数)
--auto-generate-sql #作用是自动生成测试 SQL。自动测试时,创建的表结构非常简单,只有两列,实际的产品环境肯定会更复杂,可以使用参数指定列的数量和类型。
–number-int-cols=5 #指定生成 5 个 int 类型的列
–number-char-cols=20 #指定生成 20 个 char 类型的列
-
结果中各项含义:
Average number of … #运行所有语句的平均秒数
Minimum number of … #运行所有语句的最小秒数
Maximum number of … #运行所有语句的最大秒数
Number of clients … #客户端数量
Average number of queries per client #每个客户端运行查询的平均数
-
使用 163 邮件服务器实现自动邮件报警功能
-
邮件服务可以使用系统自带的邮件服务或第三方邮件服务来发送警告邮件。
使用 163 邮件服务器发送邮件,这样更加稳定,而且不会被当成垃圾邮件。
-
首先安装 mailx 组件并配置上 163 邮箱的帐号
yum install mailx -y
然后编辑 mailx 的配置文件
vim /etc/mail.rc
在最末尾添加如下信息:
set [email protected]
set smtp=imap.163.com
set [email protected]
set smtp-auth-password=xxxxx
set smtp-auth=login
- set [email protected] #表示邮件发送方,用于 zabbix 服务端转发邮件到指定邮箱
- set smtp-auth-password=xxxxxx #注意:此为 163 邮箱设置的客户端授权密码,不是邮箱密码
- 163 邮箱授权码示意图
-
保存退出后测试邮件是否能够正常发送出去
echo "zabbix test mail" |mailx -s "zabbix" [email protected]
- 创建报警媒介类型
- 配置报警媒介,使用脚本发送邮件。名称: 163 邮件报警
- 给 zabbix 用户添加报警邮箱
- 设置报警用户(zabbix 触发报警是发送给 zabbix 用户所绑定的邮箱。所以要在用户中配置相关报警媒介)
-
创建报警动作
动作由触发器进行触发,例如:192.168.2.5 c7_2_5 主机宕机,监控项检测不到数值后触发器就会触发动作。
注意:这里的事件源是触发器。是由触发器触发的动作。
-
修改操作,邮件内容为:
主题:故障{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}
注:TRIGGER.SEVERITY 触发严重性 ; severity [sɪ'verəti] 严重程度 ;
继续添加:恢复操作
默认接收人:已恢复!{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}
- 点击添加
- 测试邮件发送
- 重启 zabbix-server
- systemctl restart zabbix-server
-
测试,关闭 192.168.2.5 上的 zabbix 客户端服务 zabbix_agentd
systemctl stop zabbix-agent
- 测试发送邮件完成
- 使用 stress 工具压力测试 cpu 并触发告警
-
yum install -y epel-release
yum install stress -y
-
tress 参数解释
-? 显示帮助信息
-v 显示版本号
-q 不显示运行信息
-n 显示已完成的指令情况
-t --timeout N 指定运行 N 秒后停止
--backoff N 等待 N 微妙后开始运行
-c 产生 n 个进程 每个进程都反复不停的计算随机数的平方根,测试 cpu
-i 产生 n 个进程 每个进程反复调用 sync(),sync()用于将内存上的内容写到硬盘上,测试磁
盘
-m --vm n 产生 n 个进程,每个进程不断调用内存分配 malloc()和内存释放 free()函数 ,
测试内存
--vm-bytes B 指定 malloc 时内存的字节数 (默认 256MB)
--vm-hang N 表示 malloc 分配的内存多少时间后在 free()释放掉
-d --hadd n 产生 n 个执行 write 和 unlink 函数的进程
- -hadd-bytes B 指定写的字节数
--hadd-noclean 不 unlink
注:时间单位可以为秒 s,分 m,小时 h,天 d,年 y,文件大小单位可以为 K,M,G
-
产生 6 个 cpu 进程, 5分钟秒后停止运行
stress -c 6 -v -t 5m
再打开一个终端,使用 top 命令查看,1 核 cpu 已经占满 100%
- 可以看到 5 分钟内 cpu 负载达到预设值会发出告警