2. 环境规划与准备:服务器选型建议、操作系统要求、JDK版本选择、网络与防火墙规划
在搭建ELK日志检索发布准入环境之前,必须对底层基础设施进行严谨规划。服务器选型、操作系统版本、JDK版本以及网络策略直接决定集群的稳定性、性能与运维成本。本章从生产环境视角给出可落地的配置建议。
2.1 服务器选型建议
ELK各组件对计算与存储资源的需求差异较大,建议按组件角色分别规划服务器规格。以下为基于日均日志量1TB~5TB的中型集群推荐配置:
| 组件 | CPU(核) | 内存(GB) | 磁盘类型 | 磁盘容量(GB) | 推荐实例数 |
|---|---|---|---|---|---|
| Elasticsearch 数据节点 | 16~32 | 64~128 | NVMe SSD | 2000~4000 | 3~5 |
| Elasticsearch 协调/主节点 | 8~16 | 16~32 | SSD | 200 | 3 |
| Logstash | 8~16 | 16~32 | SSD | 500 | 2~4 |
| Kibana | 4~8 | 8~16 | SSD | 200 | 1~2 |
| Kafka(可选缓冲层) | 16~32 | 32~64 | NVMe SSD | 2000~5000 | 3 |
选型要点: Elasticsearch 数据节点对内存和磁盘IO要求最高,建议使用物理机或高性能云主机(如 AWS i3 系列、阿里云 i2 系列)。Logstash 为CPU密集型,建议与ES数据节点分离部署。Kibana 对资源要求较低,可复用协调节点或独立低配实例。
2.2 操作系统要求
ELK 官方对操作系统有明确兼容性列表。生产环境推荐以下两个长期支持版本:
- CentOS 7.9+(内核 3.10.0-1160+)—— 企业运维生态成熟,与 SELinux、systemd 集成良好。
- Ubuntu 20.04 LTS(内核 5.4+)—— 内核较新,对 NVMe、CPU 调度优化更好,适合云原生部署。
操作系统初始化清单(CentOS 7 示例):
# 关闭防火墙与SELinux(生产环境按需配置)
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 设置文件描述符与进程限制
cat >> /etc/security/limits.conf <> /etc/sysctl.conf
2.3 JDK版本选择
Elasticsearch 7.x ~ 8.x 官方推荐使用 OpenJDK 17(LTS),Logstash 与 Kibana 同样基于 JDK 运行。JDK 版本选择直接影响 GC 性能与安全补丁支持。
| JDK 版本 | ELK 兼容性 | GC 特性 | 生产建议 |
|---|---|---|---|
| OpenJDK 11 | ES 7.0~7.16 官方支持 | G1GC 成熟,CMS 已弃用 | 仅用于存量集群升级过渡 |
| OpenJDK 17 | ES 7.17+ / 8.x 官方推荐 | ZGC 可启用,G1GC 默认优化 | 新装集群首选 |
避坑提示: 不要使用 Oracle JDK 8 或 OpenJDK 8,ES 7.17 之后已不再支持。不要使用 OpenJDK 18/19 等非LTS版本,ES 未做充分测试。安装后务必验证版本:
java -version 应显示 openjdk version "17.0.x"。
2.4 网络与防火墙规划
ELK 集群内部组件间通信依赖多个 TCP 端口,必须提前规划网络策略。以下为默认端口清单:
| 组件 | 端口 | 协议 | 用途 | 防火墙策略 |
|---|---|---|---|---|
| Elasticsearch | 9200 | HTTP | REST API / 客户端访问 | 仅开放给Kibana、Logstash、应用服务器 |
| Elasticsearch | 9300 | TCP | 节点间传输(集群通信) | 仅ES节点间互通 |
| Kibana | 5601 | HTTP | Web UI 访问 | 仅开放给运维/用户网段 |
| Logstash | 5044 | TCP | Beats 输入(Filebeat等) | 仅开放给日志采集服务器 |
| Logstash | 9600 | HTTP | 监控 API | 仅内网运维 |
iptables 规则示例(仅允许内网访问ES 9200):
# 允许Kibana服务器访问
iptables -A INPUT -p tcp --dport 9200 -s 10.0.1.100 -j ACCEPT
# 允许Logstash服务器访问
iptables -A INPUT -p tcp --dport 9200 -s 10.0.2.0/24 -j ACCEPT
# 拒绝其他来源
iptables -A INPUT -p tcp --dport 9200 -j DROP
2.5 整体环境架构图
下图展示了一个典型的中型ELK生产环境网络拓扑与组件关系:
2.6 网络隔离与安全组策略
生产环境建议采用 三层网络隔离 模型:
- 采集层(应用服务器、Filebeat)—— 仅能访问 Kafka 或 Logstash 的 5044 端口。
- 处理层(Kafka、Logstash)—— 仅能访问 Elasticsearch 的 9200 端口,且限制源 IP。
- 存储与展示层(Elasticsearch、Kibana)—— Kibana 5601 仅对运维人员或 VPN 网段开放,禁止公网直接暴露。
最佳实践: 如果使用云环境,优先使用安全组(Security Group)而非节点内防火墙。安全组规则按“最小权限”原则配置,例如:
允许 TCP 9200 源:10.0.2.0/24(Logstash子网)允许 TCP 5601 源:10.0.0.0/16(内网运维)
2.7 环境准备检查清单
在进入安装步骤前,请逐项确认以下条件:
| 检查项 | 预期值 | 验证命令 |
|---|---|---|
| 操作系统版本 | CentOS 7.9+ / Ubuntu 20.04 | cat /etc/redhat-release 或 lsb_release -a |
| JDK 版本 | OpenJDK 17.0.x | java -version |
| 文件描述符 | ≥ 655360 | ulimit -n |
| vm.max_map_count | ≥ 262144 | sysctl vm.max_map_count |
| swap 状态 | 关闭 | swapon --show(无输出) |
| 防火墙端口 | 按规划开放 | iptables -L -n 或 firewall-cmd --list-all |
| 主机名解析 | /etc/hosts 包含所有节点 | ping es-node-1 |
常见失败原因: 忽略
vm.max_map_count 设置会导致 Elasticsearch 启动报错 max virtual memory areas vm.max_map_count [65530] is too low;未关闭 swap 会导致 ES 性能剧烈抖动。请务必在安装前完成所有系统调优。