# OpenObserve

[OpenObserve](https://openobserve.ai/) 是一个专为日志、指标、追踪、分析等构建的云原生可观测平台。与 Elasticsearch、Splunk 和 Datadog 等传统可观测解决方案相比，它提供了 10 倍更简单的部署、140 倍更低的存储成本和高性能。

## 功能特性

- **统一可观测性**：日志、指标、追踪和前端监控（RUM）集成在单一平台
- **成本效益**：通过 Parquet 列式存储和 S3 原生架构，存储成本比 Elasticsearch 低 140 倍
- **高性能**：查询性能优于 Elasticsearch，同时仅使用 1/4 的硬件资源
- **单一二进制**：从可扩展至 TB 级的单一二进制开始，或部署高可用模式以处理 PB 级工作负载
- **易于使用**：无需复杂调优，直观的 UI，支持 SQL 和 PromQL
- **OpenTelemetry 原生**：内置 OTLP 日志、指标和追踪采集
- **灵活存储**：支持本地磁盘、S3、MinIO、GCS 或 Azure Blob 存储
- **生产就绪**：全球数千个部署，最大部署每天处理 2 PB 数据

## 快速开始

1. 复制环境变量示例文件：

   ```bash
   cp .env.example .env
   ```

2. 编辑 `.env` 并配置：
   - `ZO_ROOT_USER_EMAIL`：管理员邮箱（修改默认值）
   - `ZO_ROOT_USER_PASSWORD`：管理员密码（修改默认值，最少 8 个字符且包含特殊字符）
   - `OPENOBSERVE_PORT_OVERRIDE`：Web UI 端口（默认：5080）

3. 启动 OpenObserve：

   ```bash
   docker compose up -d
   ```

4. 访问 Web UI：`http://localhost:5080`

5. 使用配置的凭据登录

## 配置说明

### 基础配置

| 环境变量                    | 说明                 | 默认值             |
| --------------------------- | -------------------- | ------------------ |
| `OPENOBSERVE_VERSION`       | OpenObserve 镜像版本 | `v0.50.0`          |
| `OPENOBSERVE_PORT_OVERRIDE` | Web UI 端口          | `5080`             |
| `ZO_ROOT_USER_EMAIL`        | 根用户邮箱           | `root@example.com` |
| `ZO_ROOT_USER_PASSWORD`     | 根用户密码           | `Complexpass#123`  |
| `ZO_DATA_DIR`               | 容器内数据目录       | `/data`            |

### S3 对象存储（可选）

对于生产部署，配置兼容 S3 的对象存储：

| 环境变量            | 说明          |
| ------------------- | ------------- |
| `ZO_S3_BUCKET_NAME` | S3 存储桶名称 |
| `ZO_S3_REGION_NAME` | S3 区域       |
| `ZO_S3_ACCESS_KEY`  | S3 访问密钥   |
| `ZO_S3_SECRET_KEY`  | S3 密钥       |

配置 S3 后，OpenObserve 将使用它进行数据存储，而不是本地卷。

### 资源限制

根据工作负载调整 CPU 和内存限制：

| 环境变量                         | 说明            | 默认值 |
| -------------------------------- | --------------- | ------ |
| `OPENOBSERVE_CPU_LIMIT`          | 最大 CPU 核心数 | `2.0`  |
| `OPENOBSERVE_CPU_RESERVATION`    | 预留 CPU 核心数 | `0.5`  |
| `OPENOBSERVE_MEMORY_LIMIT`       | 最大内存        | `2G`   |
| `OPENOBSERVE_MEMORY_RESERVATION` | 预留内存        | `512M` |

## 数据采集

OpenObserve 支持多种采集方式：

### OpenTelemetry (OTLP)

发送 OTLP 数据到 `http://localhost:5080/api/default/` 并进行身份验证。

### 通过 HTTP 采集日志

```bash
curl -u root@example.com:Complexpass#123 \
  -H "Content-Type: application/json" \
  http://localhost:5080/api/default/logs/_json \
  -d '[{"message": "Hello OpenObserve", "level": "info"}]'
```

### Prometheus 远程写入

配置 Prometheus 使用 OpenObserve 作为远程写入目标。

更多采集方法请参见[官方文档](https://openobserve.ai/docs/ingestion/)。

## 架构

OpenObserve 通过以下方式实现其性能和成本效率：

- **Parquet 列式存储**：高效压缩和查询性能
- **S3 原生设计**：利用廉价对象存储与智能缓存
- **Rust 构建**：内存安全、高性能实现
- **智能分区和索引**：大多数查询可将搜索空间减少高达 99%
- **无状态架构**：支持快速扩展和灾难恢复

## 数据卷

- `openobserve_data`：使用本地磁盘存储时存储所有数据（配置 S3 时不使用）

## 安全注意事项

1. **修改默认凭据**：在生产环境中务必修改 `ZO_ROOT_USER_EMAIL` 和 `ZO_ROOT_USER_PASSWORD`
2. **密码要求**：使用强密码，至少 8 个字符且包含特殊字符
3. **网络安全**：生产部署时考虑使用带 TLS 的反向代理
4. **S3 凭据**：安全存储 S3 凭据，在可能的情况下考虑使用 IAM 角色
5. **数据不可变性**：所有采集的数据在设计上都是不可变的，以满足审计合规要求

## 升级

升级到新版本：

1. 在 `.env` 中更新 `OPENOBSERVE_VERSION`
2. 拉取新镜像并重启：

   ```bash
   docker compose pull
   docker compose up -d
   ```

OpenObserve 会自动处理模式迁移，无需手动步骤。

## 企业版功能

企业版包含：

- 单点登录（SSO）：OIDC、OAuth、SAML、LDAP/AD
- 高级 RBAC：基于角色的访问控制与自定义角色
- 审计跟踪：不可变审计日志
- 联合搜索：跨多个集群查询
- 敏感数据脱敏：自动 PII 脱敏
- 带 SLA 保证的优先支持

详情请参见[价格页面](https://openobserve.ai/downloads/)。

## 许可证

- 开源版：AGPL-3.0
- 企业版：商业许可证

## 相关链接

- [官方网站](https://openobserve.ai/)
- [文档](https://openobserve.ai/docs/)
- [GitHub 仓库](https://github.com/openobserve/openobserve)
- [Slack 社区](https://short.openobserve.ai/community)
- [客户案例](https://openobserve.ai/customer-stories/)

## 支持

- 通过 [Slack](https://short.openobserve.ai/community) 获得社区支持
- GitHub [Issues](https://github.com/openobserve/openobserve/issues)
- GitHub [Discussions](https://github.com/openobserve/openobserve/discussions)
- 商业许可证提供企业支持
