2SOMEone | EFK日志分析

by CUNOE, April 7, 2024

今天记录一下泡泡树洞后端项目-2SOMEone的EFK日志分析是如何实现的。

架构

泡泡树洞后端项目-2SOMEone的日志分析采用EFK(Elasticsearch + Filebeat + Kibana)架构。

  • Elasticsearch:日志存储
  • Filebeat:日志收集
  • Kibana:日志分析

实现

Elasticsearch

Elasticsearch是一个分布式、RESTful的搜索和数据分析引擎,用于存储和检索数据。

在这里使用Elasticsearch存储2SOMEone容器的日志。

安装Elasticsearch

# docker-compose.yml
services:
    elasticsearch:
      image: bitnami/elasticsearch:8
      volumes:
        - './elasticsearch_data:/bitnami/elasticsearch/data'
      ports:
        - "9200:9200"
        - "9300:9300"
      environment:
        - ELASTICSEARCH_PASSWORD=password
        - ELASTICSEARCH_SKIP_TRANSPORT_TLS=true

Filebeat

Filebeat是一个轻量级的日志数据收集器,用于将日志数据发送到Elasticsearch或Logstash进行分析。

在这里使用Filebeat采集2SOMEone容器的日志。

安装Filebeat

# docker-compose.yml
services:
  filebeat:
    image: docker.elastic.co/beats/filebeat:8.12.2
    privileged: true
    user: root
    volumes:
      - ./filebeat.2someone.docker.yml:/usr/share/filebeat/filebeat.yml:rw
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./filebeat_data:/usr/share/filebeat/data:rw
    command: filebeat -e -strict.perms=false
    environment:
      - output.elasticsearch.hosts=["elasticsearch:9200"]

配置文件

# filebeat.2someone.docker.yml
t.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false
# 通过filebeat.autodiscover配置自动发现docker容器
# 配置参考:https://www.elastic.co/guide/en/beats/filebeat/8.12/configuration-autodiscover.html
filebeat.autodiscover:
  providers:
    - type: docker
      labels.dedot: true
      templates:
        - condition:
            contains:
              # 根据docker容器的镜像标签进行过滤
              docker.container.image: 2someone
          config:
            - type: container
              paths:
                - /var/lib/docker/containers/${data.docker.container.id}/*.log
              exclude_lines: ["^\\s+[\\-`('.|_]"] 
processors:
- add_cloud_metadata: ~
# 输出到elasticsearch
output.elasticsearch:
  # 配置索引与模板
  index: "filebeat-2someone-docker-%{[agent.version]}-%{+yyyy-MM-dd}" 
setup.template.name: "filebeat-2someone-docker"
setup.template.pattern: "filebeat-2someone-docker-*"

Kibana

Kibana是一个开源的数据可视化插件,用于搜索、查看和与存储在Elasticsearch索引中的数据进行交互。

在这里使用Kibana对2SOMEone的日志进行分析。

在Kibana中创建数据视图,通过搜索、过滤、可视化等功能对2SOMEone的日志进行分析。

安装Kibana

services:
  kibana:
    image: bitnami/kibana:8
    volumes:
      - './kibana_data:/bitnami/kibana'
    ports:
      - '5601:5601'
    environment:
      - KIBANA_ELASTICSEARCH_URL=elasticsearch

Jaeger

Jaeger是一个开源的分布式追踪系统,用于监视和调试微服务架构中的事务。

由于2SOMEone采用Go-Zero框架,基于OpenTelemetry集成了链路追踪,在这里使用Jaeger监控2SOMEone容器的调用链,并将其与EFK整合。

安装Jaeger

services:
  jaeger:
    hostname: jaeger
    image: jaegertracing/all-in-one
    restart: always
    privileged: true
    environment:
      - LANG=en_US.UTF-8
      - TZ=Asia/Shanghai
      - SPAN_STORAGE_TYPE=elasticsearch
      - ES_SERVER_URLS=http://elasticsearch:9200
      - ES_TAGS_AS_FIELDS_ALL=true

Go-Zero框架集成Jaeger

# etc/app.yml
Telemetry:
  Name: 2someone.app.api
  Endpoint: http://jaeger:14268/api/traces
  Sampler: 1.0
  Batcher: jaeger

总结

通过EFK架构,我们可以对2SOMEone的日志进行收集、存储、分析,帮助我们更好地了解2SOMEone的运行状态,及时发现问题并解决。

Elasticsearch、Filebeat、Kibana、Jaeger等工具的使用,为我们提供了更多的监控手段,帮助我们更好地管理2SOMEone项目。

在未来,我们将继续优化EFK架构,提高日志分析的效率,为2SOMEone的稳定运行提供更多的保障,针对多点进行监控,提高项目的稳定性。