CouchDB 可观测最佳实践
本文介绍如何通过观测云采集 CouchDB 的指标数据,帮助用户全面掌握 CouchDB 的运行状态,及时发现并解决问题,提升数据库的稳定性和性能。
CouchDB 简介
Apache CouchDB 是一款面向文档的开源数据库管理系统,可以通过 RESTful JavaScript Object Notation (JSON) API 访问。它使用 JSON 格式来存储文档,文档可以包含各种类型的数据,如字符串、数字、数组、对象等。CouchDB 采用了分布式架构,Couch 是 “Cluster Of Unreliable Commodity Hardware” 的首字母缩写,它反映了 CouchDB 的目标具有高度可伸缩性,提供了高可用性和高可靠性。
对 CouchDB 进行监控,能优化其运行性能,提升响应速度,合理配置资源,让系统处于最佳工作状态。通过有效的监控,可以助力保障系统稳定,提前察觉故障隐患,同时为容量规划提供支撑,适配业务数据增长。
观测云
观测云是一个统一实时监测平台,它提供全面的系统可观测性解决方案,帮助用户快速实现对云平台、云原生、应用及业务的监控需求。观测云的核心功能包括:基础设施监测,日志采集和分析,用户访问监测(RUM),应用性能监测(APM),服务可用性监测(拨测),安全巡检,智能监控等等。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。
DataKit 是观测云的数据采集器,提供 CouchDB 采集器用于采集 CouchDB 相关的指标数据。
部署 DataKit
登录观测云控制台,点击「集成」 -「DataKit」 - 「Linux」,复制安装命令,在主机中可以一键安装。

DataKit 开启 CouchDB 采集器
DataKit 目前支持 Prometheus 格式的数据采集。在配置 DataKit 之前,找到并编辑 CouchDB 启动配置文件,通常是在 /opt/couchdb/etc/local.ini,修改为如下,并重启 CouchDB 服务。
[prometheus]
additional_port = true
bind_address = 0.0.0.0
port = 17986
进入 DataKit 安装目录下的 conf.d/couchdb 目录,复制 couchdb.conf.sample 并命名为 couchdb.conf。示例如下:
[[inputs.prom]]
## Collector alias.
source = "couchdb"
## Exporter URLs.
urls = ["http://127.0.0.1:17986/_node/_local/_prometheus"]
## TLS configuration.
tls_open = false
# tls_ca = "/tmp/ca.crt"
# tls_cert = "/tmp/peer.crt"
# tls_key = "/tmp/peer.key"
## Set to 'true' to enable election.
election = true
## Customize tags.
[inputs.prom.tags]
# some_tag = "some_value"
# more_tag = "some_other_value"
## (Optional) Collect interval: (defaults to "30s").
# interval = "30s"
保存配置之后,重启 DataKit 即可。
datakit service -R
CouchDB 关键指标说明
监控 CouchDB 时,有以下关键指标需要关注:
- 系统资源指标:包括 CPU 内存磁盘以及网络相关信息,这些在主机或者容器层面的监控中包含,本文不再赘述
- 数据库运行状态:包括正常运行时间,不同日志级别的消息数量等
- 数据库性能指标,包括数据库读写,打开的数据库数量,打开的文件描述符数量等
- HTTP 请求指标:包括视图与临时视图读取的次数、以及超时的次数,HTTP 请求与批量请求的数量等
- 复制:统计失败的复制器变更管理器、变更工作队列、变更读取器等的数量,复制器调度程序崩溃与待处理的作业数量,连接所有者以及工作进程意外终止的次数
- 缓存:身份验证缓存命中、未命中以及总请求次数
关键指标说明:
| 指标 | 描述 | 类型 | 单位 |
|---|---|---|---|
| uptime_seconds | CouchDB 的正常运行时间 | 浮点数 | 秒(s) |
| erlang_memory_bytes | Erlang 模拟器动态分配的内存大小,用于监控 CouchDB 对内存资源的占用情况 | 浮点数 | 字节(B) |
| open_databases_total | 打开的数据库数量 | 浮点数 | 计数 |
| open_os_files_total | 打开的文件描述符数量 | 浮点数 | 计数 |
| database_reads_total | 从数据库中读取文档的次数 | 浮点数 | 计数 |
| database_writes_total | 数据库被更改的次数 | 浮点数 | 计数 |
| database_purges_total | 数据库被清除的次数 | 浮点数 | 计数 |
| httpd_temporary_view_reads_total | 临时视图读取的次数,临时视图的使用情况对数据库性能有一定影响,监控该指标可以评估临时视图的使用频率和必要性 | 浮点数 | 计数 |
| httpd_view_reads_total | 视图读取的次数,视图是 CouchDB 中用于查询数据的重要机制,该指标反映了视图的使用情况和查询负载 | 浮点数 | 计数 |
| httpd_view_timeouts_total | HTTP 视图超时的次数 | 浮点数 | 计数 |
| httpd_requests_total | HTTP 请求的数量,反映了系统对外提供服务的请求负载 | 浮点数 | 计数 |
| httpd_bulk_requests_total | 批量请求的数量 | 浮点数 | 计数 |
| httpd_status_codes | HTTP状态码响应的数量。状态码包括:200、201、202、204、206、301、304、400、403、404、405、406、409、412、414、415、416、417、500、501、503 | 浮点数 | 计数 |
| request_time_seconds | 不包含 MochiWeb 的情况下,CouchDB 内部请求的时长 | 浮点数 | 秒(s) |
| couch_replicator_changes_manager_deaths_total | 失败的复制器变更管理器数量(复制器用于在不同数据库之间同步数据) | 浮点数 | 计数 |
| couch_replicator_changes_queue_deaths_total | 失败的复制器变更工作队列数量 | 浮点数 | 计数 |
| couch_replicator_changes_reader_deaths_total | 失败的复制器变更读取器数量 | 浮点数 | 计数 |
| couch_replicator_connection_owner_crashes_total | 连接所有者在至少拥有一个连接时崩溃的次数 | 浮点数 | 计数 |
| couch_replicator_connection_worker_crashes_total | 工作进程意外终止的次数 | 浮点数 | 计数 |
| couch_replicator_jobs_crashed | 复制器调度程序崩溃的作业数量 | 浮点数 | 计数 |
| couch_replicator_jobs_pending | 复制器调度程序中待处理的作业数量 | 浮点数 | 计数 |
| couch_log_requests_total | 记录的日志级别消息数量。级别包括:alert(警报)、critical(严重)、debug(调试)、emergency(紧急)、error(错误)、info(信息)、notice(通知)、warning(警告) | 浮点数 | 计数 |
| auth_cache_hits_total | 身份验证缓存命中次数 | 浮点数 | 计数 |
| auth_cache_misses_total | 身份验证缓存未命中次数 | 浮点数 | 计数 |
| auth_cache_requests_total | 身份验证缓存请求次数 | 浮点数 | 计数 |
其他指标详细列表,可以参考观测云集成文档:https://docs.guance.com/integrations/couchdb/#metric
场景视图



监控器
针对 CouchDB 服务器请求的异常(4xx 和 5xx),以及响应时间,进行监控告警。
5xx 请求异常


4xx 请求异常


请求响应时长较高


总结
通过对 CouchDB 的监控,观测云能够帮助用户全面掌握 CouchDB 的运行状态,及时发现并解决问题,提升数据库的稳定性和性能。
Contact us
Join the community
to join the community
Try Guance
Start online and pay only for what you use.
Get startedChoose a Guance plan