配置 Zabbix 监控 Apache 服务
配置 apache 性能监控页面
实验环境:centos-60 恢复到安装好 zabbix 和 grafana 服务 ,且监控到 centos-70。
启用 Apache 服务器状态,开启 Apache 的 server-status
vim /etc/httpd/conf/httpd.conf
#在文件最后插入以下内容
ExtendedStatus On
<location /server-status>
SetHandler server-status
Order allow,deny
Allow from 127.0.0.1 192.168.0.0/24
</location>
注:允许访问 status 页面的主机,在生产环境中,可以直接固定为 zabbix-server 端的 IP 地址或者 zabbix 代理地址。
#重启后测试
systemctl restart httpd
访问地址:http://192.168.0.60/server-status
zabbix 关联 apache 模板
链接模板
查看最新数据,筛选 Apache
进行压力测试模拟数据(不要把数值设置的特别大,避免系统卡死)
ab -n 1000 -c 10 http://192.168.0.60/
重点看内存和 cpu 使用率
当前 apache 使用内存 254.64MB ; 使用 cpu 10.2%
总结:配置 Zabbix 监控 Apache 服务的过程:
(1)、配置 apache 性能监控页面。让 zabbix 可以获得被监控服务器上的数据
(2)、在 zabbix 平台上,给被监控主机上关联 apache 监控模板
(3)、查看最新监控数据
配置 Zabbix 监控 MySQL
mysql 数据库配置监控用户
Zabbix 默认提供了 MySQL 的监控模板,我们直接使用即可
配置 Zabbix 监控 mysql 服务的过程:
(1)、配置 mysql 性能监控页面。创建一个 mysql 用户,让 agent 使用此用户来获得 mysql 数据
(2)、在 zabbix 平台上,给被监控主机上关联 mysql 监控模板
(3)、查看最新监控数据
数据库用户授权
grant usage on *.* to zabbix@'localhost' identified by '123456';
注:usage 权限:该权限只能用于数据库登录,不能执行任何操作。
mysql -uzabbix -p123456 #如果可以登录 mysql,说明帐号创建成功
拷贝监控配置文件模板(不同版本文件路径不同,自行修改即可)
[root@centos-70 ~]# cp /usr/share/doc/zabbix-agent-4.4.6/userparameter_mysql.conf /etc/zabbix/zabbix_agentd.d/
这里zabbix会加载zabbix_agentd.d目录下的.conf配置文件
[root@centos-70 ~]# sed -n '290p' /etc/zabbix/zabbix_agentd.conf
这个配置文件中就会读取mysql的一些状态数据供给zabbix使用
cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
要读取mysql的状态,需要登录mysql账号,把账号添加进/etc/my.cnf 即可免密登录
vim /etc/my.cnf.d/client.cnf 这个文件或者下面的文件都可以
vim /etc/my.cnf
测试免密登录
[root@centos-70 lib]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.31 MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select user();
+------------------+
| user() |
+------------------+
| zabbix@localhost |
+------------------+
1 row in set (0.00 sec)
mysql>
然后重启
systemctl restart zabbix-agent && systemctl enable zabbix-agent
单独给 centos-70 主机增加一个 mysql 监控模版
之前我们是修改整个模板来增加监控项,我门只要想要监控centos-70这台机器的mysql,所以我们要单独对这一台机器添加监控模版
重新进入该页,该主机已经添加了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 #每个客户端运行查询的平均数
全部没有数据,因为我是源码编译的mysql所以出现的问题。
这里把源码编译的mysql停止服务,然后取消开机自启动。
yum安装mariadb不成功,需要以下四步骤来排查。
第一步
使用:rpm -qa | grep mysql
使用:rpm -qa | grep mariadb
查询有那些包
第二步
使用yum卸载mysql
yum -y remove mysql-community-*
yum -y remove mariadb*
第三步
在检查系统中是否还有mysql的包
这是很重要的步骤
使用:rpm -qa | grep mysql
使用:rpm -qa | grep mariadb
检查发现有
就用rpm -e --nodes rpm报名-类名
进行多次卸载
rpm -e mysql-community-libs-compat-5.7.25-1.el7.x86_64 mysql-community-libs-5.7.25-1.el7.x86_64 mysql-community-common-5.7.25-1.el7.x86_64 --nodeps
第四步
yum -y install mariadb-server
启动
systemctl start mariadb
mysql
现在运行的mysql还是环境变量里的那个路径,把环境变量删除,重新进入mysql,正常进入mariadb了。
要把这个启动加载的文件删除掉。
实战-Zabbix 自动报警并发送邮件
首先安装 mailx 组件并配置上 163 邮箱的帐号
yum install mailx -y
vim /etc/mail.rc
set from=jianmingbasic@163.com
set smtp=smtp.163.com
set smtp-auth-user=jianmingbasic@163.com
set smtp-auth-password=EHFVPMEWEIADHUKH
set smtp-auth=login
set from=xuegodman@163.com #表示邮件发送方,用于 zabbix 服务端转发邮件到指定邮箱
set smtp-auth-password=xxxxxx #注意:此为 163 邮箱设置的客户端授权密码,不是邮箱密码
echo "zabbix test mail from zabbix server" |mailx -s "title" xxxx@163.com
在 zabbix 服务端写邮件发送脚本:
cd /usr/lib/zabbix/alertscripts
vim sendmail.sh
#!/bin/bash
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mailx -s "${subject}" $1
chown zabbix.zabbix sendmail.sh
chmod +x sendmail.sh
测试发送脚本
/usr/lib/zabbix/alertscripts/sendmail.sh xxxx@163.com "测试邮件标题-磁盘空间不足" "测试邮件内容-还剩下 20G 空间,请增加磁盘容量"
查看主配置文件,让服务读取到这个脚本:
vim /etc/zabbix/zabbix_server.conf
AlertScriptsPath 告警脚本路径,可以自行修改
创建报警媒介类型
三个参数分别为:收件人地址、主题、邮件详细内容
给用户添加邮箱
设置报警用户(zabbix 触发报警是发送给 zabbix 用户所绑定的邮箱。所以要在用户中配置相关报警媒介)
或者你也可以这样理解:zabbix 把消息发给 Admin 用户的邮箱,然后 Admin 用户把邮件再转给163 邮箱。
创建动作
动作由触发器进行触发,例如:centos-70 主机宕机,监控项检测不到数值后触发器就会触发动作。
注意:这里的事件源是触发器。是由触发器触发的动作。
修改操作,邮件内容为:
默认标题:故障{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.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}
测试邮件发送
测试,关闭 centos-70上的 zabbix 客户端服务 zabbix_agentd
查看邮件,延迟比较大,大概要 3-5 分钟后,才可以收到,原因是 zabbix-server 连接 agent 失败后会尝试几次。尝试失败后才会触发报警。
优化数据收集频率以及触发时间
以 mysql 模板为例,搜索时,群组要选择成: 所有
主要看表达式中使用哪个监控项进行判断的。mysql 的表达式明显可以看到根据 mysql.ping 进行判断。
修改更新间隔
不要忘记点击更新,注:生产环境非必要业务,不要设置这么短的时间。
date && systemctl stop mariadb
查看动作日志:
实战-zabbix 自动发现服务器并自动注册到群组中
创建自动发现规则
名称:自动发现 linux 服务器
zabbix_get -s 192.168.0.70 -p 10050 -k system.uname #测试可以获取到
一共4个动作
然后在新的主机192.168.0.80上安装 zabbix-agen客户端
rpm -ivh zabbix-agent-4.4.6-1.el7.x86_64.rpm
vim /etc/zabbix/zabbix_agentd.conf
[root@centos-80 ~]# systemctl start zabbix-agent && systemctl enable zabbix-agent
新的主机会被发现加入到主机群组中,可以查看到
新自动发现加入的主机已经可以查看
加入钉钉告警
打开你要发送消息的钉钉群:
群设置-群机器人-添加机器人-自定义机器人-添加,页面如下
cd /usr/lib/zabbix/alertscripts
vim dingding.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
headers = {'Content-Type':'application/json;charset=utf-8'}
api_url = "https://oapi.dingtalk.com/robot/send?access_"
def msg(test):
json_text={
"msgtype":"text",
"text":{
"content":text
},
"at":{
"atMobiles":[
"186..."
],
"isAtAll":False
}
}
print requests.post(api_url,json.dumps(json_text),headers=headers).content
if__name__=='__main__';
text = sys.argv[1]
msg(text)
chown zabbix.zabbix dingding.py
chmod +x dingding.py
yum install -y python-requests