OpenObserve 快速上手:一个 Docker 容器跑通日志、指标与追踪
【免费下载链接】openobserveOpen source observability platform for logs, metrics, traces, frontend monitoring, pipelines and LLM observability. A sophisticated, simple and highly performant alternative to Datadog, Splunk, and Elasticsearch with 140x lower storage costs and single binary deployment.项目地址: https://gitcode.com/GitHub_Trending/op/openobserve
OpenObserve 是一个用 Rust 编写的开源可观测性平台,把日志、指标、追踪、前端监控(RUM)和告警装进同一个二进制。它用 Parquet 列存加对象存储,把存储成本压到 Elasticsearch 的约 1/140,单节点无需分片就能撑住 PB 级数据。这篇教程带你从一条 Docker 命令开始,把数据接进来、查到、看到、告出来。
3 行命令跑起来
先装 Docker,然后执行:
docker run -d --name openobserve \ -p 5080:5080 \ -e ZO_ROOT_USER_EMAIL="root@example.com" \ -e ZO_ROOT_USER_PASSWORD="Complexpass#123" \ public.ecr.aws/zinclabs/openobserve:latest浏览器打开http://localhost:5080,用上面两个环境变量设置的邮箱和密码登录。你应该看到登录页,进入后是工作区首页:当前组织的流列表、摄入量和存储占用一目了然。
不想装 Docker 也可以从源码构建(需要 Rust 工具链,rust-toolchain.toml已锁版本):
git clone https://gitcode.com/GitHub_Trending/op/openobserve cd openobserve && cargo build --release产物是target/release/openobserve单文件,直接./target/release/openobserve启动,同样监听 5080。本地数据默认落在./data/openobserve/,这个默认值可以在 src/config/src/config.rs 里看到。
把数据接进来:选一个口子就够
OpenObserve 的摄入全部是标准协议,选和你现有组件匹配的一条即可。
- HTTP 直发 JSON 行:
POST /api/{org}/{stream}/_json,body 是 JSON 数组或 NDJSON,Header 带Content-Type: application/json。适合自建脚本或任何能发 HTTP 请求的程序。 - OpenTelemetry OTLP:把 OTel Collector 的
otlp/http导出器指向http://<host>:5080/otlp,日志、指标、追踪三种信号一次全接。 - Prometheus 抓取:把 Prometheus 的 remote write 或抓取目标指向 O2,metrics 直接入库。
- SDK / 采集代理:Fluent Bit、Vector、LoKi 兼容口、CloudWatch 等官方 SDK 都支持。
发一条测试数据验证链路:
curl -u root@example.com:Complexpass#123 \ -H 'Content-Type: application/json' \ -d '[{"message":"hello from curl","level":"info"}]' \ http://localhost:5080/api/demo/mylogs/_json返回{"code":200}即摄入成功,demo是组织名,mylogs是流名(logs 类型)。API 的路由实现在 src/api/http/,遇到协议细节问题可以直接查。
查得到:SQL 查日志,PromQL 查指标
进入 Logs 页面,选流mylogs,左侧时间范围拉到最近 15 分钟,应该能看到刚才那条 "hello from curl"。
查询就是普通 SQL,不需要学方言:
SELECT count(*) AS cnt, level FROM mylogs GROUP BY level ORDER BY cnt DESC;指标侧打开 Metrics 页面,用 PromQL 或 SQL 两种写法任选,比如rate(http_requests_total[5m])。日志、追踪走 SQL,指标走 SQL/PromQL,这是它和 Elasticsearch(Lucene)和 Splunk(SPL)最大的区别:你已有的查询技能可以直接搬过来。
看得见:拼一个能看趋势的仪表板
在任意查询页把结果存成面板,再拖到 Dashboard 里,就完成了一次可视化。仪表板支持 19+ 图表类型、模板变量(时间、组织、流名等下拉)和地理地图。
实操建议:先给"错误数"和"延迟 P95"各做一个面板,时间变量设成最近 1 小时并开自动刷新,这就是你的值班首页。
会说话:让告警替你盯着
到 Alerts 页面新建一条:选日志或指标流,写触发条件(例如SELECT count(*) FROM mylogs WHERE level='error'结果大于 5),选周期(每分钟)或实时触发,再绑定一个通知目的地(Email、Webhook、Slack 等)。
触发后你会在 Alert History 里看到每次命中的快照;相关的告警还可以归并成 Incident 跟踪生命周期。目的地模板内置在 config/prebuilt-destinations.json。
如果数据进来后需要清洗、打标签或过滤敏感字段,用 Pipelines:可视化编辑器里串"源 → 转换(VRL 函数/条件)→ 目标"三种节点,在摄入时就完成处理。
扛得住:存储、查询与水平扩展
- 存储:数据落 S3/MinIO(也可本地磁盘),列存 Parquet 压缩 + 按时间/标签分区 + 智能索引,大部分查询能剪掉 99% 的扫描范围。成本对比看官方这张图:
- 查询:查询是无状态的,可以横向加节点。仓库自带 deploy/k8s/statefulset.yaml 可直接作为 HA 部署起点;多节点间靠 gRPC 互查,协议定义在 src/proto/proto/cluster/。
- 压缩与回收:后台自动合并小文件、按保留策略删数据,任务代码在 src/compaction/,一般不用手动干预。
单机先跑,数据量上去后把查询节点从 1 加到 N 即可,不需要先规划分片。
踩坑自救
现象:localhost:5080打不开,容器日志报端口占用。原因:5080 被其他进程占了。 处置:ss -lntp | grep 5080找到占用者,或换映射端口-p 5081:5080,服务内部端口不用改。
现象:登录页输入正确密码仍提示认证失败。原因:Docker 没传ZO_ROOT_USER_EMAIL/ZO_ROOT_USER_PASSWORD,或浏览器缓存了旧会话。 处置:确认环境变量已生效(docker inspect openobserve),必要时重启容器并清浏览器缓存。
现象:数据已 POST 成功,UI 里查不到。原因:查询的时间范围没覆盖写入时间,或时间戳字段名不匹配。 处置:把时间范围拉大到 1 天再查;确认流里timestamp字段存在(O2 按timestamp或_timestamp做分区,缺省会用到达时间)。
现象:磁盘涨得快,想删历史数据。原因:O2 数据不可按条修改或删除,只能整段保留期回收。 处置:按流设置保留期(如 7 天),到期由后台自动清理,别试图手工删单个文件。
落地场景:K8s 日志 + 值班告警
以最常见的"容器日志集中收集"为例,只需两步。
- 在每个节点跑 Fluent Bit,输出目标指向
http://<o2-host>:5080/api/{org}/{stream}/_json,K8s 的 Pod 标签会作为字段自动带上,namespace 和 pod 名直接可查。 - 建两条告警:某 namespace 错误日志 5 分钟内超过阈值 → 推 Slack;核心接口 P95 延迟超过 800ms → 推 Email。
从此查问题只走一个入口:按namespace过滤日志、在 Service Graph 里定位依赖关系、点进 trace 看瀑布图。整个链路没有第二个系统要维护,也没有分片、副本、堆内存这些要调的参数。
收尾行动项
- 今天:用上面的 Docker 命令起一个实例,发一条测试日志,确认 SQL 能查回来。
- 本周:把现有 Prometheus 的 remote write 或 OTel Collector 切到 O2,日志与指标合流。
- 本周:给 Top 3 的流各做一条错误率告警,目的地先接 Email 验证闭环。
- 数据量上来后:读 deploy/k8s/statefulset.yaml 规划多节点查询层,存储挂对象存储。
下一步:把demo组织换成你的正式组织,给每个团队开独立组织和摄入 token,多租户隔离就生效了。
【免费下载链接】openobserveOpen source observability platform for logs, metrics, traces, frontend monitoring, pipelines and LLM observability. A sophisticated, simple and highly performant alternative to Datadog, Splunk, and Elasticsearch with 140x lower storage costs and single binary deployment.项目地址: https://gitcode.com/GitHub_Trending/op/openobserve
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考