本文最后更新于 2024-07-05,文章内容可能已经过时。

如何在OpenEuler 上快速部署一套Zabbix监控系统

一、环境信息

用途 机器IP 操作系统 备注
zabbix-server 172.22.33.180 openeuler 22.03 LTS SP3 7.0 LTS 版本,容器部署
zabbix-agent 172.16.10.182 openeuler 22.03 LTS SP3 7.0 源码编译部署

二、Docker 部署

2.1 二进制包下载

wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz

2.2 解压,拷贝至/usr/bin 下

tar -xf docker-19.03.9.tgz
cp docker/* /usr/bin
which docker

2.3 编写docker.service文件

vim /etc/systemd/system/docker.service

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

备注: 如果想要修改 docker默认 存储路径,不推荐此方式,建议保留 /var/lib/docker ,使用 软连接的方式

2.4 添加可执行权限

chmod +x /etc/systemd/system/docker

2.5 启动,加载,开机自启动

systemctl daemon-reload 
systemctl start docker
systemctl enable docker

2.6 配置镜像加速器

请自行准备加速地址[2024年6月]

mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxxxxx/"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

三、docker-compose 部署

3.1 docker 和 docker-compose 的版本对应关系

  • https://docs.docker.com/compose/compose-file/compose-versioning/#version-1-to-2x

3.2 安装docker-compose

#从GitHub上 下载docker-compose 二进制包
root@manager:~# wget https://github.com/docker/compose/releases/download/1.29.0/docker-compose-Linux-x86_64

#把下载下来的软件包上传到/root 路径下
root@manager:~# mv docker-compose-Linux-x86_64 /usr/bin/docker-compose 
root@manager:~# chmod +x  /usr/bin/docker-compose

#安装后查看下版本
root@manager:~# docker-compose version
docker-compose version 1.29.0, build 07737305
docker-py version: 5.0.0
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019

四、安装部署zabbix-server

4.1 zabbix7.0新功能描述

更多内容源于zabbix官网,更多详情:

https://www.zabbix.com/documentation/current/zh/manual/introduction/whatsnew700

4.2 zabbix7.0安装要求

更多内容源于zabbix官网,更多详情:

https://www.zabbix.com/documentation/current/en/manual/installation/requirements

4.3 zabbix7.0容器化安装方式

更多内容源于zabbix官网,更多详情:

https://www.zabbix.com/documentation/current/en/manual/installation/containers

Zabbix 提供基于各种操作系统基础映像的映像。要获取特定 Zabbix 组件支持的基础操作系统映像列表,请参阅Docker Hub中的组件描述。所有 Zabbix 映像都配置为在基础映像更新时重建最新映像。

image-20240629235906602

此外还需要 PostgreSQL 数据库支持的 Zabbix serve 运行

4.3.1 使用docker-compose运行zabbix-server

这里我没用创建单独的容器网络,直接使用宿主机网络通信,注意宿主机上的端口,切莫端口冲突

  • 创建zabbix工作目录
mkdir -p /home/application/zabbix
  • 创建docker-compose.yaml 文件 **vim /home/application/zabbix/docker-compose.yaml **
    • 注意自定义修改pg数据库的密码
    • postgres_data 数据库的数据目录,单独挂载在zabbix 的工作目录的postgres_data 下,也就是,/home/application/zabbix/postgres_data
    • zabbix 的 zabbix_alertscripts 自定义警报脚本,单独挂载在zabbix 的工作目录的zabbix_alertscripts 下,也就是,/home/application/zabbix/zabbix_alertscripts
    • 网络模式,宿主机模式
version: "3"
services:
  postgres:
    image: postgres:15.7-alpine
    container_name: zabbix-postgres
    environment:
      POSTGRES_DB: zabbix
      POSTGRES_USER: zabbix
      POSTGRES_PASSWORD: srebro.cn
    command: -c max_connections=2000
    restart: always
    volumes:
      - ./postgres_data:/var/lib/postgresql/data
    network_mode: host

  zabbix-server:
    image: zabbix/zabbix-server-pgsql:7.0-alpine-latest
    #image: zabbix/zabbix-server-pgsql:7.0-ubuntu-latest-new
    container_name: zabbix-server
    environment:
      DB_SERVER_HOST: 127.0.0.1
      POSTGRES_USER: zabbix
      POSTGRES_PASSWORD: srebro.cn
      POSTGRES_DB: zabbix
      TZ: Asia/Shanghai
    volumes:
      - ./zabbix_alertscripts:/usr/lib/zabbix/alertscripts
    network_mode: host
    restart: always
    depends_on:
      - postgres

  zabbix-web-nginx:
    image: zabbix/zabbix-web-nginx-pgsql:7.0-alpine-latest
    container_name: zabbix-web-nginx
    environment:
      DB_SERVER_HOST: 127.0.0.1
      POSTGRES_USER: zabbix
      POSTGRES_PASSWORD: srebro.cn
      POSTGRES_DB: zabbix
      ZBX_SERVER_HOST: 127.0.0.1
      PHP_TZ: Asia/Shanghai
    network_mode: host
    restart: always
    depends_on:
      - zabbix-server
  • 运行docker-compose
[root@localhost zabbix]# cd /home/application/zabbix
[root@localhost zabbix]# docker-compose up -d
[root@localhost zabbix]# docker-compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
zabbix-postgres     "docker-entrypoint.s…"   postgres            running           
zabbix-server       "/usr/bin/docker-ent…"   zabbix-server       running           
zabbix-web-nginx    "docker-entrypoint.sh"   zabbix-web-nginx    running           

4.3.3 登录zabbix-server web控制台

WEB登录地址: http://172.22.33.180:8080

默认密码: Admin/zabbix

image-20240630001648914

image-20240630001717356

五、安装部署zabbix-agent

5.1 zabbix7.0 源码包下载

wget https://cdn.zabbix.com/zabbix/sources/stable/7.0/zabbix-7.0.0.tar.gz

5.2 编译及依赖包环境准备

我这里是openeuler 系统,尝试使用zabbix 官网提供的7.0 的rpm 包。但是在安装的时候,总是提示环境有问题,报错如下:

[root@localhost ~]# yum install ./zabbix-agent-7.0.0-release1.el7.x86_64.rpm 
  - 没有东西可提供 libcrypto.so.10()(64bit)(zabbix-agent-7.0.0-release1.el7.x86_64 需要)
  - 没有东西可提供 libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit)(zabbix-agent-7.0.0-release1.el7.x86_64 需要)
  - 没有东西可提供 libcrypto.so.10(OPENSSL_1.0.2)(64bit)(zabbix-agent-7.0.0-release1.el7.x86_64 需要)
  - 没有东西可提供 libcrypto.so.10(libcrypto.so.10)(64bit)(zabbix-agent-7.0.0-release1.el7.x86_64 需要)
  - 没有东西可提供 liblber-2.4.so.2()(64bit)(zabbix-agent-7.0.0-release1.el7.x86_64 需要)
  - 没有东西可提供 libldap-2.4.so.2()(64bit)(zabbix-agent-7.0.0-release1.el7.x86_64 需要)
  - 没有东西可提供 libssl.so.10()(64bit)(zabbix-agent-7.0.0-release1.el7.x86_64 需要)
  - 没有东西可提供 libssl.so.10(libssl.so.10)(64bit)(zabbix-agent-7.0.0-release1.el7.x86_64 需要)
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

image-20240630002407072

尝试着去解决,最终还是放弃了,需要修改系统上的lib库,太过于复杂,还是索性采用源码编译的方式部署zabbix-agent

  • openeuler 编译及依赖包安装【跟着我安装下面的软件包,编译分分钟丝毫没有问题】
yum groupinstall -y "Development Tools"
yum install -y net-snmp net-snmp-devel libevent libevent-devel openssl openssl-devel curl curl-devel fping pcre pcre-devel pkgconfig
  • 添加zabbix用户,用户组
groupadd --system zabbix
useradd --system -g zabbix -d /usr/local/zabbix -s /sbin/nologin/ zabbix
  • 开始编译zabbix-agent 包
tar -xf zabbix-7.0.0.tar.gz 
cd zabbix-7.0.0/
./configure --prefix=/usr/local/zabbix --enable-agent --with-libcurl --with-net-snmp --with-libevent --with-openssl --enable-ipv6
make
make install

5.3 配置zabbix-agent并启动

  • 创建zabbix-agent 日志目录
mkdir -p /usr/local/zabbix/logs
  • 修改zabbix工作目录权限
chown -Rf zabbix:zabbix /usr/local/zabbix
  • 使用systemd管理配置zabbix-agent
[root@localhost home]# vim /etc/systemd/system/zabbix-agent.service
[Unit]
Description = Zabbix Agent
After = syslog.target network.target
 
[Service]
Type = forking
Restart = on-failure
KillMode = control-group
ExecStart = /usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/etc/zabbix_agentd.conf
RestartSec = 10s
TimeoutSec = 0
User = zabbix
Group = zabbix
 
[Install]
WantedBy = multi-user.target

  • 修改配置文件 /usr/local/zabbix/etc/zabbix_agentd.conf 参数【ServerServerActiveHostnameUnsafeUserParameters,LogFile
# 被动模式下的 Zabbix-Server/Proxy 地址
Server=172.22.33.180

# 主动模式下的 Zabbix-Server/Proxy 地址
ServerActive=172.22.33.180

#主机名,设定 Zabbix-Agent 主机名,确保唯一且在 Zabbix-Server web 中一致
Hostname=172.16.10.182_agent-1

# 允许使用不安全的用户参数,允许创建自定义监控项
UnsafeUserParameters=1

# 指定 Zabbix-Agent 的日志文件路径
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
  • reload 并启动zabbix-agent
[root@k8s-node1 etc]# systemctl daemon-reload

[root@k8s-node1 etc]# systemctl enable zabbix-agent

[root@k8s-node1 etc]# systemctl start zabbix-agent

[root@k8s-node1 etc]# ps -ef | grep zabbix_agent
zabbix    478193       1  0 00:48 ?        00:00:00 /usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/etc/zabbix_agentd.conf
zabbix    478194  478193  0 00:48 ?        00:00:00 /usr/local/zabbix/sbin/zabbix_agentd: collector [idle 1 sec]
zabbix    478195  478193  0 00:48 ?        00:00:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #1 [waiting for connection]
zabbix    478196  478193  0 00:48 ?        00:00:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #2 [waiting for connection]
zabbix    478197  478193  0 00:48 ?        00:00:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #3 [waiting for connection]
zabbix    478198  478193  0 00:48 ?        00:00:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #4 [waiting for connection]
zabbix    478199  478193  0 00:48 ?        00:00:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #5 [waiting for connection]
zabbix    478200  478193  0 00:48 ?        00:00:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #6 [waiting for connection]
zabbix    478201  478193  0 00:48 ?        00:00:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #7 [waiting for connection]
zabbix    478202  478193  0 00:48 ?        00:00:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #8 [waiting for connection]
zabbix    478203  478193  0 00:48 ?        00:00:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #9 [waiting for connection]
zabbix    478204  478193  0 00:48 ?        00:00:00 /usr/local/zabbix/sbin/zabbix_agentd: listener #10 [waiting for connection]
zabbix    478205  478193  0 00:48 ?        00:00:00 /usr/local/zabbix/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
root      478329  439035  0 00:48 pts/0    00:00:00 grep --color=auto zabbix_agent

[root@k8s-node1 etc]# netstat -ntlup | grep 10050
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      478193/zabbix_agent 
tcp6       0      0 :::10050                :::*                    LISTEN      478193/zabbix_agent 

5.4 配置zabbix-server 添加客户端监控

登录zabbix-server 控制台/数据采集/主机/右上角,创建主机

image-20240630005106815

  • 填写主机名称,【注意必须和zabbix-agent.conf 中的Hostname 保持一致】
  • 添加模板,勾选 Linux by Zabbix agent
  • 主机群组,Linux servers 【也可以自己创建主机群组】
  • 添加接口,类型为Agent,填写zabbix-agent 客户端IP,端口

image-20240630010024138

等看到zabbix 可用性,变成绿色 就表示,已经成功添加zabbix-agent

image-20240630010107722

查看最新数据, 监测/最新数据

image-20240630011451105

六、总结

关于使用容器化的方式部署zabbix-server ,采用宿主机网络的问题

当部署zabbix-server 的时候,单独创建一个容器网络bridge,zabbix-server 那台主机的zabbix-agent【注意说是zabbix-server 本机】 想要和zabbix-server 通讯的时候,zabbix-agent 的配置文件中的 ServerServerActive 配置成宿主机的IP,发现zabbix-agent 日志一直在报错,提示 需要连接zabbix-server 的容器IP,比如 10.114.0.2 ; 当然也可以解决,直接写成容器IP也行,但是我们不能保证容器内的IP不发生变化; 为了解决这个问题,我直接采用了宿主机的通讯方式,在端口不冲突的情况下,完成agent和server 的通讯。

openeuler 系统上,使用zabbix 官网的RPM 包不兼容问题

还是手动编译安装吧,zabbix 没有去做设配openeuler 的RPM包,当然您也可以编译贡献RPM 包给社区,哈哈

此文章,讲的是如何快速部署一套zabbix环境

抛开我们以往的传统部署方式,安装前端环境,apache或者nginx,再去安装数据库,mysql 或者 pg;再就是php 环境,一套部署下来也需要不少精力和时间,只能说容器真的太方便了