目录
- Zabbix Proxy+Grafana可视化+Elasticsearch日志栈全流程实操复盘
-
- 一、实验环境主机清单
- 二、Zabbix Proxy部署与客户端接入
-
- 2.1 软件源配置与Proxy组件安装
- 2.2 数据库初始化与Proxy配置
- 2.3 Server端JavaGateway配置
- 2.4 客户端主机接入配置
- 三、Grafana部署与Zabbix可视化对接
-
- 3.1 Grafana安装与服务启动
- 3.2 Zabbix插件安装与启用
- 3.3 Zabbix数据源配置
- 3.4 监控面板效果验证
- 四、Elasticsearch基础部署与系统调优
-
- 4.1 核心配置与系统参数调整
- 4.2 服务启动与基础验证
- 五、Docker部署与Cerebro集群管理
-
- 5.1 Docker环境安装
- 5.2 Cerebro容器部署
- 5.3 集群接入与状态查看
- 六、Elasticsearch集群角色划分
-
- 6.1 节点角色配置
- 6.2 角色调整验证
- 七、Logstash基础日志采集验证
-
- 7.1 基础管道配置
- 7.2 启动与输出测试
- 八、elasticsearch-head前端插件部署
-
- 8.1 插件部署与启动
- 8.2 跨域配置与连通验证
- 踩坑汇总与实操总结
-
-
- 核心踩坑点汇总
- 实操心得
-
Zabbix Proxy+Grafana可视化+Elasticsearch日志栈全流程实操复盘
一、实验环境主机清单
本次实操覆盖监控与日志两大技术栈,涉及多台虚拟机节点,各节点IP与核心角色整理如下:
| server1 | 192.168.48.162 | Zabbix Server、Zabbix JavaGateway、Grafana服务端 |
| server4 | – | Zabbix Proxy代理节点、MySQL数据库 |
| server2 | 192.168.48.163 | Zabbix Agent客户端(Proxy代理模式) |
| server3 | 192.168.48.165 | Zabbix Agent + JMX监控客户端 |
| server1 | 192.168.48.136 | Elasticsearch集群Master节点 |
| server2 | 192.168.48.137 | Elasticsearch集群数据节点 |
| server4 | 192.168.48.138 | Elasticsearch集群数据节点 |
| server5 | 192.168.48.139 | Docker宿主机、Cerebro管理工具、elasticsearch-head插件 |
| server6 | 192.168.48.139 | Logstash日志采集节点 |
说明:监控与日志体系为两套独立实验环境,部分主机名复用,操作时注意对应网段。
二、Zabbix Proxy部署与客户端接入
2.1 软件源配置与Proxy组件安装
首先在server4节点部署Zabbix Proxy,先配置官方6.0版本的yum源。直接通过rpm命令安装源发布包,再清理缓存安装Proxy相关组件:
# 安装Zabbix 6.0官方软件源
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-6.0-4.el9.noarch.rpm
# 清理DNF缓存
dnf clean all
# 安装MySQL版Proxy、SQL脚本及MySQL服务
dnf install -y zabbix-proxy-mysql zabbix-sql-scripts mysql-server

2.2 数据库初始化与Proxy配置
安装完成后先启动MySQL服务,创建zabbix_proxy数据库并授权用户,然后导入Zabbix提供的初始SQL脚本。
数据库准备好之后,修改Proxy主配置文件,填写数据库地址、库名、账号密码,以及Zabbix Server的地址和Proxy自身主机名,确保Proxy能主动和Server建立通信。

2.3 Server端JavaGateway配置
因为后续要支持JMX类型的监控,需要在Zabbix Server端开启Java网关支持。先调整Java轮询进程的数量,默认是0,改成5个足够日常使用:
StartJavaPollers=5
然后指定JavaGateway的部署地址,这里JavaGateway和Server同机部署在server1,IP为192.168.48.162:
JavaGateway=192.168.48.162
修改完配置重启Zabbix Server服务,配置即可生效。
2.4 客户端主机接入配置
接下来在Zabbix Web页面添加被监控主机,第一台是server2,走Proxy代理模式:
- 主机群组加入Discovered hosts和Linux servers
- Agent接口填写192.168.48.163,端口10050
- 监测方式选择“由Proxy代理程序监测”,选择对应Proxy实例

第二台主机需要同时监控系统指标和JMX应用,因此添加两个接口:
- Agent接口:192.168.48.165,端口10050
- JMX接口:192.168.48.165,端口8888 同样配置为Proxy代理监测,完成后点击更新。

三、Grafana部署与Zabbix可视化对接
Zabbix自带的图表功能比较基础,做汇报和大盘展示不够直观,接下来用Grafana做可视化展示。
3.1 Grafana安装与服务启动
在server1节点通过rpm包安装Grafana企业版:
# 安装Grafana
rpm -ivh grafana-enterprise_12.4.8_31135008312_Linux_amd64.rpm
# 设置开机自启并立即启动
systemctl enable –now grafana-server
安装时同样会有签名NOKEY的提示,属于正常现象。启动后用netstat查看3000端口监听状态,确认服务正常运行。

浏览器访问http://192.168.48.162:3000进入登录页,默认账号密码都是admin。 
3.2 Zabbix插件安装与启用
Grafana原生不支持Zabbix数据源,需要手动安装第三方插件。将插件包解压到Grafana的插件目录下:
cd /var/lib/grafana/plugins
unzip alexanderzobnin-zabbix-app-6.6.0.linux-amd64.zip

这里有个很容易踩的坑:解压后的插件目录属主还是root,Grafana进程没有读取权限,会加载失败。必须修改目录属主为grafana用户,再重启服务:
chown -R grafana:grafana /var/lib/grafana/plugins/
systemctl restart grafana-server
systemctl status grafana-server

重启后在Grafana插件管理页就能看到Zabbix插件,版本为6.6.0,点击启用即可。

3.3 Zabbix数据源配置
启用插件后添加新数据源,类型选择Zabbix。核心配置两部分:

下方还有TLS和高级HTTP设置,如果用的是自签证书或者测试环境,可以勾选跳过TLS证书验证,避免握手失败。 
所有参数填写完成后点击保存并测试,提示连接成功就说明数据源打通了。

3.4 监控面板效果验证
数据源对接完成后,新建一个面板测试数据拉取。这里选择Linux服务器组的可用内存百分比指标,分别展示server2和server3的数据,能正常出曲线和数值就说明整个链路正常。
查询配置选择Metrics类型,Group指定Linux servers,Item选择对应的内存监控项,即可自动匹配数据。

四、Elasticsearch基础部署与系统调优
接下来进入日志栈部分,先完成Elasticsearch的基础部署和系统参数调优,保证服务稳定运行。
4.1 核心配置与系统参数调整
首先配置主机名解析
软件安装
rpm -ivh elasticsearch-7.6.1-x86_64.rpm
修改ES主配置文件elasticsearch.yml,先统一集群名称,所有节点必须保持一致才能组成集群:
vim /etc/elasticsearch/elasticsearch.yml
cluster.name: my–es

继续配置节点名称、网络监听地址、集群发现列表等基础参数,每个节点对应修改自己的节点名和IP。 
ES对系统资源限制要求较高,默认参数会导致启动失败,需要调整两处系统配置。 第一处是/etc/security/limits.conf,添加ES用户的资源限制:
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
elasticsearch soft nofile 65535
elasticsearch hard nofile 65535
elasticsearch soft nproc 4096
elasticsearch hard nproc 4096

第二处是修改ES的systemd服务文件,添加内存锁、文件句柄、进程数限制,确保系统层面配置生效:
vim /usr/lib/systemd/system/elasticsearch.service
LimitMEMLOCK=infinity
LimitNOFILE=65535
LimitNPROC=4096

systemctl daemon-reload
swapoff -a
vim /etc/fstab

systemctl daemon-reload
systemctl enable –now elasticsearch
4.2 服务启动与基础验证
所有节点配置完成后依次启动ES服务。启动后在server1节点通过curl访问本地9200端口,验证服务是否正常运行:
curl localhost:9200
返回集群名称、版本号、Lucene版本等信息,就说明单节点启动成功。
server1配置好后,直接把配置复制到server2和server4
#配置ssh免密
ssh-keygen
ssh-copy-id server2
ssh-copy-id server4
#复制软件
scp elasticsearch-7.6.1-x86_64.rpm server2:
scp elasticsearch-7.6.1-x86_64.rpm server4:
#server2和server4软件安装
rpm -ivh elasticsearch-7.6.1-x86_64.rpm
rpm -ivh elasticsearch-7.6.1-x86_64.rpm
#从server1复制配置
cd /etc/elasticsearch/
scp elasticsearch.yml server2:/etc/elasticsearch/
scp elasticsearch.yml server4:/etc/elasticsearch/
scp /etc/security/limits.conf server2:/etc/security/
scp /etc/security/limits.conf server4:/etc/security/
scp /usr/lib/systemd/system/elasticsearch.service server2:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/elasticsearch.service server4:/usr/lib/systemd/system/
server2 server4上启动服务
swapoff -a
vim /etc/fstab
#/dev/mapper/rhel-swap swap swap defaults 0 0
systemctl daemon-reload
systemctl enable –now elasticsearch
五、Docker部署与Cerebro集群管理
ES原生没有Web管理界面,用命令行看集群状态不够直观,这里部署Cerebro工具做可视化管理,基于Docker部署非常方便。
5.1 Docker环境安装
先在server5节点配置Docker的阿里云yum源,提升下载速度:
yum-config-manager –add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装完成后启动Docker服务并设置开机自启,用docker info验证安装状态。 
5.2 Cerebro容器部署
这里用本地镜像包加载的方式部署Cerebro,不用联网拉取镜像:
# 加载本地镜像
docker load -i cerebro.tar
# 启动容器,映射9000端口
docker run -d –name cerebro -p 9000:9000 lmenezes/cerebro
启动后查看9000端口监听状态,确认容器正常运行。


5.3 集群接入与状态查看
浏览器访问http://192.168.48.139:9000进入Cerebro登录页,在Node address处填写ES集群任意节点的地址,比如http://192.168.48.136:9200,点击Connect连接。 
连接成功后进入集群概览页,可以看到集群状态为green,共3个节点,0个索引,整体状态健康。 
切换到nodes页面,可以看到每个节点的详细指标:CPU使用率、堆内存使用、磁盘占用、运行时长等,比命令行直观很多。 
六、Elasticsearch集群角色划分
默认ES节点同时承担多种角色,生产环境通常会做角色分离,提升集群稳定性。
6.1 节点角色配置
这里我们先把server1设置为专用Master节点,不存储数据,只负责集群管理:
vim /etc/elasticsearch/elasticsearch.yml
node.master: true
node.data: false
node.ingest: true
node.ml: false

修改配置后重启对应节点,集群会自动感知节点角色变化,出现节点离开和加入的提示,属于正常现象。 
6.2 角色调整验证
重启完成后回到Cerebro的nodes页面,可以看到节点角色标签已经更新:server1带有master和ingest标签,不带data标签;另外两个节点保留data角色,说明角色划分生效。 

七、Logstash基础日志采集验证
Logstash是ELK栈里的日志采集组件,这里做一个最基础的输入输出测试,验证从标准输入写入、输出到ES的链路。
7.1 基础管道配置
编写最简单的Logstash管道配置文件,输入用标准输入,输出到Elasticsearch: 
input {
stdin {}
}
output {
stdout {}
elasticsearch {
hosts => "192.168.48.136:9200"
index => "logstash-%{+YYYY.MM.dd}"
}
}
7.2 启动与输出测试
指定配置文件启动Logstash,启动成功后会看到API端口9600监听的日志: 
在控制台依次输入helloworld、centos linux、redhat linux,可以看到日志被结构化处理,添加了@timestamp、host等字段,同时同步写入ES集群。 
八、elasticsearch-head前端插件部署
除了Cerebro,elasticsearch-head也是常用的ES可视化插件,更侧重索引和数据的浏览操作。
yum install -y bzip2
tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd phantomjs-2.1.1-linux-x86_64
cp bin/phantomjs /usr/local/bin/
yum install -y fontconfig
phantomjs
# 安装插件
rpm -ivh nodejs-9.11.2-1nodesource.x86_64.rpm
yum install -y unzip
unzip elasticsearch-head-master.zip
cd elasticsearch-head-master/
npm install –registry=https://registry.npmmirror.com/

8.1 插件部署与启动
elasticsearch-head是前端项目,需要Node.js环境运行。先修改插件的配置文件,指定ES集群的访问地址:
vim /elasticsearch-head-master/_site/app.js
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.48.136:9200";

配置完成后用npm启动服务,后台运行:
npm run start &
启动后查看9100端口监听状态,确认服务正常运行。
8.2 跨域配置与连通验证
直接访问head插件会出现跨域报错,因为浏览器前端请求ES接口受同源策略限制。需要在ES的配置文件中开启跨域支持:
vim /etc/elasticsearch/elasticsearch.yml
重启ES服务后,刷新head插件页面,就能正常连接集群了。可以看到集群状态为green,已经生成了logstash和ilm-history两个索引,数据正常写入。 
踩坑汇总与实操总结
核心踩坑点汇总
实操心得
这次实操把Zabbix分布式监控和ELK日志栈的基础部署完整串了一遍,整体下来最大的感受是:运维部署的细节决定成败,很多看似不起眼的权限、资源限制、跨域配置,恰恰是最容易踩坑的地方。
Proxy模式很好地解决了分布式、跨网段的监控需求,Grafana则大幅提升了监控数据的展示效果;而ES集群角色分离、多套可视化工具的搭配,也让日志平台的运维和排查更清晰可控。后续还可以继续深入告警规则配置、日志结构化解析、索引生命周期管理这些内容,把整个监控和日志体系做得更完善、更贴合生产场景。







