2SOMEone | EFK日志分析

今天记录一下泡泡树洞后端项目-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的稳定运行提供更多的保障,针对多点进行监控,提高项目的稳定性。