配置 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 ssh监控项 zabbix监控apache_客户端

zabbix 关联 apache 模板

链接模板

zabbix ssh监控项 zabbix监控apache_mysql_02

查看最新数据,筛选 Apache

zabbix ssh监控项 zabbix监控apache_客户端_03

进行压力测试模拟数据(不要把数值设置的特别大,避免系统卡死)
ab -n 1000 -c 10 http://192.168.0.60/

重点看内存和 cpu 使用率

当前 apache 使用内存 254.64MB ; 使用 cpu 10.2%

zabbix ssh监控项 zabbix监控apache_centos_04

总结:配置 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

zabbix ssh监控项 zabbix监控apache_客户端_05

这个配置文件中就会读取mysql的一些状态数据供给zabbix使用
cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

zabbix ssh监控项 zabbix监控apache_zabbix ssh监控项_06

要读取mysql的状态,需要登录mysql账号,把账号添加进/etc/my.cnf 即可免密登录

vim /etc/my.cnf.d/client.cnf 这个文件或者下面的文件都可以

vim /etc/my.cnf

zabbix ssh监控项 zabbix监控apache_客户端_07

测试免密登录

[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,所以我们要单独对这一台机器添加监控模版

zabbix ssh监控项 zabbix监控apache_zabbix ssh监控项_08

zabbix ssh监控项 zabbix监控apache_客户端_09

zabbix ssh监控项 zabbix监控apache_mysql_10

zabbix ssh监控项 zabbix监控apache_zabbix ssh监控项_11

重新进入该页,该主机已经添加了mysql监控模板

zabbix ssh监控项 zabbix监控apache_客户端_12

zabbix ssh监控项 zabbix监控apache_mysql_13

zabbix ssh监控项 zabbix监控apache_zabbix ssh监控项_14

mysqlslap 是 Mysql 自带的压力测试工具,可以模拟出大量客户端同时操作数据库的情况,通过结果信息来了解数据库的性能状况。

mysqlslap -uroot -p --concurrency=100 --number-of-queries=1000 --number-int-cols=5 --number-char-cols=20 --auto-generate-sql

zabbix ssh监控项 zabbix监控apache_centos_15

--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 #每个客户端运行查询的平均数

zabbix ssh监控项 zabbix监控apache_centos_16

全部没有数据,因为我是源码编译的mysql所以出现的问题。

这里把源码编译的mysql停止服务,然后取消开机自启动。

zabbix ssh监控项 zabbix监控apache_mysql_17

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

zabbix ssh监控项 zabbix监控apache_zabbix ssh监控项_18


zabbix ssh监控项 zabbix监控apache_centos_19


zabbix ssh监控项 zabbix监控apache_mysql_20

现在运行的mysql还是环境变量里的那个路径,把环境变量删除,重新进入mysql,正常进入mariadb了。

zabbix ssh监控项 zabbix监控apache_客户端_21


要把这个启动加载的文件删除掉。


zabbix ssh监控项 zabbix监控apache_mysql_22

zabbix ssh监控项 zabbix监控apache_centos_23

实战-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 ssh监控项 zabbix监控apache_客户端_24

创建报警媒介类型

zabbix ssh监控项 zabbix监控apache_centos_25

zabbix ssh监控项 zabbix监控apache_zabbix ssh监控项_26

三个参数分别为:收件人地址、主题、邮件详细内容

给用户添加邮箱

设置报警用户(zabbix 触发报警是发送给 zabbix 用户所绑定的邮箱。所以要在用户中配置相关报警媒介)
或者你也可以这样理解:zabbix 把消息发给 Admin 用户的邮箱,然后 Admin 用户把邮件再转给163 邮箱。

zabbix ssh监控项 zabbix监控apache_centos_27

zabbix ssh监控项 zabbix监控apache_客户端_28

zabbix ssh监控项 zabbix监控apache_mysql_29

创建动作

动作由触发器进行触发,例如:centos-70 主机宕机,监控项检测不到数值后触发器就会触发动作。
注意:这里的事件源是触发器。是由触发器触发的动作。

zabbix ssh监控项 zabbix监控apache_centos_30

zabbix ssh监控项 zabbix监控apache_centos_31

 

修改操作,邮件内容为:
默认标题:故障{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 ssh监控项 zabbix监控apache_centos_32

zabbix ssh监控项 zabbix监控apache_zabbix ssh监控项_33

zabbix ssh监控项 zabbix监控apache_mysql_34

zabbix ssh监控项 zabbix监控apache_mysql_35

注:选择好用户和送到的媒介,然后点添加,这样就增加好“操作”了。查看新增加的操作:

zabbix ssh监控项 zabbix监控apache_centos_36

继续添加:恢复操作

默认接收人:已恢复!{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 ssh监控项 zabbix监控apache_客户端_37

zabbix ssh监控项 zabbix监控apache_mysql_38

 

zabbix ssh监控项 zabbix监控apache_centos_39

测试邮件发送

测试,关闭 centos-70上的 zabbix 客户端服务 zabbix_agentd

查看邮件,延迟比较大,大概要 3-5 分钟后,才可以收到,原因是 zabbix-server 连接 agent 失败后会尝试几次。尝试失败后才会触发报警。

优化数据收集频率以及触发时间

以 mysql 模板为例,搜索时,群组要选择成: 所有

zabbix ssh监控项 zabbix监控apache_mysql_40

zabbix ssh监控项 zabbix监控apache_zabbix ssh监控项_41

zabbix ssh监控项 zabbix监控apache_centos_42

zabbix ssh监控项 zabbix监控apache_客户端_43

主要看表达式中使用哪个监控项进行判断的。mysql 的表达式明显可以看到根据 mysql.ping 进行判断。

zabbix ssh监控项 zabbix监控apache_zabbix ssh监控项_44

修改更新间隔

zabbix ssh监控项 zabbix监控apache_zabbix ssh监控项_45

不要忘记点击更新,注:生产环境非必要业务,不要设置这么短的时间。

zabbix ssh监控项 zabbix监控apache_centos_46

date && systemctl stop mariadb

查看动作日志:

zabbix ssh监控项 zabbix监控apache_centos_47

zabbix ssh监控项 zabbix监控apache_客户端_48

实战-zabbix 自动发现服务器并自动注册到群组中

创建自动发现规则

zabbix ssh监控项 zabbix监控apache_centos_49

名称:自动发现 linux 服务器

zabbix ssh监控项 zabbix监控apache_zabbix ssh监控项_50

zabbix_get -s 192.168.0.70 -p 10050 -k system.uname  #测试可以获取到

zabbix ssh监控项 zabbix监控apache_centos_51

zabbix ssh监控项 zabbix监控apache_zabbix ssh监控项_52

zabbix ssh监控项 zabbix监控apache_客户端_53

zabbix ssh监控项 zabbix监控apache_zabbix ssh监控项_54

zabbix ssh监控项 zabbix监控apache_客户端_55

zabbix ssh监控项 zabbix监控apache_zabbix ssh监控项_56

zabbix ssh监控项 zabbix监控apache_zabbix ssh监控项_57

zabbix ssh监控项 zabbix监控apache_客户端_58

zabbix ssh监控项 zabbix监控apache_客户端_59

一共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

zabbix ssh监控项 zabbix监控apache_mysql_60


zabbix ssh监控项 zabbix监控apache_mysql_61


zabbix ssh监控项 zabbix监控apache_centos_62

[root@centos-80 ~]# systemctl start zabbix-agent && systemctl enable zabbix-agent

新的主机会被发现加入到主机群组中,可以查看到

zabbix ssh监控项 zabbix监控apache_zabbix ssh监控项_63

zabbix ssh监控项 zabbix监控apache_客户端_64

新自动发现加入的主机已经可以查看

加入钉钉告警

打开你要发送消息的钉钉群:

群设置-群机器人-添加机器人-自定义机器人-添加,页面如下

zabbix ssh监控项 zabbix监控apache_mysql_65


zabbix ssh监控项 zabbix监控apache_centos_66

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

zabbix ssh监控项 zabbix监控apache_客户端_67


zabbix ssh监控项 zabbix监控apache_客户端_68


zabbix ssh监控项 zabbix监控apache_zabbix ssh监控项_69

zabbix ssh监控项 zabbix监控apache_客户端_70


zabbix ssh监控项 zabbix监控apache_centos_71

zabbix ssh监控项 zabbix监控apache_客户端_72