零基础搭建ELK日志分析系统:从安装到看日志的完整教程
服务器日志越来越庞大,用 grep 和 tail 查找问题效率太低。
ELK 日志分析系统能帮你把日志集中采集、索引并可视化,几秒钟定位异常。
本文以 Ubuntu 20.04 为例,带你走通 ELK 完整流程,全程可照做。
搭建前需要准备什么
一台 Linux 服务器(内存至少 4GB,推荐 8GB),确保能连外网。
提前安装好 Java 环境(Elasticsearch 依赖 Java 11 或 17),用以下命令确认:
java -version
如果未安装,执行:
sudo apt update
sudo apt install openjdk-11-jdk -y
同时关闭防火墙或放行 9200、5601 端口(Elasticsearch 和 Kibana 默认端口)。
第一步:安装 Elasticsearch 并启动
Elasticsearch 是整个系统的存储和搜索引擎。
添加官方 GPG 密钥和源:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update
sudo apt install elasticsearch -y
安装后编辑主配置文件 /etc/elasticsearch/elasticsearch.yml,开放外网访问(仅测试环境):
network.host: 0.0.0.0
discovery.type: single-node
启动并设置开机自启:
sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch
验证:curl http://localhost:9200,看到集群信息代表成功。
第二步:安装 Kibana 并连接 Elasticsearch
Kibana 是可视化界面,让日志展示更直观。
同样从官方源安装:
sudo apt install kibana -y
编辑 /etc/kibana/kibana.yml,修改以下两行:
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
启动 Kibana:
sudo systemctl start kibana
sudo systemctl enable kibana
浏览器访问 http://服务器IP:5601,看到 Kibana 登录界面即成功。
第三步:安装 Logstash 并配置 Nginx 日志采集
Logstash 负责采集和处理日志。
安装:
sudo apt install logstash -y
假设你想分析 Nginx 的访问日志(路径 /var/log/nginx/access.log)。
创建一个配置文件 /etc/logstash/conf.d/nginx.conf:
input {
file {
path => "/var/log/nginx/access.log"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "nginx-access-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
启动 Logstash:
sudo systemctl start logstash
sudo systemctl enable logstash
如果 Nginx 日志无数据,手动访问一次网站生成新日志:curl http://localhost。
第四步:在 Kibana 中创建索引并查看日志
回到 Kibana 页面,左侧菜单点击 Stack Management → 索引模式 → 创建索引模式。
在名称输入框中填 nginx-access-*,时间字段选择 @timestamp,点击创建。
接着点击 Discover,选择刚创建的索引模式,就能看到采集到的 Nginx 日志条目了。
你可以按时间筛选、按字段搜索(例如 response: 404),快速找出错误趋势。
新手最容易踩的坑
- 内存不足导致 Elasticsearch 启动失败:在
/etc/elasticsearch/jvm.options中调整-Xms和-Xmx为适当值(如 2g),不要超过物理内存一半。 - Logstash 抓不到日志:检查文件路径权限,运行
sudo -u logstash cat /var/log/nginx/access.log看能否读取。 - Kibana 页面一直 loading:确认 Elasticsearch 已正常启动,且 Kibana 配置中的
elasticsearch.hosts地址正确。 - 索引模式中的时间字段不显示:检查 Logstash 的 date 过滤器是否生效,可以在 Logstash 控制台查看解析后的日志。
验证效果
成功搭建后,你能在 Kibana 的 Dashboard 中创建统计图表。
例如:统计每小时的请求量、Top 10 慢请求、状态码分布。
ELK 日志分析的价值就在于这些实时可视化报表,让问题无处遁形。
常见问题解答
Q:必须用 Nginx 日志吗?
不,Logstash 支持 tail、syslog、TCP 等多种输入,可以采集任何文本日志。
Q:Elasticsearch 版本怎么选?
建议使用 7.x 系列稳定版,8.x 有架构变动,新手先玩 7.x 更稳妥。
Q:日志过多撑爆磁盘怎么办?
配置 ILM(索引生命周期管理)自动删除旧索引,或者设置定时任务清理。
如果遇到其他问题,建议先对照本文步骤重新检查配置,大部分 ELK 日志分析报错都出在端口未放通、Java 版本不对或配置文件语法错误上。