【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
背景
本项目原始为客户甲方项目,但是预算太有限40000元但是已经签约开发了,导致优雅草不得不继续完成开发来建立自营版本,本身优雅草在服务器众多的情况下也需要一个管理软件,其次优雅草后续是有可能自己建服务器并且自主维护的,因此本项目是有必要的
基于开源产品介绍
Zabbix 是一个开源的企业级分布式监控解决方案,以下是其主要的技术栈构成:
编程语言
- C 语言:Zabbix 的核心程序主要使用 C 语言编写。C 语言具有高效、快速的特点,能够保证 Zabbix 在处理大量监控数据和高并发请求时具备良好的性能和稳定性,确保监控系统可以实时、准确地收集和处理各种监控指标。
- PHP:Zabbix 的 Web 前端部分采用 PHP 语言开发。PHP 是一种广泛应用于 Web 开发的脚本语言,具有简单易学、开发效率高的优点,能方便地与数据库进行交互,实现监控数据的可视化展示和用户交互界面,方便用户进行配置管理、查看监控报表等操作。
数据库
- MySQL:MySQL 是 Zabbix 最常用的数据库,它是一种开源的关系型数据库管理系统,具有高性能、可靠性强、易于管理等特点。Zabbix 使用 MySQL 来存储监控数据、配置信息、历史数据等,能够满足大规模监控数据的存储和查询需求。
- PostgreSQL:PostgreSQL 也是 Zabbix 支持的数据库之一,它是一个功能强大的开源关系型数据库,具有高度的可扩展性和数据完整性,提供了丰富的数据类型和高级功能,适合处理复杂的查询和事务,在一些对数据安全性和完整性要求较高的场景中应用较多。
通信协议
- SNMP:简单网络管理协议(SNMP)是 Zabbix 常用的监控协议之一,用于监控网络设备(如路由器、交换机等)的状态和性能指标。通过 SNMP,Zabbix 可以获取设备的接口流量、CPU 利用率、内存使用情况等信息。
- IPMI:智能平台管理接口(IPMI)协议允许 Zabbix 监控服务器硬件的健康状态,如温度、电压、风扇转速等。即使服务器操作系统出现故障,也能通过 IPMI 获取硬件层面的信息,实现对服务器硬件的实时监控和预警。
- JMX:Java 管理扩展(JMX)协议用于监控 Java 应用程序。Zabbix 可以通过 JMX 获取 Java 应用的各种性能指标,如堆内存使用情况、线程数量、垃圾回收统计信息等,帮助管理员及时发现和解决 Java 应用的性能问题。
操作系统
- Linux:Zabbix 服务器和代理通常部署在 Linux 操作系统上,如 CentOS、Ubuntu 等。Linux 具有开源、稳定、安全等优点,并且提供了丰富的命令行工具和系统管理功能,便于进行 Zabbix 的安装、配置和维护。
- Windows:虽然 Zabbix 主要在 Linux 环境下运行,但也支持在 Windows 操作系统上部署代理,用于监控 Windows 服务器和应用程序。用户可以在 Windows 系统上安装 Zabbix 代理程序,将监控数据发送到 Zabbix 服务器进行集中处理。
项目实战
环境要求
硬件环境
- 服务器
- CPU:对于小型部署环境,例如监控几十到几百台设备,建议至少配备 2 核 CPU。如果是中型规模,监控数百到数千台设备,4 核至 8 核的 CPU 较为合适。大型企业级应用,监控数千台以上设备时,则可能需要 8 核及以上的 CPU,以确保 Zabbix 能够及时处理大量的监控数据和并发请求。
- 内存:小型部署一般需要 4GB 以上内存。中型部署建议 8GB - 16GB 内存。大型部署可能需要 16GB 甚至更高的内存,以保障系统的稳定运行,避免因内存不足导致性能下降或数据丢失。
- 存储:存储容量取决于监控数据的保留时间和采集频率等因素。一般来说,初始安装至少需要 10GB 的可用空间。若要长期保留数据,如一年以上,且监控数据量较大时,可能需要数百 GB 甚至数 TB 的存储空间。
- 网络
- 带宽:Zabbix 服务器与被监控设备之间需要稳定的网络连接,带宽需求取决于监控数据的传输量。对于一般的监控场景,100Mbps 的网络带宽通常可以满足需求,但如果涉及大量图像、视频等数据的传输,或者监控设备数量众多、数据采集频率高,则可能需要 1000Mbps 及以上的带宽。
- 网络延迟:为了保证监控数据的及时传输和处理,网络延迟应尽量低,一般建议控制在 50ms 以内,以确保 Zabbix 能够实时反映被监控设备的状态变化。
软件环境
- 操作系统
- Linux:Zabbix 对多种 Linux 发行版都有很好的支持,如 CentOS、Ubuntu、Debian 等。以 CentOS 为例,CentOS 7 及以上版本是较为推荐的,因为它们具有更稳定的内核和更丰富的软件包管理功能。
- UNIX:包括 FreeBSD、OpenBSD 等 UNIX 系统也可作为 Zabbix 的运行平台,适用于对系统安全性和稳定性有较高要求的用户。
- 数据库
- MySQL:MySQL 是 Zabbix 常用的数据库,5.7 版本及以上能够很好地与 Zabbix 配合,提供高效的数据存储和查询功能。
- PostgreSQL:也是 Zabbix 支持的数据库之一,9.6 版本及以上在处理大规模数据和复杂查询时表现出色,适合对数据一致性和事务处理要求较高的场景。
- Web 服务器
- Apache:Apache 是一款广泛使用的 Web 服务器,2.4 版本及以上与 Zabbix 兼容性良好,能够稳定地提供 Web 服务,支持 Zabbix 的 Web 界面访问。
- Nginx:Nginx 以其高性能和低资源占用著称,1.12 版本及以上常被用于部署 Zabbix 的 Web 界面,特别是在高并发访问的情况下,能有效提高系统的响应速度。
- 其他软件
- PHP:Zabbix 的 Web 界面基于 PHP 开发,需要 PHP 7.2 及以上版本,并需要安装相关的扩展,如
php-mysql
、php-gd
、php-xml
等,以确保 Zabbix Web 功能的正常运行。
搭建实战步骤
我们选择腾讯云,以腾讯云为例,其他云计算服务商同理,我们选定 docker ce 镜像,省去了很多事情,docker ce 开始我都不明白什么意思,后来看了才知道就是docker镜像,默认搭配Linux centos -_-||!!!
注意看介绍,简直一天一个新概念,我们一定要选择带docker的省去了安装docker,自从RAV容器概念开始市场化,云计算越来越强了
选择ssh 创建密码, 所有连接方式只有ssh 最安全,并且不被保留,遗失找不回,谨慎保管,
对应地区创建,创建好,登录,默认用户名root 这些就不用讲了, 用ssh终端打开 并且连接
我这里用的xterminal
安装 Zabbix
- 创建一个用于存放 Zabbix 配置文件和数据的目录,例如:
sudo mkdir -p /opt/zabbix/data /opt/zabbix/config
- 更改目录权限,确保 Docker 容器可以访问这些目录,执行命令:
sudo chmod -R 777 /opt/zabbix
- 拉取 Zabbix 镜像,可拉取官方镜像或根据需求选择合适的镜像源,执行命令:
docker pull zabbix/zabbix-server-mysql:latest
和docker pull zabbix/zabbix-web-nginx-mysql:latest
- 拉取 MySQL 镜像,执行命令:
docker pull mysql:8.0
- 创建并启动 MySQL 容器,执行命令:
docker run -d \ --name zabbix-mysql \ -e MYSQL_DATABASE=zabbix \ -e MYSQL_USER=zabbix \ -e MYSQL_PASSWORD=zabbix_password \ -e MYSQL_ROOT_PASSWORD=root_password \ -v /opt/zabbix/data/mysql:/var/lib/mysql \ mysql:8.0
将zabbix_password和root_password替换为实际的密码。
好方便,都是批量按顺序来执行命令,现在的技术越来越方便了,我这里本着测试就暂时用测试的即可。
完成准备工作,创建并启动 Zabbix Server 容器,执行命令:
docker run -d \ --name zabbix-server \ --link zabbix-mysql:mysql \ -e DB_SERVER_HOST=mysql \ -e MYSQL_DATABASE=zabbix \ -e MYSQL_USER=zabbix \ -e MYSQL_PASSWORD=zabbix_password \ -v /opt/zabbix/data:/var/lib/zabbix \ -v /opt/zabbix/config:/etc/zabbix \ -p 10051:10051 \ zabbix/zabbix-server-mysql:latest
继续成功,
记得放行10051默认端口,这是zabbix默认端口
创建并启动 Zabbix Web 容器,执行命令:
docker run -d \ --name zabbix-web \ --link zabbix-server:zabbix-server \ --link zabbix-mysql:mysql \ -e ZBX_SERVER_HOST=zabbix-server \ -e DB_SERVER_HOST=mysql \ -e MYSQL_DATABASE=zabbix \ -e MYSQL_USER=zabbix \ -e MYSQL_PASSWORD=zabbix_password \ -p 80:80 \ zabbix/zabbix-web-nginx-mysql:latest
再执行:
docker run -d \ --name zabbix-server \ -e DB_SERVER_HOST=<mysql_host> \ -e MYSQL_DATABASE=<db_name> \ -e MYSQL_USER=<db_user> \ -e MYSQL_PASSWORD=<db_password> \ -e ZBX_SERVER_HOST=<zabbix_server_host> \ -p 10051:10051 \ --link <mysql_container_name>:mysql \ zabbix/zabbix-server-mysql:latest
以上值要替换为真实值。
-d
:表示以守护进程(detached)模式在后台运行容器。--name zabbix-server
:为容器指定一个名称为zabbix-server
。-e
:用于设置环境变量,这里分别设置了连接 MySQL 数据库所需的主机地址、数据库名称、用户名、密码,以及 Zabbix Server 主机地址等信息。<mysql_host>
应替换为 MySQL 服务器的实际地址,可以是容器名称、容器 ID 或 IP 地址;<db_name>
、<db_user>
、<db_password>
分别替换为实际的数据库名称、用户名和密码;<zabbix_server_host>
通常可以设置为localhost
或 Zabbix Server 所在主机的 IP 地址。-p 10051:10051
:将容器内的 Zabbix Server 服务端口 10051 映射到宿主机的 10051 端口,这样外部可以通过宿主机的 10051 端口访问 Zabbix Server 服务。--link <mysql_container_name>:mysql
:将 Zabbix Server 容器与 MySQL 容器建立链接,<mysql_container_name>
应替换为实际的 MySQL 容器名称。
执行后报错,我们发现一个问题,母亲链接方式 是—link 我们要改成自定义网络
—link 选项在较新的 Docker 版本中已不推荐使用,它逐渐被用户自定义网络所取代。使用自定义网络不仅更加灵活,而且网络配置更易于管理和维护。
以下给出更加严格的安装部署方式,并且我已经把示范中的数据替换为我自己确定要创建的数据。
1. 创建自定义网络
首先,创建一个自定义的 Docker 网络,用于 Zabbix 各组件之间的通信。
docker network create zabbix-net
2. 启动 MySQL 容器
创建并启动 MySQL 容器,设置数据库相关信息。
docker run -d \ --name zabbix-mysql \ --network zabbix-net \ -e MYSQL_DATABASE=zabbix \ -e MYSQL_USER=network \ -e MYSQL_PASSWORD=network446657 \ -e MYSQL_ROOT_PASSWORD=network446657 \ -v /data/mysql:/var/lib/mysql \ -p 3306:3306 \ mysql:8.0
在上述命令中:
-d
:表示容器在后台以守护进程方式运行。--name zabbix-mysql
:指定容器名称为zabbix-mysql
。--network zabbix-net
:将容器连接到名为zabbix-net
的自定义网络。-e
开头的参数设置了 MySQL 的环境变量,包括数据库名、普通用户及密码、root 用户密码。-v /data/mysql:/var/lib/mysql
:将宿主机的/data/mysql
目录挂载到容器内的/var/lib/mysql
目录,用于数据持久化。-p 3306:3306
:将容器的 3306 端口映射到宿主机的 3306 端口。
3. 启动 Zabbix Server 容器
docker run -d \ --name zabbix-server \ --network zabbix-net \ -e DB_SERVER_HOST=zabbix-mysql \ -e MYSQL_DATABASE=zabbix \ -e MYSQL_USER=network \ -e MYSQL_PASSWORD=network446657 \ -e ZBX_SERVER_HOST=network.youyacao.com \ -v /data/zabbix/server:/var/lib/zabbix \ -p 10051:10051 \ zabbix/zabbix-server-mysql:latest
此命令中:
- 各项参数含义与 MySQL 容器类似,
--network zabbix-net
连接到自定义网络。 -e ZBX_SERVER_HOST=network.youyacao.com
设置 Zabbix Server 的主机地址为指定网址。
4. 启动 Zabbix Web 容器
docker run -d \ --name zabbix-web \ --network zabbix-net \ -e ZBX_SERVER_HOST=zabbix-server \ -e DB_SERVER_HOST=zabbix-mysql \ -e MYSQL_DATABASE=zabbix \ -e MYSQL_USER=network \ -e MYSQL_PASSWORD=network446657 \ -p 80:8080 \ zabbix/zabbix-web-nginx-mysql:latest
该命令启动 Zabbix Web 容器:
--network zabbix-net
连接到自定义网络。-e
参数设置了 Zabbix Web 连接 Zabbix Server 和 MySQL 数据库的相关信息。-p 80:8080
将容器内的 8080 端口映射到宿主机的 80 端口,以便通过network.youyacao.com
访问 Zabbix Web 界面(需确保宿主机 80 端口未被占用且域名已正确解析到宿主机 IP)。
5. 配置域名解析
确保network.youyacao.com
域名正确解析到运行 Zabbix 的服务器 IP 地址。这通常需要在域名注册商的 DNS 管理界面进行设置,添加一条 A 记录,将network.youyacao.com
指向服务器的公网 IP 地址。
6. 验证安装
使用docker ps
命令查看所有容器是否正常运行:
docker ps
如果所有容器状态均为Up
,表示安装成功。通过浏览器访问http://network.youyacao.com
,应该能看到 Zabbix 的登录界面,默认用户名Admin
,密码zabbix
。登录后即可开始使用 Zabbix 进行监控配置。
查看状态没有问题,
能访问,但是数据库有点问题,稍微调整和检查下防火墙之类的东西,不过以上关于docker安装到此结束。
以上内容是用docker容器安装方式的,但是我们要做的不是用docker,我要传统安装方式,
docker优缺点:
优点:适合面向使用者,简单方便,操作
缺点:不利于二次开发,维护,最重要是开发和升级,docker镜像是一键式交付,不同的版本做不同的镜像,因此是面向使用者。
下一篇,篇幅【02】我们将采取传统安装方式。