前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >做了ERROR日志监控就够了吗?不试一下微服务的JVM监控

做了ERROR日志监控就够了吗?不试一下微服务的JVM监控

作者头像
xdd
发布2022-07-12 14:28:37
7100
发布2022-07-12 14:28:37
举报
文章被收录于专栏:java技术鸡汤java技术鸡汤

现在好多公司都在使用微服务,也有一些公司在落地DDD在业务中,那么你的服务做了监控了吗?一般除了错误日志的监控,报警发邮件、飞书消息或者短信,还有的对数据库或者服务器做了一些监控,那么你对你的服务的JVM层面做了监控吗?

如果没有做JVM的监控,那么接着看下面的内容,告诉你一个SpringBoot的微服务怎么去做JVM层面的监控?

SpringBoot应用JVM监控实践DEMO

一、 在服务中增加依赖

二、 增加Springboot Actuator 和promethus配置

增加的Springboot Actuator的配置如下所示

增加的prometheus的配置如下:

启动Springboot应用后,使用如下URL可以观察到如下响应:

请求

代码语言:javascript
复制
http://ip:port/actuator/prometheus

响应

代码语言:javascript
复制
# 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  3.74492E7
# HELP jvm_buffer_count_buffers An  estimate of the number of buffers in the pool
# TYPE jvm_buffer_count_buffers gauge
jvm_buffer_count_buffers{id="direct",}  5.0
jvm_buffer_count_buffers{id="mapped",}  0.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 5.3624472E7
# HELP jvm_threads_states_threads The  current number of threads having NEW state
# TYPE jvm_threads_states_threads gauge
jvm_threads_states_threads{state="runnable",}  49.0
jvm_threads_states_threads{state="blocked",}  0.0
jvm_threads_states_threads{state="waiting",}  44.0
jvm_threads_states_threads{state="timed-waiting",}  35.0
jvm_threads_states_threads{state="new",}  0.0
jvm_threads_states_threads{state="terminated",}  0.0
# HELP spring_integration_channels The  number of message channels
# TYPE spring_integration_channels gauge
spring_integration_channels 2.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="heap",id="PS  Survivor Space",} 3.145728E7
jvm_memory_max_bytes{area="heap",id="PS  Old Gen",} 2.845310976E9
jvm_memory_max_bytes{area="heap",id="PS  Eden Space",} 1.354235904E9
jvm_memory_max_bytes{area="nonheap",id="Metaspace",}  -1.0
jvm_memory_max_bytes{area="nonheap",id="Code  Cache",} 2.5165824E8
jvm_memory_max_bytes{area="nonheap",id="Compressed  Class Space",} 1.073741824E9
# 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="heap",id="PS  Survivor Space",} 3.145728E7
jvm_memory_committed_bytes{area="heap",id="PS  Old Gen",} 2.63192576E8
jvm_memory_committed_bytes{area="heap",id="PS  Eden Space",} 3.55991552E8
jvm_memory_committed_bytes{area="nonheap",id="Metaspace",}  8.5458944E7
jvm_memory_committed_bytes{area="nonheap",id="Code  Cache",} 1.769472E7
jvm_memory_committed_bytes{area="nonheap",id="Compressed  Class Space",} 1.1010048E7
# HELP  tomcat_sessions_active_current_sessions   
# TYPE  tomcat_sessions_active_current_sessions gauge
tomcat_sessions_active_current_sessions  0.0
# HELP logback_events_total Number of  error level events that made it to the logs
# TYPE logback_events_total counter
logback_events_total{level="warn",}  12.0
logback_events_total{level="debug",}  0.0
logback_events_total{level="error",}  0.0
logback_events_total{level="trace",}  0.0
logback_events_total{level="info",}  56.0
# HELP  tomcat_sessions_expired_sessions_total   
# TYPE  tomcat_sessions_expired_sessions_total counter
tomcat_sessions_expired_sessions_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_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  1.447756672E9
# HELP process_start_time_seconds Start  time of the process since unix epoch.
# TYPE process_start_time_seconds gauge
process_start_time_seconds  1.633764054233E9
# HELP jvm_memory_used_bytes The amount  of used memory
# TYPE jvm_memory_used_bytes gauge
jvm_memory_used_bytes{area="heap",id="PS  Survivor Space",} 3.143352E7
jvm_memory_used_bytes{area="heap",id="PS  Old Gen",} 5.6170736E7
jvm_memory_used_bytes{area="heap",id="PS  Eden Space",} 1.45013368E8
jvm_memory_used_bytes{area="nonheap",id="Metaspace",}  8.1185736E7
jvm_memory_used_bytes{area="nonheap",id="Code  Cache",} 1.7651712E7
jvm_memory_used_bytes{area="nonheap",id="Compressed  Class Space",} 1.0256224E7
# 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_classes_loaded_classes The  number of classes that are currently loaded in the Java virtual machine
# TYPE jvm_classes_loaded_classes gauge
jvm_classes_loaded_classes 15057.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="direct",}  16400.0
jvm_buffer_total_capacity_bytes{id="mapped",}  0.0
# HELP spring_integration_sources The  number of message sources
# TYPE spring_integration_sources gauge
spring_integration_sources 0.0
# HELP jvm_threads_daemon_threads The  current number of live daemon threads
# TYPE jvm_threads_daemon_threads gauge
jvm_threads_daemon_threads 69.0
# HELP  tomcat_sessions_created_sessions_total   
# TYPE  tomcat_sessions_created_sessions_total counter
tomcat_sessions_created_sessions_total  0.0
# HELP  tomcat_sessions_rejected_sessions_total   
# TYPE tomcat_sessions_rejected_sessions_total  counter
tomcat_sessions_rejected_sessions_total  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 2.845310976E9
# HELP process_cpu_usage The "recent  cpu usage" for the Java Virtual Machine process
# TYPE process_cpu_usage gauge
process_cpu_usage 0.12716195672342906
# 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="direct",}  16402.0
jvm_buffer_memory_used_bytes{id="mapped",}  0.0
# HELP  tomcat_sessions_active_max_sessions 
# TYPE  tomcat_sessions_active_max_sessions gauge
tomcat_sessions_active_max_sessions 0.0
# HELP jvm_threads_live_threads The  current number of live threads including both daemon and non-daemon threads
# TYPE jvm_threads_live_threads gauge
jvm_threads_live_threads 128.0
# HELP jvm_threads_peak_threads The peak  live thread count since the Java virtual machine started or peak was reset
# TYPE jvm_threads_peak_threads gauge
jvm_threads_peak_threads 128.0
# HELP jvm_classes_unloaded_classes_total  The total number of classes unloaded since the Java virtual machine has started  execution
# TYPE jvm_classes_unloaded_classes_total  counter
jvm_classes_unloaded_classes_total 0.0
# HELP system_cpu_usage The "recent  cpu usage" for the whole system
# TYPE system_cpu_usage gauge
system_cpu_usage 0.08727740040389209
# HELP spring_integration_handlers The  number of message handlers
# TYPE spring_integration_handlers gauge
spring_integration_handlers 1.0
# HELP process_uptime_seconds The uptime  of the Java virtual machine
# TYPE process_uptime_seconds gauge
process_uptime_seconds 252.707
# HELP jvm_gc_pause_seconds Time spent in  GC pause
# TYPE jvm_gc_pause_seconds summary
jvm_gc_pause_seconds_count{action="end  of major GC",cause="Metadata GC Threshold",} 1.0
jvm_gc_pause_seconds_sum{action="end  of major GC",cause="Metadata GC Threshold",} 0.24
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.02
jvm_gc_pause_seconds_count{action="end  of minor GC",cause="Allocation Failure",} 3.0
jvm_gc_pause_seconds_sum{action="end  of minor GC",cause="Allocation Failure",} 0.047
jvm_gc_pause_seconds_count{action="end  of minor GC",cause="GCLocker Initiated GC",} 1.0
jvm_gc_pause_seconds_sum{action="end  of minor GC",cause="GCLocker Initiated GC",} 0.018
# HELP jvm_gc_pause_seconds_max Time  spent in GC pause
# TYPE jvm_gc_pause_seconds_max gauge
jvm_gc_pause_seconds_max{action="end  of major GC",cause="Metadata GC Threshold",} 0.0
jvm_gc_pause_seconds_max{action="end  of minor GC",cause="Metadata GC Threshold",} 0.0
jvm_gc_pause_seconds_max{action="end  of minor GC",cause="Allocation Failure",} 0.0
jvm_gc_pause_seconds_max{action="end  of minor GC",cause="GCLocker Initiated GC",} 0.0

最终的效果如下图所示

三、 实践中遇到的问题

(一) 问题1

通过截图可以看到下面的问题:

如上类TextFormat中的Collector.Type.INFO中在低版本simpleclient 0.5.0中不存在导致该异常。

出现的原因:因为spring-cloud-starter-alibaba-nacos-discovery中依赖了0.5.0版本的simpleclient

解决方案:排除掉spring-cloud-starter-alibaba-nacos-discovery中的低版本simpleclient即可

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java技术鸡汤 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档