🎬 HoRain 云小助手个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

📦 环境准备与部署

1. 初始化目录与配置文件

2. 创建 Docker Compose 文件

3. 配置 Logstash 管道 (Pipeline)

4. 启动 ELK 栈

📨 配置日志采集

使用 Filebeat 采集系统日志

Spring Boot 应用集成 Logstash

📊 Kibana 可视化配置

⚠️ 注意事项


使用 Docker 搭建 ELK(Elasticsearch, Logstash, Kibana)栈进行日志采集和可视化,能让你高效地集中管理和分析日志。下面我将为你说明 ELK 的核心组件、搭建步骤、日志配置和可视化方法。

组件

主要功能

在日志流中的角色

​E​​lasticsearch

分布式搜索和分析引擎,提供高速检索和强大的数据分析能力。

​数据存储与索引​​:存储和索引来自 Logstash 的结构化日志数据。

​L​​ogstash

数据收集、解析、转换和传输管道。

​日志处理​​:接收、解析和过滤日志,然后发送给 Elasticsearch。

​K​​ibana

数据可视化平台,用于探索、分析和可视化 Elasticsearch 中的数据。

​日志展示​​:通过图表和仪表盘展示日志数据。

​Filebeat​

轻量级日志数据采集器,将日志发送到 Logstash 或 Elasticsearch。

​日志采集​​:在主机上采集日志文件并转发给 Logstash。

📦 环境准备与部署

部署前,请确保服务器已安装 ​​Docker​​ 和 ​​Docker Compose​​。

1. 初始化目录与配置文件

首先创建必要的目录和配置文件,以便挂载到容器中,持久化数据和配置。

# 创建 ELK 各组件所需的目录和配置文件存放处
mkdir -p /opt/monitor/elk/{elasticsearch,logstash/pipeline,kibana,filebeat}
cd /opt/monitor/elk
2. 创建 Docker Compose 文件

使用 Docker Compose 能方便地定义和管理多个服务。下面是一个详细的 docker-compose.yml示例:

version: '3'
services:
  elasticsearch:
    image: elasticsearch:8.17.2
    container_name: elk_es
    environment:
      - TZ=Asia/Shanghai
      - node.name=es-node-1
      - cluster.name=elk-docker
      - discovery.type=single-node
      - ELASTIC_PASSWORD=YourStrongPassword2025  # 建议修改为强密码
      - ES_JAVA_OPTS=-Xms1g -Xmx1g               # 根据服务器内存调整
      - xpack.security.enabled=false             # 测试环境可关闭安全认证
      - xpack.security.http.ssl.enabled=false
    volumes:
      - es-data:/usr/share/elasticsearch/data     # 挂载数据卷,防止数据丢失
    ports:
      - "9200:9200"                              # Elasticsearch HTTP API 端口
    networks:
      - elk-net
    deploy:
      resources:
        limits:
          memory: 2.5G
          cpus: '1.5'

  kibana:
    image: kibana:8.17.2
    container_name: elk_kibana
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - TZ=Asia/Shanghai
    ports:
      - "5601:5601"                              # Kibana 访问端口
    volumes:
      - kibana-data:/usr/share/kibana/data
    depends_on:
      - elasticsearch
    networks:
      - elk-net
    deploy:
      resources:
        limits:
          memory: 1.5G
          cpus: '0.5'

  logstash:
    image: logstash:8.17.3
    container_name: elk_logstash
    environment:
      - LS_JAVA_OPTS=-Xms1g -Xmx1g               # Logstash JVM 内存设置
      - TZ=Asia/Shanghai
      - pipeline.workers=2                        # 处理线程数,可根据CPU核心调整
      - pipeline.batch.size=125
    volumes:
      - ./logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf  # 挂载Logstash配置文件
      - logstash-data:/usr/share/logstash/data
    ports:
      - "5044:5044"                              # Logstash Beats 输入端口,用于接收Filebeat日志
    networks:
      - elk-net
    deploy:
      resources:
        limits:
          memory: 1G
          cpus: '0.5'
    depends_on:
      - elasticsearch

  # 可选:使用Filebeat采集日志 
  filebeat:
    image: elastic/filebeat:8.17.2
    container_name: elk_filebeat
    user: root
    volumes:
      - ./filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
      - /var/log:/host/var/log:ro                 # 挂宿主机日志目录,根据实际情况修改
      - ./filebeat/modules.d:/usr/share/filebeat/modules.d:ro
      - filebeat-data:/usr/share/filebeat/data
    depends_on:
      - logstash
    networks:
      - elk-net
    command: [
        "-e", "-E", "filebeat.config.modules.path=/usr/share/filebeat/modules.d/*.yml",
        "-E", "filebeat.config.modules.reload.enabled=false",
        "-E", "output.logstash.hosts=[\"logstash:5044\"]"  # 指定Logstash为输出
      ]
    deploy:
      resources:
        limits:
          memory: 500M
          cpus: '0.25'

volumes:
  es-data:
  kibana-data:
  logstash-data:
  filebeat-data:

networks:
  elk-net:
    driver: bridge
3. 配置 Logstash 管道 (Pipeline)

Logstash 需要配置文件来定义如何处理日志。创建 logstash/pipeline/logstash.conf

input {
  tcp {
    port => 5044        # 监听5044端口,接收Filebeat或其它Beats输入
    codec => json_lines # 使用json_lines编解码器,解析JSON格式的日志
  }
}

filter {
  # 这里可以添加丰富的过滤器来处理日志
  # 例如使用grok解析非结构化日志,date解析时间戳等
  # grok {
  #   match => { "message" => "%{COMBINEDAPACHELOG}" }
  # }
  # date {
  #   match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
  # }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]  # 输出到Elasticsearch
    index => "logs-%{+YYYY.MM.dd}"           # 定义索引名称,按日期滚动
  }
}
4. 启动 ELK 栈

一切就绪后,使用 Docker Compose 启动所有服务:

docker-compose up -d

启动后,可以通过 docker-compose logs -f查看启动日志,排查可能的问题。Elasticsearch 完全启动可能需要几分钟。

📨 配置日志采集

ELK 启动后,需要将应用或系统的日志发送过来。

使用 Filebeat 采集系统日志

Filebeat 非常适合采集服务器上的日志文件。 上述 Docker Compose 中已包含了 Filebeat 服务,你需要配置 filebeat/filebeat.yml来指定采集哪些日志:

filebeat.inputs:
- type: filestream
  enabled: true
  paths:
    - /host/var/log/*.log       # 采集系统日志,对应挂载的宿主机路径
    - /host/var/log/tomcat/*    # 采集Tomcat日志,根据实际情况修改
    - /host/var/log/mysql/*.log # 采集MySQL日志,根据实际情况修改

output.logstash:
  hosts: ["logstash:5044"]      # 将事件发送到Logstash
Spring Boot 应用集成 Logstash

对于 Java 应用,可以在 pom.xml中添加依赖:

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>7.2</version>
</dependency>

然后在 logback-spring.xml中配置 Logback,将日志直接以 JSON 格式输出到 Logstash:

<configuration>
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>your-logstash-server-ip:5044</destination> <!-- 修改为你的Logstash服务器地址和端口 -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>
    <root level="INFO">
        <appender-ref ref="LOGSTASH"/>
    </root>
</configuration>

📊 Kibana 可视化配置

日志数据进入 Elasticsearch 后,就可以在 Kibana 中进行分析和可视化了。

  1. ​访问 Kibana​​:在浏览器中打开 http://your-server-ip:5601

  2. ​创建索引模式 (Index Pattern)​​:

    • 进入 Kibana 后,点击左侧导航栏的 ​​Management​​ -> ​​Stack Management​​ -> ​​Kibana​​ -> ​​Index Patterns​​。

    • 点击 ​​Create index pattern​​。

    • 在步骤1中,输入索引模式名称,例如 logs-*,以匹配 Logstash 输出的索引。

    • 在步骤2中,选择时间字段(如 @timestamp),然后点击 ​​Create index pattern​​。

  3. ​探索日志​​:点击左侧 ​​Discover​​,选择你创建的索引模式,就可以看到日志数据了。你可以在这里进行搜索、过滤。

  4. ​创建可视化图表 (Visualizations)​​:

    • 点击左侧 ​​Visualize​​ -> ​​Create new visualization​​。

    • 选择图表类型(如垂直条形图、饼图、折线图等)。

    • 选择你创建的索引模式作为数据源。

    • 配置指标(Metrics)和桶(Buckets)。例如:

      • ​Y轴指标​​:选择计算方式,如日志数量(Count)、某字段的平均值等。

      • ​X轴桶​​:选择 Terms 并指定一个字段(如 log.level来按日志级别统计),然后拆分切片。

    • 配置完成后点击 ​​Save​​。

  5. ​构建仪表盘 (Dashboard)​​:

    • 点击左侧 ​​Dashboard​​ -> ​​Create new dashboard​​。

    • 点击 ​​Add an existing visualization​​ 或 ​​Create new visualization​​,将之前创建的可视化图表添加到仪表盘中。

    • 调整布局后,点击 ​​Save​​ 保存仪表盘,便于后续直接查看。

⚠️ 注意事项

  • ​性能与资源​​:ELK 对内存和 CPU 有一定要求,请根据服务器资源和日志量调整 Docker Compose 中的资源限制 (deploy.resources.limits)。 对于生产环境,Elasticsearch 可能需要部署集群。

  • ​安全性​​:上述示例为了方便演示,禁用了 Elasticsearch 的安全特性(xpack.security.enabled=false)。​​在生产环境中,务必启用安全配置​​,并为 Elasticsearch 和 Kibana 设置强密码。

  • ​数据持久化​​:务必通过 Docker 卷(volumes)持久化 Elasticsearch 等重要数据,避免容器重启造成数据丢失。

  • ​时区问题​​:如果日志时间显示不对,可在 Logstash 的 filter 中使用 date插件修正时区,或在容器环境中设置 TZ=Asia/Shanghai

通过以上步骤,你应该能够成功搭建起一套基础的 ELK 日志管理系统。ELK 的功能非常强大且复杂,你可以在此基础上继续探索更高级的用法,如更复杂的 Logstash 过滤规则、Kibana 警报设置等。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐