2、环境准备:虚拟机/服务器环境选择,操作系统(CentOS/Ubuntu),网络规划与防火墙配置

环境准备这事,看着基础,实际上踩过坑的人都知道——后面80%的排查时间都浪费在环境不一致上。我做ELK项目少说也有七八次了,最早那次直接在物理机上开干,结果后面要扩容加节点,迁移成本高得离谱。后来我学乖了,先花半天把环境底座敲定,后面就顺畅很多。

这一章咱们就把环境规划说明白。你跟着我的思路走一遍,能省下不少弯路。

选物理机还是虚拟机?

先别纠结Linux发行版,第一步是确定底层怎么跑。

  • 物理机:适合生产环境、IO密集型场景(比如Beats大量日志写入)。资源无虚拟化开销,但弹性差、备份迁移麻烦。
  • 虚拟机:适合实验、测试、灾备演练。快照、克隆、快挂磁盘,我习惯用Vagrant+VirtualBox或VMware Workstation。
  • 云主机(云厂商ECS):介于两者之间,弹性好但网络规划要提前想清楚。如果你在学这套教程,建议本地虚拟机搞定。

举个例子,我之前帮一家创业公司搭日志平台,他们只有两台物理机,我硬是在上面起了6台虚拟机做ELK集群。虽然IO有点瓶颈,但胜在灵活。后来迁移到云平台,快照一打,直接导过去。

个人建议:如果是首次实验,虚拟机配置2核4GB内存 + 30GB磁盘就够。ELK三件套加Beats,别贪多,后面可以加节点。

操作系统:CentOS vs Ubuntu

两个主流的选择,我两边都用过,说点实在的差异。

对比项 CentOS (Stream / 7/8) Ubuntu (20.04/22.04/24.04)
包管理器 yum / dnf,依赖较旧 apt,软件源常新
ELK兼容性 官方RPM包支持完美 DEB包同样一行安装
防火墙工具 firewalld(默认) ufw(默认)
内核版本 偏老,稳定长周期 较新,对新硬件友好
社区资源 企业运维资料多 新手论坛活跃

我个人的选择逻辑:如果团队运维经验多在RedHat系,就CentOS;如果纯自学或者喜欢用新功能,Ubuntu更顺手。这套教程里我会以Ubuntu 22.04为例,但CentOS差别不大,我会在关键点处标注不同命令。

注意:CentOS 8已于2021年停止维护,现在建议用Rocky Linux或AlmaLinux代替,命令几乎一样。不过日常练习CentOS 7也够用。

网络规划:如何划分子网与端口

嗯,这里很容易乱。我见过有人把所有ELK节点都扔在同一个/24段,美其名曰简单,结果排错时一台机器上跑着好几个服务,端口都打架。

建议遵循最小原则,把服务分层:

  1. 管理网段(如10.0.0.0/24):SSH、Kibana管理界面、Kibana访问端口(5601)。
  2. 数据网段(如10.0.1.0/24):Beats → Logstash 5044端口, Logstash → Elasticsearch 9200端口。
  3. 监控/告警网段(可选,如10.0.2.0/24):Metricsbeat、Heartbeat等检查端口。

如果你只有一台虚拟机,至少把防火墙按接口/区域分开配置。比如我曾在同一个VM里跑Elasticsearch和Kibana,结果ES的9200没加认证,被外部扫描到,差点被人勒索。所以除了常用Web端口,其他一律只对内网开放。

端口清单(ELK核心)
Elasticsearch:9200(HTTP)、9300(节点间传输)
Logstash:5044(Beats输入)、9600(监控API)
Kibana:5601(Web UI)
Beats(Filebeat等):无需固定监听,只对外发送

防火墙配置实战

配置前先确认你的操作系统防火墙状态。直接上命令。

Ubuntu(ufw):

# 启用防火墙之前,先允许SSH
sudo ufw allow ssh

# 开放必要端口(按需)
sudo ufw allow 5601/tcp comment 'Kibana'
sudo ufw allow 5044/tcp comment 'Logstash Beats input'
sudo ufw allow 9200/tcp comment 'Elasticsearch HTTP'

# 启用防火墙
sudo ufw enable
sudo ufw status verbose

CentOS(firewalld):

# 启动并开机自启
sudo systemctl start firewalld
sudo systemctl enable firewalld

# 开放端口
sudo firewall-cmd --permanent --add-port=5601/tcp
sudo firewall-cmd --permanent --add-port=5044/tcp
sudo firewall-cmd --permanent --add-port=9200/tcp

# 重载规则
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
避坑:我刚开始配置时,只开了端口但忘了 --permanent 参数。结果reload后规则丢失,连SSH都断掉——还好当时在机房能插显示器。所以一定要先检查规则再重载,或者用 firewall-cmd --runtime-to-permanent 保存当前临时规则。

一张图看懂环境规划

下面是环境准备的整体决策与网络拓扑关系。节点说明:从需求出发,选硬件类型、确定操作系统,再到网络划分与防火墙端口开放。

ELK环境准备决策与网络拓扑 需求:生产 / 实验 物理机 / 云主机 虚拟机(Vagrant/VMware) CentOS / Rocky Linux Ubuntu 22.04 / 24.04 网络子网规划 管理网段(10.0.0.0/24) | 数据网段(10.0.1.0/24) | 监控网段(10.0.2.0/24) 防火墙端口开放:5601、5044、9200、9300 环境就绪

这张图你看一遍,大概就知道自己的环境该走哪个分支了。实际配置时,跟着箭头流程走,不要跳步。

最后说两句

环境准备工作做扎实了,后面二十多章你只需要关注ELK本身。我见过不少人图省事,直接在默认网络下开干,结果发现Kibana被外网访问、Logstash连不上Elasticsearch,浪费大量时间在环境排错上。记住:防火墙的默认策略是拒绝一切入站,只开放明确需要的端口。

嗯,这一章就到这里。配置的时候遇到问题,回去看看SVG图和端口清单,基本都能解决。