ShardingSphere并不負責如何采集、存儲以及展示應用性能監控的相關數據,而是將SQL解析與SQL執行這兩塊數據分片的最核心的相關信息發送至應用性能監控系統,并交由其處理。 換句話說,ShardingSphere僅負責產生具有價值的數據,并通過標準協議遞交至相關系統。
現有問題
- 現有版本5.2.1不支持對于jdbc模式的直接監控
- 現有pd版本實現雙寫的重構對于 ShardingSphereStatement、ShardingSpherePreparedStatement是相關監控是否需要重構代碼
- 連接池連接信息的監控
方案
針對sql執行情況的監控
- 針對當前的5.2.1,參考5.3.2進行agent相關代碼的編寫
-
升級版本5.3.2
Apache ShardingSphere-JDBC 性能監控實戰
-
trace監控同上,現有metrics指標[1]
數據連接池監控
- HikariCP 自帶
HikariCP 數據庫連接池開啟prometheus監控_hikaricp開啟sql監控_croder的博客-CSDN博客
可觀測性-Metrics-數據庫連接池HikariCP監控_hikaricp 監控_lakernote的博客-CSDN博客
HikariConfig hikariConfig = new HikariConfig();hikariConfig.setJdbcUrl("jdbc:mysql://xxxxxxxx:3306/pegasus_data_demo_00?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=true&requireSSL=false");hikariConfig.setUsername("root");hikariConfig.setPassword("xxxxxxx.");hikariConfig.setDriverClassName("com.mysql.jdbc.Driver");hikariConfig.setAutoCommit(true);hikariConfig.setPoolName("demo-SSSSSS");hikariConfig.setMaximumPoolSize(10);hikariConfig.setMinimumIdle(3);// 創建HikariDataSourceHikariDataSource dataSource = new HikariDataSource(hikariConfig);// 設置metric注冊器 每10秒打印一次LoggingMeterRegistry loggingMeterRegistry = new LoggingMeterRegistry(new LoggingRegistryConfig() {@Overridepublic String get(String key) {return null;}@Overridepublic Duration step() {return Duration.ofSeconds(10);}}, Clock.SYSTEM);dataSource.setMetricRegistry(loggingMeterRegistry);// 測試 持有3秒連接后才釋放Connection connection = dataSource.getConnection();TimeUnit.SECONDS.sleep(1000);connection.close();
通過注入 Metricslogs 暴露詳細 metrics[2]
BUT:作者不希望在連接池層面進行日志的輸出,雖然是一點點的性能
SQL logging · Issue #57 · brettwooldridge/HikariCP
-
Druid
自帶監控,通過暴露相關的Metrics的數據進行監控
-
……
Metrics[1]
指標名稱 | 指標類型 | 指標描述 |
---|---|---|
build_info | GAUGE | 構建信息 |
parsed_sql_total | COUNTER | 按類型(INSERT、UPDATE、DELETE、SELECT、DDL、DCL、DAL、TCL、RQL、RDL、RAL、RUL)分類的解析總數 |
routed_sql_total | COUNTER | 按類型(INSERT、UPDATE、DELETE、SELECT)分類的路由總數 |
routed_result_total | COUNTER | 路由結果總數(數據源路由結果、表路由結果) |
jdbc_state | GAUGE | ShardingSphere-JDBC 狀態信息。0 表示正常狀態;1 表示熔斷狀態;2 鎖定狀態 |
jdbc_meta_data_info | GAUGE | ShardingSphere-JDBC 元數據信息 |
jdbc_statement_execute_total | COUNTER | 語句執行總數 |
jdbc_statement_execute_errors_total | COUNTER | 語句執行錯誤總數 |
jdbc_statement_execute_latency_millis | HISTOGRAM | 語句執行耗時 |
jdbc_transactions_total | COUNTER | 事務總數,按 commit,rollback 分類 |
Metrics[2]
指標 | 含義 | 詳解 |
---|---|---|
hikaricp.connections | 當前總連接數,包括空閑的連接和使用中的連接 | Connections = activeConnection + idleConnections,會隨著連接使用情況變化。 |
hikaricp.connections.active | 正在使用中活躍連接數 | 會隨著連接使用情況變化。 |
hikaricp.connections.idle | 空閑連接數 | 會隨著連接使用情況變化。 |
hikaricp.connections.max | 最大連接數 | 初始配置。 |
hikaricp.connections.min | 最小連接數 | 初始配置。 |
hikaricp.connections.pending | 正在等待連接的線程數量 | 一般來說,這里應該都是 0。如果存在這個數據并且時間較長要觸發告警,視情況加大最大連接數。 |
hikaricp.connections.acquire | 獲取每個連接需要時間,單位為 ns | |
hikaricp.connections.creation | 連接創建時間,單位為 ms | |
hikaricp.connections.timeout | 創建連接超時次數 | |
hikaricp.connections.usage | 連接從池中取出到返回的時間,單位為 ms | 連接被業務占用時間,如果這個時間長的話,可能是慢 SQL 或者長事務導致連接被占用問題。 |
# HELP routed_sql_total Total count of routed SQL
# TYPE routed_sql_total counter
routed_sql_total{type="SELECT",} 28.0
routed_sql_total{type="INSERT",} 62.0
# HELP jdbc_statement_execute_total Total number of statement execute
# TYPE jdbc_statement_execute_total counter
jdbc_statement_execute_total{statement_type="prepared_statement",} 14.0
# HELP parsed_sql_total Total count of parsed SQL
# TYPE parsed_sql_total counter
parsed_sql_total{type="SELECT",} 28.0
parsed_sql_total{type="INSERT",} 62.0
# HELP jdbc_statement_execute_latency_millis Statement execute latency millis histogram
# TYPE jdbc_statement_execute_latency_millis histogram
jdbc_statement_execute_latency_millis_bucket{le="1.0",} 0.0
jdbc_statement_execute_latency_millis_bucket{le="2.0",} 0.0
jdbc_statement_execute_latency_millis_bucket{le="4.0",} 0.0
jdbc_statement_execute_latency_millis_bucket{le="8.0",} 0.0
jdbc_statement_execute_latency_millis_bucket{le="16.0",} 0.0
jdbc_statement_execute_latency_millis_bucket{le="32.0",} 0.0
jdbc_statement_execute_latency_millis_bucket{le="64.0",} 2.0
jdbc_statement_execute_latency_millis_bucket{le="128.0",} 8.0
jdbc_statement_execute_latency_millis_bucket{le="256.0",} 12.0
jdbc_statement_execute_latency_millis_bucket{le="512.0",} 13.0
jdbc_statement_execute_latency_millis_bucket{le="1024.0",} 14.0
jdbc_statement_execute_latency_millis_bucket{le="2048.0",} 14.0
jdbc_statement_execute_latency_millis_bucket{le="4096.0",} 14.0
jdbc_statement_execute_latency_millis_bucket{le="+Inf",} 14.0
jdbc_statement_execute_latency_millis_count 14.0
jdbc_statement_execute_latency_millis_sum 2491.0
# HELP routed_result_total Total count of routed result
# TYPE routed_result_total counter
routed_result_total{object="data_source",name="pegasus_data_demo_00",} 118.0
routed_result_total{object="data_source",name="pegasus_data_demo_01",} 56.0
routed_result_total{object="table",name="user_info_0000",} 28.0
routed_result_total{object="table",name="user_info_0001",} 90.0
routed_result_total{object="table",name="user_info_0002",} 28.0
routed_result_total{object="table",name="user_info_0003",} 28.0
# HELP build_info Build information
# TYPE build_info gauge
build_info{name="ShardingSphere",version="5.3.2",} 1.0
# HELP jdbc_statement_execute_created Total number of statement execute
# TYPE jdbc_statement_execute_created gauge
jdbc_statement_execute_created{statement_type="prepared_statement",} 1.691140932075E9
# HELP jdbc_statement_execute_latency_millis_created Statement execute latency millis histogram
# TYPE jdbc_statement_execute_latency_millis_created gauge
jdbc_statement_execute_latency_millis_created 1.691140932077E9
# HELP parsed_sql_created Total count of parsed SQL
# TYPE parsed_sql_created gauge
parsed_sql_created{type="SELECT",} 1.691140931048E9
parsed_sql_created{type="INSERT",} 1.691141080971E9
# HELP routed_result_created Total count of routed result
# TYPE routed_result_created gauge
routed_result_created{object="data_source",name="pegasus_data_demo_00",} 1.691140931237E9
routed_result_created{object="data_source",name="pegasus_data_demo_01",} 1.691140931237E9
routed_result_created{object="table",name="user_info_0000",} 1.691140931237E9
routed_result_created{object="table",name="user_info_0001",} 1.691140931237E9
routed_result_created{object="table",name="user_info_0002",} 1.691140931237E9
routed_result_created{object="table",name="user_info_0003",} 1.691140931237E9
# HELP routed_sql_created Total count of routed SQL
# TYPE routed_sql_created gauge
routed_sql_created{type="SELECT",} 1.691140931227E9
routed_sql_created{type="INSERT",} 1.691141080974E9