ELK 日志分析平台搭建实战
ELK Stack(Elasticsearch + Logstash + Kibana)是目前最流行的开源日志分析平台,可以收集、存储、分析和可视化来自各种来源的日志数据。本文介绍在云服务器上搭建生产级ELK平台的完整方案。
一、ELK架构概览
- Elasticsearch:分布式搜索引擎,负责日志的存储和全文检索,支持PB级数据
- Logstash:数据处理管道,负责日志采集、解析、转换,资源消耗较重
- Kibana:可视化界面,提供日志搜索、图表、仪表板功能
- Filebeat:轻量级日志采集Agent,部署在各服务器上,替代Logstash采集端
推荐架构:Filebeat(各服务器)→ Kafka(缓冲队列)→ Logstash(解析处理)→ Elasticsearch(存储)→ Kibana(展示)
二、Elasticsearch安装配置
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.11.0-x86_64.rpm rpm -ivh elasticsearch-8.11.0-x86_64.rpm # /etc/elasticsearch/elasticsearch.yml 关键配置 cluster.name: my-log-cluster node.name: node-1 network.host: 0.0.0.0 http.port: 9200 discovery.type: single-node # 单节点模式 # JVM内存配置(/etc/elasticsearch/jvm.options) -Xms4g # 堆内存设为物理内存的50%,最大不超过32G -Xmx4g systemctl enable --now elasticsearch # 验证 curl -X GET "localhost:9200/?pretty"
三、Kibana安装配置
rpm -ivh kibana-8.11.0-x86_64.rpm # /etc/kibana/kibana.yml server.host: "0.0.0.0" server.port: 5601 elasticsearch.hosts: ["http://localhost:9200"] i18n.locale: "zh-CN" # 中文界面 systemctl enable --now kibana
四、Filebeat日志采集配置
# /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
fields:
app: nginx
env: production
multiline:
pattern: '^\d{4}-\d{2}-\d{2}'
negate: true
match: after
- type: log
paths:
- /var/log/myapp/*.log
fields:
app: myapp
output.elasticsearch:
hosts: ["elasticsearch-server:9200"]
index: "logs-%{[fields.app]}-%{+yyyy.MM.dd}"
# 也可以先输出到Logstash
output.logstash:
hosts: ["logstash-server:5044"]
五、Logstash数据处理
# /etc/logstash/conf.d/nginx.conf
input {
beats {
port => 5044
}
}
filter {
if [fields][app] == "nginx" {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
}
geoip {
source => "clientip"
}
useragent {
source => "agent"
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "nginx-logs-%{+YYYY.MM.dd}"
}
}
六、Kibana仪表板配置
在Kibana中创建有价值的可视化大盘:
- 创建Index Pattern:Management → Index Patterns → 创建 logs-*
- 探索数据:Discover页面搜索日志,熟悉字段结构
- 创建可视化:Visualize → 创建折线图(错误率趋势)、饼图(状态码分布)、地图(访问来源)
- 组合仪表板:Dashboard → 将多个可视化组合成监控大盘
- 配置告警:Alerting → 设置关键词告警(ERROR出现时发通知)
七、索引生命周期管理(ILM)
# 配置索引生命周期策略,自动清理过期索引
PUT _ilm/policy/logs-policy
{
"policy": {
"phases": {
"hot": { "actions": { "rollover": { "max_size": "50gb", "max_age": "7d" }}},
"warm": { "min_age": "7d", "actions": { "shrink": { "number_of_shards": 1 }}},
"delete": { "min_age": "30d", "actions": { "delete": {}}}
}
}
}
八、总结
ELK平台搭建完成后,将成为团队快速定位问题的利器。从单个服务的日志收集开始,逐步扩展到所有服务,建立统一的日志视图。结合告警功能,可以在问题影响用户前主动发现和处理。