ELK(Elasticsearch + Logstash + Kibana)部署指南

ELK(Elasticsearch + Logstash + Kibana)部署指南

以下是为 日志集中管理、分析与可视化 设计的 ELK 部署方案,支持单机测试与生产集群两种模式,涵盖安全加固、性能优化等关键配置。

一、部署架构设计
日志源(Filebeat/微服务) → Logstash(数据清洗) → Elasticsearch(存储/检索) → Kibana(可视化)
                                     |
                                     → Kafka(可选:异步缓冲)
二、部署步骤
1. 环境准备
  • 基础要求
    • Java 17+(Elasticsearch 8.x 需求)
    • 主机名解析(生产环境需配置 DNS 或 /etc/hosts
    • 关闭防火墙或开放端口(9200/9300/5044/5601)
2. Elasticsearch 部署
单节点模式(测试环境)
docker run -d --name es \
  -p 9200:9200 -p 9300:9300 \
  -e "discovery.type=single-node" \
  -e "xpack.security.enabled=false" \  # 测试环境禁用安全
  elasticsearch:8.11.3
生产集群模式(3节点示例)
  • 节点1配置elasticsearch.yml):
    cluster.name: elk-cluster
    node.name: es-node1
    network.host: 192.168.1.101
    discovery.seed_hosts: ["192.168.1.101", "192.168.1.102", "192.168.1.103"]
    cluster.initial_master_nodes: ["es-node1", "es-node2", "es-node3"]
    xpack.security.enabled: true
    xpack.security.transport.ssl.enabled: true
    
  • 生成安全证书(使用 elasticsearch-certutil 工具)。
  • 启动命令(各节点类似,调整IP和节点名)。
3. Logstash 部署
docker run -d --name logstash \
  -p 5044:5044 -p 9600:9600 \
  -v $(pwd)/pipeline:/usr/share/logstash/pipeline \
  logstash:8.11.3
  • 管道配置示例pipeline/logstash.conf):
    input {
      beats { port => 5044 }  # 接收Filebeat日志
      kafka {
        bootstrap_servers => "kafka:9092"
        topics => ["app-logs"]  # 从Kafka消费日志
      }
    }
    
    filter {
      grok {
        match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} \[%{DATA:traceId}\] %{LOGLEVEL:level} %{GREEDYDATA:msg}" }
      }
      mutate {
        remove_field => ["@version", "host"]  # 清理无用字段
      }
    }
    
    output {
      elasticsearch {
        hosts => ["http://es:9200"]
        index => "logstash-%{+YYYY.MM.dd}"
        user => "elastic"  # 生产环境需启用安全认证
        password => "changeme"
      }
      kafka {
        bootstrap_servers => "kafka:9092"
        topic_id => "processed-logs"
      }
    }
    
4. Kibana 部署
docker run -d --name kibana \
  -p 5601:5601 \
  -e ELASTICSEARCH_HOSTS=http://es:9200 \
  -e ELASTICSEARCH_USERNAME=elastic \
  -e ELASTICSEARCH_PASSWORD=changeme \
  kibana:8.11.3
  • 访问 Kibanahttp://kibana-host:5601,使用 elastic 用户登录(密码需在ES中重置)。
三、生产环境优化配置
1. Elasticsearch 调优
  • JVM 参数调整jvm.options):
    -Xms4g  # 堆内存设置为物理内存的50%,最大不超过32G
    -Xmx4g
    
  • 索引生命周期管理(ILM)
    PUT _ilm/policy/logs_policy
    {
      "policy": {
        "phases": {
          "hot": {
            "actions": {
              "rollover": { "max_size": "50GB" }
            }
          },
          "delete": {
            "min_age": "30d",
            "actions": { "delete": {} }
          }
        }
      }
    }
    
2. Logstash 性能优化
  • 增加 Pipeline 工作线程logstash.yml):
    pipeline.workers: 4
    pipeline.batch.size: 250
    
  • 启用持久化队列(防止数据丢失):
    queue.type: persisted
    path.queue: /var/lib/logstash/queue
    
3. 安全加固
  • 启用 TLS 加密
    • 为 Elasticsearch 生成证书,配置 xpack.security.http.ssl.enabled: true
    • Logstash 输出到 ES 时指定 ssl => true
  • 用户权限控制
    # 创建只读用户
    bin/elasticsearch-users useradd log_reader -p password -r read
    
四、集成测试
  1. 发送测试日志(通过 Filebeat 或直接 curl):
    curl -XPOST "http://logstash:5044" -H "Content-Type: application/json" -d '{"message": "Hello ELK"}'
    
  2. 验证 Elasticsearch 索引
    curl -XGET 'http://es:9200/logstash-*/_search?q=Hello&pretty'
    
  3. Kibana 可视化
    • 创建索引模式 logstash-*
    • 使用 Discover 页面搜索日志,构建仪表盘。
五、故障排查
  • Elasticsearch 无法加入集群
    • 检查 discovery.seed_hosts 配置。
    • 查看日志 tail -f /var/log/elasticsearch/elk-cluster.log
  • Logstash 队列积压
    • 监控 curl -XGET 'localhost:9600/_node/stats/pipelines?pretty'
    • 增加 pipeline.workers 或优化过滤器性能。
  • Kibana 无法连接 ES
    • 确认 elasticsearch.hosts 配置正确。
    • 检查 ES 安全认证(用户名/密码或 API Key)。
六、扩展方案
  • 横向扩展
    • 添加 Elasticsearch 数据节点,调整 node.roles: [data]
    • 部署多 Logstash 实例,共享配置文件(如通过 NFS)。
  • 高可用架构
    • Elasticsearch 配置副本分片(index.number_of_replicas: 1)。
    • Logstash 使用 Kafka 输入,实现消费者组多副本消费。
  • 日志归档
    • 配置 ILM 将旧索引迁移至低成本存储(如 S3)。
七、总结

ELK 部署的核心在于:

  1. 稳定性:通过集群模式和持久化队列避免单点故障。
  2. 性能:合理分配 JVM 内存,优化批量处理参数。
  3. 安全性:启用 TLS 加密和细粒度权限控制。
  4. 可维护性:利用 ILM 和 Snapshots 实现自动化数据管理。

建议根据业务规模选择合适的部署模式(单机/集群),并定期监控资源使用情况(CPU、内存、磁盘I/O)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值