本文主要研究下springboot2的micrometerhtml
springboot2在spring-boot-actuator中引入了micrometer,對1.x的metrics進行了重構,另外支持對接的監控系統也更加豐富(Atlas、Datadog、Ganglia、Graphite、Influx、JMX、NewRelic、Prometheus、SignalFx、StatsD、Wavefront
)。1.x的metrics都有點對齊dropwizard-metrics的味道,而micrometer除了一些基本metrics與dropwizard-metrics相相似外,重點支持了tag。這是一個很重要的信號,標誌着老一代的statsd、graphite逐步讓步於支持tag的influx以及prometheus。git
etsy原版的statsd是不支持tag的,不過datadog以及influx都有對statsd進行改良以支持tag。而influxdb以及prometheus則是天生支持tag的。
final Gauge<Long> sizeGauge = new Gauge<Long>() { @Override public Long getValue() { return bufferPoolMXBean.getCount(); } };
Gauge gauge = Gauge .builder("gauge", myObj, myObj::gaugeValue) .description("a description of what this gauge does") // optional .tags("region", "test") // optional .register(registry);
能夠看到micrometer支持tag
關於metrics是否支持tag/label,則表明其metrics是否可以有多維度的支持。像statsd不支持tag,若是要區分多host的同一個jvm指標,則一般是經過添加prefix來解決,不過這個給查詢統計以及後續擴展帶了諸多的不變。github
支持tag的好處就是能夠進行多維度的統計和查詢,以同一微服務可是不一樣實例的jvm指標來講,能夠經過tag來添加host標識,這樣監控系統就能夠靈活根據tag查詢過濾來查看不一樣主機粒度的,甚至是不一樣數據中心的粒度。web
springboot2啓用/actuator/prometheus端點,供Prometheus來抓取指標。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
management.endpoints.web.exposure.include=*
# HELP process_cpu_usage The "recent cpu usage" for the Java Virtual Machine process # TYPE process_cpu_usage gauge process_cpu_usage 0.0 # HELP tomcat_global_request_seconds # TYPE tomcat_global_request_seconds summary tomcat_global_request_seconds_count{name="http-nio-8080",} 2.0 tomcat_global_request_seconds_sum{name="http-nio-8080",} 0.111 # HELP tomcat_global_received_bytes_total # TYPE tomcat_global_received_bytes_total counter tomcat_global_received_bytes_total{name="http-nio-8080",} 0.0 # HELP jvm_buffer_count An estimate of the number of buffers in the pool # TYPE jvm_buffer_count gauge jvm_buffer_count{id="mapped",} 0.0 jvm_buffer_count{id="direct",} 4.0 # HELP jvm_threads_live The current number of live threads including both daemon and non-daemon threads # TYPE jvm_threads_live gauge jvm_threads_live 43.0 # HELP process_files_open The open file descriptor count # TYPE process_files_open gauge process_files_open 84.0 # HELP tomcat_threads_current # TYPE tomcat_threads_current gauge tomcat_threads_current{name="http-nio-8080",} 10.0 # HELP tomcat_servlet_error_total # TYPE tomcat_servlet_error_total counter tomcat_servlet_error_total{name="default",} 0.0 # HELP process_start_time_seconds The start time of the Java virtual machine # TYPE process_start_time_seconds gauge process_start_time_seconds 1.521297826521E9 # HELP tomcat_sessions_active_max # TYPE tomcat_sessions_active_max gauge tomcat_sessions_active_max 0.0 # HELP tomcat_servlet_request_max_seconds # TYPE tomcat_servlet_request_max_seconds gauge tomcat_servlet_request_max_seconds{name="default",} 0.0 # HELP jvm_memory_used_bytes The amount of used memory # TYPE jvm_memory_used_bytes gauge jvm_memory_used_bytes{area="nonheap",id="CodeHeap 'non-nmethods'",} 3073408.0 jvm_memory_used_bytes{area="nonheap",id="Metaspace",} 4.2002072E7 jvm_memory_used_bytes{area="nonheap",id="Compressed Class Space",} 5467256.0 jvm_memory_used_bytes{area="heap",id="G1 Eden Space",} 1.05906176E8 jvm_memory_used_bytes{area="heap",id="G1 Old Gen",} 1.8914304E7 jvm_memory_used_bytes{area="heap",id="G1 Survivor Space",} 1.048576E7 jvm_memory_used_bytes{area="nonheap",id="CodeHeap 'non-profiled nmethods'",} 9643520.0 # HELP tomcat_sessions_rejected_total # TYPE tomcat_sessions_rejected_total counter tomcat_sessions_rejected_total 0.0 # HELP system_load_average_1m The sum of the number of runnable entities queued to available processors and the number of runnable entities running on the available processors averaged over a period of time # TYPE system_load_average_1m gauge system_load_average_1m 3.796875 # HELP tomcat_threads_config_max # TYPE tomcat_threads_config_max gauge tomcat_threads_config_max{name="http-nio-8080",} 200.0 # HELP tomcat_cache_hit_total # TYPE tomcat_cache_hit_total counter tomcat_cache_hit_total 0.0 # HELP tomcat_sessions_active_current # TYPE tomcat_sessions_active_current gauge tomcat_sessions_active_current 0.0 # HELP jvm_gc_pause_seconds Time spent in GC pause # TYPE jvm_gc_pause_seconds summary jvm_gc_pause_seconds_count{action="end of minor GC",cause="Metadata GC Threshold",} 1.0 jvm_gc_pause_seconds_sum{action="end of minor GC",cause="Metadata GC Threshold",} 0.017 jvm_gc_pause_seconds_max{action="end of minor GC",cause="Metadata GC Threshold",} 0.017 jvm_gc_pause_seconds_count{action="end of minor GC",cause="G1 Evacuation Pause",} 1.0 jvm_gc_pause_seconds_sum{action="end of minor GC",cause="G1 Evacuation Pause",} 0.019 jvm_gc_pause_seconds_max{action="end of minor GC",cause="G1 Evacuation Pause",} 0.019 # HELP logback_events_total Number of error level events that made it to the logs # TYPE logback_events_total counter logback_events_total{level="error",} 0.0 logback_events_total{level="warn",} 0.0 logback_events_total{level="info",} 39.0 logback_events_total{level="debug",} 0.0 logback_events_total{level="trace",} 0.0 # HELP jvm_gc_memory_promoted_bytes_total Count of positive increases in the size of the old generation memory pool before GC to after GC # TYPE jvm_gc_memory_promoted_bytes_total counter jvm_gc_memory_promoted_bytes_total 0.0 # HELP jvm_buffer_total_capacity_bytes An estimate of the total capacity of the buffers in this pool # TYPE jvm_buffer_total_capacity_bytes gauge jvm_buffer_total_capacity_bytes{id="mapped",} 0.0 jvm_buffer_total_capacity_bytes{id="direct",} 32768.0 # HELP jvm_classes_loaded The number of classes that are currently loaded in the Java virtual machine # TYPE jvm_classes_loaded gauge jvm_classes_loaded 8219.0 # HELP jvm_classes_unloaded_total The total number of classes unloaded since the Java virtual machine has started execution # TYPE jvm_classes_unloaded_total counter jvm_classes_unloaded_total 0.0 # HELP tomcat_sessions_alive_max_seconds # TYPE tomcat_sessions_alive_max_seconds gauge tomcat_sessions_alive_max_seconds 0.0 # HELP jvm_gc_max_data_size_bytes Max size of old generation memory pool # TYPE jvm_gc_max_data_size_bytes gauge jvm_gc_max_data_size_bytes -1.0 # HELP tomcat_sessions_created_total # TYPE tomcat_sessions_created_total counter tomcat_sessions_created_total 0.0 # HELP system_cpu_usage The "recent cpu usage" for the whole system # TYPE system_cpu_usage gauge system_cpu_usage 0.0 # HELP jvm_threads_daemon The current number of live daemon threads # TYPE jvm_threads_daemon gauge jvm_threads_daemon 41.0 # HELP system_cpu_count The number of processors available to the Java virtual machine # TYPE system_cpu_count gauge system_cpu_count 8.0 # HELP jvm_memory_max_bytes The maximum amount of memory in bytes that can be used for memory management # TYPE jvm_memory_max_bytes gauge jvm_memory_max_bytes{area="nonheap",id="CodeHeap 'non-nmethods'",} 7553024.0 jvm_memory_max_bytes{area="nonheap",id="Metaspace",} -1.0 jvm_memory_max_bytes{area="nonheap",id="Compressed Class Space",} 1.073741824E9 jvm_memory_max_bytes{area="heap",id="G1 Eden Space",} -1.0 jvm_memory_max_bytes{area="heap",id="G1 Old Gen",} 4.294967296E9 jvm_memory_max_bytes{area="heap",id="G1 Survivor Space",} -1.0 jvm_memory_max_bytes{area="nonheap",id="CodeHeap 'non-profiled nmethods'",} 2.44105216E8 # HELP tomcat_sessions_expired_total # TYPE tomcat_sessions_expired_total counter tomcat_sessions_expired_total 0.0 # HELP tomcat_global_sent_bytes_total # TYPE tomcat_global_sent_bytes_total counter tomcat_global_sent_bytes_total{name="http-nio-8080",} 2524.0 # HELP tomcat_global_error_total # TYPE tomcat_global_error_total counter tomcat_global_error_total{name="http-nio-8080",} 0.0 # HELP process_files_max The maximum file descriptor count # TYPE process_files_max gauge process_files_max 10240.0 # HELP jvm_gc_live_data_size_bytes Size of old generation memory pool after a full GC # TYPE jvm_gc_live_data_size_bytes gauge jvm_gc_live_data_size_bytes 0.0 # HELP jvm_gc_memory_allocated_bytes_total Incremented for an increase in the size of the young generation memory pool after one GC to before the next # TYPE jvm_gc_memory_allocated_bytes_total counter jvm_gc_memory_allocated_bytes_total 4977768.0 # HELP tomcat_threads_busy # TYPE tomcat_threads_busy gauge tomcat_threads_busy{name="http-nio-8080",} 1.0 # HELP jvm_memory_committed_bytes The amount of memory in bytes that is committed for the Java virtual machine to use # TYPE jvm_memory_committed_bytes gauge jvm_memory_committed_bytes{area="nonheap",id="CodeHeap 'non-nmethods'",} 3080192.0 jvm_memory_committed_bytes{area="nonheap",id="Metaspace",} 4.5088768E7 jvm_memory_committed_bytes{area="nonheap",id="Compressed Class Space",} 6029312.0 jvm_memory_committed_bytes{area="heap",id="G1 Eden Space",} 1.92937984E8 jvm_memory_committed_bytes{area="heap",id="G1 Old Gen",} 1.19537664E8 jvm_memory_committed_bytes{area="heap",id="G1 Survivor Space",} 1.048576E7 jvm_memory_committed_bytes{area="nonheap",id="CodeHeap 'non-profiled nmethods'",} 9699328.0 # HELP jvm_threads_peak The peak live thread count since the Java virtual machine started or peak was reset # TYPE jvm_threads_peak gauge jvm_threads_peak 49.0 # HELP http_server_requests_seconds # TYPE http_server_requests_seconds summary http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/actuator",} 1.0 http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/actuator",} 0.046773049 http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="/actuator",} 0.046773049 http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/**/favicon.ico",} 1.0 http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/**/favicon.ico",} 0.020588395 http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="/**/favicon.ico",} 0.020588395 # HELP jvm_buffer_memory_used_bytes An estimate of the memory that the Java virtual machine is using for this buffer pool # TYPE jvm_buffer_memory_used_bytes gauge jvm_buffer_memory_used_bytes{id="mapped",} 0.0 jvm_buffer_memory_used_bytes{id="direct",} 32768.0 # HELP tomcat_global_request_max_seconds # TYPE tomcat_global_request_max_seconds gauge tomcat_global_request_max_seconds{name="http-nio-8080",} 0.087 # HELP tomcat_cache_access_total # TYPE tomcat_cache_access_total counter tomcat_cache_access_total 0.0 # HELP tomcat_servlet_request_seconds # TYPE tomcat_servlet_request_seconds summary tomcat_servlet_request_seconds_count{name="default",} 0.0 tomcat_servlet_request_seconds_sum{name="default",} 0.0 # HELP process_uptime_seconds The uptime of the Java virtual machine # TYPE process_uptime_seconds gauge process_uptime_seconds 14.232
好比jvm_memory_used_bytes
jvm_memory_used_bytes{area="nonheap",id="CodeHeap 'non-nmethods'",} 3073408.0 jvm_memory_used_bytes{area="nonheap",id="Metaspace",} 4.2002072E7 jvm_memory_used_bytes{area="nonheap",id="Compressed Class Space",} 5467256.0 jvm_memory_used_bytes{area="heap",id="G1 Eden Space",} 1.05906176E8 jvm_memory_used_bytes{area="heap",id="G1 Old Gen",} 1.8914304E7 jvm_memory_used_bytes{area="heap",id="G1 Survivor Space",} 1.048576E7 jvm_memory_used_bytes{area="nonheap",id="CodeHeap 'non-profiled nmethods'",} 9643520.0
括號裏頭的就tag/label,查詢的時候就能夠使用jvm_memory_used_bytes或者jvm_memory_used_bytes{area="nonheap"}或者jvm_memory_used_bytes{area="nonheap",id="Metaspace"}等配合tag/label進行查詢。
springboot2的micrometer支持了tag/label,配合支持tag/label的監控系統,使得咱們能夠更加方便地對metrics進行多維度的統計查詢及監控。spring