基于 OpenObserve 的轻量级分布式日志存储和追踪方案

article/2025/6/17 23:15:34

一、OpenObserve 介绍

OpenObserve 是一个基于 Rust 开发的开源云原生可观察性平台,专为处理海量数据(如日志、指标和追踪数据)而设计,具有高性能、低成本和易用性等特点。

核心功能和特点:

  • 低成本存储: 相比 ElasticsearchOpenObserve 的日志存储成本可降低约 140 倍,显著降低运营成本。
  • 高性能: 专为大规模数据处理而设计,可轻松处理 PB 级数据量。
  • 易用性: 快速部署,简单配置,几分钟内即可开始使用。
  • 多租户支持: 支持多租户架构。
  • 数据兼容性: 兼容 Elasticsearch 的摄取和查询 API,可无缝迁移。
  • 高级功能: 支持日志搜索、指标监控、分布式追踪、告警、仪表盘等功能。
  • 多种存储选项: 支持 S3MinIOGCSAzure Blob 等多种存储方式。
  • 丰富的查询语言: 支持 SQLPromQL 查询语言,方便数据分析。
  • 用户定义函数: 支持用户自定义摄取和查询函数,增强数据处理能力。

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 需要添加上述提到的认证 Tokenstream-name 表示服务的名称。

在这里插入图片描述

下面多次访问几次测试接口:

在这里插入图片描述

打开 OpenObserve 可视化主页,可以看到有部分数据流进来了:

在这里插入图片描述

数据流下可以看到上面启动时指定的服务名称,已经加进来了:

在这里插入图片描述

点击右边操作放大镜即可看到接进来的日志了:

在这里插入图片描述

可以通过SQL更灵活的查询数据,例如查询所有ERROR级别的日志:

SELECT * FROM "oo_test" where severity = 'ERROR' ORDER BY _timestamp DESC

在这里插入图片描述

在追踪下也可以看到接口调用的记录:

在这里插入图片描述


http://www.hkcw.cn/article/ICBOlIUvNX.shtml

相关文章

python分配方案数 2023年信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析

python分配方案数 2023全国青少年信息素养大赛Python编程挑战赛复赛真题解析 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】 1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解 蓝桥杯python省赛真题详解 蓝桥杯python国赛真题详解 2、Py…

【后端高阶面经:架构篇】52、微服务架构:微服务是银弹吗?

一、单体架构的困境:微服务诞生的背景 (一)巨石应用的五大痛点 开发效率低下 单体应用WAR包体积可达数百MB,单次全量编译耗时超30分钟,即使修改一行代码也需重新构建整个项目。案例:某电商早期单体应用包含10万行代码,每次发布需协调15个团队,合并冲突处理耗时占比达4…

C57-断言函数assert

一 基本语法 1. 作用 调试工具&#xff1a;用于运行时检查条件是否成立&#xff0c;若失败则终止程序并报错&#xff08;文件名、行号、条件&#xff09;。 2. 语法 #include <assert.h> assert(condition); // condition为假时触发断言3. 行为 条件为真&#xff1…

免费文本转语音工具体验:祈风TTS使用

简介&#xff1a;语音生成的另一种方式 现在很多人通过视频记录生活&#xff0c;表达观点。拍摄剪辑不难&#xff0c;配音成了常见难题。部分人对自己的声音不够自信&#xff0c;也有人在特定场景下不便出声。文本转语音工具可以成为解决方案。 常见的TTS&#xff08;Text To…

Redis持久化机制详解

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

Mistral 推出全新开发者平台Agents API

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

融智学三阶进化模型的全要素可视化解析

摘要&#xff1a;本文提出一种三阶进化模型&#xff0c;通过可视化图表与数学公式阐述人类智慧与人工智能的融合路径。研究构建Mermaid流程图展示"人类智力→形式化智慧→通用AI→超级AI→人机协同"的演进过程&#xff0c;并引入道函数$f_{\mathrm{Tao}}(\mathrm{Ob}…

颠覆传统!单样本熵最小化如何重塑大语言模型训练范式?

颠覆传统&#xff01;单样本熵最小化如何重塑大语言模型训练范式&#xff1f; 大语言模型&#xff08;LLM&#xff09;的训练往往依赖大量标注数据与复杂奖励设计&#xff0c;但最新研究发现&#xff0c;仅用1条无标注数据和10步优化的熵最小化&#xff08;EM&#xff09;方法…

simulink mask、sfunction和tlc的联动、接口

这里全部是讲的level2 sfunction&#xff08;用m语言编写&#xff09;&#xff0c;基于matlab 2020a。 1.mask的参数操作 1&#xff09;mask通过set_param和get_param这2个函数接口对mask里面定义的Parameters&Dialog的参数的大部分属性进行读写&#xff0c;一般是Value值…

【数据结构】图的存储(邻接矩阵与邻接表)

图的存储结构 因为图中既有节点&#xff0c;又有边(节点与节点之间的关系)&#xff0c;因此&#xff0c;在图的存储中&#xff0c;只需要保存&#xff1a;节点和边关系即可。 节点保存比较简单&#xff0c;只需要一段连续空间即可&#xff0c;那边关系该怎么保存呢&#xff1…

C++修炼:unordered_map和unordered_set的使用和封装

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C修炼之路》 欢迎点赞&#xff0c;关注&am…

Centos环境下安装/重装MySQL完整教程

目录 一、卸载残留的MySQL环境&#xff1a; 二、安装MySQL&#xff1a; 1、下载MySQL官方的yum源&#xff1a; 2、更新系统yum源&#xff1a; 3、确保系统中有了对应的MySQL安装包&#xff1a; 4、安装MySQL服务&#xff1a; 5、密钥问题安装失败解决方法&#xff1a; …

【机器学习基础】机器学习入门核心算法:决策树(Decision Tree)

机器学习入门核心算法&#xff1a;决策树&#xff08;Decision Tree&#xff09; 一、算法逻辑1.1 基本概念1.2 算法流程 二、算法原理与数学推导2.1 特征选择指标信息熵&#xff08;ID3算法&#xff09;信息增益&#xff08;Information Gain&#xff09;信息增益率&#xff0…

基于晶体塑性有限元(CPFEM)的钛合金圆棒拉伸过程模拟

作者&#xff1a;辞殇 关键词&#xff1a;CPFEM&#xff1b;钛合金&#xff1b;单轴拉伸&#xff1b;织构极图&#xff1b;孪晶 晶体塑性有限元是一种结合了晶体塑性理论和有限元方法的数值模拟技术‌。这种方法考虑了晶体材料的各向异性、滑移系统的开动和相互作用、以及变形…

开源是什么?我们为什么要开源?

本片为故事类文章推荐听音频哦 软件自由运动的背景 梦开始的地方 20世纪70年代&#xff0c;软件行业处于早期发展阶段&#xff0c;软件通常与硬件捆绑销售&#xff0c;用户对软件的使用、修改和分发权利非常有限。随着计算机技术的发展和互联网的普及&#xff0c;越来越多的开…

帕金森带来的生活困境

当这种健康状况出现&#xff0c;行动不再自如成为最明显的改变。日常行走时&#xff0c;步伐会逐渐变小、变慢&#xff0c;甚至会出现 “小碎步” 往前冲&#xff0c;难以停下&#xff0c;简单的起身、转身都可能变得艰难。手部也会不受控制地颤抖&#xff0c;拿水杯、系纽扣这…

第3期:PCB设计教程:自动布线与导出制版文件详解

第3期&#xff1a;PCB设计教程&#xff1a;自动布线与导出制版文件详解 一、前言 本篇教程主要聚焦于PCB设计中的自动布线功能及文件导出步骤。通过本教程&#xff0c;您将学习如何&#xff1a; 使用自动布线工具高效完成线路连接处理自动布线失败的情况进行DRC检查确保设计…

NACOS 动态配置

1.引入Nacos 配置中心依赖 <!-- nacso 配置中心--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency> 2.在application.properties 配置…

【清晰教程】查看和修改Git配置情况

目录 查看安装版本 查看特定配置 查看全局配置 查看本地仓库配置 设置或修改配置 查看安装版本 打开命令行工具&#xff0c;通过version命令检查Git版本号。 git --version 如果显示出 Git 的版本号&#xff0c;说明 Git 已经成功安装。 查看特定配置 如果想要查看特定…

C语言 — 动态内存管理

目录 1.malloc和free函数1.1 malloc函数1.2 free函数1.3 malloc函数的使用 2.calloc函数2.1 calloc函数2.2 calloc函数的使用 3.realloc函数3.1 realloc函数3.2 realloc函数的使用 4.动态内存管理笔试题4.1 笔试题&#xff08;1&#xff09;4.2 笔试题&#xff08;2&#xff09…