Zabbix 使用教程

Zabbix 使用教程

Zabbix 使用教程

1. Zabbix 架构图以及特点

Server服务端

Zabbix Server是Zabbix的核心组件,其功能是将Agent采集到的数据持久化存储到数据库里。

数据库存储(MySQL,Oracle,PostgreSQL等)

存储所有由Agent采集到的数据

Web界面

Zabbix提供了UI界面,Web界面的运行环境可以是Nginx+PHP / Apache+PHP服务组成

Web界面也是ZabbixServer 组成的一部分

Proxy 代理端

对于分布式环境,它可以代替Zabbix Server收集多个Agent的数据,然后将收集到的数据汇总到

ZabbixServer里,它起到一个分担Server负载的作用

Agent客户端

Zabbix Agent被部署在需要被监控的主机上,用于采集监控数据并发送到Zabbix Server端

附上一张图

注明: 本教程暂时不涉及部署分布式的服务,所以我们接下来的agent 是和 server 直接通信的,不经过proxy。

2. Zabbix 核心知识理念

主机(Host) : 就是具体的监控对象,广义称网络设备,可以是网站、数据库、操作系统。

模板(Template):定义了具体的一类监控对象的抽象集成,就类似写作文一样,套模板写。

监控项(Item): 就是具体的一项采集指标,比如CPU使用率,设备温度等

触发器(Trigger):触发器是基于监控项存在的,通过定义【触发器表达式】创建。

动作(Action): 动作是基于触发器存在的,创建动作的时候选择某个具体的触发器,当满足【触发器表达式】的条件后,

​ 就会触发相应的动作,例如当CPU温度大于70度,发邮件告警,发微信告警,或者执行某个Shell脚本等。

3. Zabbix快速添加 agent 以及关联模板和查看数据

3.1 实现自己监控自己,也就是监控server本身

# 上一节我们以及部署好了一台server,就用上一台的来操作 192.168.1.192

# 1.给目标机器安装zabbix-agent

$ rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.11-1.el7.x86_64.rpm

# 同步时间

$ ntpdate -u ntp.aliyun.com

# 2.修改zabbix-agent的配置文件

# https://www.zabbix.com/documentation/4.0/manual/appendix/config/zabbix_agentd # 官网配置文件解释

$ vim /etc/zabbix/zabbix_agentd.conf

# 第一行:得到一个pid数字

# 第二行: 监测agentd的日志文件

# 第三行: 日志是否切割,0 不切割,1 切割

# 第四行: 服务端IP地址

# 第五行: 导入配置文件

------------------------------------------------

PidFile=/var/run/zabbix/zabbix_agentd.pid

LogFile=/var/log/zabbix/zabbix_agentd.log

LogFileSize=0

Server=192.168.1.192

Include=/etc/zabbix/zabbix_agentd.d/*.conf

------------------------------------------------

# 3.启动 zabbix-agent

$ systemctl start zabbix-agent

# 4.查看是否启动 ,agent 的端口号是10050 server的端口号是10051

$ netstat -tunlp

3.2 查看web页面的监控

这就是对server 的监控内容作一逐一说明

名称: 正在监控的主机设备名称监控项:采集的指标触发器:基于监控项的触发器图形:将采集到的数据以图形展示的数量接口:agent的IP地址加端口模板:上述的监控项、触发器、图形,都是因为应用了这两个模板自动创建的状态:查看此时监控设备的状态可用性:分四个(绿色代表正常 红色代表异常)

ZBX:只要是装的zabbix-agent ,它的协议就是 [ZBX]SNMP:采集如果是网络设备,这里就是SNMPJMX:采集的如果是Java程序,这里就是JMXIPMI:采集的如果是服务器的硬件信息,就是IPMI

3.3 练习监控另外一台机器,起名为agent-01

# 因为安装agent都是和上面一样的操作,所以为了方便,我们将它写成脚本放进agent-01

# 1. 脚本如下 起一个文件名叫 install_agent.sh

---------------------------------------------------------------------------------------------------

rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.11-1.el7.x86_64.rpm

ntpdate -u ntp.aliyun.com

cat > /etc/zabbix/zabbix_agentd.conf << 'EOF'

PidFile=/var/run/zabbix/zabbix_agentd.pid

LogFile=/var/log/zabbix/zabbix_agentd.log

LogFileSize=0

Server=192.168.1.192

Include=/etc/zabbix/zabbix_agentd.d/*.conf

EOF

systemctl start zabbix-agent && systemctl enable zabbix-agent

netstat -tunlp | grep zabbix

---------------------------------------------------------------------------------------------------

# 完了你要记得添加10050的端口号,允许防火墙放行

然后去zabbix-UI界面去添加主机

我们先来创建一个主机群组,比如叫Test群组

然后去添加主机

4. Zabbix-get 检查

上一步你做完之后,你的ZBX肯定没亮小绿灯,所以 我们用两种方式排除这个问题

来检查Server和Agent是否通信

方式一,看日志

# 在agent-01 上查看日志

$ tail -f /var/log/zabbix/*

方式二 ,安装zabbix-get 查看

# 在server机器上安装zabbix-get

$ yum install -y zabbix-get

进行检查

# 在Server机器上执行命令

$ zabbix_get -s 192.168.1.193 -k agent.ping # 得到1

# 得到 1 那么Server和Agent是通的

最后一步,给你的主机绑定模板,就可以使用这个key 就可以亮灯

好,我们来总结一下上述添加一个主机的所有操作步骤

安装agent于被监控的客户端,检查配置文件,启动agent。在Server中安装zabbix_get组件,利用zabbix_get主动检测是否和agent通信。最后 , 去图形化界面添加这台主机。

5. Zabbix添加Web组以及关联模板和图形查看

5.1 如何查看zabbix默认提供的模板

这些模板你可以去用,可以点进去查看都有啥,也可以不选择模板,可以自定义模板

默认的模板支持自定义更改

查看agent-01主机的CPU load

查看agent-01系统登陆的用户是几个

我们还可以利用命令行来实现这一操作

在server里,zabbix_get -s 192.168.1.193 -k system.users.num # 这个key可以在监控项里找到

6. 自定义监控项以及报警动作

示例:测试一个网站是否存活

模板里没有相应的模板,我们自己创建一个监控项。

具体步骤

写命令和脚本编写zabbix的自定义监控的配置文件重启zabbix-agent测试zabbix-_get能否拿到数据去zabbix-ui添加监控项

采集TCP状态

# 1.知道web服务器的状态,就要去采集TCP的状态

$ netstat -ant | grep -c 'TCP状态' # 具体有 listen(监听) ESTABLISHED(建立了链接) TIME_WAIT(等待)等等

# 2.图解zabbix_agent自定义key的配置文件

#如图,在agent机器里进入到 /etc/zabbix/zabbix-agentd.d目录下,有一个 userparameter_mysql.conf文件

# 3. 写入我们自定义的key的值 ,配置文件起名为 tcp_status.conf

cat > /etc/zabbix/zabbix_agentd.d/tcp_status.conf << 'EOF'

UserParameter=LISTEN,netstat -ant | grep -c LISTEN

UserParameter=TIME_WAIT,netstat -ant | grep -c TIME_WAIT

UserParameter=ESTABLISHED,netstat -ant | grep -c ESTABLISHED

EOF

# 改了配置文件,务必要重启

$ systemctl restart zabbix-agent.service

# 4.本地验证(在Sever里来写命令行验证)

$ zabbix_get -s 192.168.1.193 -k LISTEN # 出现了结果 我这边是 11 个

# 这里小小的扩展一下,如果让你监控11个tcp状态,那么岂不是要写11行,太挫了,zabbix提供传参的方式

----------------------------------------------------

cat > /etc/zabbix/zabbix_agentd.d/tcp_status.conf << 'EOF'

UserParameter=tcp_status[*],netstat -ant | grep -c $1

EOF

----------------------------------------------------

# 这里的tcp_status是我们自定义的key哦 $1是第一个参数哦,就是第几个*

# 那该怎么用呢?

# 这样用!

$ zabbix_get -s 192.168.1.193 -k tcp_status[LISTEN/TIME_WAIT...]

# 5.去zabbix-ui里配置监控项

# 我这里给agent-01添加监控项(3种)

# 点击agent-01那一行的【监控项】-->右上角的【创建监控项】

# 然后如下图

然后依次创建其他两个,我们可以采用简便方式【克隆】

我三个都加了

上面不是添加完监控项了嘛,然后我们来添加一下这三个的图形,只示例一个

点击【主机】—>点击agent-01的【图形】—>右上角【添加图形】

然后选择监控项三个即可。

紧接着我们来给这三个创建触发器

跟上面一样,找到并点击【创建触发器】

我们做那个tcp状态的触发器呢,我们就以time_wait为例吧,我们假使当它的数量大于等于500个的时候,就触发我们这个触发器。

????如何让它数量大于500,我们可以手动模拟给agent-01发http链接

如: ab -c 10 -n 1000 http://192.168.1.193/ 这个意思自己查吧,好吧…

但是,这个是给web服务器要发的,我们还要下载一个web服务器来作为测试工具,就拿nginx举例吧,在agent-01里下载nginx

nginx的默认端口就是80,nginx就是一个web服务器,我们呢就是给web服务器发连接请求的,所以要下载一个web服务器。

$ rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

$ yum install -y nginx

#输入如下命令,没有报错,则启动成功

$ nginx

# 记得放行80端口,也就是http服务

点击添加

一下子就报警了,当我们执行完ab -c 10 -n 1000 http://192.168.1.193/ 后

7.定义报警媒介

报警的触发器已经弄好了,但是人不打开这个网站就不会看到这个报警信息,所以我们希望,给我们发邮件、

或者短信、或者微信,来提示我们这个告警信息

称之为:报警媒介

7.1 邮件报警的配置

设定一个报警的条件

- 监测tcp 的状态,

- 监测当前机器的登陆用户数量,当用户的数量超过3个就发邮件告警(演示这个)

7.1.1 配置监控用户的自定义key

# 1.判断当前机器用户的数量

$ who | wc -l

#【拓展】 送你一个知识点,如何判断某个网页是否可访问,也就是判断 是否相应结果是 200

$ curl -s -I https://www.yucongming.com/ | awk '/^HTTP/{print $2}' # 得到的值为200

# -s参数:静默参数,不会显示进度表或者错误信息

# -I参数:只获得请求的头部信息

# 2.新增配置文件,加入key值

$ cd /etc/zabbix/zabbix_agentd.d/

$ vim userparameter_login_user.conf # 写入下面这一行

-------------------------------------

UserParameter=login.user,who | wc -l

-------------------------------------

# 3.重启agent

$ systemctl restart zabbix-agent.service

# 4.创建模板,添加监控项

添加监控项

# 5.给agent-01主机添加创建的模板,然后在最新数据里查看一下是否取到了

# 6. 给模板添加触发器

测试触发器的结果正确即可

【拓展】更正Linux新机器的时间

$ crontab -e

-------------------------------------

* * * * * ntpdate -u ntp1.aliyun.com

-------------------------------------

$ ntpdate -u ntp1.aliyun.com

报警媒介邮件

# 1.对zabbix-server设置发邮件的账户

# 2.要给谁发,发什么格式的。

这个是配置发件人的信息

我们这里使用qq邮箱来作为zabbix的发件人

去自己的qq邮箱里开启pop3服务(重新开启生成授权码),记下授权码,待会填入zabbix

这个是配置收件人的信息

然后点击添加,填入收件人的地址即可

可以发现,报警信息并不合理,并不完善,不清楚

我们可以自定义报警信息(粘贴进去)

这些自定义的信息,是zabbix的宏语法,可以去查看官方文档

https://www.zabbix.com/documentation/4.0/zh/manual/appendix/macros/supported_by_location

# 这个是告警信息

默认标题:

故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生:{TRIGGER.NAME}故障!

消息内容:

告警主机:{HOSTNAME1} {HOST.IP}

告警时间:{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} {HOST.IP}

告警时间:{EVENT.DATE}{EVENT.TIME}

告警等级:{TRIGGER.SEVERITY}

告警信息:{TRIGGER.NAME}

告警项目:{TRIGGER.KEY1}

问题详情:{ITEM.NAME}:{ITEM.VALUE}

当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:{EVENT.ID}

相关推荐