日志数据聚合
[一]聚合方案
Dante Cloud 默认提供两种日志聚合方案:
- 基于 ELK 体系的日志聚合,即:ElasticSearch + Kibana + Logstash
- 基于 Grafana 生态的轻量级日志聚合体系,即:Loki + Minio(或其它 OSS) + Grafana
ELK 体系的日志聚合完全依赖 Elastic 生态,因为需要使用 ElasticSearch 以及其它 Elastic 组件,整体上比较"重",组件自身对硬件资源的需求以及运行时对资源的消耗都比较大。好处是因为已经搭建了 ElasticSearch,可以直接作为 Skywalking 的数据存储,减少了为不同用途搭建不同存储的问题。
轻量级日志聚合,是依赖于 Grafana 生态的组件。Grafana 生态组件相对于 Elastic 生态组件来说,整体上都非常轻量级,不管是对资源的消耗还是自身容器的大小都非常小。再配合使用 Minio 等对象存储作为数据存储介质,整体架构非常“轻”。非常适合硬件资源有限的环境使用。
说明
Dante Cloud 提供的以上两种方案,并不是说这就是"标准"用法或者方案。日志采集和收集的方案非常多,提供以上两种方案仅是使用了相对主流的技术和组件,主要是为了减少用户研究的投入。如果符合自己的需求就可以直接拿来使用,不符合需求可以结合自己的资源、数据量、并发需求等因素灵活调整修改。
[二]环境搭建
[1]ELK方案
运行脚本
为了搭建方便,Dante Cloud 使用的是 Docker 方式进行搭建。这里使用的是 sebp/elk
镜像,该镜像已经将 ElasticSearch、Kibana、Logstash 三个内容合并到一个镜像中。
你可以完全按照的自己想法、需求和习惯搭建 ELK 环境。只要是这三个东西即可,至于怎么搭完全看自己。
ELK 搭建 Docker Compose 脚本如下:
services:
elk:
image: sebp/elk:latest
container_name: elk
ports:
- "5601:5601"
- "9200:9200"
- "9300:9300"
- "5044:5044"
environment:
ELASTICSEARCH_START: 1
LOGSTASH_START: 1
KIBANA_START: 1
LS_HEAP_SIZE: 512m
MAX_MAP_COUNT: 262144
MAX_OPEN_FILES: 65536
TZ: Asia/Shanghai
volumes:
- D:\\local-cached\\docker-volumes\\elk\\elasticsearch\\datas:/var/lib/elasticsearch
- D:\\local-cached\\docker-volumes\\elk\\elasticsearch\\logs:/var/log/elasticsearch
- D:\\local-cached\\docker-volumes\\elk\\logstash\\conf.d:/etc/logstash/conf.d
修改配置
搭建完成之后,需要配置 Logstash 的输入和输出。
可以在 Dante Cloud 工程的 ${project_home}/configurations/scripts/tracing/elk
目录下,找到 02-beats-input.conf
配置文件,根据实际修改后,放入前面 Docker Compose 中 volumes
映射的 conf.d
,然后重启服务即可。
运行验证
服务重启之后,在浏览器中访问 http://ip:9200
,就可以验证是否运行正常
[2]Loki方案
修改Minio配置
Minio 配置文件:在 Dante Cloud 工程的 ${project_home}/configurations/scripts/tracing/minio
目录下,找到 config.env
配置文件
在运行 Minio 之前,需要先修改对应软件的配置,并将其放入到 Docker Compose 中对应的 volumes
下,否则不仅配置不会生效,Minio 运行都会失败。
结合实际情况修改即可。
启动Minio
运行 Docker Compose 脚本,启动 Minio 如下:
services:
minio:
image: quay.io/minio/minio:RELEASE.2024-03-15T01-07-19Z
container_name: minio
hostname: minio
ports:
- "9000:9000"
- "9001:9001"
environment:
MINIO_CONFIG_ENV_FILE: /etc/config.env
TZ: Asia/Shanghai
volumes:
- D:\\local-cached\\docker-volumes\\minio\\data:/mnt/data
- D:\\local-cached\\docker-volumes\\minio\\config.env:/etc/config.env
command: server /data --console-address ':9001'
privileged: true
创建Minio资源
启动 Minio ,Minio 运行成功之后,需要再 Minio 中进行两项操作:
- 新建一个 Bucket (存储桶),用于存放日志数据
- 新建一个 AccessKey,用于 Loki 访问 Minio
修改Loki配置
Loki 配置文件:在 Dante Cloud 工程的 ${project_home}/configurations/scripts/tracing/loki
目录下,找到 loki.yaml
配置文件。参照其中的内容结合实际进行修改,注意需要将上一步中 Minio 的 AccessKey 配置进去。
在运行 Loki 之前,需要先修改对应软件的配置,并将其放入到 Docker Compose 中对应的 volumes
下,否则不仅配置不会生效,Loki 运行都会失败。
启动Loki
配置修改完成之后,使用下面 Docker Compose 脚本启动 Loki:
services:
loki:
image: grafana/loki:latest
container_name: loki
volumes:
- D:\\local-cached\\docker-volumes\\loki\\config:/mnt/config
command:
- -config.file=/mnt/config/loki.yaml
ports:
- "3100:3100"
运行验证
判断配置是否成功,有两个验证点:
- 编写或者修改完配置文件后,Loki Docker 可以正常启动。(出现任何错误,Loki Docker 都无法正常启动)
- 打开 Minio 控制台,查看配置中对应的 Bucket。如果配置成功,那么对应的 Bucket 中将会自动创建文件夹,如果有日志进入还会生成日志文件
[三]日志收集
Dante Cloud 默认的日志收集,不管是 ELK 方案还是 Loki 方案均是基于 Logback 实现。
具体的配置的方式,有以下三种:
logback-spring.xml
方式:这种方式就是按照 Spring Boot 标准的扩展日志定义的方式,定义logback-spring.xml
配置文件,将其放入到所有的服务代码目录中- Nacos 方式:这种方式本质还是定义
logback-spring.xml
配置文件,只不过不再需要将logback-spring.xml
放入到每个服务中,而是放入到 Nacos 中,通过调用 Nacos Openapi 来读取logback-spring.xml
。 - 内置代码方式:这种方式本质还是定义
logback-spring.xml
配置文件,只不过是以代码的形式将 Logback Xml 中的配置内容固化,利用 Spring Boot Properties 动态定义参数,更加灵活方便。
如果使用内置代码方式,在配置文件设置具体的配置即可以开启,具体配置内容参见 【日志收集配置】。 如果使用其它两种方式,在 Dante Cloud 工程的 ${project_home}/configurations/backup/yamls/logs
目录下就可以找到对应文件
注意:不管使用以上那种方式,所有服务下必须依赖
logging-spring-boot-starter
模块。
[四]聚合分析
[1]ELK方案
以上配置正确并且系统运行正常之后,打开 Kibana 简单配置之后,就可以进行日志的聚合分析。如下图所示:
[2]Loki方案
Loki 方案是使用 Grafana 进行日志聚合分析,如下图所示:
[五]深入阅读
注意
本篇文章为微服务架构下的日志聚合分析系统搭建
,是付费阅读
文章,购买方式详见:【高阶文档】