2、环境准备:虚拟机/服务器环境选择,操作系统(CentOS/Ubuntu),网络规划与防火墙配置
环境准备这事,看着基础,实际上踩过坑的人都知道——后面80%的排查时间都浪费在环境不一致上。我做ELK项目少说也有七八次了,最早那次直接在物理机上开干,结果后面要扩容加节点,迁移成本高得离谱。后来我学乖了,先花半天把环境底座敲定,后面就顺畅很多。
这一章咱们就把环境规划说明白。你跟着我的思路走一遍,能省下不少弯路。
选物理机还是虚拟机?
先别纠结Linux发行版,第一步是确定底层怎么跑。
- 物理机:适合生产环境、IO密集型场景(比如Beats大量日志写入)。资源无虚拟化开销,但弹性差、备份迁移麻烦。
- 虚拟机:适合实验、测试、灾备演练。快照、克隆、快挂磁盘,我习惯用Vagrant+VirtualBox或VMware Workstation。
- 云主机(云厂商ECS):介于两者之间,弹性好但网络规划要提前想清楚。如果你在学这套教程,建议本地虚拟机搞定。
举个例子,我之前帮一家创业公司搭日志平台,他们只有两台物理机,我硬是在上面起了6台虚拟机做ELK集群。虽然IO有点瓶颈,但胜在灵活。后来迁移到云平台,快照一打,直接导过去。
操作系统: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差别不大,我会在关键点处标注不同命令。
网络规划:如何划分子网与端口
嗯,这里很容易乱。我见过有人把所有ELK节点都扔在同一个/24段,美其名曰简单,结果排错时一台机器上跑着好几个服务,端口都打架。
建议遵循最小原则,把服务分层:
- 管理网段(如10.0.0.0/24):SSH、Kibana管理界面、Kibana访问端口(5601)。
- 数据网段(如10.0.1.0/24):Beats → Logstash 5044端口, Logstash → Elasticsearch 9200端口。
- 监控/告警网段(可选,如10.0.2.0/24):Metricsbeat、Heartbeat等检查端口。
如果你只有一台虚拟机,至少把防火墙按接口/区域分开配置。比如我曾在同一个VM里跑Elasticsearch和Kibana,结果ES的9200没加认证,被外部扫描到,差点被人勒索。所以除了常用Web端口,其他一律只对内网开放。
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本身。我见过不少人图省事,直接在默认网络下开干,结果发现Kibana被外网访问、Logstash连不上Elasticsearch,浪费大量时间在环境排错上。记住:防火墙的默认策略是拒绝一切入站,只开放明确需要的端口。
嗯,这一章就到这里。配置的时候遇到问题,回去看看SVG图和端口清单,基本都能解决。