Zabbix企业级分布式监控系统

第一章:监控概念及Zabbix部署

监控概述

对于监控系统在企业架构中不是新的技术,但却是必不可少的重要组成部分,所谓无监控,不运维!

监控系统可以帮助运维、开发、测试等人员及时的发现服务器出现的故障,并及时的发送告警通知。

对于监控软件所应该具备的功能如下:

  • 指标数据采集(抓取)

  • 指标数据存储

  • 指标数据可视化

  • 故障告警功能

监控对象介绍

系统层监控

系统监控:CPU利用率、内存利用率、磁盘IO速度、进程数量、内核完整性等…

网络监控:网络设备进出口流量、工作负载、网络延迟、丢包率等…

服务软件监控

消息中间件:kafka、RocketMQ、RabbitMQ等…

Web服务容器:Nginx、Tomcat、httpd、docker、kubernetes等…

数据库及缓存系统:MySQL、PostgreSQL、MongoDB、Redis、ElasticSearch等…

存储系统:Ceph

业务层监控

例如电商网站销售量、转化率等

业务接口:登录数、注册数、订单量、支付数量等

Linux系统常用监控命令

以下命令是对系统的CPU、内存、硬盘、网络进行监控的命令

free #查看内存利用率

df #查看正在使用分区利用率

top # 查看系统健康状态(类似windows的任务管理器)

htop #与top相同,查看系统健康状态(系统不自带,在epel源提供)

uptime #查看cpu利用率

iftop #用于显示本机网络流量情况及相互通信的流量集合(默认系统不自带,需安装主包:iftop,依 赖包:flex byacc libpcap ncurses ncurses-devel libpcap-devel )

iostat # iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监 视 (默认系统不自带,需安装:sysstat)

iotop #与iostat类似, 用来监视磁盘I/O使用状况(默认系统不自带,需安装:iotop)

vmstat # 是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、 CPU活动进行监控 (默认系统不自带,需安装:sysstat)

netstat/ss # 用于显示各种网络相关信息,如网络连接,路由表,接口状态连接等

nethogs # 用来按进程或程序实时统计网络带宽使用率(默认系统不自带,epel源安装:nethogs)

ipmi #用于对服务器硬件进行监控(默认系统不自带,需安装:ipmitool)

常用的监控软件介绍

  • Nagios:本身只能做实时的数据监控,无法实现数据的持久化保存,致命缺点无法查询历史数据

  • Cacti:最初应用在机房做流量方面的监控,致命缺点没有故障告警功能

  • Ganglia:跟Cactii类似,致命缺点没有故障告警功能

  • Open-Falcon:小米公司开源的一款监控软件,目前还是比较冷门,很多中间件不支持监控(例如:httpd、Tomcat)

  • Zabbix:2012年诞生的一款分布式监控系统,功能完善(例如:数据存储、数据可视化、故障告警等)目前主要应用在传统的物理服务器、虚拟机、路由交换领域的监控

  • Promethues:2016年崛起的一款监控系统,功能完善(例如:数据存储、数据可视化、故障告警等)目前主要应用在容器领域的监控系统

付费的监控软件:

监控宝:https://www.jiankongbao.com/
博瑞:https://www.bonree.com/

Zabbix介绍

Zabbix 是C语言编写的企业级开源免费的分布式监控解决方案,可监控网络的众多参数以及服务器、虚拟机、应用程序、服务、数据库、网站、云等的健康状况和完整性。

Zabbix 使用灵活的报警通知机制,允许用户为几乎任何事件配置基于电子邮件的警报。这允许对服务器问题做出快速反应。

Zabbix 可通过存储的数据提供出色的报告和数据可视化功能。

官网地址:https://www.zabbix.com/

Zabbix的版本介绍

  • zabbix稳定版:LTS代表稳定版,官方提供技术支持时间长达5年时间(免费)
  • zabbix标准版:不带LTS标签,官方提供技术支持时间7个月(免费)

Zabbix组件

zabbix agent:指标采集器,在被监控主机上采集指标数据,并将采集到的数据发送给zabbix server

zabbix server:负责接收agent发送的数据,统计数据、管理数据

zabbix database:用于存储所有zabbix的配置信息以及监控数据

zabbix web:管理员通过web界面管理、配置以及查看相关监控信息

zabbix-proxy:分布式监控,用来分担zabbix server的压力(不是必须)

Zabbix5.0安装步骤

主机名 IP地址 操作系统 角色 硬件环境
zbx-server 自定义 CentOS 7.6 监控主机 2C/4G
zbx-node01 自定义 CentOS 7.6 被控主机 2C/4G

平台选择

配置zabbix的仓库

提示:zbx-server主机操作

#安装zabbix5.0存储库(二进制安装方式)
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.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
...
[zabbix-frontend]
name=Zabbix Official Repository frontend - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/$basearch/frontend
enabled=1   --启用仓库
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591

#安装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

#创建存储监控数据的库,并支持中文(库名: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;


#在Zabbix服务器主机上,导入初始架构和数据。系统将提示您输入新创建的密码
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
Enter password: 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 rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm

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/

登录ZABBIX WEB

从浏览器上访问Zabbix前端URL:http://server_ip/zabbix

环境检查

请确保这里的Check of pre-requisites必须全部项目OK后才能继续配置,如有提示fail,去server上检查是否安装这个包或配置是否按上述更改。

配置数据库连接

输入连接数据库所需的详细信息,Zabbix数据库必须先建立好。

Zabbix server服务器详情

请输入Zabbix服务器详情,可选的输入Zabbix服务器的名字,然而如果输入并提交了, Zabbix服务器的名字将会显示在菜单和页面的标题。

安装前总结回顾所有配置

完成安装

Zabbix前端已经安装完成! 超级用户名是 Admin, 密码 zabbix

为了防止暴力破解和词典攻击,如果发生连续五次尝试登陆失败,Zabbix接口将暂停30秒。

在下次成功登陆后,将会在界面上显示登录尝试失败的IP地址。

Web界面概览

侧边栏的垂直菜单可访问Zabbix前端各个部分。 菜单默认使用深蓝主题。

菜单可以整个折叠或隐藏:

  • 折叠, 单击Zabbix logo旁边的

  • 隐藏, 单击Zabbix logo旁边的

修改界面语言

左下角的用户基本资料

修改Admin密码

密码没有长度与复杂度要求,按照具体情况设置即可。

左下角的用户基本资料

创建组

zabbix并没有为单独用户设置主机管理权限,所有的权限都通过组进行统一分配,当用户加入到对应的组后,将权限分配到对应的组中即可继承组权限。

管理→用户群组→创建用户群组

增加用户

除了Admin超级管理员以外,还可以创建普通用户给公司其他员工使用。

管理(Administration) → 用户(Users)→创建用户(Create user)并指定群组

可以使用新用户登录验证。

添加监控主机

Zabbix对于主机的监控非常灵活,它可以是物理服务器、网络交换机、虚拟机、应用等。

提前准备好一台Linux主机,并安装zabbix-agent客户端程序。

#下载zabbix官方仓库
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.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界面,通过 配置(Configuration) → 主机(Hosts)→ 创建主机(Create host)以添加新的主机。

查看主机

检测→主机

灰色 表示主机状态尚未建立,尚未发生监控指标检查

icon_zbx_green.png 表示主机可用,监控指标检查已成功

icon_zbx_red.png 表示主机不可用,监控指标检查失败(将鼠标光标移动到图标上以查看错误消息)。可能是由于接口凭证不正确造成了通信问题。检查zabbix server是否正在运行,并稍后尝试刷新页面

模板概述

Zabbix为用户提供了很多开箱即用的模板,具体模板可通过配置 → 模板查看,模板大概分类如下:

网络设备的标准化模板):对交换机和路由器等网络设备进行监控, 网络设备本身(基本上是机框)和网络接口

  • 机框故障监控(电源,风扇和温度,总体状态)
  • 机框性能监控(CPU和内存项)
  • 机框资产收集(序列号,型号名称,固件版本)
  • 使用IF-MIB和EtherLike-MIB进行网络接口监控(接口状态,接口流量负载,以太网的双工状态)

HTTP模板:用于对很多服务的HTTP状态(UP/DOWN)进行监控,例如:Apache、Nginx等。

IPMI模板: 用于监视服务器硬件,如温度电压、风扇工作状态、电源状态等。

JMX模板: 用于监控Java应用程序。

ODBC: 用于数据库(MySQL、Oracle、PostgreSQL)的监控模板。

Zabbix agent 2:用于Ceph存储、Docker容器、Memcached、Mysql、Oracle、PostgreSQL、Redis等应用监控。

Zabbix agent:用于对Apache、HAProxy、Nginx、PHP-FPM、RabbitMQ、等应用监控。

除了上述模板外,Zabbix社区还提供了大量模板供用户免费下载

社区地址:https://share.zabbix.com/(也可通过界面左侧配置栏的Share直达)

友情提示:大部分监控模板已经在zabbix中提供,并且能够满足大部分监控需求。

新建模板

模版可以对监控项、触发器、图形等进行归类,当一个模版链接到一个主机后,主机会继承这个模版中的所有功能。

配置(Configuration) → 模版(Templates)创建模版(Create template)

模版名称:名称自定义,不支持中文。

群组:模版必须属于一个组,可以自建,可以使用zabbix提供的组。

新建应用集

模板中的应用集我们可以理解为监控项的分组,可以将相同类型的监控项分配到同一个应用集内。

配置 → 模板 找到对应的模板选择 应用集创建应用集

名称:自定义,支持中文。

新建监控项

监控项是Zabbix中获得数据的基础,没有监控项,就没有数据。

配置 → 模板 页面查找到我们自建的模板,点击模板中的 监控项然后 创建监控项

名称:名称自定义,支持中文。

CPU 1、5、15分钟平均负载监控项key

system.cpu.load[all,avg1]
system.cpu.load[all,avg5]
system.cpu.load[all,avg15]

完成后前往监测(Monitoring) → 最新数据(Latest data)查看具体细节。

模板导出

要导出模板,按照如下的操作:

配置(Configuration) → 模板(Templates)选中要导出模板的复选框,单击列表下面的 导出(Export) 按钮。

选中的模板被导出到本地的XML文件里,默认的名称是 zabbix_export_templates.xml

模板导入

要导入模板,按照如下的操作:配置(Configuration) → 模板(Templates)单击右上角的 导入(Import) 按钮,选择要导入的文件,标记导入规则里要求的选项,单击 导入(Import) 按钮

绑定模板

点击 配置 → 主机 找到你的主机,然后选择模板,选择好模板后,点击更新

监控数据

点击配置栏中的监测(Monitoring) →主机(host) →最新数据 (Latest data)以查看具体细节。

第一次获得的监控项值最多需要60秒才能到达。 默认情况下,这是服务器读取变化后的配置文件,获取并执行新的监控项的频率。 等待30秒以获得新的监控项值。

图表

当监控项运行了一段时间后,可以查看可视化图表,点击监控项后的图形(Graph)以查看图表。

解决Zabbix中文乱码

安装并更新字体

yum install -y wqy-microhei-fonts.noarch

update-alternatives --install /usr/share/zabbix/assets/fonts/graphfont.ttf zabbix-web-font /usr/share/fonts/wqy-microhei/wqy-microhei.ttc 10

update-alternatives --config zabbix-web-font

systemctl restart zabbix-server

刷新web界面即可

第二章:Zabbix故障告警

Zabbix故障告警概述

zabbix具备灵活的故障告警功能,允许用户几乎为任何的监控项配置基于电子邮件、短信、企业微信、钉钉等告警通知,这样管理员就可以快速响应服务器出现的问题。

E-mail报警

需要通过网页将邮箱的SMTP功能启动,然后新增授权码,然后获取到163邮箱SMTP服务器的地址。

前往管理(Administration) → 报警媒介类型(Media types)点击列表中的 Email 设置表单如下图:

解释:

  • 名称:Email为报警媒介类型名称

  • SMTP服务器:用于发送邮件的服务器

  • SMTP HELO:向服务器标识用户身份

  • SMTP电邮:用于发送邮件的账户

添加触发器

触发器会根据监控项的异常状态触发报警,而不需要我们直接在Zabbix前端进行查看,这就是通知的功能。

为监控项配置触发器,前往配置(Configuration) → 主机(Hosts)找到对应主机(New host)点击旁边的触发器(Triggers),然后点击创建触发器(Create trigger)

这个触发器,有下列必填项:

1)名称:自定义,可根据具体监控项名称作为名称。

2)表达式: 从 添加 按钮内选择具体的 监控项以及触发的条件。

3)严重性:根据具体情况定义即可。

完成后,点击添加(Add)。新的触发器将会显示在触发器列表中。

这个特定的表达式大致是说如果当前登录系统的用户数量超过2,就触发了问题的阈值。

测试触发器

随后我们可以在对应主机使用多个用户登录来验证该触发器,如果当前系统的用户数量超过了你在触发器中定义的阈值,这个问题将显示在监测(Monitoring) → 问题(Problems)中。

状态列如果闪烁意味着这个触发器状态最近30分钟内发生过变化。

在练习添加一个CPU的触发器,配置→ **主机 **点击 触发器 创建触发器

触发器的名称使用 CPU 1分钟负载过高

表达式具体写法

这个表达式的大致含义是说如果1分钟内,CPU负载的平均值超过10%,那么就触发了问题的阈值。

随后可以在对应主机模拟CPU忙碌来验证该触发器,具体问题将显示在监测(Monitoring) → 问题(Problems)中,也可在 监测最新数据 通过图形观察CPU状态

新建动作

为了建立一个报警通知,前往配置(Configuration) →动作(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}

点击 添加(Add)动作就完成了。

检查对应的动作的状态为 已启用 状态

Report problems to Zabbix administrators(向zabbix管理员报告问题)状态无需启用,应为接下来我们会自定义收件人信息。

定义收件人

我们在定义一个外界的收件人邮箱,选择用户基本资料报警媒介 添加 收件人的邮箱,这个可以是实际工作中管理员的具体邮箱地址。

注意:该邮箱需开启邮件服务,开起方法可等录具体邮箱官网,从设置中开启。

一切准备就绪,点击更新即可。

小结:

1)E-mail:报警媒介类型,通过什么方式去发送报警消息;

2)触发器:用于为监控项内的指标数据定义阈值(条件);

3)动作:用于绑定具体触发器,当触发器被触发时,用于发送告警消息;

4)收件人:用于接收告警消息;

验证告警信息

接下来我们要在被控主机上模拟多个用户登录系统来触发这个告警动作。

监测(Monitoring) → 问题(Problems)中,可以看到闪烁 问题

验证是否会收到邮件通知!你的e-mail中,会收到一个问题通知。

常见问题分析:如果通知功能没有正常工作

  • 再次验证E-mail设置和动作设置已经被正确配置
  • 另外,你可以在报告(Reports) → 动作日志(Action log)中检查动作日志。

自定义触发器严重性

默认情况下,触发器的严重性以英文方式展示,可以在管理 → 一般 →触发器设置 中配置为中文。

点击 更新

动作日志

动作日志可以查看zabbix执行过的所有告警动作,通过报表动作日志查看

审计

审计用于记录我们在zabbix web上执行过的所有(造成改变)的行为,,通过报表审计查看

总结:

1.创建触发器(为监控项定义一个条件)

2.创建动作(跟触发器绑定,触发器一旦被触发,接下来就执行动作:可以是发送报警消息)

3.定义报警收件人

4.验证动作是否执行成功,通过动作日志查看

Zabbix企业微信报警

企业微信告警配置步骤:

  • 登录企业微信官网,准备zabbix企业微信的应用ID与密钥
  • 准备企业ID
  • 部门ID
  • 准备个人账号ID
  • 测试zabbix应用ID与企业微信接口是否可以正常建立连接
  • 准备企业微信报警脚本,并指定企业微信账号信息
  • 配置报警媒介
  • 测试告警

准备企业微信信息

登录企业微信:https://work.weixin.qq.com/

应用管理中查看zabbix应用ID及secret(密钥)

|

我的企业中查看企业ID

通讯录中查看部门ID及个人账号ID

登录微信企业接口调试网址测试zabbix应用能否访问企业微信:

https://open.work.weixin.qq.com/wwopen/devtool/interface/combine

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里)

创建报警媒介

媒介是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}

点击 添加 保存消息模板。

媒介类型测试

报警媒介类型 列表中找到企业微信报警 ,点击列表最后一栏中的 测试 (将打开一个测试窗口)测试配置好的媒介类型是否正常工作

获取通知

由于前边在学习邮件报警时已经配置过触发器及动作,可从 配置 → 主机 触发器页面查看前边配置的触发器。

可从 配置 → 动作 页面查看前边配置过的触发器动作

接下来添加微信收件人,点击 用户基本资料 → 报警媒介添加 企业微信收件人。

点击 更新

接下来我们使用多个终端同时登录来验证报警消息。

监测 → 最新数据 以查看具体值。

监测 → 问题 以查看具体问题通知。

报表 → 动作日志 以查看发送消息是否成功。

问题确认

Zabbix的问题事件可由用户确认,如果用户收到问题事件的通知,可以打开Zabbix的前端页面,从问题更新页面上找到对应的问题进行确认。当进行确认的时候,可以输入注释表明他们正在处理该问题,或者输入任何他们想表述的内容。

利用这种方式,如果有另一个系统管理员察觉到这个问题,就可以立刻知道该问题已经被确认过,并且看到之前留下的注释。

这样的问题处理工作流,可以让多个系统管理员协同工作。

提示: 要确认事件,用户必须至少具有相应触发器的读权限。

常见的问题确认方法:从左侧配置栏的 **监测 (Monitoring) → 仪表板 (Dashboard) → 问题 (Problems) **从确认小部件中确认状态。

配置CPU告警

由于前边已经配置了CPU 1分钟负载的触发器,在 配置→主机对应主机中的 触发器 查看。

新建动作

配置→动作中创建动作并绑定对应触发器。

操作 中,添加报警操作细节。

恢复操作 中,添加恢复操作细节。

配置完成后,点击 更新

验证告警信息

接下来在被控主机上模拟CPU负载来触发这个告警动作。

while :; do echo hello; done

第三章:Zabbix项目监控实战

本章学习部署LNMP架构并上线Discuz论坛项目,并通过Redis为论坛提供缓存服务,然后对论坛做网站数据统计,最后通过zabbix监控相关服务。

实现步骤:

  1. 部署LNMP架构

  2. 上线Discuz项目到LNMP架构

    Discuz!是一套通用的社区论坛软件系统

  3. redis为Discuz提供缓存

  4. 网站数据统计

    • 网站 IP: 1个IP是1台电脑

    • 网站 UV( unique visitor ): 是指浏览网站的实际用户, 如果以UV作为流量统计标准,可以更加准确的了解实际上有多少个访问者来访问了相应的页面。

    • 网站 PV( Page Views):即页面浏览量,用户24小时(0点到24点)内,每一次对网站中的网页访问均被记录一次,网站的PV从某种程度上已成为投资者衡量商业网站表现的最重要尺度,就像收视率之于电视。

    • 总结: 你可以这样想 1个IP是1台电脑,1个UV是1个人,假如在一个家庭里面,两口人使用自家电脑上网,老公访问了网站并注册了账号,从而被记录了一次IP,之后,老婆又访问了网站并注册了账号,这时,网站的流量统计系统将这样变化,IP不变、网站UV增加1、PV增加,通常网站UV数量是大于网站IP数量的。

部署LNMP架构

在zbx-client端部署LNMP架构

所需软件包:nginx php-fpm mariadb mariadb-server mariadb-devel php php-mysql

部署php-fpm与数据库

在zbx-client客户端主机部署

php-fpm 作为PHP进程管理程序。

#安装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"  --指定时区

部署Nginx

通过nginx官方仓库安装软件包,并开启nginx状态页面功能

#创建nginx仓库文件
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
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}

#删除配置文件默认内容,替换为如下内容
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);
?>

测试php与mysql协同方式二:

<?php
$con=mysql_connect("localhost","root","");
if(!$con) echo "error";
else echo "success";
?>

访问测试:http://server_ip/mysql.php

上线Discuz项目

上线Discuz项目到nginx网页目录:/usr/share/nginx/html/

#解压项目代码
cd /usr/share/nginx/html/

#解压项目
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';

登录Discuz

使用管理员登录:用户名admin,密码123456

| 登陆后点击管理中心 |

| 输入管理员密码(密码:123456)后点击提交 |

| 点击 全局→性能优化→内存优化 |

默认不支持Redis缓存,Discuz是php语言开发,如需通过Redis加速,需要安装php连接Redis的扩展模块。

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 查看所有php模块,可结合grep过滤

php -m | grep redis
redis

再次刷新页面可看到以支持Redis

但是现在Discuz与Redis之间还没有建立连接,接下来配置Discuz连接Redis。

修改文件:/usr/share/nginx/html/config/config_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

再次刷新页面可看到Discuz已经成功与Redis连接,并且已经利用Redis存储了数据。

当Redis为论坛加速后,用户在访问速度上会大大的提升。

如需查看Redis数据,可通过命令行进入数据库查看:

redis-cli
127.0.0.1:6379> keys *

网站数据统计

网站统计是对网站的访问信息记录并归类,例如:网站访问量、用户访问最高的时段、访问最多的网页、停留时间、用户使用的搜索引擎,主要关键词、来路、入口、浏览深度、所用语言、时区、所用浏览器种类、时段访问量统计分析、日段访问量统计分析以及周月访问量统计分析等,网站访问数据的基础分析。

网站统计为网站收集用户信息提高和改进网站建设具有重要意义,国内常用的统计网站有CNZZ、51la、百度统计、腾讯统计、站长统计、51yes、SiteFlow等。

Matomo介绍

不想用三方公司开发的统计系统,我们可以寻求自建统计系统,Piwik(后改名为:Matomo)就是一款知名度和美誉度比较高的免费开源的PHP统计系统,基本上可以满足中小型网站的日常统计需要。

Matomo采用PHP+MysqL构建,所以任何LNMP或者LAMP环境的Web服务器都可以运行。

Matomo官网: https://matomo.org/

Matomo部署

安装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

配置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

上线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

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将必要的表添加到数据库中:

点击下一步»

超级用户是您在安装Matomo时创建的用户,该用户具有最高权限,选择您的用户名和密码:

填写信息,然后单击下一步»
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栀寒老醑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值