使用 /_log 端点查看最近 100 条错误日志的 curl 命令及需要携带的身份凭证?
解读
国内生产环境普遍开启 CouchDB 强制认证,默认管理员账号为 admin,密码在 etc/local.ini 或容器环境变量 COUCHDB_USER / COUCHDB_PASSWORD 中配置。
/_log 属于 特权端点,未携带凭证会返回 401 Unauthorized;若仅授予 _reader 角色也会返回 403 Forbidden。
日志级别由 log/level 配置,国内常用 error 或 warning,因此需加 ?bytes=10000 或 ?offset=-100 做近似行数过滤,再 grep ERROR 取最近 100 条,避免一次性拉取过大日志导致 OOM 或 网络超时。
知识点
- /_log 只能由 server admin 或 _admin 角色访问。
- CouchDB 认证方式:
- Basic Auth:
-u user:pass - Cookie Auth:先 POST /_session 获取 AuthSession Cookie,再带 Cookie 访问
- Basic Auth:
- 日志接口参数:
- bytes=N:返回尾部 N 字节,最实用
- offset=-N:从文件尾倒数 N 行,3.x 起支持
- 国内云厂商(阿里云、腾讯云)托管实例常关闭 /_log,需走 控制台-日志服务 或 工单提权,面试时需说明 “若端点被运营商禁用,则通过本地文件 /opt/couchdb/var/log/couchdb.log 查看”。
答案
# 使用 server admin 账号,取尾部约 10000 字节再过滤最近 100 条 ERROR
curl -s -u 'admin:YOUR_PASSWORD' \
'http://127.0.0.1:5984/_log?bytes=10000' \
| grep -E '^\[error\]' \
| tail -n 100
身份凭证:
HTTP Basic Auth 头,即 Authorization: Basic YWRtaW46WU9VUl9QQVNTV09SRA==,curl 中简写为 -u admin:YOUR_PASSWORD。
拓展思考
- 若公司采用 LDAP 统一认证,CouchDB 通过 couchdb-auth-ldap 插件对接,则 curl 需先 POST /_session 拿到 AuthSession Cookie,再带
-H "Cookie: AuthSession=xxx"访问 /_log。 - 国内金融合规要求 日志不落本地,可把 /_log 输出通过 Filebeat -> Kafka -> ELK 链路采集,此时需给 Filebeat 配置 CouchDB 管理员账号,并启用 TLS 双向认证防止日志被中间人截获。
- 面试追问:
- “如果日志量极大,如何实时只拉取含某用户 ID 的 error?”
答:使用 /_log?bytes=xxx 流式输出,通过 grep | jq 做管道过滤,或升级 3.3+ 使用 /_log?filter=regex 实验特性。
- “如果日志量极大,如何实时只拉取含某用户 ID 的 error?”