EFK架构采集Nginx日志完整指南
前言
EFK(Elasticsearch-Filebeat-Kibana)是当前流行的日志收集与分析解决方案。本文将详细介绍如何使用Filebeat采集Nginx日志并发送到Elasticsearch集群,最终通过Kibana进行可视化分析。
架构概览
Nginx服务器 → Filebeat(日志采集) → Elasticsearch(存储/索引) → Kibana(可视化)
详细配置步骤
1. 准备Filebeat工作目录
cd /etc/filebeat/
2. 创建Nginx日志采集配置文件
# /etc/filebeat/config/07-nginx-to-es.yaml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
  # 对于JSON格式日志添加以下配置
  json.keys_under_root: true
  json.overwrite_keys: true
  # 添加自定义字段便于后续筛选
  fields:
    log_source: nginx
    environment: production
  # 处理多行日志(如错误日志)
  # multiline.pattern: '^[[:space:]]'
  # multiline.negate: false
  # multiline.match: after
output.elasticsearch:
  hosts: 
    - "http://10.0.0.91:9200"
    - "http://10.0.0.92:9200"
    - "http://10.0.0.93:9200"
  # 自定义索引名称,按日期分割
  index: "oldboyedu-linux92-log-nginx-%{+yyyy.MM.dd}"
  # 可选:设置Elasticsearch认证
  # username: "elastic"
  # password: "yourpassword"
# 索引生命周期管理配置
setup.ilm:
  enabled: false  # 禁用默认ILM以使用自定义索引名称
# 索引模板配置
setup.template:
  name: "oldboyedu-linux92"
  pattern: "oldboyedu-linux92-log*"
  overwrite: false
  settings:
    index.number_of_shards: 5    # 分片数根据集群规模调整
    index.number_of_replicas: 1  # 生产环境建议至少1个副本
    index.refresh_interval: "30s"
    index.codec: "best_compression"
# 处理管道配置(可选)
# pipeline: "nginx_logs_pipeline"
# 监控配置(可选)
monitoring:
  enabled: true
  cluster_uuid: "your_cluster_uuid"
3. 启动Filebeat服务
# 测试配置文件
filebeat test config -c config/07-nginx-to-es.yaml
# 以调试模式运行(前台运行,输出到控制台)
filebeat -e -c config/07-nginx-to-es.yaml
# 生产环境建议作为服务运行
systemctl enable --now filebeat
4. 验证数据采集
检查Elasticsearch索引
curl -XGET "http://10.0.0.91:9200/_cat/indices/oldboyedu*?v&s=index"
查看索引映射
curl -XGET "http://10.0.0.91:9200/oldboyedu-linux92-log-nginx-*/_mapping?pretty"
高级配置建议
1. 日志旋转处理
确保Filebeat能正确处理日志旋转:
filebeat.inputs:
- type: log
  # ...
  close_inactive: 5m          # 5分钟不活跃后关闭文件句柄
  clean_removed: true         # 文件被删除后清理注册表
  close_renamed: true         # 文件重命名后关闭处理
  close_eof: false            # 不因到达文件末尾而关闭
  scan_frequency: 10s         # 检查新文件的频率
2. Elasticsearch管道处理
创建Ingest Pipeline预处理日志:
PUT _ingest/pipeline/nginx_logs_pipeline
{
  "description": "Process Nginx logs",
  "processors": [
    {
      "grok": {
        "field": "message",
        "patterns": [
          "%{IPORHOST:client_ip} %{USER:ident} %{USER:auth} \\[%{HTTPDATE:timestamp}\\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{NUMBER:response_code} %{NUMBER:bytes_sent}"
        ],
        "pattern_definitions": {
          "URIPATHPARAM": "%{URIPATH}(?:%{URIPARAM})?"
        }
      }
    },
    {
      "date": {
        "field": "timestamp",
        "formats": ["dd/MMM/yyyy:HH:mm:ss Z"],
        "timezone": "Asia/Shanghai"
      }
    },
    {
      "user_agent": {
        "field": "http_user_agent"
      }
    }
  ]
}
3. Kibana可视化配置
- 在Kibana中创建Index Pattern: oldboyedu-linux92-log-nginx-*
- 创建可视化图表:
- 响应状态码分布(饼图)
- 请求量时间序列(折线图)
- 客户端IP地理位置(地图)
- 热门请求URI(数据表)
 
性能优化建议
- 
批量处理: output.elasticsearch: bulk_max_size: 1000 # 每批最大事件数 worker: 4 # 并发工作线程数
- 
队列缓冲: queue: mem: events: 4096 # 内存队列大小 flush.min_events: 512 # 最小触发批量大小 flush.timeout: "5s" # 最大等待时间
- 
资源限制: # 限制CPU使用 max_procs: 2 # 限制内存使用 queue.mem.flush.min_events: 1024
安全配置
- 
TLS加密: output.elasticsearch: protocol: "https" ssl.certificate_authorities: ["/etc/filebeat/certs/ca.crt"] ssl.certificate: "/etc/filebeat/certs/client.crt" ssl.key: "/etc/filebeat/certs/client.key"
- 
API密钥认证: output.elasticsearch: api_key: "id:api_key"
故障排除
常见问题1:数据未进入ES
检查步骤:
- 验证Filebeat日志:journalctl -u filebeat -f
- 检查Elasticsearch连接:telnet 10.0.0.91 9200
- 验证索引模板是否创建成功
常见问题2:字段解析错误
解决方案:
- 确认Nginx日志格式与Grok模式匹配
- 使用Kibana的Grok Debugger测试模式
- 考虑使用ECS(Elastic Common Schema)兼容字段
常见问题3:性能瓶颈
优化方向:
- 增加Filebeat的批量大小
- 调整Elasticsearch的索引刷新间隔
- 考虑使用Logstash作为中间缓冲层
生产环境部署建议
- 多实例负载均衡:在高流量环境部署多个Filebeat实例
- 本地缓冲:配置Redis或Kafka作为缓冲队列
- 监控告警:监控Filebeat的吞吐量和延迟指标
- 版本控制:使用配置管理工具维护Filebeat配置
总结
通过本文介绍的配置,您已经建立了完整的Nginx日志采集管道。这种方案具有以下优势:
- 实时性:日志近乎实时地进入Elasticsearch
- 灵活性:支持自定义索引和字段映射
- 可扩展性:轻松应对日志量增长
- 可视化:为Kibana分析提供高质量数据源
根据实际业务需求,您可以进一步优化配置,如添加自定义字段过滤、设置不同的索引生命周期策略等。
 
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号