监控一台主机

被监控的机器需要安装zabbix-agent,agent跟server保持版本一致

#下载客户端zabbix-agent
方法一;
[root@web01 ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-agent-5.0.36-1.el7.x86_64.rpm
方法二: 下载源
[root@web01 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
#安装
[root@web01 ~]# yum install -y zabbix-agent
# 修改配置文件
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=172.16.1.71
Hostname=web01
# 启动并加入开机自启
[root@web01 ~]# systemctl start zabbix-agent
[root@web01 ~]# systemctl enable zabbix-agent
#浏览器访问
10.0.0.71

Img

Img

Img

Img

监控群组

  • 按项目分
  • 按应用分
# 接口
客户端:所有基本监控,自定义监控,都可以用客户端形式
SNMP:监控网络设备,交换机、路由器 Console口
JMX:专门监控Java内存,堆栈信息(老年代,新生代,永久代,full-gc)垃圾回收机制
IPMI:监控硬件协议

什么是垃圾回收机制?
Img

zabbix5.0版本自定义监控项

创建模板,链接模板
Img

Img

Img

Img

创建监控项:
Img

Img

Img

示例:监控服务器用户登录数量

## 监控项格式
Format: UserParameter=<key>,<shell command>
# 1.写脚本或者命令,取出想要监控的值
uptime|grep -Po '\d+(?= user)'
# 2.修改客户端配置文件   
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=user.count,uptime|grep -Po '\d+(?= user)'
# 3.重启
[root@web01 ~]# systemctl restart zabbix-agent
# 4.页面添加监控

Img

查看监控项

Img

Img

监控项不支持排错工具

#zabbix_get 是 Zabbix 监控系统提供的一个命令行工具,用于从远程主机获取监控数据。
用法:
zabbix_get -s <主机名或IP> -k <监控项键名>
参数解释:

-s <主机名或IP>:指定要获取数据的远程主机的主机名或IP地址。
-k <监控项键名>:指定要获取的监控项的键名,这是一个标识特定监控项的唯一字符串。
工作原理:
当执行 zabbix_get 命令时,它会通过 Zabbix 服务器获取与指定主机和监控项相关的数据。它首先与 Zabbix 服务器建立连接,然后通过 Zabbix API 发送请求,获取特定监控项的值,并将结果返回给用户
#下载安装
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-get-5.0.36-1.el7.x86_64.rpm
#示例
[root@zabbix ~]# zabbix_get -s 172.16.1.7 -k user.count
1

添加触发器

Img

Img

Img

Img

画图

Img

Img

Img

Img

自定义变量监控

监控进程

#添加nginx检测监控   //推荐把需要监控的项目写成不同的文件形式
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/process.conf
UserParameter=process.status[*],ps -ef|grep -v grep|grep -c $1

#监控项添加:
键值: process.status[nginx]

Img

邮件告警

邮件告警流程:

先创建了触发器
触发器触发动作
动作调用指定的报警媒介类型

配置报警媒介类型

这里以QQ邮箱为例:

申请授权码

image-20230816145959967

image-20230816150107230

image-20230816150220203

image-20230816150431419

配置动作:

image-20230816150758005

image-20230816150933055

image-20230816151029004

image-20230816151711801

image-20230816152029971

优化告警内容:

#警告自定义优化
#标题:故障{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}

#恢复自定义优化
#标题:恢复{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}

配置收件人

image-20230816152458710image-20230816152810336

image-20230816152922608

故障报警:

image-20230816160848711

恢复报警

image-20230816161005350

html格式邮件警告

html和文本格式的区别在于创建媒介时选择Email (HTML),其次是在创建动作的时候,自定义消息内容换为html语法

#故障警告html
</head>
<body>
    </style>
    <table border="3"  bordercolor="black" cellspacing="0px" cellpadding="4px" width="500px">
        <tr class="guzhang" bgcolor="#0C1B3D" ><th colspan=2>
            {TRIGGER.STATUS} 故障!!!故障!!! 
            <div>&#128514; &#128514; &#128514;</div>
        </tr>
        <tr >
            <td bgcolor="#F9B602" width="20%">告警主机</td>
            <td bgcolor="#F9B602">{HOSTNAME1}</td>
        </tr>
        <tr >
            <td bgcolor="#F9B602">告警别名</td>
            <td bgcolor="#F9B602">{HOST.NAME} </td>
        <tr >
        <tr >
            <td bgcolor="#F9B602">告警地址</td>
            <td bgcolor="#F9B602">{HOST.IP}</td>
        </tr>
        <tr>
            <td bgcolor="#F9B602">告警时间</td>
            <td bgcolor="#F9B602">{EVENT.DATE} {EVENT.TIME}</td>
        </tr>

        <tr>
            <td bgcolor="#F9B602">告警等级</td>
            <td bgcolor="#F9B602">{TRIGGER.SEVERITY}</td>
        </tr>

        <tr>
            <td bgcolor="#F9B602">告警信息</td>
            <td bgcolor="#F9B602">{TRIGGER.NAME}</td>
        </tr>

        <tr>
            <td bgcolor="#F9B602">告警项目</td>
            <td bgcolor="#F9B602">{TRIGGER.KEY1}</td>
        </tr>
        <tr >
            <td class='guzhang2' bgcolor="#FF3333">问题详情</td>
            <td class='guzhang3' bgcolor="#FF3333">{ITEM.NAME}: {ITEM.VALUE} &#128520; &#128520; &#128520;</td>
        </tr>
        <tr>
            <td bgcolor="#F9B602">当前状态</td>
            <td bgcolor="#F9B602">{TRIGGER.STATUS}: {ITEM.VALUE1}</td>
        </tr>
        <tr>
            <td bgcolor="#F9B602">事件ID</td>
            <td bgcolor="#F9B602">{EVENT.ID}</td>
        </tr>
    </table>
</body>

#恢复故障警告信息
<head>
    <style type="text/css">
        table .guzhang {
            color: red;
        }
        body{
            background:url('https://seopic.699pic.com/photo/40007/7490.jpg_wh1200.jpg');
        }
    </style>
</head>
<body>
    <table border="1"  bordercolor="black" cellspacing="0px" cellpadding="4px" width="500px">
        <tr bgcolor="#49c208"><th colspan=2>
        {TRIGGER.STATUS} 故障修复完成 
        <div>&#128512; &#128512; &#128512;</div>
        </tr>

        <tr >
            <td bgcolor="lightgreen" width="20%">恢复主机</td>
            <td bgcolor="yellow">{HOSTNAME1}</td>
        </tr>
        <tr>
            <td bgcolor="lightgreen">恢复别名</td>
            <td bgcolor="yellow">{HOST.NAME} </td>
        <tr >
            <td bgcolor="lightgreen">恢复地址</td>
            <td bgcolor="yellow">{HOST.IP}</td>
        </tr>
        <tr>
            <td bgcolor="lightgreen">恢复时间</td>
            <td bgcolor="yellow">{EVENT.DATE} {EVENT.RECOVERY.TIME}</td>
        </tr>

        <tr>
            <td bgcolor="lightgreen">恢复等级</td>
            <td bgcolor="yellow">{TRIGGER.SEVERITY}</td>
        </tr>

        <tr>
            <td bgcolor="lightgreen">恢复信息</td>
            <td bgcolor="yellow">{TRIGGER.NAME}</td>
        </tr>

        <tr>
            <td bgcolor="lightgreen">恢复项目</td>
            <td bgcolor="yellow">{TRIGGER.KEY1}</td>
        </tr>
        <tr >
            <td bgcolor="#49c208">恢复详情</td>
            <td bgcolor="#49c208">{ITEM.NAME}: {ITEM.VALUE} &#9889; &#9889; &#9889;</td>
        </tr>
        <tr>
            <td bgcolor="lightgreen">当前状态</td>
            <td bgcolor="yellow">{TRIGGER.STATUS}: {ITEM.VALUE1}</td>
        </tr>
        <tr>
            <td bgcolor="lightgreen">事件ID</td>
            <td bgcolor="yellow">{EVENT.ID}</td>
        </tr>
    </table>
</body>

故障警告:

image-20230816161240969

恢复警告:

image-20230816161335028

#如果在填写自定义动作发送信息的时候,点击新增报网页500错误,则授权以下目录权限即可
#授权
[root@zabbix-server conf.d]# chown -R apache.apache /var/opt/rh

企业微信告警

#企业微信群添加机器人生成webhook钩子
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=ed7678f7-a038-47e0-a669-8a3bc5483fcf
#查看配置说明
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=ed7678f7-a038-47e0-a669-8a3bc5483fcf' \
    -H 'Content-Type: application/json' \
    -d '
    {
    "msgtype": "text",
    "text": {
    "content": "hello,world"
        }
    }'
#安装python3.6环境
yum install -y python36-devel
#安装requests模块
 pip3.6 install requests
#创建脚本
vim /usr/lib/zabbix/alertscripts/wechat.py
#!/usr/bin/python3.6
#-*- coding: utf-8 -*-
import requests
import json
import sys
import os

headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=18496774-a212-4bf4-a761-4fa87e3c9876"   #这个是企业微信机器人生成的webhook地址,修改为你的即可。

def msg(text):
    json_text= {
     "msgtype": "text",
        "text": {
            "content": text
        },
    }
    print(requests.post(api_url,json.dumps(json_text),headers=headers).content)

if __name__ == '__main__':
    text = sys.argv[1]
    msg(text)

----------------------------------------------------------------------------------------------------
#使用shell脚本实现
#!/usr/bin/bash
api_url="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=ed7678f7-a038-47e0-a669-
8a3bc5483fcf" #这个是企业微信机器人生成的webhook地址,修改为你的即可。
text=$1
cat > msg.json<<EOF
{
    "msgtype": "text",
    "text": {
    "content": "$text"
    }
}
EOF
curl "$api_url" \
    -H 'Content-Type: application/json' \
    -d "`cat msg.json`"
 ## 授权
[root@zabbix-server alertscripts]# chmod +x wechat.py

创建报警媒介

image-20230818165324103

image-20230818165513971

用户管理

image-20230818165618252

关联动作

image-20230818170217654

image-20230818170235743

image-20230818170338644

故障模拟:

image-20230818170744946

多条件触发器

监控磁盘剩余使用率:

编辑配置文件

#客户端配置
[root@web01 zabbix_agentd.d]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1980          96        1686           9         198        1712
Swap:          4091           0        4091
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/free.conf
UserParameter=mem.state,free -m|awk '/^Mem/{print $NF*100/$2}'
#服务端验证
[root@zabbix ~]# zabbix_get -s 172.16.1.7 -k mem.state
86.4646

添加监控项: //键值有误,正确为mem.state 更新时间改为10s

image-20230816162207039

添加触发器:

image-20230816162425974

监控swap

#客户端编辑配置文件
[root@web01 zabbix_agentd.d]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1980          96        1686           9         198        1712
Swap:          4091           0        4091
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/free.conf
UserParameter=mem.state,free -m|awk '/^Mem/{print $NF*100/$2}'
UserParameter=swap.state,free -m|awk '/^Swap/{print $NF*100/$2}'
#服务端验证
[root@zabbix ~]# zabbix_get -s 172.16.1.7 -k swap.state
100

添加监控项: //键值有误,正确为swap.state 更新时间改为10s

image-20230816163012936

添加到之前的触发器里:

image-20230816164431269

常用触发器条件表达式

and #并且
or #或者
last() #比对最新的值
avg() #平均值
diff() #比对上一次文件的内容
nodata() #收不不到数据进行报警nodata(5m)
(5m) #表示最近5分钟得到值
(#5) #表示最近5次得到的值

zabbix自愈模式

添加ssh监控项

image-20230816170047803

添加ssh触发器

image-20230816170206929

创建自愈动作

image-20230816170307724

image-20230816170506340

image-20230816170602467

image-20230816170730122

修改配置文件,允许执行远程命令

#客户端修改配置文件
[root@web01 zabbix]# echo 'EnableRemoteCommands=1' >> /etc/zabbix/zabbix_agentd.conf 
[root@web01 zabbix]# cat /etc/zabbix/zabbix_agentd.conf | tail -1
EnableRemoteCommands=1
#重启服务
[root@web01 zabbix]# systemctl restart zabbix-agent.service 
#客户端zabbix用户sudo提权
visudo
%zabbix ALL=(ALL) NOPASSWD:ALL

image-20230816171041322

# 2.客户端zabbix用户要/bin/bash登录
usermod zabbix -s /bin/bash
# 3.测试
[root@web01 zabbix]# su - zabbix -c 'sudo ls -l /'
su: warning: cannot change directory to /var/lib/zabbix: No such file or directory
total 16
lrwxrwxrwx.   1 root root    7 Apr 23 18:18 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 Apr 23 18:27 boot
drwxr-xr-x   20 root root 3220 Aug 16 08:28 dev
drwxr-xr-x.  81 root root 8192 Aug 16 17:11 etc
drwxr-xr-x.   2 root root    6 Apr 11  2018 home
lrwxrwxrwx.   1 root root    7 Apr 23 18:18 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 Apr 23 18:18 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 Apr 11  2018 media
drwxr-xr-x.   2 root root    6 Apr 11  2018 mnt
drwxr-xr-x.   2 root root    6 Apr 11  2018 opt
dr-xr-xr-x  121 root root    0 Aug 16 08:28 proc
dr-xr-x---.   3 root root  170 Aug 16 16:56 root
drwxr-xr-x   26 root root  800 Aug 16 08:29 run
lrwxrwxrwx.   1 root root    8 Apr 23 18:18 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 Apr 11  2018 srv
dr-xr-xr-x   13 root root    0 Aug 16 08:28 sys
drwxrwxrwt.   9 root root  161 Aug 16 17:08 tmp
drwxr-xr-x.  13 root root  155 Apr 23 18:18 usr
drwxr-xr-x.  20 root root  278 Apr 23 18:57 var
#警告是因为没有创建家目录导致,如果想消除警告,创建zabbix家目录即可

验证自愈

#关闭客户端ssh
root@web01 zabbix]# systemctl stop sshd
[root@web01 zabbix]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      5993/rpcbind        
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      7042/master         
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      48406/zabbix_agentd 
tcp6       0      0 :::111                  :::*                    LISTEN      5993/rpcbind        
tcp6       0      0 ::1:25                  :::*                    LISTEN      7042/master         
tcp6       0      0 :::10050                :::*                    LISTEN      48406/zabbix_agentd 
udp        0      0 0.0.0.0:111             0.0.0.0:*                           5993/rpcbind        
udp        0      0 0.0.0.0:605             0.0.0.0:*                           5993/rpcbind        
udp6       0      0 :::111                  :::*                                5993/rpcbind        
udp6       0      0 :::605 

image-20230816171617720

修复://当zabbix检测到sshd服务断开后,会触发动作而恢复启动

image-20230816171812700