Skip to content

📊 ELK分布式日志管理系统

📖 系统介绍

TIP

ELK是一套强大的日志收集、分析和可视化解决方案,由Elasticsearch、Logstash和Kibana三个核心组件组成。

核心组件

组件功能描述特点
Elasticsearch实时搜索和分析引擎分布式存储、全文检索、实时分析
Logstash日志收集和处理工具数据收集、转换、过滤、输出
Kibana数据可视化平台图形化界面、数据展示、实时监控

⚙️ 配置指南

1. 基础配置

application.yml中配置ELK服务地址:

yaml
wueasy:
  elk: 
    url: elk.wueasy.com:5000    # ELK服务地址

2. 日志配置

resources目录下创建logback-spring.xml配置文件:

xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
    <!-- 日志存储路径配置 -->
    <property name="LOG_HOME" value="./logs" />
    
    <!-- 应用名称和ELK地址配置 -->
    <springProperty scope="context" name="logName" source="spring.application.name" defaultValue="log"/>
    <springProperty scope="context" name="elkUrl" source="wueasy.elk.url" defaultValue=""/>

    <!-- 控制台输出配置 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d %-5level [%X{requestId} - %X{traceId} - %X{spanId}] [%thread] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- Logstash输出配置 -->
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>${elkUrl}</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>

    <!-- 文件输出配置 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_HOME}/${logName}.%d{yyyy-MM-dd}.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d %-5level [%X{requestId} - %X{traceId} - %X{spanId}] [%thread] %logger{36} - %msg%n</pattern>
        </encoder>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- 日志级别配置 -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
        <appender-ref ref="LOGSTASH" />
    </root>
</configuration>

🚀 部署指南

Docker部署(推荐)

TIP

使用Docker部署ELK可以快速搭建完整的日志管理环境。

  1. 拉取镜像
bash
docker pull elasticsearch:7.17.3
docker pull logstash:7.17.3
docker pull kibana:7.17.3
  1. 创建网络
bash
docker network create elk-network
  1. 启动Elasticsearch
bash
docker run -d \
  --name elasticsearch \
  --net elk-network \
  -p 9200:9200 \
  -e "discovery.type=single-node" \
  elasticsearch:7.17.3
  1. 启动Logstash
bash
docker run -d \
  --name logstash \
  --net elk-network \
  -p 5000:5000 \
  logstash:7.17.3
  1. 启动Kibana
bash
docker run -d \
  --name kibana \
  --net elk-network \
  -p 5601:5601 \
  kibana:7.17.3

💡 最佳实践

1. 日志收集建议

  • 合理配置日志级别
  • 使用结构化日志格式
  • 添加关键业务标识

2. 性能优化

  • 配置合适的日志轮转策略
  • 设置适当的缓冲区大小
  • 定期清理过期日志

3. 监控建议

  • 配置日志告警阈值
  • 监控系统资源使用
  • 定期备份重要日志

🔍 常见问题

  1. 连接失败排查

    • 检查ELK服务地址配置
    • 验证网络连通性
    • 确认服务状态
  2. 日志丢失问题

    • 检查磁盘空间
    • 验证日志配置
    • 确认写入权限

📚 参考资源