From efb7adc9675e11df4aed243a8d7ae4f9ade62a6b Mon Sep 17 00:00:00 2001 From: Chuanyi Li Date: Tue, 14 Aug 2018 22:24:50 +0800 Subject: [PATCH] Create canal prometheus docs. --- images/publish_blocking.PNG | Bin 0 -> 41387 bytes images/sink_blocking.PNG | Bin 0 -> 39320 bytes prometheus/README.md | 89 ++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 images/publish_blocking.PNG create mode 100644 images/sink_blocking.PNG create mode 100644 prometheus/README.md diff --git a/images/publish_blocking.PNG b/images/publish_blocking.PNG new file mode 100644 index 0000000000000000000000000000000000000000..aa7d502bf584b711fd1b046b21e826dd92195edf GIT binary patch literal 41387 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 O@Q|U&{_MS{e*ZtreH1(Z literal 0 HcmV?d00001 diff --git a/images/sink_blocking.PNG b/images/sink_blocking.PNG new file mode 100644 index 0000000000000000000000000000000000000000..482cf4e9434af88969e7d134efd9337eb81ed626 GIT binary patch literal 39320 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

n@@6j*ds!*`67m|-(_2`?xft<=Uu=5Nup;x zZ=|FYT%%p-b}ml6OaGyxaxha^Bp4ufC%MwBSt0-8c+@htVCs#lUv*GkMsJ-g4S7NE z_ik+_l)NXH&6F$}nk!_!WUg7*!(5ox8E|c1aY!_=rp2hseRT+p!2NASfrN0vEXmx_tvYP?YME{#=MC~tIM=$)0z>=?4$A8Y}|Or8TkjDaR+9`v}u=o|6d+*mM|~p bhypeDPOalC=~x@mYO~GujTsx<|NegfB2)=^ literal 0 HcmV?d00001 diff --git a/prometheus/README.md b/prometheus/README.md new file mode 100644 index 00000000..1a76709b --- /dev/null +++ b/prometheus/README.md @@ -0,0 +1,89 @@ +###Canal Prometheus 简介 + +Canal server 性能指标监控基于prometheus的实现。 + +关于prometheus,参见[官网](https://prometheus.io/) + +#### 当前监控的canal相关原始指标列表: + +| 指标 | 说明 | 单位 | 精度 | +| :---- | :---- | ----: |----: | +|canal_instance_traffic_delay |instance延迟 | 毫秒 | 毫秒 | +|canal_instance_transactions |instance接收transactions计数|-|-| +|canal_instance_row_events |instance接收rowData类型events计数|-|-| +|canal_instance_rows_counter |instance接收events包含变更行数计数|-|-| +|canal_instance |instance基本信息|-|-| +|canal_instance_subscriptions |instance订阅数量|-|-| +|canal_instance_publish_blocking_time |instance dump线程publish阻塞时间(仅parallel解析模式)|毫秒|纳秒| +|canal_instance_received_binlog_bytes |instance接收binlog字节数|byte|-| +|canal_instance_parser_mode |instance解析模式(是否开启parallel解析)|-|-| +|canal_instance_client_packets |instance client请求packets计数|-|-| +|canal_instance_client_bytes|向instance client发送数据包字节计数|byte|-| +|canal_instance_client_empty_batches|向instance client发送的空batch计数|-|-| +|canal_instance_client_request_error|instance client请求失败计数|-|-| +|canal_instance_client_request_latency |instance client请求延迟概况|-|-| +|canal_instance_sink_blocking_time |instance sink线程put数据至store的阻塞时间|毫秒|纳秒| +|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|-| + +#### 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(); + +详见:[prometheus/client_java](https://github.com/prometheus/client_java) + + +#### Quick start + +1. 安装并部署对应平台的prometheus,参见[官方guide](https://prometheus.io/docs/introduction/first_steps/) + +2. 配置prometheus.yml,添加canal的job,示例: +``` + - job_name: 'canal' + static_configs: + - targets: ['localhost:11112'] //端口配置即为canal.properties中的canal.metrics.pull.port +``` + +3. 启动prometheus与canal server + +#### Prometheus expression 与相应 use case +* Sink线程空闲比 +``` +clamp_max(rate(canal_instance_sink_blocking_time{destination="example"}[2m]), 1000) / 10 +``` +**sink线程idle时间片比例(向store中put events时)。若idle占比很高,则store总体上处于满的状态,client的consume速度低于server的produce速度** + +_简单说明一下range-vector,通俗来说表达式会用时间点前range-vector period内的所有samples参与运算。_ +_range-vector值如果太小,图会碎片化;反之,实时性会比较差。请结合scrape_interval设定合理的值。_ + +* Dump线程空闲比 +``` +clamp_max(rate(canal_instance_publish_blocking_time{destination="example"}[2m]), 1000) / 10 +``` +**dump线程idle时间片比例(仅parallel mode, dump线程向disruptor发布event时)。若idle占比较高:** + +**1. Sinking idle ratio也很高,则总体还是因为client的consume速度相对较慢。** + +**2. Sinking idle ratio较低,那么server端parser是性能瓶颈,可参考[Performance](https://github.com/alibaba/canal/wiki/Performance)进行tuning.** + +* Delay(seconds) +``` +canal_instance_traffic_delay / 1000 +``` +**Instance binlog消费延迟,有两个注意点:** + +**1. 如果Canal已经消费至最新position,且binlog长时间未更新,delay的resolution受到master_heartbeat_period的影响,目前频率为15秒。** + +**2. Limitations: 如果store满了(恰好store中的数据包含最新的position,且MySQL binlog停止更新),且client暂停消费,那么delay会不断增长。当然,满足这些条件的概率极低。** + +* Binlog接收速率(KB/s) +``` +rate(canal_instance_received_binlog_bytes{destination="example"}[2m]) / 1024 +``` +**'Sink线程空闲比'与'Dump线程空闲比'都很低,delay还是很高的情况,请查看binlog接收速率是否符合预期。** + + +--To be continued...