
ELK(Elasticsearch + Logstash + Kibana)在 Linux 上部署不难,但默认配置直接跑起来大概率会卡在 Logstash 启动失败、Elasticsearch 内存溢出或 Kibana 连不上 ES —— 根子往往不在组件本身,而在 JVM 参数、文件描述符限制和用户权限这三处。
Logstash 启动就退出:检查 logstash.yml 和 JVM 配置
Logstash 默认不读取 /etc/logstash/logstash.yml,而是优先用命令行参数或 LS_SETTINGS_DIR 指定的路径。常见现象是改了 logstash.yml 却没生效,systemctl status logstash 显示 exited 且日志里有 Java heap space 或 Could not find any configuration files。
确认配置加载路径:sudo -u logstash /usr/share/logstash/bin/logstash –config.test_and_exit –path.settings /etc/logstashJVM 堆内存必须显式设小(尤其 4GB 以下机器):/etc/logstash/jvm.options 中把 -Xms1g 和 -Xmx1g 改成 -Xms512m 和 -Xmx512m,否则启动即 OOM输入插件若用 file,务必加 sincedb_path => "/var/lib/logstash/sincedb" 并确保该目录属主为 logstash:logstash
Elasticsearch 启动报 max virtual memory areas vm.max_map_count [65530] is too low
这是内核参数限制,不是 ES 配置问题。ES 7.x+ 默认要求 vm.max_map_count ≥ 262144,低于此值会拒绝启动,journalctl -u elasticsearch 能看到明确报错。
临时生效:sudo sysctl -w vm.max_map_count=262144永久生效:向 /etc/sysctl.conf 追加 vm.max_map_count=262144,再执行 sudo sysctl –system别漏掉另一项:ulimit -n 必须 ≥ 65536,修改 /etc/security/limits.conf 加两行:elasticsearch soft nofile 65536 和 elasticsearch hard nofile 65536,并确认 systemd 未覆盖(检查 /etc/systemd/system/elasticsearch.service.d/override.conf 是否含 LimitNOFILE=65536)
Kibana 报 Unable to retrieve version information from Elasticsearch nodes
表面是网络不通,实际八成是 ES 的 network.host 绑定错了。ES 默认只监听 localhost,Kibana 若不在同一台机器,或用了 Docker,必然连不上。
编辑 /etc/elasticsearch/elasticsearch.yml,取消注释并修改:network.host: 0.0.0.0(仅测试环境)或更安全的 network.host: [192.168.1.100, "localhost"](填本机真实 IP)同时确认 http.port: 9200 未被防火墙拦截:sudo ufw allow 9200 或 sudo firewall-cmd –add-port=9200/tcp –permanentKibana 配置中 elasticsearch.hosts 必须写成数组形式:["http://192.168.1.100:9200"],不能写 "http://localhost:9200"(除非 Kibana 和 ES 真在同一宿主机且用 localhost 通信)
真正卡住人的从来不是“怎么装”,而是 systemctl daemon-reload 后忘了 sudo systemctl restart elasticsearch,或者改完 jvm.options 忘了 chown logstash:logstash /etc/logstash/jvm.options —— 权限不对时 Logstash 静默失败,连日志都不写。

评论(0)