Merge pull request #11788 from rabbitmq/memory-breakdown-endpoint
Move memory breakdown metrics to new endpoint
This commit is contained in:
		
						commit
						f4b80f4f9c
					
				|  | @ -86,35 +86,6 @@ | |||
|         {2, ?MILLISECOND, erlang_uptime_seconds, gauge, "Node uptime", uptime} | ||||
|     ]}, | ||||
| 
 | ||||
|     {node_memory, [ | ||||
|         {2, undefined, memory_code_module_bytes, gauge, "Code module memory footprint", code}, | ||||
|         {2, undefined, memory_client_connection_reader_bytes, gauge, "Client connection reader processes footprint in bytes", connection_readers}, | ||||
|         {2, undefined, memory_client_connection_writer_bytes, gauge, "Client connection writer processes footprint in bytes", connection_writers}, | ||||
|         {2, undefined, memory_client_connection_channel_bytes, gauge, "Client connection channel processes footprint in bytes", connection_channels}, | ||||
|         {2, undefined, memory_client_connection_other_bytes, gauge, "Client connection other processes footprint in bytes", connection_other}, | ||||
|         {2, undefined, memory_classic_queue_erlang_process_bytes, gauge, "Classic queue processes footprint in bytes", queue_procs}, | ||||
|         {2, undefined, memory_quorum_queue_erlang_process_bytes, gauge, "Quorum queue processes footprint in bytes", quorum_queue_procs}, | ||||
|         {2, undefined, memory_quorum_queue_dlx_erlang_process_bytes, gauge, "Quorum queue DLX worker processes footprint in bytes", quorum_queue_dlx_procs}, | ||||
|         {2, undefined, memory_stream_erlang_process_bytes, gauge, "Stream processes footprint in bytes", stream_queue_procs}, | ||||
|         {2, undefined, memory_stream_replica_reader_erlang_process_bytes, gauge, "Stream replica reader processes footprint in bytes", stream_queue_replica_reader_procs}, | ||||
|         {2, undefined, memory_stream_coordinator_erlang_process_bytes, gauge, "Stream coordinator processes footprint in bytes", stream_queue_coordinator_procs}, | ||||
|         {2, undefined, memory_plugin_bytes, gauge, "Total plugin footprint in bytes", plugins}, | ||||
|         {2, undefined, memory_modern_metadata_store_bytes, gauge, "Modern metadata store footprint in bytes", metadata_store}, | ||||
|         {2, undefined, memory_other_erlang_process_bytes, gauge, "Other processes footprint in bytes", other_proc}, | ||||
|         {2, undefined, memory_metrics_bytes, gauge, "Metric table footprint in bytes", metrics}, | ||||
|         {2, undefined, memory_management_stats_db_bytes, gauge, "Management stats database footprint in bytes", mgmt_db}, | ||||
|         {2, undefined, memory_classic_metadata_store_bytes, gauge, "Classic metadata store footprint in bytes", mnesia}, | ||||
|         {2, undefined, memory_quorum_queue_ets_table_bytes, gauge, "Quorum queue ETS tables footprint in bytes", quorum_ets}, | ||||
|         {2, undefined, memory_modern_metadata_store_ets_table_bytes, gauge, "Modern metadata store ETS tables footprint in bytes", metadata_store_ets}, | ||||
|         {2, undefined, memory_other_ets_table_bytes, gauge, "Other ETS tables footprint in bytes", other_ets}, | ||||
|         {2, undefined, memory_binary_heap_bytes, gauge, "Binary heap size in bytes", binary}, | ||||
|         {2, undefined, memory_message_index_bytes, gauge, "Message index footprint in bytes", msg_index}, | ||||
|         {2, undefined, memory_atom_table_bytes, gauge, "Atom table size in bytes", atom}, | ||||
|         {2, undefined, memory_other_system_bytes, gauge, "Other runtime footprint in bytes", other_system}, | ||||
|         {2, undefined, memory_runtime_allocated_unused_bytes, gauge, "Runtime allocated but unused blocks size in bytes", allocated_unused}, | ||||
|         {2, undefined, memory_runtime_reserved_unallocated_bytes, gauge, "Runtime reserved but unallocated blocks size in bytes", reserved_unallocated} | ||||
|     ]}, | ||||
| 
 | ||||
|     {node_persister_metrics, [ | ||||
|         {2, undefined, io_read_ops_total, counter, "Total number of I/O read operations", io_read_count}, | ||||
|         {2, undefined, io_read_bytes_total, counter, "Total number of I/O bytes read", io_read_bytes}, | ||||
|  | @ -277,6 +248,36 @@ | |||
|     ]} | ||||
| ]). | ||||
| 
 | ||||
| -define(METRICS_MEMORY_BREAKDOWN, [ | ||||
|     {node_memory, [ | ||||
|         {2, undefined, memory_code_module_bytes, gauge, "Code module memory footprint", code}, | ||||
|         {2, undefined, memory_client_connection_reader_bytes, gauge, "Client connection reader processes footprint in bytes", connection_readers}, | ||||
|         {2, undefined, memory_client_connection_writer_bytes, gauge, "Client connection writer processes footprint in bytes", connection_writers}, | ||||
|         {2, undefined, memory_client_connection_channel_bytes, gauge, "Client connection channel processes footprint in bytes", connection_channels}, | ||||
|         {2, undefined, memory_client_connection_other_bytes, gauge, "Client connection other processes footprint in bytes", connection_other}, | ||||
|         {2, undefined, memory_classic_queue_erlang_process_bytes, gauge, "Classic queue processes footprint in bytes", queue_procs}, | ||||
|         {2, undefined, memory_quorum_queue_erlang_process_bytes, gauge, "Quorum queue processes footprint in bytes", quorum_queue_procs}, | ||||
|         {2, undefined, memory_quorum_queue_dlx_erlang_process_bytes, gauge, "Quorum queue DLX worker processes footprint in bytes", quorum_queue_dlx_procs}, | ||||
|         {2, undefined, memory_stream_erlang_process_bytes, gauge, "Stream processes footprint in bytes", stream_queue_procs}, | ||||
|         {2, undefined, memory_stream_replica_reader_erlang_process_bytes, gauge, "Stream replica reader processes footprint in bytes", stream_queue_replica_reader_procs}, | ||||
|         {2, undefined, memory_stream_coordinator_erlang_process_bytes, gauge, "Stream coordinator processes footprint in bytes", stream_queue_coordinator_procs}, | ||||
|         {2, undefined, memory_plugin_bytes, gauge, "Total plugin footprint in bytes", plugins}, | ||||
|         {2, undefined, memory_modern_metadata_store_bytes, gauge, "Modern metadata store footprint in bytes", metadata_store}, | ||||
|         {2, undefined, memory_other_erlang_process_bytes, gauge, "Other processes footprint in bytes", other_proc}, | ||||
|         {2, undefined, memory_metrics_bytes, gauge, "Metric table footprint in bytes", metrics}, | ||||
|         {2, undefined, memory_management_stats_db_bytes, gauge, "Management stats database footprint in bytes", mgmt_db}, | ||||
|         {2, undefined, memory_classic_metadata_store_bytes, gauge, "Classic metadata store footprint in bytes", mnesia}, | ||||
|         {2, undefined, memory_quorum_queue_ets_table_bytes, gauge, "Quorum queue ETS tables footprint in bytes", quorum_ets}, | ||||
|         {2, undefined, memory_modern_metadata_store_ets_table_bytes, gauge, "Modern metadata store ETS tables footprint in bytes", metadata_store_ets}, | ||||
|         {2, undefined, memory_other_ets_table_bytes, gauge, "Other ETS tables footprint in bytes", other_ets}, | ||||
|         {2, undefined, memory_binary_heap_bytes, gauge, "Binary heap size in bytes", binary}, | ||||
|         {2, undefined, memory_message_index_bytes, gauge, "Message index footprint in bytes", msg_index}, | ||||
|         {2, undefined, memory_atom_table_bytes, gauge, "Atom table size in bytes", atom}, | ||||
|         {2, undefined, memory_other_system_bytes, gauge, "Other runtime footprint in bytes", other_system}, | ||||
|         {2, undefined, memory_runtime_allocated_unused_bytes, gauge, "Runtime allocated but unused blocks size in bytes", allocated_unused}, | ||||
|         {2, undefined, memory_runtime_reserved_unallocated_bytes, gauge, "Runtime reserved but unallocated blocks size in bytes", reserved_unallocated} | ||||
|     ]}]). | ||||
| 
 | ||||
| -define(TOTALS, [ | ||||
|     %% ordering differs from metrics above, refer to list comprehension | ||||
|     {connection_created, connections, gauge, "Connections currently open"}, | ||||
|  | @ -305,6 +306,10 @@ collect_mf('per-object', Callback) -> | |||
|     totals(Callback), | ||||
|     emit_identity_info(Callback), | ||||
|     ok; | ||||
| collect_mf('memory-breakdown', Callback) -> | ||||
|     collect(false, ?METRIC_NAME_PREFIX, false, ?METRICS_MEMORY_BREAKDOWN, Callback), | ||||
|     emit_identity_info(Callback), | ||||
|     ok; | ||||
| collect_mf(_Registry, Callback) -> | ||||
|     PerObjectMetrics = application:get_env(rabbitmq_prometheus, return_per_object_metrics, false), | ||||
|     collect(PerObjectMetrics, ?METRIC_NAME_PREFIX, false, ?METRICS_RAW, Callback), | ||||
|  |  | |||
|  | @ -33,6 +33,9 @@ build_dispatcher() -> | |||
|     prometheus_registry:register_collectors('detailed', [ | ||||
|         prometheus_rabbitmq_core_metrics_collector | ||||
|         ]), | ||||
|     prometheus_registry:register_collectors('memory-breakdown', [ | ||||
|         prometheus_rabbitmq_core_metrics_collector | ||||
|         ]), | ||||
|     rabbit_prometheus_handler:setup(), | ||||
|     cowboy_router:compile([{'_', dispatcher()}]). | ||||
| 
 | ||||
|  |  | |||
|  | @ -46,6 +46,7 @@ is_authorized(ReqData, Context) -> | |||
| setup() -> | ||||
|     setup_metrics(telemetry_registry()), | ||||
|     setup_metrics('per-object'), | ||||
|     setup_metrics('memory-breakdown'), | ||||
|     setup_metrics('detailed'). | ||||
| 
 | ||||
| setup_metrics(Registry) -> | ||||
|  |  | |||
|  | @ -25,7 +25,8 @@ all() -> | |||
|         {group, commercial}, | ||||
|         {group, detailed_metrics}, | ||||
|         {group, special_chars}, | ||||
|         {group, authentication} | ||||
|         {group, authentication}, | ||||
|         {group, memory_breakdown_endpoint_metrics} | ||||
|     ]. | ||||
| 
 | ||||
| groups() -> | ||||
|  | @ -49,6 +50,9 @@ groups() -> | |||
|             endpoint_per_object_metrics, | ||||
|             specific_erlang_metrics_present_test | ||||
|         ]}, | ||||
|         {memory_breakdown_endpoint_metrics, [], [ | ||||
|             memory_breakdown_metrics_test | ||||
|         ]}, | ||||
|         {commercial, [], [ | ||||
|             build_info_product_test | ||||
|         ]}, | ||||
|  | @ -247,7 +251,9 @@ init_per_group(special_chars, Config0) -> | |||
| init_per_group(authentication, Config) -> | ||||
|     Config1 = rabbit_ct_helpers:merge_app_env( | ||||
|                 Config, {rabbitmq_prometheus, [{authentication, [{enabled, true}]}]}), | ||||
|     init_per_group(authentication, Config1, []). | ||||
|     init_per_group(authentication, Config1, []); | ||||
| init_per_group(memory_breakdown_endpoint_metrics, Config) -> | ||||
|     init_per_group(memory_breakdown_endpoint_metrics, Config, []). | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -387,10 +393,6 @@ aggregated_metrics_test(Config) -> | |||
|     ?assertEqual(match, re:run(Body, "^rabbitmq_queue_consumers ", [{capture, none}, multiline])), | ||||
|     ?assertEqual(match, re:run(Body, "TYPE rabbitmq_auth_attempts_total", [{capture, none}, multiline])), | ||||
|     ?assertEqual(nomatch, re:run(Body, "TYPE rabbitmq_auth_attempts_detailed_total", [{capture, none}, multiline])), | ||||
|     %% Memory breakdown | ||||
|     ?assertEqual(match, re:run(Body, "^rabbitmq_memory_quorum_queue_erlang_process_bytes ", [{capture, none}, multiline])), | ||||
|     ?assertEqual(match, re:run(Body, "^rabbitmq_memory_classic_queue_erlang_process_bytes ", [{capture, none}, multiline])), | ||||
|     ?assertEqual(match, re:run(Body, "^rabbitmq_memory_binary_heap_bytes ", [{capture, none}, multiline])), | ||||
|     %% Check the first metric value in each ETS table that requires converting | ||||
|     ?assertEqual(match, re:run(Body, "^rabbitmq_erlang_uptime_seconds ", [{capture, none}, multiline])), | ||||
|     ?assertEqual(match, re:run(Body, "^rabbitmq_io_read_time_seconds_total ", [{capture, none}, multiline])), | ||||
|  | @ -437,6 +439,12 @@ per_object_metrics_test(Config, Path) -> | |||
|     %% Check the first TOTALS metric value | ||||
|     ?assertEqual(match, re:run(Body, "^rabbitmq_connections ", [{capture, none}, multiline])). | ||||
| 
 | ||||
| memory_breakdown_metrics_test(Config) -> | ||||
|     {_Headers, Body} = http_get_with_pal(Config, "/metrics/memory-breakdown", [], 200), | ||||
|     ?assertEqual(match, re:run(Body, "^rabbitmq_memory_quorum_queue_erlang_process_bytes ", [{capture, none}, multiline])), | ||||
|     ?assertEqual(match, re:run(Body, "^rabbitmq_memory_classic_queue_erlang_process_bytes ", [{capture, none}, multiline])), | ||||
|     ?assertEqual(match, re:run(Body, "^rabbitmq_memory_binary_heap_bytes ", [{capture, none}, multiline])). | ||||
| 
 | ||||
| build_info_test(Config) -> | ||||
|     {_Headers, Body} = http_get_with_pal(Config, [], 200), | ||||
|     ?assertEqual(match, re:run(Body, "^rabbitmq_build_info{", [{capture, none}, multiline])), | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue