Skip to content

6. 监控告警

woqutech-qdecoder edited this page Mar 11, 2022 · 3 revisions

o2k集成了prometheus exposer,外部可以从o2k exposer实时获取各项指标。

配置o2k exposer

assembler.conf:

exposer.port=9194

然后配置prometheus server从o2k exposer定时抓取指标值,然后在grafana中展示出来。

也可以直接用浏览器查看指标:

http://127.0.0.1:9194/metrics

o2k-monitor

我们提供了一个docker镜像o2k-monitor,其中集成了prometheus和grafana,运行o2k-monitor可以监视o2k的各项指标:

首先确保o2k容器已经运行起来了,而且容器名字必须为o2k,如:

docker run -it --pull always --name o2k -p 9092:9092 registry.cn-hangzhou.aliyuncs.com/woqutech/o2k

然后运行o2k-monitor:

docker run -it --pull always --name o2k-monitor --link o2k -p 3000:3000 registry.cn-hangzhou.aliyuncs.com/woqutech/o2k-monitor

然后用浏览器访问grafana界面:

http://localhost:3000/

grafana的账号/密码:o2k/woqutech

运行示例:

o2k-monitor-metrics1

主要指标

1. redolog解析延迟(单位:秒)

# HELP qdecoder_sync_delay sync delay
# TYPE qdecoder_sync_delay gauge
qdecoder_sync_delay{node_name="defaultapp",component_name="parser",parser_id="1",unit="second"} 0.000000
qdecoder_sync_delay{node_name="defaultapp",component_name="parser",parser_id="2",unit="second"} 0.000000
qdecoder_sync_delay{node_name="defaultapp",component_name="CProcManager",proc_manager_id="1",unit="second"} 1.000000
qdecoder_sync_delay{node_name="defaultapp",component_name="CProcManager",proc_manager_id="2",unit="second"} 1.000000
qdecoder_sync_delay{node_name="defaultapp",component_name="CTransManager",unit="second"} 1.000000

其中:

  • 各parser读取延迟:{component_name=parser, parser_id=1|2|...}
  • assembler接收延迟:{component_name=CProcManager, proc_manager_id=1|2|...}
  • assembler序列化延迟:{component_name=CTransManager}

2. 队列状态

通过队列满百分比来反映组件的性能瓶颈。

# HELP qdecoder_queue_full_percent Where is the bottleneck of qdecoder
# TYPE qdecoder_queue_full_percent gauge

qdecoder_queue_full_percent{node_name="defaultapp",component_name="parser",parser_id="1",queue_name="parse_queue"} 0.000000
qdecoder_queue_full_percent{node_name="defaultapp",component_name="parser",parser_id="1",queue_name="send_queue"} 0.000000

qdecoder_queue_full_percent{node_name="defaultapp",component_name="parser",parser_id="2",queue_name="parse_queue"} 0.000000
qdecoder_queue_full_percent{node_name="defaultapp",component_name="parser",parser_id="2",queue_name="send_queue"} 0.000000

qdecoder_queue_full_percent{node_name="defaultapp",component_name="CProcManager",proc_manager_id="1",queue_name="transaction_queue"} 0.000000
qdecoder_queue_full_percent{node_name="defaultapp",component_name="CProcManager",proc_manager_id="2",queue_name="transaction_queue"} 0.000000

qdecoder_queue_full_percent{node_name="defaultapp",component_name="CTransManager",queue_name="serial_queue"} 0.000000
  • 各parser解析队列:{component_name=parser, parser_id=1|2|..., queue_name=parse_queue}
  • 各parser发送队列:{component_name=parser, parser_id=1|2|..., queue_name=send_queue}
  • assembler事务队列:{component_name=CProcManager, proc_manager_id=1|2|..., queue_name=transaction_queue}
  • assembler序列化队列:{component_name=CTransManager, queue_name=serial_queue}

3. 解析流量(单位:MB/s)

# HELP qdecoder_workload The workload of each component of qdecoder
# TYPE qdecoder_workload gauge
qdecoder_workload{node_name="defaultapp",component_name="parser",event_type="read_log",parser_id="1",unit="byte"} 0.000000
qdecoder_workload{node_name="defaultapp",component_name="parser",event_type="send_msg",parser_id="1",unit="byte"} 0.000000

qdecoder_workload{node_name="defaultapp",component_name="parser",event_type="read_log",parser_id="2",unit="byte"} 0.000000
qdecoder_workload{node_name="defaultapp",component_name="parser",event_type="send_msg",parser_id="2",unit="byte"} 0.000000

qdecoder_workload{node_name="defaultapp",component_name="CProcManager",event_type="recv_msg",proc_manager_id="1",unit="byte"} 0.000000
qdecoder_workload{node_name="defaultapp",component_name="CProcManager",event_type="recv_msg",proc_manager_id="2",unit="byte"} 0.000000

qdecoder_workload{node_name="defaultapp",component_name="CTransManager",event_type="recv_msg",unit="byte"} 0.000000
qdecoder_workload{node_name="defaultapp",component_name="CTransManager",event_type="write_binlog",unit="byte"} 0.000000
  • 各parser读取日志量:{component_name=parser, parser_id=1|2|..., event_type=read_log}
  • 各parser解析日志量:{component_name=CTransManager, event_type=recv_msg}
  • assembler序列化binlog量:{component_name=CTransManager, event_type=write_binlog}

4. 解析事务总数

# HELP qdecoder_transactions_number_total How many transactions have been handled ?
# TYPE qdecoder_transactions_number_total gauge
qdecoder_transactions_number_total{node_name="defaultapp",component_name="CProcManager",proc_manager_id="2",when_count="commit"} 0.000000
qdecoder_transactions_number_total{node_name="defaultapp",component_name="CProcManager",proc_manager_id="1",when_count="commit"} 0.000000

qdecoder_transactions_number_total{node_name="defaultapp",component_name="CTransManager",when_count="commit"} 0.000000
qdecoder_transactions_number_total{node_name="defaultapp",component_name="CTransManager",when_count="binlog"} 0.000000
  • 各parser分发的事务数:{component_name=CProcManager, proc_manager_id=1|2|...}
  • assembler序列化的事务数:{component_name=CTransManager}

注意:可以由grafana计算TPS.

5. 解析数据行总数

# HELP qdecoder_rows_number_total How many rows has been handled ?
# TYPE qdecoder_rows_number_total gauge
qdecoder_rows_number_total{node_name="defaultapp",component_name="CProcManager",proc_manager_id="1"} 0.000000
qdecoder_rows_number_total{node_name="defaultapp",component_name="CProcManager",proc_manager_id="2"} 0.000000

qdecoder_rows_number_total{node_name="defaultapp",component_name="CTransManager",operation="all"} 0.000000
qdecoder_rows_number_total{node_name="defaultapp",component_name="CTransManager",operation="delete"} 0.000000
qdecoder_rows_number_total{node_name="defaultapp",component_name="CTransManager",operation="update"} 0.000000
qdecoder_rows_number_total{node_name="defaultapp",component_name="CTransManager",operation="insert"} 0.000000
  • 总行数:{component_name=CTransManager, operation=all}
  • insert行数:{component_name=CTransManager, operation=insert}
  • update行数:{component_name=CTransManager, operation=update}
  • delete行数:{component_name=CTransManager, operation=delete}

6. 内存开销(单位: MB)

# HELP qdecoder_memory_used_total How much memory used ?
# TYPE qdecoder_memory_used_total gauge
qdecoder_memory_used_total{node_name="defaultapp",component_name="parser",parser_id="1",unit="MB"} 0.000000
qdecoder_memory_used_total{node_name="defaultapp",component_name="parser",parser_id="2",unit="MB"} 0.000000
qdecoder_memory_used_total{node_name="defaultapp",component_name="assembler",unit="MB"} 0.000000
  • 各parser内存用量: {component_name=parser, parser_id=1|2|...}
  • assembler内存用量: {component_name=assembler}

7. parser状态

各parser是否在线

# HELP qdecoder_parser_status Is the parser OK ? 1:online, 0:offline
# TYPE qdecoder_parser_status gauge
qdecoder_parser_status{node_name="defaultapp",parser_id="2"} 0.000000
qdecoder_parser_status{node_name="defaultapp",parser_id="1"} 0.000000