ELK栈安装配置需先调优系统(文件描述符、vm.max_map_count、专用用户),再按顺序部署Elasticsearch(启用安全)、Logstash(Grok解析+ES输出)、Kibana(配置HTTPS连接),多机场景推荐Filebeat替代Logstash。

Linux 运维中安装配置 ELK 日志收集分析栈,核心是把 Elasticsearch、Logstash、Kibana 三者打通,并根据实际场景决定是否引入 Filebeat。现在主流叫法已是 Elastic Stack,8.x 版本已成生产标配,自带 JDK、默认启用安全功能(如 TLS 和内置用户),配置逻辑比老版本更统一,但也更严格——不能跳过系统调优和权限隔离。
系统准备与基础调优
ELK 对 Linux 内核参数和资源限制敏感,跳过这步常导致启动失败或运行不稳定:
- 修改文件描述符上限:在 /etc/security/limits.conf 中追加两行
* soft nofile 65535<br>* hard nofile 65535
- 增大虚拟内存映射数:/etc/sysctl.conf 加入
vm.max_map_count=262144,然后执行sysctl -p - 创建专用用户(严禁用 root 启动):
useradd -m -s /bin/bash elasticsearch<br>passwd elasticsearch
后续所有组件(ES、Logstash、Kibana)都应以非特权用户运行,并用chown -R elasticsearch:elasticsearch /path/to/install授权目录
Elasticsearch 安装与最小化配置
推荐使用官方 APT/YUM 源安装(非 tar 包),便于后续升级。以 Ubuntu 为例:
- 导入 GPG 密钥并添加源:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -<br>echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list
- 安装并启用服务:
sudo apt update && sudo apt install elasticsearch -y<br>sudo systemctl daemon-reload && sudo systemctl enable elasticsearch
- 关键配置(/etc/elasticsearch/elasticsearch.yml):
cluster.name: my-logging-cluster<br>node.name: elk-node-1<br>network.host: 0.0.0.0<br>http.port: 9200<br>discovery.type: single-node<br>xpack.security.enabled: true<br>xpack.security.http.ssl.enabled: true
首次启动会自动生成证书和密码,记得保存输出的elastic用户密码
Logstash 配置采集管道
Logstash 不再只做“日志搬运工”,它负责解析、过滤、标准化字段。一个典型 Nginx 日志处理配置示例如下(/etc/logstash/conf.d/nginx-pipeline.conf):
- 输入段指定日志路径:
input { file { path => "/var/log/nginx/access.log" start_position => "end" sincedb_path => "/var/lib/logstash/sincedb_nginx" } } - 过滤段用 Grok 提取结构化字段:
filter { grok { match => { "message" => "%{IPORHOST:client_ip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"%{WORD:http_method} %{DATA:url} HTTP/%{NUMBER:http_version}\" %{NUMBER:response_code} %{NUMBER:bytes} \"%{DATA:referrer}\" \"%{DATA:user_agent}\"" } } } - 输出段直连 Elasticsearch:
output { elasticsearch { hosts => ["https://localhost:9200"] user => "elastic" password => "your_elastic_password" ssl_certificate_verification => false index => "nginx-access-%{+YYYY.MM.dd}" } }
注意:若启用了 HTTPS,需在 Logstash 的 JVM 选项中信任 ES 证书;生产环境建议关闭 ssl_certificate_verification 并导入 CA 到 Java truststore。
Kibana 可视化与 Filebeat 轻量替代方案
Kibana 安装后,只需确认 /etc/kibana/kibana.yml 中设置:
server.host: "0.0.0.0"<br>server.port: 5601<br>elasticsearch.hosts: ["https://localhost:9200"]<br>elasticsearch.username: "kibana_system"<br>elasticsearch.password: "your_kibana_system_password"
首次访问 https://your-server:5601 会引导你完成索引模式(Index Pattern)创建,比如填 nginx-access-* 即可关联 Logstash 写入的索引。
对于多台应用服务器,不建议每台都跑 Logstash(太重)。改用 Filebeat 更合理:
– 它作为 agent 安装在各业务机上,资源占用低;
– 配置 filebeat.yml 指向 Logstash(output.logstash: hosts: ["logstash-server:5044"])或直传 ES;
– 自带模块(如 nginx、system、mysql),启用即自动配置输入+解析+索引模板。











