zabbix实战——3day

zabbix实战

课程目标

  1. 了解zabbix基本的内置宏

  2. 掌握服务发现与自动注册的配置使用

  3. 监控TCP连接

  4. 监控nginx

  5. 监控MySQL

  6. 监控MySQL主从

课程实验

  1. 服务发现与服务自动注册实验

  2. 监控TCP连接实验

  3. 监控nginx、监控MySQL、监控MySQL主从实验

课堂引入

  1. 使用zabbix实现对客户机的监控

授课进程

一、宏的介绍
1、概述

在 Zabbix 中,宏(Macros)是一个非常强大的功能,允许你在监控配置中使用动态变量。宏可以在各种配置项中使用,例如触发器、动作、通知、图形和模板等

2、常用的宏

触发器相关宏

复制代码
{TRIGGER.NAME}:触发器的名称。
{TRIGGER.STATUS}:触发器的状态。
{TRIGGER.SEVERITY}:触发器的严重性。
{TRIGGER.URL}:触发器的 URL。

事件相关宏

复制代码
{EVENT.ID}:事件的 ID。
{EVENT.DATE}:事件的日期。
{EVENT.TIME}:事件的时间。
{EVENT.RECOVERY.ID}:恢复事件的 ID。

主机和项目相关宏

复制代码
{HOST.NAME}:主机的名称。
{HOST.IP}:主机的 IP 地址。
{ITEM.NAME}:项目的名称。
{ITEM.VALUE}:项目的值。

用户相关宏

复制代码
{USER.FULLNAME}:用户的全名。
{USER.EMAIL}:用户的电子邮件地址。
{USER.PHONE}:用户的电话号码。
二、服务发现与自动注册
1、概述

手动添加客户端非常耗时间,增加人力、时间成本。为了满足监控企业成千上万台服务器,zabbix提供了自动发现与自动注册的功能,自动批量发现局域网中的服务器,并自动添加到zabbix监控平台

自动发现(被动模式):由服务端主动发起,Zabbix Server开启发现进程,定时扫描局域网中IP服务器、设备。实现自动将发现主机、自动将主机添加到主机组、自动加载模板、自动创建项目(item)、自动创建图像等功能。缺点:当 Agent服务器过多的时候采用自动发现,zabbix-server压力会比较大,自动添加主机进度就会非常慢。

自动注册(主动模式):Zabbix Server 等待 Zabbix Agent主动上报。由客户端主动发起,客户端必须安装并启动Agentd,否则无法被自动注册添加至主机列表。对于使用SNMP的要采用自动发现。缺点:agent有可能找不到Server。

PS:主动还是被动是基于agent而言,不管是主动还是被动模式都是在agent端进行配置

2、自动发现

操作步骤:

复制代码
1. 创建自动发现规则
2. 创建自动发现动作
3. 在“检测中”->“自动发现”可以查看 已发现的设备

1)创建自动发现规则

"配置"->"自动发现"->"创建发现规则" 填入名称、需发现服务器、设备的IP范围、更新间隔、检查项(ssh和zabbix客户端)、设备唯一性准则 最后勾选已启用、点击添加。

2)创建自动发现动作

"配置"->"动作"->事件源"自动发现"->"创建动作"

点击->操作配置,选择具体的操作类型:添加主机、添加到主机群组、与模板关联

3)在"检测中"->"自动发现"可以查看 已发现的设备

3、自动注册
三、监控TCP连接
1、TCP连接概述
复制代码
# 用于查看网络状态的两个命令
netstat -anpt
ss -anpt
复制代码
Proto:                         显示连接使用的协议
Recv-Q:                        接收队列
Send-Q:                        发送队列
Local Address:Port             请求的本地址与端口号
Foreign Address                客户端地址
PID/Program name               进程号与进程名称
复制代码
netstat中的各种状态:
    CLOSED :         初始(无连接)状态。
    LISTEN :         侦听状态,等待远程机器的连接请求。
    SYN_SEND :       在TCP三次握手期间,主动连接端发送了SYN包后,进入SYN_SEND状态,等待对方的ACK包。
    SYN_RECV :       在TCP三次握手期间,主动连接端收到SYN包后,进入SYN_RECV状态。
    ESTABLISHED :    完成TCP三次握手后,主动连接端进入ESTABLISHED状态。此时,TCP连接已经建立,可以进行通信。
    FIN_WAIT_1 :     在TCP四次挥手时,主动关闭端发送FIN包后,进入FIN_WAIT_1状态。
    FIN_WAIT_2 :     在TCP四次挥手时,主动关闭端收到ACK包后,进入FIN_WAIT_2状态。
    TIME_WAIT :      在TCP四次挥手时,主动关闭端发送ACK包之后,进入TIME_WAIT状态,等待最多MSL时间,让被动关闭端收到ACK包。
    CLOSING :        在TCP四次挥手期间,主动关闭端发送了FIN包后,没有收到对应的ACK包,却收到对方的FIN包,进入CLOSING状态。
    CLOSE_WAIT  :    在TCP四次挥手期间,被动关闭端收到FIN包后,进入CLOSE_WAIT状态。
    LAST_ACK :       在TCP四次挥手时,被动关闭端发送FIN包后,进入LAST_ACK状态,等待对方的ACK包。
主动连接端可能的状态有:         
    CLOSED        SYN_SEND        ESTABLISHED。
主动关闭端可能的状态有:         
    FIN_WAIT_1        FIN_WAIT_2        TIME_WAIT。
被动连接端可能的状态有:         
    LISTEN        SYN_RECV        ESTABLISHED。
被动关闭端可能的状态有:         
    CLOSE_WAIT        LAST_ACK        CLOSED。
复制代码
ESTABLISHED       socket已经建立连接  
CLOSED            socket没有被使用,无连接  
CLOSING           服务器端和客户端都同时关闭连接  
CLOSE_WAIT        等待关闭连接  
TIME_WAIT         表示收到了对方的FIN报文,并发送出了ACK报文,等待2MSL后就可回到CLOSED状态  
LAST_ACK          远端关闭,当前socket被动关闭后发送FIN报文,等待对方ACK报文  
LISTEN            监听状态  
SYN_RECV          接收到SYN报文  
SYN_SENT          已经发送SYN报文  
FIN_WAIT1         The socket is closed, and the connection is shutting down  
FIN_WAIT2         Connection is closed, and the socket is waiting for a shutdown from the remote end.
2、自定义监听key

需求:获取tcp连接中处于监听状态的tcp连接的数量

1)编写获取数据的shell命令

复制代码
ss -an | grep -w 80 | grep "LISTEN" | wc -l

2)客户端添加配置文件,编写自定义key

复制代码
vim /etc/zabbix/zabbix_agentd.d/tcp_status.conf

# Format: UserParameter=<key>,<shell command>
UserParameter=tcp.status.listen,ss -an | grep -w 80 | grep "LISTEN" | wc -l

更改了配置文件,重新启动agent

复制代码
systemctl restart zabbix-agent

3)客户端测试获取数据

复制代码
zabbix_get -s client -k tcp.status.listen

4)web页面添加监控项与图形

5)课堂练习

需求:获取tcp连接中处于(TIME-WAIT、ESTAB、SYN_RECV、SYN_SENT、CLOSE)状态的tcp连接的数量

3、动态参数

1)问题描述

以下的自定义的监听的数据非常类似,这样记忆或者操作起来就比较繁琐,有没有一种方式可以通过key来传递参数呢?

2)动态参数语法

使用动态传参的方式来解决上述的问题:

复制代码
cp /etc/zabbix/zabbix_agentd.d/tcp_status.conf /etc/zabbix/zabbix_agentd.d/tcp_status.conf.bak
vim /etc/zabbix/zabbix_agentd.d/tcp_status.conf
复制代码
UserParameter=tcp.status[*],ss -an | grep -w 80 | grep "$1" | wc -l

*:表示在填写key是传递过来的参数,如果有多个参数,通过,隔开

$1:表示第一个参数

3)实验

4、第三方模板

工作过程中,很多的key其实都已经定好了,并不需要我们去重新设置,所以,工作中,要监听什么数据,只需要把对应的配置文件放到对应的客户端中就可以了。

我们以tcp监控的数据作为示例来进行讲解

1)上传文件

2)将文件添加到agent指定目录

vim /root/tcp_connect_status/tcp_connect_status

复制代码
UserParameter=tcp.connect.status[*],/etc/zabbix/tcp_connect.status/tcp_connect_status.sh $1

vim /root/tcp_connect_status/tcp_connect_status.sh

复制代码
#!/bin/bash
#ESTABLISHED/LISTEN/SYN_SENT/SYN_RECV/FIN_WAIT1/FIN_WAIT2/TIME_WAIT/CLOSE/CLOSE_WAIT/LAST_ACK/LISTEN/CLOSING/ERROR_STATUS

LISTEN() {
        netstat -an |grep ^tcp |grep LISTEN |wc -l
}
ESTABLISHED() {
        netstat -an |grep ^tcp |grep ESTABLISHED |wc -l
}
TIME_WAIT() {
        netstat -an |grep ^tcp |grep TIME_WAIT |wc -l
}
SYN_SENT() {
        netstat -an |grep ^tcp |grep SYN_SENT |wc -l
}
SYN_RECV() {
        netstat -an |grep ^tcp |grep SYN_RECV |wc -l
}
CLOSE() {
        netstat -an |grep ^tcp |grep CLOSE |wc -l
}
$1
复制代码
# 创建目录
mkdir /etc/zabbix/tcp_connect.status

# 复制tcp_connect_status.sh脚本到/etc/zabbix/tcp_connect.status目录中
cp /root/tcp_connect_status/tcp_connect_status.sh /etc/zabbix/tcp_connect.status
chmod -R +x /etc/zabbix/tcp_connect.status

# 复制自定义的key的文件到agent的指定目录,并修改名字
cp /root/tcp_connect_status/tcp_connect_status /etc/zabbix/zabbix_agentd.d/tcp_connect_status.conf

3)重启agent

复制代码
systemctl restart zabbix-agent

4)服务端测试

复制代码
zabbix_get -s client -k tcp.connect.status[LISTEN]

5)web端添加监控项与图形

6)验证

四、监控nginx
1、nginx配置状态查询
复制代码
目的:观察用户与 nginx 服务器的链接数量
状态模块:stub_status_module
启用状态模块

location /nginx_status {    
    stub_status;
    allow all;
}

# 当有人访问 /nginx_status 这个页面时,给他看 stub_status 这个模块,授予所有用户访问权限

修改nginx的配置并重启nginx

复制代码
location /nginx_status {
    stub_status;
    deny all;
    allow 192.168.217.155;
}
复制代码
Active connections: 22              当前活动的连接数
server accepts handled requests     6 6 6 服务器接受处理请求 
    6        总连接数connection(TCP)
    6        成功的连接数connection (TCP)
    6        总共处理的请求数requests(HTTP)
Reading: 0            读取客户端Header的信息数,请求头
Writing: 1            返回给客户端的header的信息数,响应头
Waiting: 0            等待的请求数,开启了keepalive
2、客户端

1)上传文件

vim /root/nginx/nginx_status

复制代码
UserParameter=Active,/usr/local/zabbix-agent-ops/bin/nginx_status.sh Active
UserParameter=Reading,/usr/local/zabbix-agent-ops/bin/nginx_status.sh Reading
UserParameter=Writing,/usr/local/zabbix-agent-ops/bin/nginx_status.sh Writing
UserParameter=Waiting,/usr/local/zabbix-agent-ops/bin/nginx_status.sh Waiting

vim /root/nginx/nginx_status.sh

复制代码
#!/bin/bash
#nginx status

Active(){
        wget --quiet -O - http://localhost/nginx_status?auto |awk 'NR==1 {print$3}'
}
Accept(){
        wget --quiet -O - http://localhost/nginx_status?auto |awk 'NR==3 {print$1}'
}
Handled(){
        wget --quiet -O - http://localhost/nginx_status?auto |awk 'NR==3 {print$2}'
}
Request(){
        wget --quiet -O - http://localhost/nginx_status?auto |awk 'NR==3 {print$3}'
}
Reading(){
        wget --quiet -O - http://localhost/nginx_status?auto |awk 'NR==4 {print$2}'
}
Writing(){
        wget --quiet -O - http://localhost/nginx_status?auto |awk 'NR==4 {print$4}'
}
Waiting(){
        wget --quiet -O - http://localhost/nginx_status?auto |awk 'NR==4 {print$6}'
}
$1

2)创建目录并授权

复制代码
mkdir  /usr/local/zabbix-agent-ops/bin/
chmod -R +x /usr/local/zabbix-agent-ops/bin/

3)复制文件到指定目录

复制代码
cp /root/nginx/nginx_status /etc/zabbix/zabbix_agentd.d/nginx_status.conf
cp /root/nginx/nginx_status.sh /usr/local/zabbix-agent-ops/bin/
chmod -R +x /usr/local/zabbix-agent-ops/bin/

4)重启agent

复制代码
systemctl restart zabbix-agent
3、服务端

1)命令测试

复制代码
zabbix_get -s client -k Active

2)添加监控项与图形

此处自行添加即可

五、监控MySQL
1、常用监控数据

对于MySQL数据库而言,我们常见的监听项有以下几项:

  • 查询吞吐量
复制代码
Com_select:select查询语句个数/每秒
Com_insert:insert操作语句个数/每秒
Com-update:update操作语句个数/每秒
Com-delete:delete操作语句个数/每秒
Questions:查询语句总量
  • 慢查询数量
复制代码
Slow_queries:慢查询数量
  • 连接情况
复制代码
Threads_connected:当前打开的数据库连接数
max_connections:数据库当前的最大连接数
复制代码
# 获取最大连接数
mysql -uroot -pAa123456= -e "show variables like 'max_connections'"|grep max_connections
# 获取当前打开的数据库连接数
mysqladmin  -uroot -pAa123456= extended-status | grep -E 'Threads_connected'
2、客户端

自行完成

3、服务端

自行完成

六、监控MySQL主从
1、需求描述

1)MySQL主机与从机的状态

2)slave主从复制的状态

3)slave主从复制的延迟

课堂小结

  1. 服务发现与服务自动注册实验

  2. 监控TCP连接实验

  3. 监控nginx、监控MySQL、监控MySQL主从实验

课后作业

  1. 完成课堂的案例及练习

  2. 将今天的内容整理为思维导图的形式

  3. 完成以下需求

    1、zabbix怎么监控的,有哪些监控指标?

    2、Zabbix 的主动模式和被动模式有什么区别?

    3、zabbix 主动模式server是否通过agent?

    4、zabbix会监控哪些指标?怎么进行优化?

    5、如果不使用zabbix你怎么去监控cpu,脚本?那脚本如何告警?

    6、zabbix进程指标怎么看?

扩展内容

相关推荐
知行合一。。。3 小时前
Python--01--核心基础
android·java·python
汤米粥3 小时前
Android简单易用的视频压缩
android
怀君3 小时前
Uniapp——Android离线打包自定义基座教程
android·uni-app
ellis19704 小时前
Unity出安卓包知识点汇总
android·unity
urkay-4 小时前
Android 全局悬浮窗
android·gitee
朝花不迟暮4 小时前
Go基础-闭包
android·开发语言·golang
风清云淡_A5 小时前
【Android36】android开发实战案列之RecyclerView组件的使用方法
android
we1less6 小时前
Android-HAL (四) AIDL
android
Android技术之家6 小时前
2026 Android开发五大趋势:AI原生、多端融合、生态重构
android·重构·ai-native