一、OpenObserve 介绍
OpenObserve
是一个基于 Rust
开发的开源云原生可观察性平台,专为处理海量数据(如日志、指标和追踪数据)而设计,具有高性能、低成本和易用性等特点。
核心功能和特点:
- 低成本存储: 相比
Elasticsearch
,OpenObserve
的日志存储成本可降低约140
倍,显著降低运营成本。 - 高性能: 专为大规模数据处理而设计,可轻松处理
PB
级数据量。 - 易用性: 快速部署,简单配置,几分钟内即可开始使用。
- 多租户支持: 支持多租户架构。
- 数据兼容性: 兼容
Elasticsearch
的摄取和查询API
,可无缝迁移。 - 高级功能: 支持日志搜索、指标监控、分布式追踪、告警、仪表盘等功能。
- 多种存储选项: 支持
S3
、MinIO
、GCS
、Azure Blob
等多种存储方式。 - 丰富的查询语言: 支持
SQL
和PromQL
查询语言,方便数据分析。 - 用户定义函数: 支持用户自定义摄取和查询函数,增强数据处理能力。
Github 地址:
https://github.com/openobserve/openobserve
官方文档地址:
https://openobserve.ai/docs/
二、部署 OpenObserve
官方提供了多种部署方式,这里使用 Docker
快速部署:
version: "3.5"
services:openobserve:image: public.ecr.aws/zinclabs/openobserve:latestrestart: unless-stoppedenvironment:ZO_ROOT_USER_EMAIL: "root@example.com"ZO_ROOT_USER_PASSWORD: "test123"ports:- "5080:5080"volumes:- ./data:/dataprivileged: true
启动服务
docker-compose up -d
浏览器访问:http://ip:5080
进入可视化主页,登录邮箱和密码就是上面 yml
文件配置的信息:
可以在采集下面找到接入时的认证 Token
:
三、SpringBoot 无侵入接入 OpenObserve
首先新建 SpringBoot
项目,构建两个测试接口,用于打印日志:
@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {@GetMapping("/t1")public String test1(){log.info("t1 触发666");log.error("t1 触发888");return "success";}@GetMapping("/t2")public String test2(){log.info("t2 触发666");log.warn("t2 触发888");return "success";}
}
将 SpringBoot
项目打包为 jar
包:
mvn clean package
下载 OpenObserve
java
agent
包:
https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v2.6.0/opentelemetry-javaagent.jar
启动 jar
包,指向该代理:
java -javaagent:./opentelemetry-javaagent.jar -Dotel.exporter.otlp.endpoint=http://127.0.0.1:5080/api/default -Dotel.exporter.otlp.protocol=http/protobuf -Dotel.exporter.otlp.compression=gzip -Dotel.exporter.otlp.headers="Authorization=Basic cm9vdEBleGFtcGxlLmNvbTpzRmNiaW1sUDZ6a0xDVU83,stream-name=oo-test" -jar openobserve-demo-0.0.1-SNAPSHOT.jar
其中 Dotel.exporter.otlp.endpoint
需要改为你的 OpenObserve
服务的地址,同时 headers
需要添加上述提到的认证 Token
, stream-name
表示服务的名称。
下面多次访问几次测试接口:
打开 OpenObserve
可视化主页,可以看到有部分数据流进来了:
数据流下可以看到上面启动时指定的服务名称,已经加进来了:
点击右边操作放大镜即可看到接进来的日志了:
可以通过SQL
更灵活的查询数据,例如查询所有ERROR级别的日志:
SELECT * FROM "oo_test" where severity = 'ERROR' ORDER BY _timestamp DESC
在追踪下也可以看到接口调用的记录: