发布时间:2025-06-24 19:01:58  作者:北方职教升学中心  阅读量:433


【因此无需安装zabbix-agent】

①环境搭建:zabbix-server、
在这里插入图片描述
在这里插入图片描述
  • 重启zabbix-agent
需求实战(HTTP代理+zabbix5)

客户需要监控我方服务的状态,因此我方只需要提供一个自定义模板即可(xml文件)+自定义告警模板即可

  • 方案实现:我方暴露一个API接口给Zabbix,通过HTTP代理的方式用于获取数据。

    • 如果大家将zabbix-agent安装在了其他机器上,更换为对应机器ip地址即可

在这里插入图片描述
3. 等待几分钟刷新页面即可

bug1:

如果发现可用性仍然没有变成绿色,并且页面报错
Asuming that agent dropped connect because of access permision,表明是我们没有开启对应的权限

  • 首先查看是否关闭了防火墙
    • 关闭防火墙命令:systemctl stop firewalld
  • 如果使用的是云服务器,查看云服务器的对应安全组策略是否开启
  • 权限不够:修改zabbix-agent的配置文件
    • vim /etc/zabbix/zabbix_agentd.conf
    • 找到Server位置,将其修改为自己server所在ip地址加网段,如:172.159.92.3/24;如果为了方便也可以将其修改为0.0.0.0/0(代表运行所有的服务器访问)
      在这里插入图片描述
      完成之后,:wq保存退出,systemctl restart zabbix-agent.service重启zabbix-agent,等待几分钟之后在刷新zabbix的web页面即可
  • 如果上述方法都不行,就对应查看日志报错信息,来对应处理:
    查看日志信息:tail -f /var/log/zabbix/zabbix_agentd.log
    • 报错信息:Unable to connect to [127.0.0.1]:10051 [cannot connect to [[127.0.0.1]:10051]: [111] Connection refused]
    • 表明是服务器地址配置错了,vim /etc/zabbix/zabbix_agentd.conf,将配置文件中的ServerActive更改为zabbix-server的地址,如:10.253.50.145,记住只需要修改ip,不用携带port端口
      在这里插入图片描述

bug2:

如果查询agent的日志文件发现报错信息:
23946:20230722:121107.962 no active checks on server [10.253.50.145:10051]: host [Zabbix server] not found

  • 查询日志文件命令:tail -f /var/log/zabbix/zabbix_agentd.log
  • 解决办法:修改agent配置文件中的Hostname,
    • 查看配置文件中的HostName:
      cat /etc/zabbix/zabbix_agentd.conf | grep Hostname
    • 在zabbix web页面Monitoring->Configuration->Hosts 页面更改Host name和zabbix_agentd.conf里面的Hostname一样。mysql
      1. 安装并启动docker
      yum install -y yum-utilsyum-config-manager \    --add-repo \    https://download.docker.com/linux/centos/docker-ce.repoyum install dockersystemctl start docker

      拉取mysql和zabbix的docker,因为zabbix 6以上,需要centos 8,受限于环境,这里演示zabbix 5版本的

      1. 拉取镜像并创建数据卷
      # 拉取镜像docker pull mysql:5.7docker pull docker.io/zabbix/zabbix-web-nginx-mysql:centos-5.4-latestdocker pull docker.io/zabbix/zabbix-server-mysql:centos-5.4-latest# 拉取完成后,开始安装docker volume create -d local  mysql_data #存放mysql数据docker volume create -d local  mysql_logs #存放mysql日志docker volume create -d local  mysql_conf #存放mysql配置文件 
      1. 创建对应容器(mysql、并添加到我方提供给客户的自定义模板)
    1. 自定义模板(Template)
      我方提供给客户所需要的模板,用于监控指定服务的数据(调用我方提供的接口获取所需要监控的信息)
    • 自定义模板下创建监控项,如:我方接口返回多个Agent信息,那么就创建一个监控项,叫Agent Item
    • 在自定义模板Template下创建自动发现(HTTP代理)、zabbix-server、自定义模板
      1. 自动发现
        因为客户部署我方的机器过多,所以采用zabbix的自动发现来自动发现主机
      • 创建自动发现(填写对应ip范围及协议端口)
      • 配置关联动作(将发现的主机添加到主机组、web、

        执行结果:
        在这里插入图片描述

        3 运行zabbix-agent

        如果我们想要监控zabbix-server服务器上的信息,那么我们需要安装zabbix-agent

        3.1 通过安装包部署(推荐)
        1. 通过rpm安装zabbix对应仓库
        rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm# 清除本地yum缓存yum clean all
        1. 安装zabbix-agent
        yum install -y zabbix-agent
        1. 启动zabbix-agent
        systemctl restart zabbix-agent# 设置开机自启# systemctl enable zabbix-agent
        3.2 通过docker部署

        如果我们在docker中部署zabbix-agent,那么zabbix-server监控到的就是容器状态,而非是宿主机状态

        • 通过docker部署我们需要修改容器中配置文件的ZBX_Server_HOST,但是如果修改之后重启之后会丢失修改,所以需要编写一个DockerFile,然后构建自己的zabbix-agent镜像
          • 部分命令:
        #编写DockerFilevi Dockerfile# DockerFile中填写下面两行信息FROM zabbix/zabbix-agent:alpine-6.2-latestCOPY zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf# 构建自己的镜像docker build -t my-zabbix-agent #通过自己的镜像运行容器docker run -d \--name zabbix-agent \ -v /var/log/zabbix:/var/log/zabbix \ -p 10050:10050 \ --restart=unless-stopped \ --privileged \ my-zabbix-agent

        通过Docker部署:

        # ZBX\_SERVER\_HOST更换为自己zabbix-server的所在地址# 并且在zabbix的web页面中也需要填写agent的容器地址docker run -d \   --name zabbix-agent \   -v /etc/zabbix \   -v /var/log/zabbix:/var/log/zabbix \   -e ZBX\_HOSTNAME="client-01" \   -e ZBX\_SERVER\_HOST="10.253.50.145" \   -e ZBX\_SERVER\_PORT=10051 \   -p 10050:10050 \   --restart=unless-stopped \   --privileged \   zabbix/zabbix-agent:alpine-6.2-latest
        3.3 设置web为中文及bug处理
        1. 修改zabbix的web页面,设置页面显示为中文

        User settings - Profile - Language - Chinese,最后点击下方的update

        在这里插入图片描述
        2. 修改zabbix的监控地址为agent地址

        检测 - 主机 - 选择我们的zabbix-server - 鼠标单击然后选择配置

        在这里插入图片描述
        更换agent的地址为zabbix-server的地址

        因为我们此刻是在zabbix-server的机器上安装了一台zabbix-agent,目的是为了检测我们zabbix-server所在机器的状态。注意Admin是大写开头
        在这里插入图片描述

      • ②创建自动发现、触发器【根据自定义模板下的HTTP代理请求回来的数据,自动创建多个Agent,每个Agent包含对应监控项原型:name、用Admin,zabbix即可登录。cpu useage)、zabbix-web)
        docker run --name mysql-server -t \-v mysql_data:/var/lib/mysql \-v mysql_logs:/var/log/mysql \-v mysql_conf:/etc/mysql \-e MYSQL\_DATABASE="zabbix" \-e MYSQL\_USER="zabbix" \-e MYSQL\_PASSWORD="123456" \-e MYSQL\_ROOT\_PASSWORD="123456" \--restart=unless-stopped \-d mysql:5.7 \--character-set-server=utf8 \--collation-server=utf8_bin \--default-authentication-plugin=mysql_native_passworddocker volume create -d local  zabbix_serverdocker run --name zabbix-server-mysql -t \-v zabbix_server:/etc/zabbix \-e DB\_SERVER\_HOST="mysql-server" \-e MYSQL\_DATABASE="zabbix" \-e MYSQL\_USER="zabbix" \-e MYSQL\_PASSWORD="123456" \-e MYSQL\_ROOT\_PASSWORD="123456" \--link mysql-server:mysql \--restart=unless-stopped \-p 10051:10051 \--hostname zabbix-server \-d zabbix/zabbix-server-mysql:centos-5.4-latestdocker run --name zabbix-web-nginx-mysql -t \-e PHP\_TZ="Asia/Shanghai" \-e ZBX\_SERVER\_HOST="zabbix-server-mysql" \-e DB\_SERVER\_HOST="mysql-server" \-e MYSQL\_DATABASE="zabbix" \-e MYSQL\_USER="zabbix" \-e MYSQL\_PASSWORD="123456" \-e MYSQL\_ROOT\_PASSWORD="123456" \--link mysql-server:mysql \--link zabbix-server-mysql:zabbix-server \-p 80:8080 \--restart unless-stopped \--hostname zabbix-web \-d zabbix/zabbix-web-nginx-mysql:centos-5.4-latest
        1. 创建好后,访问http://ip/zabbix。cpu useage等】,当采集到的数据不合理时,则触发对应的触发器
      完整步骤
      1. 配置-模板-创建模板

      在这里插入图片描述

      2. 将模板加入templates组,配置模板宏(方便后续自动发现时,http代理使用)

      在这里插入图片描述

      3. 在我们新创建好的模板Ziyi Template下创建自动发现规则

      在这里插入图片描述
      在这里插入图片描述
      在自动发现规则这里我们引用开始创建好的宏:
      在这里插入图片描述
      根据自己接口返回数据的格式,判断是否需要预处理:
      在这里插入图片描述

      比如我接口返回的是

      {	"code":1,	"msg":"success",	"content":[		{			"id":1,			"name":"jack"		},		{			"id":2,			"name":"tom"		}	]}//那么我通过$.content预处理之后就可以获取到:[    [        {            "id": 1,            "name": "jack"        },        {            "id": 2,            "name": "tom"        }    ]]//不过zabbix自带一层for处理,因此我们可以通过$.content.name直接遍历出每个name

      在这里插入图片描述

      4. 创建监控项

      在这里插入图片描述
      根据http代理获取对应监控项的值:
      在这里插入图片描述

      5. 创建自动发现的监控项原型

      自动发现-创建监控项原型

      • 配置-模板-自动发现
        在这里插入图片描述

      点击创建监控项原型(配合自动发现规则的宏使用可自动动态创建出监控的数据项):
      在这里插入图片描述
      在这里插入图片描述
      修正:上面的键值应满足对应规则,样例:

      键值(合法):ziyi.content.[{#USER_NAME}]

      主要项选择我们第4步创建好的监控项User

      6. 配置监控项原型的预处理

      通过配置预处理步骤,来判断什么时候去获取值

      在这里插入图片描述
      tip:jsonpath用法:
      在这里插入图片描述
      jsonPath样例:https://www.cnblogs.com/lxmtx/p/12916659.html

      7. 添加主机并应用我们的模板

      监测 - 主机 - 创建主机
      在这里插入图片描述

      8. 观察数据

      监测 - 最新数据

      在这里插入图片描述

      在这里插入图片描述

      9. 创建触发器(可选)

      如果我们希望在数据异常时,在页面上显示告警,那么可以通过触发器实现

      • 配置-模板-自动发现-触发器类型-创建触发器原型
        在这里插入图片描述
        配置告警规则:
        在这里插入图片描述
        配置消警:
        在这里插入图片描述
      ③邮件告警
      1. 创建告警媒介(邮件需要开启pop/smtp),账号需要配置为对应邮件的smtp标识码
      2. 邮件模板
      //模板一邮件主题: Agent Problem: {EVENT.NAME}邮件内容:<b>Problem started</b> at {EVENT.TIME} on {EVENT.DATE}<br><b>Problem name:</b> {EVENT.NAME}<br><b>Host:</b> {HOST.NAME}<br><b>Severity:</b> {EVENT.SEVERITY}<br><b>Operational data:</b> {EVENT.OPDATA}<br><b>Original problem ID:</b> {EVENT.ID}<br>{TRIGGER.URL}//模板二主题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1},发生: {TRIGGER.NAME}故障!内容:告警主机:{HOSTNAME1}告警时间:{EVENT.DATE} {EVENT.TIME}告警等级:{TRIGGER.SEVERITY}告警信息:{TRIGGER.NAME}告警项目:{TRIGGER.KEY1}问题详情:{ITEM.NAME}:{ITEM.VALUE}
监控项原型(agent的信息等,如:name、