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的稳定运行提供更多的保障,针对多点进行监控,提高项目的稳定性。