Zabbix

Zabbix版本及下载

Zabbix server 5.0 (tags: alpine-5.0-latest, ubuntu-5.0-latest, ol-5.0-latest)
Zabbix server 5.0.* (tags: alpine-5.0.*, ubuntu-5.0.*, ol-5.0.*)
Zabbix server 6.0 (tags: alpine-6.0-latest, ubuntu-6.0-latest, ol-6.0-latest)
Zabbix server 6.0.* (tags: alpine-6.0.*, ubuntu-6.0.*, ol-6.0.*)
Zabbix server 6.4 (tags: alpine-6.4-latest, ubuntu-6.4-latest, ol-6.4-latest)
Zabbix server 6.4.* (tags: alpine-6.4.*, ubuntu-6.4.*, ol-6.4.*)
Zabbix server 7.0 (tags: alpine-7.0-latest, ubuntu-7.0-latest, ol-7.0-latest, alpine-latest, ubuntu-latest, ol-latest, latest)
Zabbix server 7.0.* (tags: alpine-7.0.*, ubuntu-7.0.*, ol-7.0.*)
Zabbix server 7.2 (tags: alpine-trunk, ubuntu-trunk, ol-trunk)
ZABBIX_AGENT_IMAGE=zabbix/zabbix-agent
ZABBIX_AGENT2_IMAGE=zabbix/zabbix-agent2
ZABBIX_JAVA_GATEWAY_IMAGE=zabbix/zabbix-java-gateway
ZABBIX_SNMPTRAPS_IMAGE=zabbix/zabbix-snmptraps
ZABBIX_WEB_SERVICE_IMAGE=zabbix/zabbix-web-service

docker pull zabbix/zabbix-server-mysql:alpine-7.0-latest
docker pull zabbix/zabbix-web-nginx-mysql:alpine-7.0-latest
docker pull zabbix/zabbix-web-service:alpine-7.0-latest
docker pull zabbix/zabbix-snmptraps:alpine-7.0-latest

docker run --name some-zabbix-server-mysql 
-e DB_SERVER_HOST="some-mysql-server" \
-e MYSQL_USER="some-user" \
-e MYSQL_PASSWORD="some-password" \
--init -d \
zabbix/zabbix-server-mysql:alpine-6.4-latest

docker相关

no 默认策略,在容器退出时不重启容器
on-failure 在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3 指定启动的次数,在容器非正常退出时重启容器,最多重启3次
always 在容器退出时总是重启容器
unless-stopped 在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
# 一直下载失败
#curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

pip3 download docker-compose

在Ubuntu 24.04上用apt安装python3-pip,运行时提示与系统组件可能有冲突,之后用apt remove,并把python3也remove了,之后重启系统网络就无法工作,网卡一直为down状态,systemd-networkd-wait-online.service报timeout。

最终只能从github上直接下载新版本,解压到/usr/local/bin目录下就可以使用(6xMB的包,已经打包为执行文件。,自带了python支持)。

直接docker run

https://www.zabbix.com/documentation/6.4/zh/manual/installation/containers

初次运行zabbix-server,会自动从create.sql.gz(4.1MB,160万行)中导入初始化数据到mysql中,需要几分钟时间,这期间访问zabbix-web会提示没有可选配置。导入完成后才会启动服务进程,以及网络端口侦听,这时再去启动zabbix-web容器。

进入zabbix-server容器,可以看到初始化的进程:

PID   USER     TIME  COMMAND
    1 zabbix    0:00 {docker-entrypoi} /bin/bash /usr/bin/docker-entrypoint.sh /usr/sbin/zabbix_serve
   22 zabbix    0:00 gzip -cd /usr/share/doc/zabbix-server-mysql/create.sql.gz
   23 zabbix    0:07 mysql --silent --skip-column-names --default-character-set=utf8mb4 -h mysql-serv
   24 zabbix    0:00 /bin/bash
   44 zabbix    0:00 ps aux

安装zabbix-agent

在被监控主机安装zabbix-agent。

docker-compose方式

https://github.com/zabbix/zabbix-docker 下载docker-compose配置,根据需要项调整。

docker-compose/
├── .env                                                        # 环境参数,指定数据目录、运行版本信息
├── .env.def                                                    # 备份默认配置
├── compose.yaml -> docker-compose_v3_alpine_mysql_latest.yaml  # ln到主文件
├── compose_databases.yaml                                      # 数据库配置
├── compose_zabbix_components.yaml                              # zabbix组件定义文件
├── docker-compose_v3_alpine_mysql_latest.yaml                  # 主compose文件
└── env_vars                                                    # 容器环境参数、密码配置
    ├── .MYSQL_PASSWORD
    ├── .MYSQL_ROOT_PASSWORD
    ├── .MYSQL_ROOT_USER
    ├── .MYSQL_USER
    ├── .POSTGRES_PASSWORD
    ├── .POSTGRES_USER
    ├── .env_agent
    ├── .env_db_mysql
    ├── .env_db_mysql_proxy
    ├── .env_db_pgsql
    ├── .env_java
    ├── .env_prx
    ├── .env_prx_mysql
    ├── .env_prx_sqlite3
    ├── .env_snmptraps
    ├── .env_srv
    ├── .env_web
    ├── .env_web_service
    ├── chrome_dp.json
    └── mysql_init
        └── init_proxy_db.sql
docker-compose up -d

[+] Running 7/7
 ✔ Network docker-compose_database                    Creat...                                   0.1s
 ✔ Network docker-compose_backend                     Create...                                  0.1s
 ✔ Network docker-compose_frontend                    Creat...                                   0.2s
 ✔ Network docker-compose_tools_frontend              Created                                    0.2s

 ✔ Container docker-compose-mysql-server-1            Started                                    0.7s
 ✔ Container docker-compose-zabbix-web-nginx-mysql-1  Started                                    1.9s
 ✔ Container docker-compose-zabbix-server-1           Started                                    2.5s

docker-compose ps
NAME                                      IMAGE                                             COMMAND                  SERVICE                  CREATED          STATUS                    PORTS
docker-compose-mysql-server-1             mysql:8.0                                         "docker-entrypoint.s…"   mysql-server             37 seconds ago   Up 36 seconds
docker-compose-zabbix-server-1            zabbix/zabbix-server-mysql:alpine-7.0-latest      "/usr/bin/docker-ent…"   zabbix-server            36 seconds ago   Up 35 seconds             0.0.0.0:20051->10051/tcp
docker-compose-zabbix-web-nginx-mysql-1   zabbix/zabbix-web-nginx-mysql:alpine-7.0-latest   "docker-entrypoint.sh"   zabbix-web-nginx-mysql   36 seconds ago   Up 35 seconds (healthy)   0.0.0.0:20080->8080/tcp, 0.0.0.0:20443->8443/tcp

docker-compose images
CONTAINER                                 REPOSITORY                      TAG                 IMAGE ID            SIZE
docker-compose-mysql-server-1             mysql                           8.0                 9f4b39935f20        590MB
docker-compose-zabbix-server-1            zabbix/zabbix-server-mysql      alpine-7.0-latest   aa80bfaed00e        138MB
docker-compose-zabbix-web-nginx-mysql-1   zabbix/zabbix-web-nginx-mysql   alpine-7.0-latest   7e5d8d917c40        300MB

Zabbix Web监测

在Web监测方面,Zabbix提供了一套完整的监控功能,可以检查网站的可用性、性能和正确性。

在Zabbix中,要进行Web监控,首先需要定义一个Web场景。Web场景由一个或多个HTTP请求组成,这些请求称为步骤。

Zabbix服务器会按照预设的顺序执行这些步骤,如果监控任务由代理执行,则步骤由代理执行。

Web场景可以应用于主机或模板,这意味着可以在模板级别创建Web场景,然后一次性应用于多个主机。

在Zabbix界面中,选择配置->主机->选择主机->单击Web监测->创建Web监测。

在场景选项卡中添加名称和应用集,然后在步骤选项卡中添加监控页面。

在步骤选项卡中,单击添加按钮,依次添加名称、URL、超时时间等选项,然后单击添加。

每个步骤可以配置如下参数:

Zabbix会自动收集相关的Web检测数据,主要包括访问速度、响应时间、下载速度和状态码。用户可以在监控->Web检测中查看这些数据。此外,还可以配置触发器和动作来发送报警信息。

以下是一个实战案例,展示了如何使用Zabbix进行Web页面的监控和告警配置:

配置Web页面检测:选择一台能上外网的被监控主机,依次执行:配置->主机->Zabbix server->Web监测,然后创建Web场景和添加检测页面。

创建触发器:配置->主机->所选主机->触发器->创建触发器,填写名称和表达式,设置触发器条件。

Web监控数据展示:监控->Web检测,查看收集到的Web检测数据。

配置告警通知:配置Action等相关动作,来发送报警信息内容。

通过以上步骤,可以实现对Web页面的有效监控,及时发现并处理潜在的问题,确保网站的稳定运行。

zabbix数据量

趋势存储数据和历史存储数据详解:

案例:

100台服务器,每台服务器有30个监控项,每个监控项60秒刷新一次,需要多大的硬盘呢?

zabbix基本都是通过web配置,这些配置数据也是存放到数据库里的,但是它对硬盘容量的要求基本可以忽略不计,zabbix对硬盘的决定性因素有4个,如下:

这边的每秒只是一个平均值,例如我有3000个监控项,每60秒刷新一次,那么平均每秒有50(3000/60)个数据要处理。就是说每秒有50条数据要插入MySQL

zabbix对每个监控项的值都要记录下来,这些记录一般保留几周,具体看你的配置了。每个值都需要暂用硬盘空间。

假如一个数据你要保留30天,而且每秒有50个值要保留,那我们一共有129,600,000(30天*24小时*3600秒)*50个值,一条记录多大,由你的数据库引擎和你存储的数据类型来决定(浮点型,×××,字符型等等),一般来说一条记录需要占用50个字节(一个大概值),在这个案例中129,600,000个记录大约需要(129600000*50字节)6.5G的硬盘空间

简单来说:历史存储数据,每60秒刷新一次(具体看你配置),主要作用就是某一刻的数据,当前所有监控项的值以及触发报警值都是从历史存储数据里获取的,具有时效性,过了这一时刻,这些数据基本上就没有什么用了,所有我们可以把有效期设置的短一点

什么是趋势数据呢?当你查看一周或者一月的图表,图表上看到的MAX/MIN/AVG/COUNT都是取自趋势数据,趋势数据一小时获取一次,一般情况下,趋势数据一条记录大概占用128字节,如果我们想保存5年趋势数据,3000个监控线需要2.4GB(3000个*24小时*356天*128字节)每年,5年一共16.8G

报警、警告、恢复等等事情,一个事件大概占用130个字节,一般情况下不会太多,除非运维做的太糟糕,或者运维要求太严格,把阀值调的很低。假如这个运维今年本命年,既没拜佛有没烧香,更别说给服务器贴灵符,于是这一年每秒钟就有一个事件发生,那么事件这一年占用的数据空间为:1年*365天*24小时*3600秒*130字节大概为4.1G空间。

zabbix配置:固定大小,一般<10MB

历史数据:天数*(监控项总数/刷新频率)*24小时*3600秒*50字节

趋势数据:天数*(监控项总数/3600)*24小时*3600秒*128字节

事件数据:天数*事件个数(大概值)*24小时*3600秒*130字节

6. 谈心

看到这里,大家都心里有数据了,数据库硬盘空间=配置文件大小+历史记录+趋势记录+事件记录。虽然这个硬盘会不停的增长,但是总有一天会停止增长,空间一直保持不变,为什么?看完了这篇还问为什么的话,你从头再看一次。

Zabbix几个历史表

# zcat db_zabbix.20250428_145101.dump.gz |grep ^INSERT|awk '{print $3}'|sort|uniq -c|sort -nr
85369696 `history_uint`
34716360 `history`
7833537 `trends_uint`
3330258 `trends`

  56263 `event_tag`
  32465 `item_tag`
  32437 `valuemap_mapping`
  27446 `events`
  26330 `item_preproc`
  23725 `items`
  18353 `history_str`
  13569 `functions`
* history: 浮点历史数据表,与items表相关联。
* history_uint:长整型历史数据表,与items表相关联
* history_str: 字符串的历史数据表。
* history_text: 长文本历史数据表,支持255字符以上的文本,与items表相关联。

* history_log: 历史日志表,与items表相关联。

* trends:趋势表,浮点型,每个小时统计数
* trends_uint:趋势长整型表,每个小时,与items表相关联。

这几个历史表里面,通常最占用空间的是 history_uint 表,因为我们大多数的监控项的值都是整型。

假设我们的zabbix有1000个监控项目是整型的,每分钟采集一次,历史数据保留10天。那么这个表10天的数据量有 602410*1000=14400000 ,1440万行的数据。

很明显这个表太大了,实际情况下一个监控系统监控项目远超1000项,有些item的采集频率可能更高,数据量超过1亿行也很常见。

同理,trends_uint表的数据量也不会太小。按照上面的计算,该表10天的数据量大概为24万行。当然历史趋势数据我们通常会保留更久,默认会保留90天,也就是大概216万行。

所以,zabbix监控的性能瓶颈就是在于mysql。想办法把历史表的数据量降低,否则你的监控系统也需要大量的资源了。当然,你也可以考虑用promethues.