使用 /_log 端点查看最近 100 条错误日志的 curl 命令及需要携带的身份凭证?

解读

国内生产环境普遍开启 CouchDB 强制认证,默认管理员账号为 admin,密码在 etc/local.ini 或容器环境变量 COUCHDB_USER / COUCHDB_PASSWORD 中配置。
/_log 属于 特权端点,未携带凭证会返回 401 Unauthorized;若仅授予 _reader 角色也会返回 403 Forbidden
日志级别由 log/level 配置,国内常用 errorwarning,因此需加 ?bytes=10000?offset=-100近似行数过滤,再 grep ERROR 取最近 100 条,避免一次性拉取过大日志导致 OOM网络超时

知识点

  1. /_log 只能由 server admin_admin 角色访问。
  2. CouchDB 认证方式:
    • Basic Auth-u user:pass
    • Cookie Auth:先 POST /_session 获取 AuthSession Cookie,再带 Cookie 访问
  3. 日志接口参数:
    • bytes=N:返回尾部 N 字节,最实用
    • offset=-N:从文件尾倒数 N 行,3.x 起支持
  4. 国内云厂商(阿里云、腾讯云)托管实例常关闭 /_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

拓展思考

  1. 若公司采用 LDAP 统一认证,CouchDB 通过 couchdb-auth-ldap 插件对接,则 curl 需先 POST /_session 拿到 AuthSession Cookie,再带 -H "Cookie: AuthSession=xxx" 访问 /_log。
  2. 国内金融合规要求 日志不落本地,可把 /_log 输出通过 Filebeat -> Kafka -> ELK 链路采集,此时需给 Filebeat 配置 CouchDB 管理员账号,并启用 TLS 双向认证防止日志被中间人截获。
  3. 面试追问:
    • “如果日志量极大,如何实时只拉取含某用户 ID 的 error?”
      答:使用 /_log?bytes=xxx 流式输出,通过 grep | jq 做管道过滤,或升级 3.3+ 使用 /_log?filter=regex 实验特性。