ELK 日志分析平台搭建

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中创建有价值的可视化大盘:

  1. 创建Index Pattern:Management → Index Patterns → 创建 logs-*
  2. 探索数据:Discover页面搜索日志,熟悉字段结构
  3. 创建可视化:Visualize → 创建折线图(错误率趋势)、饼图(状态码分布)、地图(访问来源)
  4. 组合仪表板:Dashboard → 将多个可视化组合成监控大盘
  5. 配置告警: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平台搭建完成后,将成为团队快速定位问题的利器。从单个服务的日志收集开始,逐步扩展到所有服务,建立统一的日志视图。结合告警功能,可以在问题影响用户前主动发现和处理。