使用 Docker 安装 Zabbix,并配置自定义监控项

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Zabbix 可以用来监控各种网络参数,来保证服务器和系统的安全运行。并且 Zabbix 还提供了灵活的通知机制,以此来让系统管理员快速定位/解决存在的各种问题。是一个基于 Web 界面提供的分布式系统监控以及网络监控功能的企业级开源解决方案。

使用 Docker 安装 Zabbix,并配置自定义监控项



一、Zabbix 简介


1.监控功能

2.Zabbix 工作原理

3.Zabbix 组件

4.Zabbix 进程


二、使用 Zabbix 配置自定义监控项


1.安装 Zabbix

2.开启自定义监控项

3.编写 Nginx 自定义监控脚本


一、Zabbix 简介



Zabbix 可以用来监控各种网络参数,来保证服务器和系统的安全运行。并且 Zabbix 还提供了灵活的通知机制,以此来让系统管理员快速定位/解决存在的各种问题。是一个基于 Web 界面提供的分布式系统监控以及网络监控功能的企业级开源解决方案。


1.监控功能


  • 主机性能监控、网络设备性能监控、数据库性能监控、多种告警方式、详细的报表图。
  • 监控主机,我们可以使用 Zabbix 提供的 Agent 软件,来监控 Linux、Windows、FreeBSD 等系统。
  • 监控网络设备,我们可以通过 Zabbix 支持的 SNMP 协议来进行监控(SSH 协议不常用)


1)监控对象


  • 设备:服务器,路由器,交换机。
  • 软件:OS,网络,应用程序。


2)主机性能指标监控


  • 故障监控:宕机,服务不可用,主机不可达。


2.Zabbix 工作原理


首先,我们需要在被监控的主机上安装 Agent 软件,用来收集当前服务器的各项数据信息,并发送给监控端,当监控端接收到 Agent 发送过来的信息后,会将数据存储到数据库中,接着通过 Web 界面来将数据在前端页面上进行展示和绘图。


这里 Agent 收集数据分为 主动和被动 两种模式:


  • 主动: 客户端通过连接监控端的 10051 端口,来主动的将收集到的信息推送给监控端。
  • 被动: 监控端定时的通过连接客户端的 10050 端口进行通信,来收集客户端的各项数据信息。


Zabbix 默认使用的模式为被动模式,也就是说当我们需要监控的主机数量较多时,可能会影响到监控端的性能。因为监控端会定时的通过连接客户端的端口进行数据收集,所以我们可以 选择性的配置部分主机为主动模式,来减少监控端的性能压力。


3.Zabbix 组件


image.png


4.Zabbix 进程


  • Sender:用于发送数据给 Server 或者 Proxy,通常用于耗时比较长的检查;
  • Get:Zabbix 命令,主要用于排查使用,可以在监控端上执行,来获取被监控端的信息;
  • Agent:客户端守护进程,用于收集当前主机的数据信息,如:CPU 负载、内存的使用情况等;
  • Proxy:代理守护进程,相当于是一个中转站,可以将收集到的数据信息 主动/被动 的提交到监控端上;
  • Server:监控端守护进程,用于接收 Agent Get Sender Proxy Java_Gateway 提供的数据。


因为 Zabbix 并不能直接监控 Java 应用,所以在 Zabbix 2.0 后推出 Java_Gateway 代理进程,使我们可以监控 Java 应用。


二、使用 Zabbix 配置自定义监控项



  • 我们下面采用的是 docker-compose 方式安装,物理安装可以看我前面写的这篇文章:传送门


1.安装 Zabbix


1)安装 Docker


[root@Zabbix ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@Zabbix ~]# yum -y install epel-release
[root@Zabbix ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
[root@Zabbix ~]# yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
[root@Zabbix ~]# yum -y install docker-ce-19.03.12 docker-ce-cli-19.03.12
[root@Zabbix ~]# systemctl enable docker --now


2)安装 Docker-Compose


[root@Zabbix ~]# wget "https://github.com/docker/compose/releases/download/v2.3.2/docker-compose-$(uname -s)-$(uname -m)" -O /usr/local/bin/docker-compose  
[root@Zabbix ~]# chmod +x /usr/local/bin/docker-compose
[root@Zabbix ~]# docker-compose --version


3)安装 Agent


[root@Zabbix ~]# rpm -ivh http://repo.zabbix.com/zabbix/5.4/rhel/7/x86_64/zabbix-agent-5.4.8-1.el7.x86_64.rpm
[root@Zabbix ~]# egrep -v '^$|#' zabbix_agentd.conf 
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@Zabbix ~]# systemctl enable zabbix-agent --now


4)安装 Zabbix


[root@Zabbix ~]# mkdir -p /app/zabbix
[root@Zabbix ~]# cd /app/zabbix/
[root@Zabbix zabbix]# cat <<END > docker-compose.yml
version: "3"
services:
  mysql-server:
    image: mysql:5.7
    ports:
      - "3306:3306"
    volumes:
      - "/app/mysql:/var/lib/mysql"       # 配置数据卷 (防止监控数据丢失)
    environment:
      MYSQL_ROOT_PASSWORD: 123123
      TZ: Asia/Shanghai
    command: --character-set-server=utf8 --collation-server=utf8_bin
    restart: always
  zabbix-server:
    image: zabbix/zabbix-server-mysql:5.4.8-centos
    environment:
      DB_SERVER_HOST: 127.0.0.1
      DB_SERVER_PORT: 3306
      MYSQL_DATABASE: zabbix
      MYSQL_USER: root
      MYSQL_PASSWORD: 123123
      TZ: Asia/Shanghai
    depends_on:
      - mysql-server
    restart: always
    network_mode: "host"            # 使用主机网络
  zabbix-web:
    image: zabbix/zabbix-web-nginx-mysql:5.4.8-centos
    ports:
      - "8000:8080"               # Zabbix WebUI 映射端口
    volumes:                  # 当在 Web 界面配置成中文后,监控界面会出现乱码
      - "./simkai.ttf:/usr/share/zabbix/assets/fonts/DejaVuSans.ttf"
    environment:
      DB_SERVER_HOST: mysql-server
      DB_SERVER_PORT: 3306
      MYSQL_DATABASE: zabbix
      MYSQL_USER: root
      MYSQL_PASSWORD: 123123
      TZ: Asia/Shanghai
      ZBX_SERVER_HOST: 192.168.1.1
    depends_on:
      - mysql-server
      - zabbix-server
    restart: always
END
[root@Zabbix zabbix]# docker-compose up -d
[root@Zabbix zabbix]# docker-compose ps  


  • simkai.ttf 字体,你们可以在自己电脑上的这个 C:\Windows\Fonts 路径找到。


5)验证:http://192.168.1.1:8000(账号:Admin/zabbix)


image.png


  • 界面上出现:zabbix server is not running: the information displayed may not be current 报错;
  • 原因可能是因为我们 docker-compose 文件中的 ZBX_SERVER_HOST 变量配置的值不是 Zabbix Server 的 IP 地址导致的。


我上面报错是为了让你们看下效果,如果你们出现如上配置,按照我的配置修改即可。


配置中文


image.png


2.开启自定义监控项


[root@Zabbix ~]# echo "UnsafeUserParameters=1" >> /etc/zabbix/zabbix_agentd.conf 


3.编写 Nginx 自定义监控脚本


[root@Zabbix ~]# yum -y install nginx
[root@Zabbix ~]# cat <<END > /etc/nginx/conf.d/status.conf
server {
    listen 80;
    server_name 127.0.0.1;
    location /status {
        stub_status on;
        allow 127.0.0.1;
        allow 192.168.1.0/24;
        deny all;
    }
}
END


1)编写自定义监控脚本


[root@Zabbix ~]# mkdir /etc/zabbix/scripts
[root@Zabbix ~]# vim /etc/zabbix/scripts/nginx_status.sh
#!/bin/bash
HOST="127.0.0.1"
PORT="80"
# 监控 Nginx 进程是否存在
function Ping {
    /sbin/pidof nginx | wc -l
}
# 监控 Nginx 状态信息
function Active {
    /usr/bin/curl "http://$HOST:$PORT/status" 2> /dev/null | grep "Active" | awk '{print $NF}'
}
function Reading {
    /usr/bin/curl "http://$HOST:$PORT/status" 2> /dev/null | grep "Reading" | awk '{print $2}'
}
function Writing {
    /usr/bin/curl "http://$HOST:$PORT/status" 2> /dev/null | grep "Writing" | awk '{print $4}'
}
function Waiting {
    /usr/bin/curl "http://$HOST:$PORT/status" 2> /dev/null | grep "Waiting" | awk '{print $6}'
}
function Server {
    /usr/bin/curl "http://$HOST:$PORT/status" 2> /dev/null | awk NR==3 | awk '{print $1}'
}
function Accepts {
    /usr/bin/curl "http://$HOST:$PORT/status" 2> /dev/null | awk NR==3 | awk '{print $2}'
}
function Requests {
    /usr/bin/curl "http://$HOST:$PORT/status" 2> /dev/null | awk NR==3 | awk '{print $3}'
}
# 执行 function
$1
[root@Zabbix ~]# chmod +x /etc/zabbix/scripts/nginx_status.sh


2)定义监控脚本


[root@Zabbix ~]# cat <<"END" > /etc/zabbix/zabbix_agentd.d/nginx_status.conf
UserParameter=nginx.status[*],/etc/zabbix/scripts/nginx_status.sh $1
END
[root@Zabbix ~]# systemctl restart zabbix-agent


3)验证


[root@Zabbix ~]# docker exec -it zabbix-zabbix-server-1 /bin/bash


image.png


创建模板


image.png


创建应用集


image.png


创建监控项


image.png


因为在我们的监控脚本中,一共定义了 8 个监控项,所以我们上面也要创建 8 个监控项,重复上面操作,创建出对应的即可。


image.png



给我们的监控项创建图形


image.png



将 Nginx 模板加入到主机中


image.png


查看监控图


image.png


其实 Zabbix 的自定义监控项就是由 key/value 的形式组成。即,我们只需要把要监控的数据定义成一个 value,key 里面的值就是我们想要监控的数据,那么也就是说,当我们定时的查找这个 key 对应的值,便可以得到监控数据。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
1月前
|
监控 应用服务中间件 nginx
基于Zabbix的SLA监控体系构建与实践
本文由Zabbix社区专家褚凤彬分享,详解SLA在Zabbix中的应用。通过Trigger与Service联动,构建Web应用的多层级监控体系,并介绍SLA计算规则、维护期处理及升级注意事项,助力企业精准掌控服务可用性。
331 36
|
2月前
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
355 122
基于docker搭建监控系统&日志收集
|
4月前
|
关系型数据库 应用服务中间件 nginx
Docker一键安装中间件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)
本系列脚本提供RocketMQ、Nginx、MySQL、MinIO、Jenkins和Redis的Docker一键安装与配置方案,适用于快速部署微服务基础环境。
kde
|
4月前
|
Kubernetes 关系型数据库 文件存储
手把手教你完成极空间 NAS Docker 镜像加速配置
本教程详细介绍了如何在极空间NAS上配置轩辕镜像加速器,以提升Docker镜像的下载速度与稳定性。内容涵盖账号注册、网络确认、加速器设置及验证方法,并提供常见问题解决方案,帮助用户高效完成容器化应用部署。
kde
1665 1
|
2月前
|
关系型数据库 数据库 PostgreSQL
docker 安装 Postgres 17.6
本文介绍如何通过Docker安装和配置PostgreSQL 17.6。内容包括拉取镜像、导出配置文件、运行容器并挂载数据与配置文件目录,以及进入容器使用psql操作数据库的完整步骤,便于持久化管理和自定义配置。
363 3
docker 安装 Postgres 17.6
|
1月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
350 5
|
1月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
340 2

热门文章

最新文章