对于WhatsApp这样规模庞大、对可用性和性能要求极高的系统来说,数据库监控是其运维的核心。监控指标旨在提供数据库健康状况、性能瓶颈、潜在安全问题和容量需求的全面洞察。
以下是数据库监控的关键指标分类及其重要性:
1.系统资源指标(System Resource Metrics)
这些是数据库服务器底层操作系统的指标,直接影响数据库的性能。
CPU利用率:
总利用率: CPU 的速度程度,最慢的计算能力是否存在瓶颈。
用户CPU:应用程序(数据库进程)使用CPU的百分比。
系统CPU: OS内核和驱动使用CPU的百分比。
I/O等待(I/O Wait): CPU等待磁盘I/O完成的时间百分比。高I/O等待磁盘是磁盘的瓶颈。
内存利用率:
总内存使用量:数据库进程、服务器和服务器的内存使用量。
可用内存/缓存命中率:最节省内存是否充足。低可用内存或低缓存命中率可能会导致磁盘 I/O 磁盘分区。
Swap使用量:如果数据库关闭使用Swap,表明内存不足,会严重影响性能。
磁盘I/O:
IOPS (Input/Output Operations Per Second):每秒读写操作次数。
吞吐量(Throughput):每秒读写器的数据量(MB/s)。
磁盘队列长度:等待磁 约旦 whatsapp 数据库 盘处理的请求数量。长队列磁盘是队列。
磁盘空间利用率:当前磁盘空间使用情况,是否预测需要扩容。
网络输入/输出:
入站/出站流量:数据节点接收和发送的数据量。
网络错误/丢包率:指示网络连接质量问题。
2.数据库实例状态指标(Database Instance Status Metrics)
这些指标关注数据库进程本身的运行状态和集群健康。
可用性/运行时长(Availability/Uptime):数据库服务是否正在运行,以及已运行了多长时间。
连接数:
当前活跃连接数:正在处理请求的连接。
当前空闲连接数:连接池中等待使用的连接。
最大连接数:数据库允许的最大连接数。
连接尝试次数(成功/失败):用于检测认证问题或应用连接风暴。
连接超时:客户端获取连接时发生的超时次数。
复制状态(Replication Status):(针对数据库如Cassandra)
复制延迟(Replication Lag):主节点与从节点(或副本之间)数据同步的时间差。高延迟可能导致数据不一致。
复制健康状态:复制仓库是否正常,是否存在错误。
节点健康状态: (针对全部数据库)
集群成员状态:所有节点是否都处于活跃状态,Gossip协议是否正常。
数据一致性:节点之间的数据副本是否一致。
3.查询和吞吐量指标(Query & Throughput Metrics)
这些指标直接反映数据库的业务处理能力和响应速度。
每秒查询数(QPS) / 每秒操作数(OPS):
Read QPS/OPS:数据库每秒处理的读取请求数。
写 QPS/OPS:数据库每秒处理的读取请求数。
操作类型分配:不同查询类型(如select、insert、update、delete)的比例。
查询延迟(Query Latency):
平均延迟:平均每个查询的执行时间。
P95/P99延迟: 95%或99%的查询在多长时间内完成。高百分延迟延迟是减缓用户体验的关键。
慢查询:执行时间超过预设阈值的查询数量和详细信息。
磁盘命中率(Cache Hit Ratio):数据库内部各种磁盘(如行磁盘、键磁盘)的磁盘命中率。高磁盘命中率意味着从内存磁盘中获取数据。
并发查询数/活跃请求数:数据库同时处理的查询数量。
4. 存储和数据指标(Storage & Data Metrics)
这些指标关注数据的存储效率和管理。
数据大小/报表:数据库中存储的总数据量,以及每天/每月的数据增长速度。
索引大小/效率:索引占用空间及索引的使用效率。
分区/分片统计:(针对数据库)各个数据分区或分片的数据量、请求量是否均衡,是否存在热点。
Cassandra特有指标:
Compaction状态:承载的Compaction任务数量、待处理的Compaction队列长度、Compaction吞吐量。Compaction对性能有显着影响。
Memtable 操作: Memtable 刷新(flush)到 SSTable 的频率和大小。
GC暂停时间: JVM垃圾恢复导致数据库暂停时间,过长的GC暂停会严重影响延迟。
5.错误和警告指标(Error & warning Metrics)
这些指标是发生问题或潜在问题的早期预警。
日志错误率:数据库日志中记录的错误、警告和异常的数量及频率。
认证失败:失败的登录尝试次数,可能是安全攻击的顶部。
资源老化错误:内存不足、连接老化、磁盘空间不足等错误。
监控实现方式:
WhatsApp 会使用多种工具和方法来收集和分析这些指标:
数据库自带工具:例如Cassandra的nodetool可以获取许多集群和节点级别的指标。
系统级代理:如Prometheusnode_exporter收集的操作系统级别的CPU、内存、磁盘、网络指标。
定制化代理/客户端库:为满足特定需求和集成内部系统,开发定制的代理程序或在客户端驱动中嵌入监控点。
集中化监控系统:将所有收集到的指标汇聚到统一的平台(如Prometheus + Grafana、自研的时间序列数据库和可视化工具、Splunk、Datadog等),进行实时仪表盘展示、趋势分析、通知。
日志管理系统:结合日志管理平台(如ELK Stack)对数据库日志进行收集、解析和分析,补充指标监控的不足。
通过对这些指标的持续监控和深入分析,WhatsApp能够主动发现并解决数据库性能指标、保障数据一致性、解决故障,并为未来的容量规划提供数据支撑。