Logback+Fluentbit+Openobserve实现日志收集

前言

日志 对于开发者来说并不陌生,对于排查BUG、输出异常、关注重要业务节点数据参数等,都起着重要作用。而如何写好日志,如何排查日志,如何记录日志等对于开发者而言,往往是一个需要在项目初期就要全面考虑的事情,而本文主要终点介绍 如何记录日志

常见的日志记录方式:

  1. ELK(Elasticsearch+logash+kibana)
  2. 数据库
  3. redis
  4. 本地磁盘文件记录
  5. 直接控制台输出

以上都是比较常见的日志记录方式,各个方式各有千秋,有好有坏,在此不做展开讲。

今天要介绍的一种和上面不同的日志记录方式: Logback + Fluentbit + Openobserve

何为Openobserve

OpenObserve 是一个云原生的观测性平台,专为处理 PB 字节级规模的日志、指标、跟踪和分析而设计。它不仅易于操作,而且能够极大地降低存储成本、提升性能。

主要特点和功能:

  1. 简单易用:与Elasticsearch相比,OpenObserve的操作非常简单,几乎不需要理解和调整大量参数即可快速上手。您只需花费不到2分钟的时间,即可开始使用OpenObserve。
  2. 降低存储成本:通过使用OpenObserve,您可以将日志存储成本降低约140倍,相比于Elasticsearch,这是一个巨大的节省。
  3. 高性能:OpenObserve提供高性能的日志、指标和跟踪处理能力,能够处理宠字节级规模的数据,满足大规模应用的需求。
  4. 丰富的功能:OpenObserve提供了多种功能,包括日志、指标、跟踪的处理、警报和仪表盘等。它还提供了丰富的内置功能,如数据增强、数据脱敏、日志压缩等,无需学习额外的查询语言。
  5. 开源兼容:OpenObserve是一个开源项目,您可以自由地修改和定制,满足自己的特定需求。

何为Fluentbit

是一个开源的、轻量级的日志数据收集器(log collector)和 转发器(log forwarder),旨在高效地收集、处理和转发日志数据。它是Fluentd项目的一个子项目,旨在解决日志收集和处理的特定需求。

主要特点和功能:

  1. 轻量级:FluentBit被设计为轻量级的日志收集器,具有较小的资源占用,适用于在资源受限的环境中运行,例如边缘设备或嵌入式系统。
  2. 高性能:由于其轻量级设计,FluentBit能够在高吞吐量的场景下表现出色,可以处理大量的日志数据。
  3. 多种输入和输出插件:FluentBit支持多种输入和输出插件,使其能够从不同的数据源收集日志,并将日志转发到多种目标。
  4. 可扩展性:FluentBit可以通过插件进行扩展,用户可以根据需求编写自定义插件来实现特定功能。
  5. 支持多种日志格式:FluentBit支持解析和处理多种日志格式,如JSON、Grok、Syslog等。
  6. 容器友好:FluentBit特别适用于容器化环境,可以与容器编排工具(如Kubernetes)和容器运行时(如Docker)集成,以收集容器日志。
  7. 跨平台:FluentBit支持多个操作系统平台,包括Linux、Windows、macOS等。

安装Openobserve

前提保证已经安装docker和docker-compose。然后我们使用docker-compose方式安装

1、docker-compose.yml 文件内容如下

1
2
3
4
5
6
7
8
9
10
11
12
version: "3"
services:
openobserve:
image: public.ecr.aws/zinclabs/openobserve:latest
restart: always
environment:
ZO_ROOT_USER_EMAIL: "test@qq.com"
ZO_ROOT_USER_PASSWORD: "123456"
ports:
- "5080:5080"
volumes:
- /home/openobserve/data:/data

2、然后输入启动 docker-compose 命令

1
docker-compose up -d

3、启动完毕后就可以打开openobserve 控制台页面

  1. 浏览器输入:ip:5080
  2. 登录账号:docker-compose配置中的ZO_ROOT_USER_EMAIL
  3. 登录密码:docker-compose配置中的ZO_ROOT_USER_PASSWORD

控制台主页截图

4、详细官方文档地址:https://openobserve.ai/docs/

安装Fluentbit

前提保证已经安装docker和docker-compose。然后我们使用docker-compose方式安装

1、docker-compose.yml 文件内容如下

1
2
3
4
5
6
7
8
9
version: '3'
services:
fluent-bit:
image: fluent/fluent-bit:3.0.5
volumes:
- /home/fluent/data/fluent-bit.conf:/fluent-bit/etc/fluent-bit.conf
ports:
- "24224:24224"
restart: always

2、fluent-bit.conf 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[SERVICE]
Flush 5
Daemon off

[INPUT]
Name tcp
Listen 0.0.0.0
Port 24224
Format json

[OUTPUT]
Name http
Match *
URI /api/default/default/_json
Host 192.168.93.27
Port 5080
tls Off
Format json
Json_date_key _timestamp
Json_date_format iso8601
HTTP_User root@qq.com
HTTP_Passwd g8MmJtyRzWZYYtAK

3、各个部分参数解释

  1. [SERVICE] + [INPUT] 这两个部分为默认写死配置。
  2. [OUTPUT] 为 openobserve 平台提供的参数,直接可以在平台配置中复制粘贴

4、详细官方文档地址:https://docs.fluentbit.io/manual

[OUTPUT] 在 openobserve 平台的位置截图

Logback配置

logback.xml配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--当前spring环境属性-->
<springProperty name="spring.profiles.active" source="spring.profiles.active" defaultValue="xxx"/>
<!--当前spring项目名称-->
<springProperty name="spring.application.name" source="spring.application.name" defaultValue="xxx"/>

<!-- 上传日志到OpenObserve。比ES更轻量-->
<appender name="OpenObserve" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>info</level>
</filter>
<!--FluentBit收集器地址-->
<destination>192.168.93.27:24224</destination>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<pattern>
<pattern>
{
"event.dataset":"${spring.application.name}-${spring.profiles.active}",
"level": "%level",
"createTime": "%d{yyyy-MM-dd HH:mm:ss}",
"trace": "%X{X-B3-TraceId:-}",
"requestId": "%X{requestId}",
"span": "%X{X-B3-SpanId:-}",
"parent": "%X{X-B3-ParentSpanId:-}",
"thread": "%thread",
"className": "%logger{40}",
"message": "%message",
"stackTrace": "%exception{10}"
}
</pattern>
</pattern>
</providers>
</encoder>
<connectionStrategy>
<roundRobin>
<connectionTTL>5 minutes</connectionTTL>
</roundRobin>
</connectionStrategy>
</appender>


<root level="info">
<appender-ref ref="OpenObserve"/>
</root>


</configuration>

结言

至此整个链路流程配置已全部完成,然后运行 logback 所在的项目,启动项目后就可以自动将日志上传收集到 Openobserve 平台。

实战项目: https://github.com/Snykta/forge-fast-boot (一个可快速开发的spring单体项目脚手架)