Canal Prometheus 简介
Canal server 性能指标监控基于prometheus的实现。
关于prometheus,参见官网
效果示意图
canal监控相关原始指标列表:指标
说明
单位
精度
canal_instance_transactions
instance接收transactions计数
-
-
canal_instance
instance基本信息
-
-
canal_instance_subscriptions
instance订阅数量
-
-
canal_instance_publish_blocking_time
instance dump线程提交到异步解析队列过程中的阻塞时间(仅parallel解析模式)
ms
ns
canal_instance_received_binlog_bytes
instance接收binlog字节数
byte
-
canal_instance_parser_mode
instance解析模式(是否开启parallel解析)
-
-
canal_instance_client_packets
instance client请求次数的计数
-
-
canal_instance_client_bytes
向instance client发送数据包字节计数
byte
-
canal_instance_client_empty_batches
向instance client发送get接口的空结果计数
-
-
canal_instance_client_request_error
instance client请求失败计数
-
-
canal_instance_client_request_latency
instance client请求的响应时间概况
-
-
canal_instance_sink_blocking_time
instance sink线程put数据至store的阻塞时间
ms
ns
canal_instance_store_produce_seq
instance store接收到的events sequence number
-
-
canal_instance_store_consume_seq
instance store成功消费的events sequence number
-
-
canal_instance_store
instance store基本信息
-
-
canal_instance_store_produce_mem
instance store接收到的所有events占用内存总量
byte
-
canal_instance_store_consume_mem
instance store成功消费的所有events占用内存总量
byte
-
canal_instance_put_rows
store put操作完成的table rows
-
-
canal_instance_get_rows
client get请求返回的table rows
-
-
canal_instance_ack_rows
client ack操作释放的table rows
-
-
canal_instance_traffic_delay
server与MySQL master的延时
ms
ms
canal_instance_put_delay
store put操作events的延时
ms
ms
canal_instance_get_delay
client get请求返回events的延时
ms
ms
canal_instance_ack_delay
client ack操作释放events的延时
ms
ms
监控展示指标指标
简述
多指标
Canal instance 基本信息。
是
网络带宽。包含inbound(canal server读取binlog的网络带宽)和outbound(canal server返回给canal client的网络带宽)
是
Canal server与master延时;store 的put, get, ack操作对应的延时。
是
sink线程blocking占比;dump线程blocking占比(仅parallel mode)。
是
Canal instance消费所有binlog事件的TPS, 以MySQL binlog events为单位计算。
否
Canal instance 处理binlog的TPS,以MySQL transaction为单位计算。
否
分别对应store的put, get, ack操作针对数据表变更行的TPS
是
Canal client请求server的请求数统计,结果按请求类型分类(比如get/ack/sub/rollback等)。
否
Canal client请求server的响应时间统计。
否
Canal client请求server返回空结果的统计。
是
Canal instance ringbuffer中堆积的events数量。
否
Canal instance ringbuffer中堆积的events内存使用量。
否
client发送请求的QPS,按GET与CLIENTACK分类统计
是
JVM 相关信息The Java client includes collectors for garbage collection, memory pools, JMX, classloading, and thread counts. These can be added individually or just use the DefaultExports to conveniently register them.DefaultExports.initialize();
监控指标详述与应用场景
Blocking
clamp_max(rate(canal_instance_sink_blocking_time{destination="example"}[2m]),1000)/10
sink线程blocking时间片比例(向store中put events时)。若idle占比很高,则store总体上处于满的状态,client的consume速度低于server的produce速度
clamp_max(rate(canal_instance_publish_blocking_time{destination="example"}[2m]),1000)/10
dump线程blocking时间片比例(仅parallel mode, dump线程向disruptor发布event时)。若idle占比较高:
1. Sinking idle ratio也很高,则瓶颈是因为client的consume速度相对较慢。
2. Sinking idle ratio较低,那么server端parser是性能瓶颈,可参考Performance进行tuning.
Delay(seconds)
canal_instance_traffic_delay{destination="example"}/1000
Server与MySQL master之间的延时。
canal_instance_put_delay{destination="example"}/1000
Store put操作时间点的延时。
canal_instance_get_delay{destination="example"}/1000
Client get操作时间点的延时。
canal_instance_ack_delay{destination="example"}/1000
Client ack操作时间点的延时。
网络带宽(KB/s)
rate(canal_instance_received_binlog_bytes{destination="example"}[2m])/1024
Dump线程读取binlog所占用带宽。当'Sink线程空闲比'与'Dump线程空闲比'都很低,delay却比较高的情况,请查看binlog接收速率是否符合预期。
rate(canal_instance_client_bytes{destination="example"}[2m])/1024
向Instance client发送格式化binlog所占用的带宽。MySQL低负载时,client get所返回的空包同样会占用不少的带宽。
TPS(Binlog events)
rate(canal_instance_store_consume_seq{destination="example"}[2m])
Canal instance client消费TPS(以binlog event为单位)。
TPS(MySQL transaction)
rate(canal_instance_transactions{destination="example"}[2m])
Canal instance处理transaction的TPS,以TRANSACTION_END事件为基准。
TPS(Table row)
rate(canal_instance_rows_counter{destination="example"}[2m])
Canal instance接受binlog中,数据库表变更行数的TPS.
rate(canal_instance_row_events{destination="example"}[2m])
Canal instance接受binlog中,rowData类型events的TPS.**批量DML的场景下,rowData会包含多个table rows, tableRows指标会显著高于rowDatas.**
Client requests
canal_instance_client_packets{destination="example"}
Netty server处理的client requests,以packetType为label分类统计。
Empty packets
rate(canal_instance_client_empty_batches{destination="example"}[2m])
client get返回每秒空包量。如果正常traffic下,该值很大,考虑使用connector的timeout机制,节省资源。
rate(canal_instance_client_packets{destination="example",packetType="GET"}[2m])
作为empty rate的参照。
Client latency
canal_instance_client_request_latency_bucket{destination="example"}
Histogram, client请求响应情况统计。关于histogram.
Event store占用
canal_instance_store_produce_seq{destination="example"}-canal_instance_store_consume_seq{destination="example"}
Event store内未ack的events数量,实时性受scrape_interval影响。
Event store memory占用(KB, 仅memory mode)
(canal_instance_store_produce_mem{destination="example"}-canal_instance_store_consume_mem{destination="example"})/1024
Event store内未ack的events所占用内存大小,实时性受scrape_interval影响。
Client QPS
rate(canal_instance_client_packets{destination="example",packetType="GET"}[2m])
GET类型QPS.
rate(canal_instance_client_packets{destination="example",packetType="CLIENTACK"}[2m])
CLIENTACK类型QPS.
状态信息
canal_instance{destination="example"}
canal_instance_parser_mode{destination="example"}
canal_instance_store{destination="example"}
通过labels展示状态信息。
Quick start安装并部署对应平台的prometheus,参见官方guide
配置prometheus.yml,添加canal的job,示例:
-job_name:'canal'
static_configs:
-targets:['localhost:11112']//端口配置即为canal.properties中的canal.metrics.pull.port
启动prometheus与canal server
安装与部署grafana,推荐使用新版本(5.2)。
启动grafana-server,使用用户admin与密码admin登录localhost:3000 (默认配置下)。
导入模板(canal/conf/metrics/Canal_instances_tmpl.json),参考这里。
进入dashboard 'Canal instances', 在'datasource'下拉框中选择刚才配置的prometheus datasource, 然后'destination'下拉框中就可以切换instance了(如果没出现instances列表就刷新下页面), just enjoy it.