一、监控概念及Zabbix部署
用户名:Admin
密码:admin
1、监控对象介绍
系统层监控
-
系统监控:CPU利用率、内存利用率、磁盘IO速度、进程数量、内核完整性等…
-
网络监控:网络设备进出口流量、工作负载、网络延迟、丢包率等…
服务软件监控
- 消息中间件:kafka、RocketMQ、RabbitMQ等…
- Web服务容器:Nginx、Tomcat、httpd、docker、kubernetes等…
- 数据库及缓存系统:MySQL、PostgreSQL、MongoDB、Redis、ElasticSearch等…
- 存储系统:Ceph
业务层监控
-
例如电商网站销售量、转化率等
-
业务接口:登录数、注册数、订单量、支付数量等
2、Linux系统常用监控命令
-
free
#查看内存利用率 -
df
#查看正在使用分区利用率 -
top
# 查看系统健康状态(类似windows的任务管理器)
3、常用的监控软件介绍
- Nagios:本身只能做实时的数据监控,
无法
实现数据的持久化
保存,致命缺点无法查询历史数据 - Cacti:最初应用在机房做流量方面的监控,致命缺点没有故障告警功能
- Ganglia:跟Cactii类似,致命缺点没有故障告警功能
- Open-Falcon:小米公司开源的一款监控软件,目前还是比较冷门,很多中间件不支持监控(例如:httpd、Tomcat)
- Zabbix:2012年诞生的一款分布式监控系统,功能完善(例如:数据存储、数据可视化、故障告警等)目前主要应用在传统的
物理服务器
、虚拟机、路由交换领域的监控 - Promethues:2016年崛起的一款监控系统,功能完善(例如:数据存储、数据可视化、故障告警等)目前主要应用在
容器
领域的监控系统
4、Zabbix组件
zabbix agent
:指标采集器,在被监控主机上采集指标数据,并将采集到的数据发送给zabbix serverzabbix server
:负责接收agent发送的数据,统计数据、管理数据zabbix database
:用于存储所有zabbix的配置信息以及监控数据zabbix web
:管理员通过web界面管理、配置以及查看相关监控信息zabbix-proxy
:分布式监控,用来分担zabbix server的压力(不是必须)
5、平台选择
6、配置zabbix的仓库
- zbx-server主机操作
#安装zabbix5.0存储库(二进制安装方式)
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
#安装zabbix软件包
yum install zabbix-server-mysql zabbix-agent -y
#下载CentOS的SCL仓库(提供zabbix前端所需的一些的软件包)
yum -y install centos-release-scl
#启用zabbix前端仓库
vim /etc/yum.repos.d/zabbix.repo
.......
enabled=1 --启用仓库
.......
#安装Zabbix前端软件包
yum install zabbix-web-mysql-scl zabbix-apache-conf-scl -y
#zabbix-web-mysql-scl 用于连接数据库
#zabbix-apache-conf-scl 用于连接apache
#安装数据库软件(官方文档并没有提供安装数据库的部分)
yum -y install mariadb-server
#启动数据库服务并设置随机自启
systemctl start mariadb && systemctl enable mariadb
#需要对数据库做初始化(不是必须)
mysql_secure_installation
#进入数据库
mysql
#创建存储监控数据的库,并支持中文(库名:zabbix)
MariaDB [(none)]> create database zabbix character setutf8 collate utf8_bin;
#为zabbix程序创建连接数据库的用户,并设置密码(用户名:zabbix)
MariaDB [(none)]> create user zabbix@localhost identifiedby '123456';
#数据库及用户授权
MariaDB [(none)]> grant all privileges on zabbix.* tozabbix@localhost;
#在Zabbix服务器主机上,导入初始架构和数据。系统将提示您输入新创建的密码
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p 123456 zabbix
#为Zabbix服务配置连接数据库
vim /etc/zabbix/zabbix_server.conf
...
100 DBName=zabbix #数据库名称(存储数据的仓库)
116 DBUser=zabbix #连接数据库的用户(给zabbix程序用的一个身
份)
124 DBPassword=123456 --设置zabbix用户密码
#为PHP配置正确的时区
vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
...在文件的最后一行,删除注释,并改为正确的时区
php_value[date.timezone] = Asia/Shanghai --亚洲/上海
#启动所有服务并设置服务随机自启
systemctl restart zabbix-server zabbix-agent httpd rhphp72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rhphp72-php-fpm
二、Zabbix基本操作
1、Zabbix服务参数介绍
zabbix-server 端口:10051
zabbix-agent 端口:10050
zabbix server主配置文件:/etc/zabbix/zabbix_server.conf
zabbix agent主配置文件:/etc/zabbix/zabbix_agentd.conf
zabbix企业微信报警脚本路径:/usr/lib/zabbix/alertscripts
zabbix自定义监控项路径:/etc/zabbix/zabbix_agentd.d
zabbix日志文件路径:/var/log/zabbix/
2、登录ZABBIX WEB
- 从客户端访问:http://server_ip/zabbix
环境检查
请确保这里的Check of pre-requisites必须全部项目OK后才能继续配置,如有提示fail,去server上检查是否安装这个包或配置是否按上述更改。
配置数据库连接
输入连接数据库所需的详细信息,Zabbix数据库必须先建立好。
- Zabbix前端已经安装完成! 默认账号密码
- 超级用户名是 Admin,
- 密码 zabbix
为了防止暴力破解和词典攻击,如果发生连续五次尝试登陆失败,Zabbix接口将暂停30秒。
在下次成功登陆后,将会在界面上显示登录尝试失败的IP地址。
3、创建组
zabbix并没有为单独用户设置主机管理权限
,所有的权限都通过组进行统一分配
,当用户加入到对应的组后,将权限分配到对应的组中即可继承组权限。
4、增加用户
除了Admin超级管理员以外,还可以创建普通用户给公司其他员工使用。
可以使用新用户登录验证。
5、添加主机
Zabbix对于主机的监控非常灵活,它可以是物理服务器、网络交换机、虚拟机、应用等。
提前准备好一台Linux主机,并安装zabbix-agent
客户端程序。
#下载zabbix官方仓库
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
#安装zabbix agent
yum list zabbix-agent
#查询软件包安装到系统中文件
rpm -ql zabbix-agent
...
/etc/zabbix/zabbix_agentd.conf
#修改agent配置文件,定义zabbix server的地址
vim /etc/zabbix/zabbix_agentd.conf
...
117 Server=192.168.0.14 --指定zabbix server地址(谁可以监控我)
#启动服务并设置服务随机自启
systemctl start zabbix-agent && systemctl enable zabbix-agent
回到Zabbix server 的web界面,通过 配置(Confifiguration)→ 主机(Hosts)→ 创建主机(Create host)以添加新的主机。
6、查看主机
灰色
表示主机状态尚未建立,尚未发生监控指标检查绿色
表示主机可用,监控指标检查已成功红色
表示主机不可用,监控指标检查失败(将鼠标光标移动到图标上以查看错误消息)。可能是由于接口凭证不正确造成了通信问题。检查zabbixserver是否正在运行,并稍后尝试刷新页面
7、模板概述
模版可以对监控项、触发器、图形等进行归类,当一个模版链接到一个主机后,主机会继承这个模版中的所有功能。
- 机框故障监控(电源,风扇和温度,总体状态)
- 机框性能监控(CPU和内存项)
- 机框资产收集(序列号,型号名称,固件版本)
- 使用IF-MIB和EtherLike-MIB进行网络接口监控(接口状态,接口流量负载,以太网的双工状态)
所有必填字段以红色星标标示。
模版名称:名称自定义,不支持中文。
群组:模版必须属于一个组,可以自建,可以使用zabbix提供的组。
8、新建应用集
模板中的应用集我们可以理解为监控项的分组,可以将相同类型的监控项分配到同一个应用集内。
配置 → 模板 找到对应的模板选择 应用集 → 创建应用集
名称:自定义,支持中文。
9、新建监控项
监控项是Zabbix中获得数据的基础,没有监控项,就没有数据。
配置 → 模板 页面查找到我们自建的模板,点击模板中的 监控项 然后 创建监控项
名称:名称自定义,支持中文。
CPU 1、5、15分钟平均负载监控项key
system.cpu.load[all,avg1]
system.cpu.load[all,avg5]
system.cpu.load[all,avg15]
完成后前往监测(Monitoring) → 最新数据(Latest data)查看具体细节
10、数据导出
要导出模板,按照如下的操作:
选中的模板被导出到本地的XML文件里,默认的名称是zabbix_export_templates.xml
11、模板导入
模板导入
要导入模板,按照如下的操作:配置(Confifiguration) → 模板(Templates)单击右上角的 导入(Import) 按钮,选择要导入的文件,标记导入规则里要求的选项,单击 导入(Import) 按钮
绑定模板
点击 配置 → 主机 找到你的主机,然后选择模板 ,选择好模板后,点击更新
监控数据
点击配置栏中的监测(Monitoring) →主机(host) →最新数据(Latest data)以查看具体细节。
第一次获得的监控项值最多需要60秒才能到达。 默认情况下,这是服务器读取变化后的配置文件,获取并执行新的监控项的频率。 等待30秒以获得新的监控项值。
图表
当监控项运行了一段时间后,可以查看可视化图表,点击监控项后的图形(Graph) 以查看图表。
11、解决Zabbix中文乱码
将准备好的字体文件传到zabbix存放字体文件路径,并覆盖原文件内容。
cd /usr/share/zabbix/assets/fonts/
cp SIMSUN.TTC graphfont.ttf
刷新web界面即可
12、添加触发器
监控项只是用于收集数据,当监控项收集了数据后,如果需要自动评估收到的数据,我们则需要定义触发器,触发器会根据异常状态触发报警,而不需要我们直接在Zabbix前端进行查看,这就是通知的功能。
为监控项配置触发器,前往配置(Confifiguration) → 主机(Hosts)找到对应主机(New host)点击旁边的触发器(Triggers),然后点击创建触****发器(Create trigger)
随后可以在对应主机模拟CPU忙碌来验证该触发器,具体问题将显示在监测(Monitoring) → 问题(Problems)中,也可在 监测→最新数据 通过图形观察CPU状态
13、新建动作
为了建立一个报警通知,前往配置(Confifiguration) →动作(Actions),然后点击创建动作(Create action)
我们还需要定义这个动作具体做了什么 —即在 操作(Operations) 中配置具体的操作。
点击新建(New),将会打开一个操作表单
先配置第一个操作,点击操作内的 添加
默认1小时情况下,例如:步骤1-3就是故障不恢复的的情况下一小时发送一次,发送三次停止,1-0是每隔一小时发一次,直到故障恢复。
下边是zabbix内置的用户自定义告警消息模板,用于指定发送告警的具体消息,将该内容复制到对应的参数内
故障告警:{EVENT.NAME}
告警主机: {HOST.NAME}
主机地址: {HOST.IP}
监控项目: {ITEM.NAME}
当前取值: {ITEM.LASTVALUE}
告警等级: {TRIGGER.SEVERITY}
告警时间: {EVENT.DATE}-{EVENT.TIME}
事件ID: {EVENT.ID}
接下来配置告警恢复操作,点击恢复操作内的添加
下边是zabbix内置的用户自定义告警消息变量,用于指定故障恢复时,发
送告警的具体消息,将该内容复制到对应的参数内
故障恢复:{EVENT.NAME}
主机地址: {HOST.IP}
告警名称: {EVENT.NAME}
持续时长: {EVENT.DURATION}
恢复时间: {EVENT.RECOVERY.DATE}{EVENT.RECOVERY.TIME}
当前状态: {TRIGGER.STATUS}
当前取值: {ITEM.LASTVALUE}
事件ID: {EVENT.ID}
![image-20230707183349589](D:\01_Software\03-markdownImages\image-20230707183349589.png)
检查对应的动作的状态为 已启用 状态
Report problems to Zabbix administrators(向zabbix管理员报告问题)状态无需启用,应为接下来我们会自定义收件人信息。
14、定义收件人
我们在定义一个外界的收件人邮箱,选择用户基本资料→ 报警媒介 添加收件人的邮箱,这个可以是实际工作中管理员的具体邮箱地址。
注意:该邮箱需开启邮件服务,开起方法可等录具体邮箱官网,从设置中开启。
小结:
1)E-mail:报警媒介类型,通过什么方式去发送报警消息;
2)触发器:用于为监控项内的指标数据定义阈值(条件);
3)动作:用于绑定具体触发器,当触发器被触发时,用于发送告警消息;
4)收件人:用于接收告警消息;
14、验证警告信息
接下来我们要在被控主机上模拟多个用户登录系统来触发这个告警动作。在监测(Monitoring) → 问题(Problems)中,可以看到闪烁 问题
。
验证是否会收到邮件通知!你的e-mail中,会收到一个问题通知。
常见问题分析:如果通知功能没有正常工作
- 再次验证E-mail设置和动作设置已经被正确配置
- 另外,你可以在报告(Reports) → 动作日志(Action log)中检查动作日志。
15、自定义触发器严重性
默认情况下,触发器的严重性以英文方式展示,可以在管理 → 一般 → 触发器设置 中配置为中文。
点击 更新。
动作日志
动作日志可以查看zabbix执行过的所有告警动作,通过报表→动作日志查看
审计
审计用于记录我们在zabbix web上执行过的所有(造成改变)的行为,通过报表→审计查看
总结:
1.创建触发器(为监控项定义一个条件)
2.创建动作(跟触发器绑定,触发器一旦被触发,接下来就执行动作:可以是发送报警消息)
3.定义报警收件人
4.验证动作是否执行成功,通过动作日志查看
三、企业微信报警功能
准备企业微信信息
登录企业微信:https://work.weixin.qq.com/
在应用管理 中查看zabbix应用ID及secret(密钥)
在通讯录
中查看部门ID及个人账号ID
zabbix应用ID:1000039
应用密钥:RdqTtbydSEoef5TxUEKbheHwoszwJklVNYCFpb7Rwes
企业ID:wwa78d6212da74fd51
个人账号ID: Yesir
部门ID:8
配置报警脚本
zabbix要求故障报警脚本必须放在指定路径,通过下边命令过滤配报警脚本的存放路径
egrep -v '^$|#' /etc/zabbix/zabbix_server.conf
...
AlertScriptsPath=/usr/lib/zabbix/alertscripts //存放报警脚本路径
将脚本放至该路径添加执行权限
cd /usr/lib/zabbix/alertscripts/
chmod +x wechat.py
修改脚本添加企业微信信息
vim wechat.py
...
Data = {
"touser": "User", 企业号中的用户帐号
#"totag": Tagid,
"toparty": Partyid, 部门ID
"msgtype": "text",
"agentid": "Agentid", Zabbix应用ID
...
Corpid = "wxaf" 企业ID
Secret = "aKDdCRT76" Zabbix应用密钥
#Tagid = "1"
Agentid = "1000001" Zabbix应用ID
安装python3.6
因为微信告警脚本是python写的,所以需要先安装python,系统预装python版本是2.7,实践会报错找不到模块,所以需要安装python3.6解决,但yum支持不了这么高版本的python,所以这里用源码安装python,然后装requests模块的时候也不要用系统预装的pip,用pip3。
yum -y install python-requests zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
mkdir -p /usr/local/Python3
tar -xf Python-3.6.4.tgz
cd Python-3.6.4/
./configure --prefix=/usr/local/Python3 && make && make install
cd /usr/local/Python3
ln -s /usr/local/Python3/bin/python3.6 /usr/bin/python3
ln -s /usr/local/Python3/bin/pip3.6 /usr/bin/pip3
pip3 install requests
执行脚本测试:’收件人的微信账号‘ ‘信息标题’ ‘信息内容’
cd /usr/lib/zabbix/alertscripts/
./wechat.py Yesir test hello
测试时如果出现IP地址不信任的问题,例如下方提示:
ps://open.work.weixin.qq.com/devtool/query?e=60020'}
{u'errcode': 60020, u'errmsg': u'not allow to access from
your ip, hint: [1660829875354963235117609], from ip:
111.164.201.247, more info at
https://open.work.weixin.qq.com/devtool/query?e=60020'}
解决方法:
1)登录企业微信:https://work.weixin.qq.com/
2)点击应用管理 找到zabbix应用
3)在页面最下方配置企业可信IP (把请求返回的ip设置到可信IP中,注意:IP每天都会变动,所以每天都要重新配置到企业可信IP里)
1、创建报警媒介
媒介是Zabbix中用于发送告警的方式,可以配置多种媒介类型,如:电子邮件、短信、自定义报警脚本、Webhook。
媒介类型在 管理 → 媒介类型 中进行配置,点击 创建媒介类型 按钮来创建一个新的媒体类型。
下边三个脚本特定参数是zabbix内置,用于指定在发送消息时的收件
人、消息主题、消息内容
{ALERT.SENDTO} #收件人
{ALERT.SUBJECT} #消息主题
{ALERT.MESSAGE} #消息内容
自定义消息模板的步骤:
- 在 消息模板 (Message template) 选项卡中,点击 添加 填写所需的
消息类型
主题
消息
下边是zabbix内置的问题消息模板,用于指定发送告警的具体消息。
告警信息:{EVENT.NAME}
告警主机: {HOST.NAME}
主机地址: {HOST.IP}
监控项目: {ITEM.NAME}
当前取值: {ITEM.LASTVALUE}
告警等级: {TRIGGER.SEVERITY}
告警时间: {EVENT.DATE}-{EVENT.TIME}
事件ID: {EVENT.ID}
完成后点击 添加 保存消息模板。
配置 问题恢复 消息
下边是zabbix内置的问题恢复消息模板,用于指定故障恢复时,发送告警的具体消息。
故障恢复:{EVENT.NAME}
主机地址: {HOST.IP}
告警名称: {EVENT.NAME}
持续时长: {EVENT.DURATION}
恢复时间: {EVENT.RECOVERY.DATE}-{EVENT.RECOVERY.TIME}
当前状态: {TRIGGER.STATUS}
当前取值: {ITEM.LASTVALUE}
事件ID: {EVENT.ID}
点击 添加 保存消息模板。
2、媒介类型测试
在 报警媒介类型 列表中找到企业微信报警 ,点击列表最后一栏中的 测试
(将打开一个测试窗口)测试配置好的媒介类型是否正常工作
3、获取通知
由于前边在学习邮件报警时已经配置过触发器及动作,可从 配置 → 主机触发器 页面查看前边配置的触发器。
可从 配置 → 动作 页面查看前边配置过的触发器动作
接下来添加微信收件人,点击 用户基本资料 → 报警媒介 → 添加 企业微信收件人。
点击 更新。
接下来我们使用多个终端同时登录来验证报警消息。
从 监测 → 最新数据 以查看具体值。
从 监测 → 问题 以查看具体问题通知。
从 报表 → 动作日志 以查看发送消息是否成功。
3、问题确认
Zabbix的问题事件可由用户确认,如果用户收到问题事件的通知,可以打开Zabbix的前端页面,从问题更新页面上找到对应的问题进行确认。当进行确认的时候,可以输入注释表明他们正在处理该问题,或者输入任何他们想表述的内容。
利用这种方式,如果有另一个系统管理员察觉到这个问题,就可以立刻知道该问题已经被确认过,并且看到之前留下的注释。
这样的问题处理工作流,可以让多个系统管理员协同工作。
提示: 要确认事件,用户必须至少具有相应触发器的读权限。
常见的问题确认方法:从左侧配置栏的 监测 (Monitoring) → 仪表板(Dashboard) → 问题 (Problems) 从确认小部件中确认状态。
4、配置CPU告警
由于前边已经配置了CPU 1分钟负载的触发器,在 配置****→主机**对应主机中的 触发器 查看。
新建动作
在配置→动作中创建动作并绑定对应触发器。
在 操作 中,添加报警操作细节
验证告警信息
接下来在被控主机上模拟CPU负载来触发这个告警动作。
while :; do echo hello; done
四、Zabbix项目监控实战
1、部署php-fpm与数据库
#安装Mariadb-server及相关依赖
yum install mariadb mariadb-server php php-fpm php-mysql php-gd -y
修改 /etc/my.cnf 文件支持中文
vim /etc/my.cnf
[mysqld]
character-set-server=utf8 --手动添加
#启动服务并设置服务随机自启
systemctl start mariadb && systemctl enable mariadb
修改/etc/php-fpm.d/www.conf配置文件指定用户与组,并开启状态页面用于监控服务状态。
vim /etc/php-fpm.d/www.conf
...
39 user = nginx
41 group = nginx
121 pm.status_path = /php_status --取消注释(默认被注释)并改名为/php_status
修改配置/etc/php.ini 指定php时区
vim /etc/php.ini
...
date.timezone ="Asia/shanghai" --指定时区
2、部署Nginx
通过nginx官方仓库安装软件包,并开启nginx状态页面功能
#创建nginx仓库文件
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$base
arch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
#安装nginx
yum -y install nginx-1.22.0-1.el7.ngx.x86_64
修改 /etc/nginx/conf.d/default.conf 文件(提前做好配置文件备份)
cp /etc/nginx/conf.d/default.conf{,.bak}
#删除配置文件默认内容,替换为如下内容
> /etc/nginx/conf.d/default.conf
cat /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
#开启nginx状态页面
location = /status {
stub_status;
}
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
#配置nginx连接php
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#开启php页面
location /php_status {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
}
#启动服务&设置服务随机自启
systemctl restart nginx php-fpm && systemctl enable nginx php-fpm
- 访问nginx状态页面:http://server_ip/status
- 访问php-fpm状态页面:http://server_ip/php_status
测试nginx与php之间的连接
vim /usr/share/nginx/html/phpinfo.php
<?php
phpinfo();
?>
- 访问:http://server_ip/phpinfo.php
测试php与mysql协同方式一:
vim /usr/share/nginx/html/mysql.php
<?php
$con=mysql_connect("localhost","root","");
if(!$con){
die("could not connect to the
db:\n".mysql_error());
}
else{
echo "success";
}
mysql_close($con);
?>
- 访问测试:http://server_ip/mysql.php
3、上线Discuz项目
上线Discuz项目到nginx网页目录:/usr/share/nginx/html/
#切换到Nginx站点目录
cd /usr/share/nginx/html/
rm -rf *
#解压项目
unzip Discuz_X3.3_SC_UTF8.zip
#将项目文件移动至html
mv upload/* .
#修改项目文件归属为nginx
chown -R nginx:nginx .
- 访问Discuz:http://server_ip/
创建数据库并授权discuz用户
mysql
MariaDB [(none)]> create database discuz;
MariaDB [(none)]> grant all on discuz.* to discuz@localhost identified by '123456';
4、登录Discuz
5、Redis为Discuz提供缓存
#安装Redis(需要epel源)
yum -y install redis
安装php-pecl-redis扩展模块(该模块用于php连接redis)
可提前过滤对应软件包:yum list|grep php|grep redis
#安装(需要epel源)
yum -y install php-pecl-redis.x86_64
#重启php-fpm
systemctl restart php-fpm
查看模块
php -m | grep redis
redis
再次刷新页面可看到以支持Redis
修改文件:/usr/share/nginx/html/confifig/confifig_global.php
vim /usr/share/nginx/html/config/config_global.php
...
19 $_config['memory']['redis']['server'] = '127.0.0.1'; #
指定Redis服务器地址为本机
23 $_config['memory']['redis']['requirepass'] = ''; #
如果Redis有密码需指定密码
启动Redis程序
systemctl start redis && systemctl enable redis
五、Matomo部署
支持 Apache、Nginx
PHP 版本至少是 5.5.9
MySQL\MariaDB版本至少是 5.5 或以上
检查nginx、php、MySQL版本是否符合安装条件
\#zabbix agent端查看
mysql --version
php --version
默认情况下系统自带的php版本过低,需要对php进行升级, php高版本的yum源地址,有两部分,其中一部分是fedora源,另外一部分来自webtatic源。
#安装epel-release与webtaticy源
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
#为了防止centos上面发生php版本冲突,先清理以下本机自带的php相关软件
yum -y remove php*
#安装php72w及其它相关扩展(w表示软件来源于webtatic-release这个镜像源,安装上没什么需要注意的,哪个快用哪个,webtatic上php版本比较全)
yum -y install php72w php72w-cli php72w-fpm php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-mysqlnd php72w-opcache php72w-pdo php72w-pecl-redis php72w-xml
#重启php-fpm
systemctl restart php-fpm && systemctl enable php-fpm
#查看php版本
php --version
#查看php扩展模块(主要检查php连接MySQL与Redis模块)
php -m | egrep "redis|mysql"
...
mysqli
mysqlnd
pdo_mysql
redis
修改配置/etc/php.ini文件指定时区
vim /etc/php.ini
...
date.timezone ="Asia/shanghai" --在文件最后增加
修改/etc/php-fpm.d/www.conf文件指定用户与组,并开启状态页面。
vim /etc/php-fpm.d/www.conf
...
8 user = nginx
10 group = nginx
217 pm.status_path = /php_status --取消注释(默认被注释)并改名php_status
#重启php-fpm
systemctl restart php-fpm
1、配置matomo的站点
通过虚拟web主机方式部署matomo站点(基于域名)
创建nginx配置文件,可直接将下边内容复制到该文件:/etc/nginx/conf.d/matomo.conf
cat /etc/nginx/conf.d/matomo.conf
server {
listen 80;
server_name web.matomo.com; #配置访问域名
location / {
root /usr/share/nginx/matomo; #指定站点目录
index index.php index.htm;
}
location ~ \.php$ {
root /usr/share/nginx/matomo; #指定站点根目录
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
#重启服务
systemctl restart nginx
2、上线matomo项目
创建matomo站点目录并上传项目
mkdir /usr/share/nginx/matomo
cd /usr/share/nginx/matomo
unzip matomo-latest.zip
mv matomo/* .
chown -R nginx:nginx .
配置本地域名解析:C:\Windows\System32\drivers\etc
配置格式:server_ip web.matomo.com
3、Matomo页面初始化
浏览器访问测试:http://web.matomo.com/
Matomo将检查以确保您的服务器符合Matomo的要求。如果一切正常,您会看到一长串这样的清单:
为matomo创建数据库以及连接数据库用户
#创键库并授权用户
mysql
MariaDB [(none)]> create database matomo;
MariaDB [(none)]> grant all on matomo.* to matomo@'localhost' identified by '123456';
Matomo将向您发出一个JavaScript追踪标签,该代码必须出现在您要
Matomo分析的每个页面上。
管理中心→全局→站点信息**,拉到最下边可看到网站第三方代码,复制代码,点击提交即可。
回到Matomo页面,请点击下一步****»
单击继续到Matomo»,然后登录到仪表板!
首次登录会出现如上提示:
如果您的网站上正确安装了Matomo JavaScript跟踪标记,则您将收到
实时分析数据。如果您没有收到任何数据,请确保已将Matomo
Javascript代码复制并粘贴到您的网站页面上。
此时刷新论坛的浏览量后在查看Matomo页面会出现如下的统计信息:
六、自定义监控
1、监控Nginx
自定义nginx访问量的监控项,首先要通过脚本将各种状态的值取出来,然
后通过zabbix监控。
在zbx-client客户端主机操作
#创建目录,然后将脚本上传到该目录
mkdir /etc/zabbix/script/
cd /etc/zabbix/script
chmod +x ngx_status.sh
#脚本内容主要是利用函数定义nginx状态页面的各个字段,然后结合awk进行取值,最后在通过case语句控制脚本输出
cat /etc/zabbix/script/ngx_status.sh
#定义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
#修改zabbix agent配置文件,开启自定义监控功能
vim /etc/zabbix/zabbix_agentd.conf
...
311 Include=/etc/zabbix/zabbix_agentd.d/*.conf --自定监控路径
330 UnsafeUserParameters=1 --改为1为开启自定义监控功能,默认该功能为关闭状态
#进入自定义监控路径
cd /etc/zabbix/zabbix_agentd.d/
#创建自定义监控文件(文件名要求以 .conf结尾)
vim nginx_status.conf
UserParameter=nginx.active,bash
/etc/zabbix/script/ngx_status.sh active
UserParameter=nginx.accepts,bash
/etc/zabbix/script/ngx_status.sh accepts
UserParameter=nginx.handled,bash
/etc/zabbix/script/ngx_status.sh handled
UserParameter=nginx.requests,bash
/etc/zabbix/script/ngx_status.sh requests
UserParameter=nginx.reading,bash
/etc/zabbix/script/ngx_status.sh reading
UserParameter=nginx.writing,bash
/etc/zabbix/script/ngx_status.sh writing
UserParameter=nginx.waiting,bash
/etc/zabbix/script/ngx_status.sh waiting
#解释
UserParameter= #自定义监控固定格式
nginx.active #监控项名称
#重启zabbix-agent服务
systemctl restart zabbix-agent
获取监控项数据
zabbix server端操作
#服务端下载zabbix-get软件包,用于在命令行获取客户端监控项的值
yum -y install zabbix-get
#获取客户端监控项(按照自己的环境修改IP)
zabbix_get -s 192.168.0.15 -k nginx.active --当前活动用户的连接数量
zabbix_get -s 192.168.0.15 -k nginx.accepts --接收的客户端连接总数量
zabbix_get -s 192.168.0.15 -k nginx.handled --处理的连接总数量
zabbix_get -s 192.168.0.15 -k nginx.requests --客户端请求的总数量
zabbix_get -s 192.168.0.15 -k nginx.reading --正在读取请求的连接数
zabbix_get -s 192.168.0.15 -k nginx.writing --将响应反回客户端的连接数
zabbix_get -s 192.168.0.15 -k nginx.waiting --客户端正在等待服务器的响应数量
接下来创建监控模板、应用集、监控项
当完成后,点击 添加(Add),新的监控项将出现在监控项列表中。
按照上述方法在将其余的监控项添加至模板中。最终的效果如下图:
绑定模板,转到 配置 → 主机 找到你的主机,把模板绑定到主机。
随后点击配置栏中的监测(Monitoring) → 最新数据 (Latest data)以查看具体细节。
2、监控Redis
自定义监控项方法与nginx类似
#上传脚本到/etc/zabbix/script路径并添加执行权限
chmod +x redis_status.sh
#创建自定义监控项文件
vim /etc/zabbix/zabbix_agentd.d/custom_redis_status.conf
UserParameter=Redis.Info[*],/etc/zabbix/script/redis_statu
s.sh $1 $2
UserParameter=Redis.Status,(redis-cli -h 127.0.0.1 -p
6379 ping)2>/dev/null |grep -c PONG
#重启zabbix agent服务
systemctl restart zabbix-agent
接下来创建模板、应用集、监控项、绑定模板与前边的nginx一样,此处不在重复演示,最终效果如下图:
3、监控PHP
php-fpm 作为 PHP进程管理程序,我们也需要监控它的状态。
#查看php-fpm配置文件确保已经开启状态页面功能(搜索:status)
vim /etc/php-fpm.d/www.conf
...
121 pm.status_path = /php_status
#查看nginx配置文件确保可以访问php_status页面
vim /etc/nginx/conf.d/default.conf
...
location /php_status { #php状态页面
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
/scripts$fastcgi_script_name;
include fastcgi_params;
}
- 访问php状态页面:http://server_ip/php_status
- pool:fpm池子名称,大多数为www
- process manager:进程管理方式,值:static,dynamic orondemand
- start time:启动日期,如果reload了php-fpm,时间会更新
- start since:运行时长
- accepted conn:当前池子接受的请求数
- listen queue:请求等待队列,如果这个值不为0,那么要增加FPM的进程数量
- max listen queue:请求等待队列最高的数量
- listen queue len:socket等待队列长度
- idle processes:空闲进程数量
- active processes:活跃进程数量
- total processes:总进程数量
- max active processes:最大的活跃进程数量(FPM启动开始算)
- max children reached:进程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量太小了,需要设置大点
- slow requests 当启用了php-fpm slow-log功能时,如果出现php-fpm慢请求这个计数器会增加,一般不当的Mysql查询会触发这个值
自定义监控项方法与nginx类似
#上传脚本到/etc/zabbix/script路径并添加执行权限
chmod +x phpfpm_status.sh
#创建自定义监控项文件
cat /etc/zabbix/zabbix_agentd.d/phpfpm_status.conf
UserParameter=phpfpm_status[*],/bin/bash
/etc/zabbix/script/phpfpm_status.sh "$1"
#重启zabbix agent服务
systemctl restart zabbix-agent
Zabbix Server获取监控项数据
#php-fpm运行时长
zabbix_get -s 192.168.0.15 -k phpfpm_status[start_since]
#当前接收的连接数
zabbix_get -s 192.168.0.15 -k phpfpm_status[accepted_conn]
#等待连接的请求数
zabbix_get -s 192.168.0.15 -k phpfpm_status[listen_queue]
#请求等待队列最高的数量
zabbix_get -s 192.168.0.15 -k
phpfpm_status[max_listen_queue]
4、监控MySQL
- percona官网: https://www.percona.com/
- 软件下载地址: wget https://www.percona.com/downloads/percona-monitoring-plugins/1.1.6/percona-zabbix-templates-1.1.6-1.noarch.rpm
安装percona
rpm -ivh percona-zabbix-templates-1.1.6-1.noarch.rpm
...
Scripts are installed to /var/lib/zabbix/percona/scripts --监控脚本安装路径
Templates are installed to /var/lib/zabbix/percona/templates --监控模板安装路径
#查看监控模板路径
ls /var/lib/zabbix/percona/templates
userparameter_percona_mysql.conf --监控项配置文件
zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6.xml --监控模板文件
#将自定义监控文件移动至/etc/zabbix/zabbix_agentd.d/自定义监控项
目录
mv /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
导入监控模板,验证模板是否可用,回到zabbix web界面通过 配置→模板→导入 将模板文件导入。
提示:默认会出现如上图问题,应为percona提供的监控模板由于版本2.0.9过低,而zabbix4.0以后版本就不支持2.0以下的模板,需要使高版本的模板。
通过配置→模板查看(搜索:mysql)具体信息
配置percona连接数据库
percona监控插件是php编写,通过php连接mysql数据库来获取相关的数据,需要为percona指定连接数据库的用户与密码。
#修
改/var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php文件指定用户与密码
ls /var/lib/zabbix/percona/scripts/
get_mysql_stats_wrapper.sh --获取MySQL状态脚本
ss_get_mysql_stats.php --php连接MySQL数据库脚本
#修改php脚本指定连接数据库用户与密码
vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
...
30 $mysql_user = 'root';
31 $mysql_pass = ''; 如果root用户没有密码,则留空即可
#重启zabbix agent服务
systemctl restart zabbix-agent
zabbix server 端命令行取值(具体值可
从/etc/zabbix/zabbix_agentd.d/userparameter_percona_mysql.conf监控项文件中查看)
zabbix_get -s 192.168.0.15 -k MySQL.Sort-scan
0
如果需要监控主从同步状态,需要修
改/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh脚本文件
将用户改为root即可(如果root用户没有设置密码,则不需要指定-p)。
回到web界面查看监控项状态。
具体取值数据可从 监测→最新数据 中查看
此时通过 监测→仪表板 查看时会发现一个问题通知,大致含义为主从状态为停止。
如果没有配置主从同步,通过 配置→主机→监控项,找到对应监控项关闭即可。
到此为止MySQL监控以完成。
有时间可以制作一个MySQL的监控模板(中文)只保留核心监控项目,没有必要的,停用掉!
七、可视化功能
1、自定义图表
顾名思义,自定义图表提供自定义功能,如果你想更改图表样式或线条的显示方式或比较多个项目,你需要一个自定义图表。
要创建自定义图表,转到 配置 → 主机
或模板)单击所需主机或模板旁边的行中的 图形在图表屏幕中单击 创建图表
每次的调试都可以通过图形里的预览进行查看
当配置完成后点击添加更新**以完成创建。
查看图形数据方式可通过 监测→主机 在主机信息内的图形页面查看
创建nginx状态图形
2、Ad-hoc 临时图
一个简单的图表适合查看一个指标数据,而自定义图表提供了可以按照自己的需求去自建图形,但两者都不允许快速创建多个项目的比较图表,为了解决这个问题,从 Zabbix 2.4 开始,可以以非常快速的方式为多个项目创建临时图。
要创建临时图,请执行以下操作:
- 转到 监测****→最新数据
- 勾选需要进行比较的监控项
- 最下方通过 显示堆叠图 或 显示图 绘图
提示:Ad-hoc可以快速为项目创建临时的对比图,无法永久保存。
3、聚合图形
聚合图形的用途是可以将多个图形聚合在一个图形中展示,在 监测 → 聚****合图形 可以配置、管理、查看Zabbix 聚合图形,如果要创建新的聚合图形,点击屏幕右上角的 创建聚合图形(Create screen)也可从XML文件导入现成的局和图形。
本案例将前边的cpu平均负载 与nginx状态 创建成了一个聚合图形,如上图:
4、Zabbix拓扑图
在很多时候,特别是在被监控对象所处的网络结构比较复杂的时候,我们非常希望有一张能反映当前整个网络状态的拓扑图供我们查看。
这样,不但能非常直观和清晰地监控整个网络的当前状态,而且,一旦网络出现故障,也能快速地发现和定位故障所发生的节点,从而大大提高工作效率。
在 监测****→ 拓扑图 部分,可以配置、管理、查看网络拓扑图,要配置新的
拓扑图点击右上角的 创建拓扑图 按钮,也可从XML文件导入拓扑图
刚创建的拓扑图里边没有拓扑,需要进到拓扑后,点击右上角编辑拓扑图添加具体设备:
通过配置按钮创建拓扑:
创建拓扑后,点击右上角更新 再次通过监测→拓扑验证。
八、其他监控
1、Zabbix_Web监测
案例需求:要求通过zabbix_web监测功能监控Discuz论坛的响应速度
及下载速度
。
1)创建web监测
通过左侧栏的 配置→主机 找到对应的主机点击 Web监测 后点击右上角的创建Web场景
2)配置步骤
随后点击步骤,配置第一步骤,配置如下图所示,步骤名称自定义,URL填写打开Discuz论坛时的网址链接
勾选 跟随跳转(不勾选会报301错误),超时时间默认15s,要求的状态码填200(多个状态码用英文逗号隔开即可,如:200,404,500),然后点击右下角 添加 添加步骤,再次点击 添加,成功添加新的Web场景。
3)查看Web监测
具体图形可通过 监测→主机,可以看到我们配置了WEB监测的主机,点击Web监测1 ,稍等一分钟后可以看到有数据,说明配置无误。
2、Zabbix的SNMP监控
SNMP简单网络管理协议,是专门设计用于在 IP 网络管理、网络节点(服务器、工作站、路由器、交换机及HUBS等)的一种标准协议,它是一种应用层协议。
如果我们需要监控打印机、路由器、交换机、UPS等设备,肯定不能使用zabbix agentd,因为他们不能安装软件的,一般都支持SNMP协议,这样我可以使用SNMP来监控他们。
2.1、MIB介绍:
MIB(Management Information Base)信息管理库,通常与SNMP相关联,数据库是分层的(树形结构的),并且每个条目通过对象标识符(OID)来寻址,OID(Object IDentififiers)对象标识符,用来在MIB库中
表示一个对象的指标。MIB浏览器下载地址:http://www.ireasoning.com/download.shtml
通俗总结:
- 想要通过Zabbix监控打印机、路由器、交换机等设备,需要通过SNMP协议获取数据
- SNMP获取的数据来源需要从MIB信息管理库中进行获取
- OID就是在MIB库中代表每一个可以监控的对象指标(例如:内存、CPU、网络等)
1)部署SNMP监控
本实验采用Linux系统模拟网络设备来演示SNMP监控,企业中需要网路工程师开启设备的SNMP功能即可。
准备一台新的虚拟机(或者node01)充当网络设备,安装SNMP服务
#安装net-snmp软件
yum -y install net-snmp
#修改配置文件
vim /etc/snmp/snmpd.conf
...
40 # sec.name source community
41 com2sec notConfigUser default public --认
证口令(默认不需要修改)
55 view systemview included .1.3.6.1.2.1.1
56 view systemview included .1.3.6.1.2.1.25.1.1
57 view systemview included .1 --添加OID监控项(.1表示MIB库下所有监控项)
#启动SNMP服务
systemctl start snmpd
2)zabbix server安装工具取值
#安装net-snmp-utils客户端工具
yum -y install net-snmp-utils
#获取SNMP值格式:-v 指定SNMP版本,-c 指定口令(口令要求与配置文件一致)
snmpwalk -v 2c -c public 192.168.0.15
3)Web界面添加监控
3、Zabbix的Java监控
JMX监控可用于监控和管理Java应用程序,例如常见的Tomcat服务,从zabbix 2.0开始,JMX监视器Zabbix Java gateway 专门用于监控Java程序,本实验已Tomcat程序为监控对象,来演示JMX监控。
1)部署Tomcat服务
准备一个新主机(或者使用现有的)部署tomcat
#安装jdk环境
yum -y install java-1.8.0-openjdk.x86_64
#将Tomcat解压
tar -xf apache-tomcat-8.0.30.tar -C /usr/local/
cd /usr/local/
mv apache-tomcat-8.0.30/ ./tomcat
cd tomcat
为Java应用程序启用远程JMX监控,Java应用程序不需要安装任何附加的软件,Tomcat应用需修改 catalina.sh 文件,添加如下参数,设置启动,以支持JMX监控
#catalina.sh文件文件位置在Tomcat项目中 bin/catalina.sh
vim /usr/local/tomcat/bin/catalina.sh
...
#搜索:Execute The Requested Command 在该行下添加上述参数(大约在250行左右)
# ----- Execute The Requested Command --------------------
------------------
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=192.168.0.15 --本机IP地址
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"
参数说明:
hostname:是监控tomcat所在服务器的ip地址
jmxremote.port:端口号,是要开启的监控端口号,12345为JMX默认端口
jmxremote.ssl:是否要开启ssl链接tomcat,false表示不开启
authenticate: false表示监控不须要用户和密码服务器
上述参数使得Java可以侦听来自本地主机12345端口上传入的JMX连接,并告知不需要身份验证或SSL,如过Tomcat开启SSL或身份验证,请参考下边地址进行配置:
- JMX监控: https://www.zabbix.com/documentation/5.0/zh/manual/confifig/items/itemtypes/jmx_monitoring
启动Tomcat服务(Tomcat无需安装,直接启动服务)
#通过脚本启动服务
/usr/local/tomcat/bin/startup.sh
netstat -ntlp | grep java
- 浏览器访问测试:http://server_ip:8080
2)zabbix server安装zabbix-java-gateway程序用于监控Java应用
yum -y install zabbix-java-gateway
zabbix-java-gateway服务参数:
- 程序名:zabbix-java-gateway
- 主配置文件路径:/etc/zabbix/zabbix_java_gateway.conf
- 服务端口:10052
修改/etc/zabbix/zabbix_java_gateway.conf文件
vim /etc/zabbix/zabbix_java_gateway.conf
...
35 START_POLLERS=5 --取消注释,定义开启的java_gateway工作线程数量(大于客户端数量)
修改zabbix server配置文件指定zabbix-java-gateway地址
vim /etc/zabbix/zabbix_server.conf
...
296 JavaGateway=127.0.0.1 --取消注释,指定JavaGateway服务器地址(本机地址)
312 StartJavaPollers=5 --取消注释,定义zabbix server采集java_gateway数据的进程数量(大于java_gateway数量)
启动zabbix-java-gateway服务、重启zabbix server
systemctl restart zabbix-server && systemctl start zabbixjava-gateway && systemctl enable zabbix-java-gateway
3)zabbix添加JMX监控
4)验证JMX监控,通过 监测→最新数据 中看到JMX的监控数据了
九、Zabbix监控方式
1、自动发现
在node02、node03主机安装zabbix agent程序(需做简单的环境初始化,例如:关闭防火墙与SELinux)
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbixrelease-5.0-1.el7.noarch.rpm
yum -y install zabbix-agent
在node02、node03主机分别修改配置文件指定zabbix server地址
vi /etc/zabbix/zabbix_agentd.conf
...
Server=server_ip #指定zabbix server地址
启动zabbix agent服务
systemctl start zabbix-agent
systemctl enable zabbix-agent
创建发现规则 配置→自动发现→创建发现规则,具体配置细节如下图:
提示:system.uname键值是zabbix agent获取主机的基本常规数据。例如:主机名、内核版本、系统时间等。
可在zabbix server端通过 zabbix_get 进行查看:
zabbix_get -s 192.168.0.113 -k system.uname
点击 添加 完成配置,上边配置项默认即可。
创建发现动作来发现主机,配置(Confifiguration)→动作(Action)如下图:
稍等片刻后,即可在检测→主机中查看到zabbix server已成功发现目标主机:
如想查看具体自动发现的设备信息,可通过监测→自动发现**查看:
2、自动注册
- 案例:通过自动注册添加监控主机。
node02修改zabbix agent配置文件开启自动注册模式
vi /etc/zabbix/zabbix_agentd.conf
...
#指定自动注册的主机IP
160 ServerActive=192.168.0.14
#该参数用于让zabbix server区分每一个agent节点(显示在监控列表中的名称)
171 Hostname=node02
#可选参数:主机源数据方便zabbix server在注册时进行认证(名称自定义)
190 # HostMetadata=linux #取消注
#重启zabbix agent服务
systemctl restart zabbix-agent
node03修改zabbix agent配置文件开启主动模式
vi /etc/zabbix/zabbix_agentd.conf
...
#指定自动注册的主机IP
160 ServerActive=192.168.0.14
#该参数用于让zabbix server区分每一个agent节点(显示在监控列表中的名称)
171 Hostname=node03
#可选参数:主机源数据方便zabbix server在注册时进行认证(名称自定义)
190 # HostMetadata=linux #取消注释
#重启zabbix agent服务
systemctl restart zabbix-agent
接下来在web界面配置自动注册功能:配置→动作→自动注册**(Autoregistration actions )→**创建动作
添加后,在 检测→主机 可查看到该主机是否被监控:
3、分布式监控
当监控的服务器成千上万时,对于Zabbix Server的压力会很大,所以就有了分布式Zabbix Proxy代理监控来分担Zabbix Server的压力,代理服务器统一收集Agent端数据后返回给Zabbix Server。
部署zbx Proxy
#修改主机名
hostnamectl set-hostname zbx-proxy
#准备zabbix仓库
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbixrelease-5.0-1.el7.noarch.rpm
#安装zabbix proxy软件(需要连接数据库)
yum -y install zabbix-proxy-mysql
#部署数据库(用于存储agent指标)
yum -y install mariadb-server && systemctl start mariadb && systemctl enable mariadb
#授权数据库
mysql
create database zabbix_proxy;
grant all on zabbix_proxy.* to zabbix_proxy@localhost identified by '123456';
#查询初始数据结构表
rpm -ql zabbix-proxy-mysql
...
/usr/share/doc/zabbix-proxy-mysql-5.0.27/schema.sql.gz
#导入初始数据结构表
zcat /usr/share/doc/zabbix-proxy-mysql-5.0.27/schema.sql.gz | mysql -uzabbix_proxy -p123456 zabbix_proxy
#配置zabbix proxy连接数据库
vim /etc/zabbix/zabbix_proxy.conf
...
30 Server=192.168.0.14 --指定zabbix server地址
49 Hostname=zbx-proxy --指定本机名称(自定义),用于zabbix server区分每一个proxy节点
173 DBName=zabbix_proxy --指定数据库名(与数据库创建的库名保持一致)
188 DBUser=zabbix_proxy --指定连接数据库用户名(与数据库授权用户名称保持一致)
196 DBPassword=123456 --指定用户密码
#启动zabbix proxy服务
systemctl start zabbix-proxy && systemctl enable zabbixproxy
#查看服务端口
netstat -ntlp
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 18235/zabbix_proxy
到此为止 zabbix proxy配置完毕。
部署zbx-proxy-node01
#修改主机名
hostnamectl set-hostname zbx-proxy-node01
#安装zabbix agent程序
rpm -ivh zabbix-agent-5.0.0-1.el7.x86_64.rpm
#修改配置文件指定zabbix proxy地址
vim /etc/zabbix/zabbix_agentd.conf
...
119 Server=192.168.0.33 --指定zabbix proxy地址
171 Hostname=zbx-proxy-node01 --本机名称,用于zabbix proxy区分每一个agent节点
#启动zabbix agent
systemctl start zabbix-agent && systemctl enable zabbix-agent
Zabbix server添加代理:管理 → agent****代理程序 →****创建代理
添加代理后,如果出现从未 红色提示信息,是zabbix server还没识别到代理节点,可稍等片刻。
接下来Zabbix Proxy添加Agent 配置→主机→创建主机 指定Agent节点信息,如下图:
绑定模板后,点击 添加。
验证:到此为止,Zabbix Proxy分布式监控已配置完成。
思考:zabbix proxy能否创建自动发现或者自动注册?
十、Zabbix性能优化
1.Zabbix监控项优化
zabbix自带模板里面涉及各种监控项,实际情况并不需要用到所有的,关掉无用监控项,仅监控重要的指标,最好可以自己按照需要自建监控模板。
2、增加监控项的取值间隔
这个调整的原则是,在满足需求的情况下,尽量将频率调低,也就是间隔调大,举个例子:
-
磁盘空间
变化不会太剧烈,它的监控就可以时间间隔调大一些,磁盘总量 -
改变的可能性更小了,所以间隔为一天也没关系。
3、减少历史数据保存周期
有些监控主要是为了报警,历史数据并没有那么重要,详细的历史记录可将时间调小,多留一些趋势记录,趋势记录里面的数据虽然不够详细但也能作为大概的参考。
4、调整监控模式
大量主机监控环境下, 由Server端去收集数据会出现严重的性能问题,例如: web操作很卡,容易出现502, 图层断裂等问题。优化方向:
-
添加
proxy
节点做分布式监控 -
采用被动监控方式来减轻
zabbix server
压力
5、zabbix数据库优化
针对数据库写多读少的表,如果使用InnoDB存储引擎,zabbix的运行效率至少要快1.5倍(与MyISAM相比),InnoDB存储引擎采用行级锁更适合写多读少的场景,但是InnoDB需要更多的CPU性能。
Zabbix数据库表结构说明:mysql数据库中各zabbix个表及其中字段的详细解释。
十一、面试题
1.我们可以用zabbix监控哪些
- 硬件监控。 通过
SNMP
来进行路由器交换机的监控 - 系统监控。 如 CPU 的负载,上下文切换、内存使用率、磁盘读写、磁盘使用率、磁盘 inode 节点。
- 服务监控。 比如公司用 LNMP nginx 自带 Status 模块、 PHP 也有相关的 Status 、 MySQL 的话可以通过 percona 来进行监控。 4. 网络监控。 如果是云主机又不是跨机房,那么可以选择不监控网络。
- 安全监控。 如果是云主机可以考虑使用自带的安全防护。当然也可以使用 iptables 。 如果是硬件,那么推荐使用硬件防火墙。
- Web 监控。 web 监控的话题其实还是很多。比如可以使用自带的 web 监控来监控页面相关的延迟、 js 响应时间、下载时间、等等。
- 日志监控。 如果是 web 的话可以使用监控 Nginx 的 500x 日志。 PHP 的 ERROR 日志。
- 流量分析。 平时我们分析日志都是拿 awk sed xxx 一堆工具来实现。 这样对我们统计 ip 、 pv 、 uv 不是很方便。那么可以使用百度统计、 google 统计、商业,让开发嵌入代码即可
- 可视化。 通过 screen 以及引入一 些第三方的库来美化界面,同时我们也需要知道、订单量突然增加、 突然减少。或者说突然来了一大波流量,这流量从哪儿来,是不是推广了,
还是被攻击了。可以结合监控平来来梳理各个系统之间的业务关系。
自动化监控。 如上我们做了那么多的工作,当然不能是一台一台的来加 key 实现。 可以通过Zabbix 的主动模式以及被动模式来实现。当然最好还是通过 API 来实现。
2.zabbix的主动监控与被动监控
- 主动监控
主动监控是指由Zabbix Server通过定期轮询来获取被监控设备的状态信息。在主动监控模式下,Zabbix Server会定期向被监控设备发送请求,然后将收到的数据和预定义的阈值进行比较,当发现异常时会触发警报。
主动监控方式可以确保实时性较高,但是对被监控设备会有一定的负载。
- 被动监控
被动监控是指被监控设备主动向Zabbix Server上传数据,Zabbix Server则根据上传的数据进行判断是否需要触发警报。在被动监控模式下,当被监控设备有数据更新时,它会将数据上传到Zabbix Server,Zabbix Server则会对该数据进行处理,并根据设定的阈值判断是否需要触发警报。
主动监控需要在监控服务器上定期轮询
被监控设备的状态信息
。这会增加监控服务器的负载
,特别是在大规模监控环境中或者轮询频率较高的情况下。
3.Zabbix监控做过哪些
zabbix监控mysql集群:
1)创建并编辑监控mysql的脚本(通常有脚本模板),添加执行权限
2)修改zabbix-agent配置文件,默认有一个MySQL的子配置文件,直接编辑该文件即可,数据库添加授权用户
3)重启zabbix-agent
4)Web界面配置、点击需要监控的主机,进去添加监控模板,自带的Template DB MySQL
5)配置完成后等一会儿就可以查看到监控主机的MySQL监控信息
如果发现监控没有数据,请排查如下问题
-
zabbix客户端是否重启
-
脚本是否有执行权限
-
数据库是否有用户授权
-
环境变量是否有问题
4.zabbix监控mysql的四大性能指标:
查询吞吐量
查询执行性能
连接情况
缓冲池使用情况
5.配置zabbix自定义监控流程
①被监控端修改 Agent 配置文件 ( 修改是否允许自定义 key, 加载配置文件目录 )
②被监控端创建存放自定义 key 文件,在include路径的所谓conf文件中指定被控服务的脚本路径
③重起客户端 agentd
④测试自定义 key 是否生效
⑤在 zabbix 页面创建监控模板 , 创建应用 , 创建监控项 , 关联主机
6.安全组是什么,限制了3306的入规则,客户端还能访问吗
因为安全组的默认规则是在出方向上的数据报文全部放行,同一个安全组内的弹性云服务器和华 为云关系型数据库实例可互相访问。
默认情况下,一个租户可以创建 500 条安全组规则。
为一个安全组设置过多的安全组规则会增加首包延时,因此,建议一个安全组内的安全组规则不超过 50 条。
当需要从安全组外访问安全组内的华为云关系型数据库实例时,需要为安全组添加相应的入方向 规则。
限制了 3306 的入规则,客户端就没有办法访问了,就好像 ping 一样
7.Nagio监控?
不用存储历史数据,注重服务或者监控项的状态
Nagios 是一款开源的免费网络监视工具,能有效监控 Windows 、 Linux 和 Unix 的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网 站运维人员,在状态恢复后发出正常的邮件或短信通知。;
Nagios 可以监控的功能有:
监控网络服务( SMTP 、 POP3 、 HTTP 、 NNTP 、 PING 等);
监控主机资源(处理器负荷、磁盘利用率等);
简单地插件设计使得用户可以方便地扩展自己服务的检测方法;
并行服务检查机制;
具备定义网络分层结构的能力,用 “parent” 主机定义来表达网络主机间的关系,这种关系可被用来发现和明晰主机宕机或不可达状态;
当服务或主机问题产生与解决时将告警发送给联系人(通过 EMail 、短信、用户定义方式);
可以定义一些处理程序,使之能够在服务或者主机发生故障时起到预防作用;
自动的日志滚动功能;
可以支持并实现对主机的冗余监控;
可选的 WEB 界面用于查看当前的网络状态、通知和故障历史、日志文件等;
8.服务器一般需要监控哪些项目? 凭借这些项目如何判断服务器的瓶颈?
1)比如网站故障监控、服务器性能监控、网站安全监控、用户访问速度监控等;内存,IO,
CPU,网络,这个四个模块是必须的;
2)不能单一指标衡量性能瓶颈,比如说是IO出现在性能瓶颈:
第一种是调整缓冲区的大小、调整缓冲区中的数据同步的磁盘中的时间
第二种是修改磁盘调度算法,查看的路径cat /sys/bock/sda/queue/scheduler
9.zabbix监控mysql的io情况是否正常的流程
在 zabbix 的配置文件中开启自定义监控
编写监控脚本,过滤出 mysql 的 IO 线程是否为 yes
编写自定义监控文件,监控脚本
测试定义的监控命令是否成功
在 zabbix 网页中自定义监控项,添加监控文件中的 UserParameter
10.监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。
a. 开发一个守护进程脚本每 30 秒实现检测一次。
b. 如果同步出现如下错误号( 1158,1159,1008,1007,1062 ),则跳过错误。
c. 请使用数组技术实现上述脚本(获取主从判断及错误号部分)。
#!/bin/bash
mysqlbin=/usr/bin/mysql
mysqlhost=127.0.0.1
mysqluser=root
mysqlpwd=root
skiperrors=(1158 1159 1008 1007 1062)
admin='email@qq.com '
check() {
LASTNO= mysqlbin -h mysqluser -p$mysqlpwd -e "show slave status\G"|grep Last_Errno|awk -F: '{print $2}')
}
skip() {
for errorno in skiperrors[@];doif[errorno == LASTNO] ;thrnnotify errorno
break
fi
done
}
notify() {
text="mysql slave monitor error: I "echotext|mail -s 'mysql error'
}
main() {
while :;do
check && skip || notify "mysql connected failed!"
sleep 30
done
}
main
11.zabbix如何修改其中监控的一台服务器中内存阈值信息,比如正常内存使用到了 80%报**警,我想修改为 60%报警?
正常来说 , 一般会把监控的服务器统一加入到一个模板中 , 修改模板的其是某一项的监控项
参数和告警阈值后 , 加入模板中的所有主机都会同步。如果单独想修改其中某一台服务器内
存告警阈值 , 需要进入这台主机 , 单独创建一个告警 Triggers, 关联这台主机监控内存的项 ,
配置好告警的阈值为 60% 即可实现。
12.报警类型和故障处理:
1.E-mail 邮件 2.微信报警等
故障:如监控服务器down机不报警
解决:1.先定位问题:zabbix服务器采用轮询的方式从监控目标机的agent获取数据。但如果目标机down了,目标机的agent通常也无法工作,所以检查被监控的主机服务
2.增加一个目标主机进行是否存活的检测。
告警收敛:
1)所有产生告警均由zabbix调用脚本推入缓存redis当中。
2)分析系统将在规定时间(1分钟)内去redis中拉取数据,根据定义好的一系列规则进行,合并、分析或直接丢弃,并存入分析平台数据库,以便供历史查询。
3)根据预先定义好的规则将报警通过定义好的方式发送给相关人员。
13.告警屏蔽:
1、处于维护中的主机,告警信息还是会报出来,但是不会触发动作;
2、对于可预知的临时维护或紧急维护,可以提前设置告警屏蔽;
3、可针对组、单台或多台主机,进行一次性、每日定时、每月定时、每周定时屏蔽;
4、前端可以将维护中的主机不进行显示,Dashboard右上角有个图标可以进行筛选是否显示维护中的主机;
5、告警屏蔽时,可以设置采集数据或不采集数据两种方式;
至此,zabbix的告警屏蔽介绍完成。
————————————————
版权声明:本文为CSDN博主「kali_yao」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kali_yao/article/details/120605180
动功能;
可以支持并实现对主机的冗余监控;
可选的 WEB 界面用于查看当前的网络状态、通知和故障历史、日志文件等;
8.服务器一般需要监控哪些项目? 凭借这些项目如何判断服务器的瓶颈?
1)比如网站故障监控、服务器性能监控、网站安全监控、用户访问速度监控等;内存,IO,
CPU,网络,这个四个模块是必须的;
2)不能单一指标衡量性能瓶颈,比如说是IO出现在性能瓶颈:
第一种是调整缓冲区的大小、调整缓冲区中的数据同步的磁盘中的时间
第二种是修改磁盘调度算法,查看的路径cat /sys/bock/sda/queue/scheduler
9.zabbix监控mysql的io情况是否正常的流程
在 zabbix 的配置文件中开启自定义监控
编写监控脚本,过滤出 mysql 的 IO 线程是否为 yes
编写自定义监控文件,监控脚本
测试定义的监控命令是否成功
在 zabbix 网页中自定义监控项,添加监控文件中的 UserParameter
10.监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。
a. 开发一个守护进程脚本每 30 秒实现检测一次。
b. 如果同步出现如下错误号( 1158,1159,1008,1007,1062 ),则跳过错误。
c. 请使用数组技术实现上述脚本(获取主从判断及错误号部分)。
#!/bin/bash
mysqlbin=/usr/bin/mysql
mysqlhost=127.0.0.1
mysqluser=root
mysqlpwd=root
skiperrors=(1158 1159 1008 1007 1062)
admin='email@qq.com '
check() {
LASTNO= mysqlbin -h mysqluser -p$mysqlpwd -e "show slave status\G"|grep Last_Errno|awk -F: '{print $2}')
}
skip() {
for errorno in skiperrors[@];doif[errorno == LASTNO] ;thrnnotify errorno
break
fi
done
}
notify() {
text="mysql slave monitor error: I "echotext|mail -s 'mysql error'
}
main() {
while :;do
check && skip || notify "mysql connected failed!"
sleep 30
done
}
main
11.zabbix如何修改其中监控的一台服务器中内存阈值信息,比如正常内存使用到了 80%报**警,我想修改为 60%报警?
正常来说 , 一般会把监控的服务器统一加入到一个模板中 , 修改模板的其是某一项的监控项
参数和告警阈值后 , 加入模板中的所有主机都会同步。如果单独想修改其中某一台服务器内
存告警阈值 , 需要进入这台主机 , 单独创建一个告警 Triggers, 关联这台主机监控内存的项 ,
配置好告警的阈值为 60% 即可实现。
12.报警类型和故障处理:
1.E-mail 邮件 2.微信报警等
故障:如监控服务器down机不报警
解决:1.先定位问题:zabbix服务器采用轮询的方式从监控目标机的agent获取数据。但如果目标机down了,目标机的agent通常也无法工作,所以检查被监控的主机服务
2.增加一个目标主机进行是否存活的检测。
告警收敛:
1)所有产生告警均由zabbix调用脚本推入缓存redis当中。
2)分析系统将在规定时间(1分钟)内去redis中拉取数据,根据定义好的一系列规则进行,合并、分析或直接丢弃,并存入分析平台数据库,以便供历史查询。
3)根据预先定义好的规则将报警通过定义好的方式发送给相关人员。
13.告警屏蔽:
1、处于维护中的主机,告警信息还是会报出来,但是不会触发动作;
2、对于可预知的临时维护或紧急维护,可以提前设置告警屏蔽;
3、可针对组、单台或多台主机,进行一次性、每日定时、每月定时、每周定时屏蔽;
4、前端可以将维护中的主机不进行显示,Dashboard右上角有个图标可以进行筛选是否显示维护中的主机;
5、告警屏蔽时,可以设置采集数据或不采集数据两种方式;
至此,zabbix的告警屏蔽介绍完成。
————————————————
版权声明:本文为CSDN博主「kali_yao」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kali_yao/article/details/120605180