找回密码
 立即注册
搜索
热搜: Java Linux Docker
查看: 27|回复: 0

[Other] OpenOBServe部署与使用

[复制链接]

27

主题

1

回帖

4万

积分

管理员

积分
40179
发表于 2026-6-5 11:58:00 | 显示全部楼层 |阅读模式

一、认识OpenObserve

1.1 平台定位与背景

OpenObserve(简称 O2)是一个用 Rust 开发的开源云原生可观测平台,专为日志(Logs)、指标(Metrics)、链路追踪(Traces)而构建,设计用于 PB 级工作负载。它是一款用于日志、指标、分析和追踪以及真实用户监控的可观测工具

核心价值与成本优势

  • 极低成本:与 Elasticsearch 相比,使用 OpenObserve 可以将日志存储成本降低约 140 倍
  • 简单易用:无需调整大量复杂的设置,2 分钟内即可启动并运行,且自带用户界面,无需单独安装
  • 高性能:使用 Rust 编写,性能高、资源占用低,采用 Parquet 列式存储格式,查询和存储效率很高
  • 统一可观测:集成日志、指标、链路追踪三大能力,实现全栈可观测性

1.2 核心功能全景图

功能模块 核心能力 用户价值
日志管理 支持多种协议接入日志,SQL + 全文搜索查询,VRL 函数转换 快速定位问题
指标监控 支持 Prometheus 远程写入协议,兼容 PromQL 统一存储指标数据
链路追踪 使用 OpenTelemetry SDK 或 Collector 发送分布式追踪数据 调用链分析、性能诊断
告警 支持定时告警、实时告警、异常检测 主动发现问题
可视化 自带仪表板功能,无需安装额外组件 多维度数据展示
数据分析 支持 SQL 和 PromQL 查询 灵活的数据分析能力

二、部署与初始化

2.1 环境要求

项目 要求
操作系统 Linux(建议 Ubuntu 22.04 以上)
Docker 20.x 及以上
内存 推荐 8GB 以上
磁盘 推荐 20GB 以上
端口 5080(Web UI / API)

2.2 Docker快速部署

基础启动命令

sudo docker run -d \
  --name openobserve \
  -p 5080:5080 \
  --ulimit nproc=65535:65535 \
  --ulimit nofile=65535:65535 \
  -e ZO_ROOT_USER_EMAIL="[email protected]" \
  -e ZO_ROOT_USER_PASSWORD="OpenObserve@123" \
  public.ecr.aws/zinclabs/openobserve:latest

带数据持久化的生产部署(推荐):

# 1. 创建宿主机数据目录
mkdir -p /data/openobserve

# 2. 启动容器(挂载数据卷)
docker run -d \
  --name openobserve \
  --security-opt seccomp=unconfined \
  -p 5080:5080 \
  -v /data/openobserve:/data \
  -e ZO_DATA_DIR=/data \
  -e ZO_ROOT_USER_EMAIL="[email protected]" \
  -e ZO_ROOT_USER_PASSWORD="OpenObserve@123" \
  public.ecr.aws/zinclabs/openobserve:latest

2.3 访问验证

启动容器后,打开浏览器访问 http://服务器IP:5080,输入启动时配置的管理员邮箱和密码即可登录

⚠️ 部署避坑指南

  1. 管理员账号必须配置:OpenObserve 在启动时必须初始化管理员账号,否则服务会直接退出
  2. 线程创建失败:如遇到 OS can't spawn worker thread: Operation not permitted 错误,请添加 --security-opt seccomp=unconfined 参数
  3. 资源预留:建议 8GB 以上内存,避免 OOM
  4. 数据持久化:生产环境务必挂载数据卷,否则容器重启后数据会丢失

2.4 Docker Compose 部署(可选)

version: "3.8"
services:
  openobserve:
    image: public.ecr.aws/zinclabs/openobserve:latest
    container_name: openobserve
    ports:
      - "5080:5080"
    volumes:
      - /data/openobserve:/data
    environment:
      - ZO_DATA_DIR=/data
      - [email protected]
      - ZO_ROOT_USER_PASSWORD=OpenObserve@123
    ulimits:
      nofile:
        soft: 65535
        hard: 65535

三、核心概念与架构

3.1 核心概念

概念 说明
Organizations(组织) 对各种流、用户、功能进行分组的逻辑实体,代表一个企业、部门或应用程序。所有资源限定在组织范围内
Streams(流) 共享相同源的事件序列,例如来自特定应用程序的日志。OpenObserve 中的流可承载日志、指标或追踪三种类型的数据
Functions(函数) 可在数据摄取和查询期间使用,通过 VRL 脚本定义,用于数据丰富、编辑、日志缩减等
Parquet 数据以列式存储格式 Parquet 存储,查询和存储效率很高
Timestamp(时间戳) _timestamp 被视为时间戳列,支持微秒、RFC3339、RFC2822 等多种格式
User Roles(用户角色) 支持 adminmember 两种角色,admin 用户拥有更大权限(如添加其他用户到组织)

💡 概念类比

  • Organization ≈ 租户/命名空间,就像公司的不同业务线
  • Stream ≈ 数据表,像 Elasticsearch 中的索引
  • Parquet ≈ 高效的列存储格式,让查询更快、存储更省

3.2 架构概述

OpenObserve 可以在单节点下运行,也可以在集群中以高可用模式运行:

  • 单节点模式(默认) :数据存储于 SQLite 和本地磁盘。适合测试和小规模场景。性能测试显示,在 Mac M2 上可达到约 31 MB/秒的处理速度,即每天处理约 2.6 TB 数据

  • 高可用(HA)模式:通过 Router、Querier、Ingester、Compactor、AlertManager 等组件组成,各组件可水平扩展。元数据存储于 MySQL/PostgreSQL,数据存储于对象存储(S3、MinIO、GCS 等),集群协调使用 Etcd 或 NATS

四、数据接入

4.1 接入概览

OpenObserve 支持从多种数据源采集可观测数据,包括日志转发器、监控代理、OpenTelemetry Collector、API 以及程序化方法。

数据类型 接入方式
日志 HTTP API、日志转发器(Filebeat/Fluentd)、SDK
指标 Prometheus 远程写入协议、Telegraf、OpenTelemetry Collector
链路追踪 OpenTelemetry SDK 或 Collector

4.2 日志接入方式

(1)通过HTTP API接入

curl -u "[email protected]:OpenObserve@123" \
  -H "Content-Type: application/json" \
  -X POST "http://localhost:5080/api/default/<stream_name>/_json" \
  -d '[{"message": "test log entry", "level": "info"}]'

(2)通过 Fliebeat接入

Filebeat 可通过 Elasticsearch 协议将日志发送到 OpenObserve,支持配置索引映射到特定的 Stream。

(3)通过代码直接接入

可在应用程序代码中直接调用 OpenObserve 的 HTTP API 将日志推送到平台。

4.3 指标接入

OpenObserve 支持 Prometheus 的远程写入(remote_write)协议,因此可以直接将 Prometheus 采集的指标数据远程写入到 OpenObserve 中。

Prometheus 配置示例:

remote_write:
  - url: http://localhost:5080/api/default/prometheus/api/v1/write
    basic_auth:
      username: [email][email protected][/email]
      password: OpenObserve@123

4.4 链路追踪接入

使用 OpenTelemetry SDK 或 Collector 将分布式追踪数据发送到 OpenObserve。配置 OpenTelemetry Collector 的 exporter 指向 OpenObserve 的 OTLP 接收端点即可。

五、日志查询与数据探索

5.1 日志查询基础操作

在日志页面进行查询的步骤:

  • 选择组织:从页面顶部的下拉菜单中选择正确的组织
  • 选择日志流:使用 Stream 选择器选择一个日志流
  • 设置时间范围:选择相对时间(如最近 1 小时、最近 7 天)或绝对时间范围
  • 执行查询:点击 Run query 查看该时间范围内的日志

5.2 查询编辑器

OpenObserve 提供两种查询模式,可通过 SQL Mode 切换:

模式 使用场景
非 SQL 模式(默认) 通过过滤器、函数(如 match_all)等方式查询,无需编写完整 SQL
SQL 模式 支持完整 SQL 语法,可灵活控制筛选、排序和聚合。示例:SELECT * FROM "default" WHERE k8s_namespace_name = 'openobserve'

5.3 查询示例

以下假设 Stream 名称为 default,需要在查询时替换为实际的 Stream 名称。

全文搜索(非 SQL 模式)

# 在所有全文索引字段中搜索包含 "error" 的日志
match_all('error')

字段精确搜索

# 仅在 log 字段中搜索 "error"(效率更高)
str_match(log, 'error')

数值筛选(非 SQL 模式)

# 状态码等于 200
code = 200

# 状态码大于 399
code > 399

SQL 模式示例

-- 按服务筛选和按状态码筛选
SELECT * FROM "default" WHERE service = 'api' AND code >= 400

-- 排除健康检查日志
SELECT * FROM "default" WHERE NOT (endpoint = '/health')

-- 按 IP 统计请求量
SELECT ip, COUNT(*) as request_count FROM "default" GROUP BY ip ORDER BY request_count DESC LIMIT 10

六、告警配置

xxx

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|saotolls Inc.

GMT+8, 2026-6-20 01:16 , Processed in 0.372869 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表