OpenObserve 快速入门
用一条最快的路径在 Linux 服务器上把 OpenObserve v1.1.1 跑起来,并完整走一遍"启动服务 → 登录控制台 → 摄入日志 → SQL 查询 → 创建仪表盘"的最小闭环。全部命令与回显已在 Ubuntu 22.04.4 LTS(x86_64)+ OpenObserve v1.1.1 实测通过。
OpenObserve 快速入门
> 目标:用一条最快的路径在 Linux 服务器上把 OpenObserve v1.1.1 跑起来,并完整走一遍"启动服务 → 登录控制台 → 摄入日志 → SQL 查询 → 创建仪表盘"的最小闭环。全部命令与回显已在 Ubuntu 22.04.4 LTS(x86_64)+ OpenObserve v1.1.1 实测通过。
一、环境信息
本文所有命令与回显的实测环境:
- 操作系统:Ubuntu 22.04.4 LTS(x86_64)
- OpenObserve:v1.1.1(官方 linux-amd64 musl 静态链接二进制,启动日志实测确认版本号)
- 服务端口:5080(HTTP,Web 控制台与 API 共用)
- 数据目录:
/data(通过ZO_DATA_DIR指定) - 管理账号:
root@example.com/Q1w2E3r4!(首次启动通过环境变量设定,演示口令)
二、前置条件
- 一台 Linux 服务器(x86_64/aarch64 均可,OpenObserve 是静态链接二进制,无任何运行时依赖);
- 开放 TCP 5080 端口(或自定义端口,见第七节);
- 磁盘余量建议 ≥ 20GB(WAL 与缓存写入);
- 能访问官方下载站
downloads.openobserve.ai(受网络限制的服务器可走代理或离线传输二进制)。
💡 说明:OpenObserve 单个二进制即包含 Web 控制台、摄入与查询 API、告警调度全部能力,无外部数据库依赖——单机模式的元数据内置 SQLite 存储,这也是它比 ELK 部署面小得多的根本原因。
三、获取并启动服务
3.1 下载二进制
官方 Quick Start 提供的下载命令(版本号以官方 Releases 页为准,当前最新稳定版为 v1.1.1):
curl -L https://downloads.openobserve.ai/releases/openobserve/v1.1.1/openobserve-linux-amd64-musl.tar.gz -o openobserve.tar.gz
tar -zxvf openobserve.tar.gz
chmod +x openobserve
⚠️ 注意:
downloads.openobserve.ai是官方发布分发站,部分网络环境直连可能被拒(返回 403 Access Denied),此时为 curl 配置代理即可;本文后续所有实测均基于该官方 v1.1.1 二进制完成。
3.2 启动
首次启动必须同时指定数据目录与初始管理员邮箱/口令,缺一不可(原因见 3.3 排障实录):
ZO_DATA_DIR=/data \
ZO_ROOT_USER_EMAIL="root@example.com" \
ZO_ROOT_USER_PASSWORD="Q1w2E3r4!" \
nohup ./openobserve > openobserve.log 2>&1 &
等待数秒后验证服务就绪:
curl -s http://localhost:5080/healthz
实测回显:
{"status":"ok"}
启动日志头部(节选,实测):
2026-10-18T04:02:11.194517690+00:00 INFO openobserve: Starting OpenObserve v1.1.1
2026-10-18T04:02:11.194596869+00:00 INFO openobserve: System info: CPU cores 12, MEM total 31.30 GB, Disk total 785.88 GB, free 535.07 GB
第一行即确认了实际运行版本为 v1.1.1。
3.3 首启排障实录:缺 root 凭据直接 panic
实测中,用全新数据目录启动但不设置 ZO_ROOT_USER_EMAIL / ZO_ROOT_USER_PASSWORD 时,服务在后台任务初始化阶段直接 panic 退出:
thread '<unnamed>' (9854) panicked at src/jobs/src/job/mod.rs:365:13:
Please set root user email-id & password using ZO_ROOT_USER_EMAIL & ZO_ROOT_USER_PASSWORD environment variables. This can also indicate an invalid email ID. Email ID must comply with ([a-z0-9_+]([a-z0-9_+.-]*[a-z0-9_+])?)@([a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6})
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Error: backend job init failed: channel closed
结论:数据目录中尚无用户库(SQLite)时,OpenObserve 用这两个环境变量初始化 root 账号;若目录已有用户数据(重启场景),则不再依赖它们。邮箱必须符合标准格式(xxx@yyy.zz),口令无复杂度强校验但建议 ≥ 8 位含大小写与符号。
四、登录控制台
浏览器访问 http://<服务器IP>:5080,会进入登录页。命令行可先验证 Web 控制台入口与登录接口:
# Web 控制台入口
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:5080/web/
# 登录接口(会话 Cookie)
curl -s -X POST http://localhost:5080/auth/login \
-H "Content-Type: application/json" \
-d '{"name":"root@example.com","password":"Q1w2E3r4!"}'
实测回显:
200
{"status":true,"message":""}
登录成功后进入默认组织(Organization)default 的日志检索页。后续所有 API 调用既可以用 HTTP Basic 认证(邮箱:口令),也可以用控制台导出的 Bearer Token。
五、摄入第一条日志
OpenObserve 的数据组织单位是流(Stream),相当于日志集/表。流无需预先创建——第一次向其写入数据时自动建立并推断 schema。用 JSON 摄入 API 向 app_logs 流写入 5 条应用日志:
curl -s -u "root@example.com:Q1w2E3r4!" \
-X POST "http://localhost:5080/api/default/app_logs/_json" \
-H "Content-Type: application/json" \
-d '[
{"level":"info","job":"api-gateway","message":"POST /api/v1/orders 200 in 12ms","status":200,"duration_ms":12,"host":"web-01"},
{"level":"warn","job":"api-gateway","message":"GET /api/v1/cart slow response","status":200,"duration_ms":860,"host":"web-01"},
{"level":"error","job":"payment","message":"upstream timeout while charging","status":504,"duration_ms":3005,"host":"pay-02"},
{"level":"info","job":"payment","message":"charge succeeded order=A-1024","status":200,"duration_ms":45,"host":"pay-02"},
{"level":"info","job":"auth","message":"user login ok uid=1001","status":200,"duration_ms":8,"host":"auth-01"}
]'
实测回显:
{"code":200,"status":[{"name":"app_logs","successful":5,"failed":0}]}
successful:5, failed:0 表示 5 条全部入库。此时打开控制台的 Logs → Streams 页面,已能看到 app_logs 流及其自动推断的字段(level/job/message/status/duration_ms/host)。
六、SQL 查询日志
通过查询 API 用标准 SQL 检索刚写入的数据(时间范围以微秒时间戳表示,示例取最近 1 小时):
NOW=$(date +%s)
curl -s -u "root@example.com:Q1w2E3r4!" \
-X POST "http://localhost:5080/api/default/_search" \
-H "Content-Type: application/json" \
-d "{\"query\":{\"sql\":\"SELECT level, job, message, duration_ms FROM app_logs ORDER BY duration_ms DESC LIMIT 3\",\"start_time\":$(( (NOW-3600)*1000000 )),\"end_time\":$(( NOW*1000000 ))}}"
实测回显(节选):
{"took":9,"took_detail":{"total":9,"cache_took":0,"file_list_took":0,"wait_in_queue":0,"idx_took":0,"search_took":8},"hits":[{"_timestamp":1792296280528199,"level":"error","job":"payment","message":"upstream timeout while charging","duration_ms":3005},{"_timestamp":1792296280528198,"level":"warn","job":"api-gateway","message":"GET /api/v1/cart slow response","duration_ms":860},{"_timestamp":1792296280528199,"level":"info","job":"payment","message":"charge succeeded order=A-1024","duration_ms":45}],"total":3,"from":0,"size":3,"cached_ratio":0,"scan_size":0,"idx_scan_size":0,"scan_records":5,"is_partial":false}
要点解读:hits 按自定义字段 duration_ms 倒序返回前 3 条;scan_records:5 说明全量扫描了 5 条记录;is_partial:false 表示结果完整。控制台的 Logs 页与该 API 能力等价——在搜索框直接写 SQL 即可。
💡 技术拓展:查询时间参数业界常见三种表示——秒级时间戳(Prometheus 风格)、毫秒(JS 生态常用)、微秒(OpenObserve 的
start_time/end_time)。换算口诀:秒 ×1,000,000。给错量级是新手最常见的"查不到数据"原因。
七、创建第一个仪表盘
仪表盘同样可由 API 创建(控制台操作等价):
curl -s -u "root@example.com:Q1w2E3r4!" \
-X POST "http://localhost:5080/api/default/dashboards" \
-H "Content-Type: application/json" \
-d '{"title":"app_logs overview","description":"demo dashboard"}'
实测回显(节选):
{"v8":{"version":8,"dashboardId":"7517435508599816192","title":"app_logs overview","description":"demo dashboard","owner":"root@example.com",...},"hash":"1333..."}
返回的 dashboardId 用于后续更新/删除。登录控制台进入 Dashboards,打开"app_logs overview"即可开始添加面板:选数据流 app_logs,例如用 SELECT histogram(_timestamp, '1 minute') AS t, count(*) FROM app_logs GROUP BY t 做一张每分钟日志量折线图。
至此最小闭环完成:启动 → 登录 → 摄入 → 查询 → 仪表盘。后续深入:
- 服务化部署(环境变量、持久化、运维命令)见《OpenObserve Docker Compose 部署指南》;
- 参数逐项调优见《OpenObserve v1.1.1 配置参数详解》;
- 摄入/查询/告警等全部 API 见《OpenObserve v1.1.1 API 使用详解》。
八、参考链接
- 官方 Quick Start:https://openobserve.ai/docs/quickstart/
- 下载页:https://openobserve.ai/downloads
- 摄入 API 文档:https://openobserve.ai/docs/api/ingestion/logs/json
- 查询 API 文档:https://openobserve.ai/docs/api/search/