APMPlus自研监控系统是应用性能监控全链路版自主研发的数据采集工具,负责采集应用与基础设施的监控数据,然后相关数据上报到APMPlus服务端用于可视化查询分析。
由上图可以看出,服务端监控整体采用了三层架构。
Java应用接入服务端采用无侵入式的插桩方案,以下介绍Java应用接入服务端后支持的功能。
Java应用接入服务端后,JavaAgent可以自动收集Trace信息、自动生成Metric指标。
目前已经支持的框架请参见支持的框架列表,接入后会自动生成Metrics如下所示:
Metrics | 说明 | Tags |
---|---|---|
apminsight.service.trace.called.throughput | 被调用次数 | service:被调用服务名 |
apminsight.service.trace.called.latency.us.{avg,pct50,pct90,pct99} | 被调用耗时 | service:被调用服务名 |
apminsight.service.trace.call.throughput | 调用其他服务次数 | service:服务名 |
apminsight.service.trace.call.latency.us.{avg,pct50,pct90,pct99} | 调用其他服务耗时 | service:被调用服务名 |
apminsight.service.performance.cpu.core | 服务CPU使用 | service:服务名 |
apminsight.service.performance.cpu_limit.core | 服务CPU限制 | service:服务名 |
apminsight.service.performance.rss.mb | 服务占用内存 | service:服务名 |
apminsight.service.performance.memory_limit.mb | 服务内存限制 | service:服务名 |
Java应用接入服务端后可以实现调用链检索、日志检索功能,目前针对如下框架做了集成:
Java应用接入服务端后支持Metrics打点功能,详情请参见apminsight-server-sdk-java。
Java应用接入服务端后支持JVM相关监控,主要包括以下指标:
类型 | Metrics | 说明 | 单位 |
---|---|---|---|
堆内存 | jvm.init_heap | JVM初始堆内存 | Byte |
jvm.used_heap | JVM已使用堆内存 | Byte | |
jvm.max_heap | JVM最大堆内存 | Byte | |
jvm.committed_heap | JVM已提交堆内存 | Byte | |
非堆内存 | jvm.init_noheap | JVM初始非堆内存 | Byte |
jvm.used_noheap | JVM已使用非堆内存 | Byte | |
jvm.max_noheap | JVM最大非堆内存 | Byte | |
jvm.committed_noheap | JVM已提交非堆内存 | Byte | |
内存池-NewGen | vm.init_newgen | JVM内存池-初始NewGen | Byte |
jvm.max_newgen | JVM内存池-最大NewGen | Byte | |
jvm.used_newgen | JVM内存池-已使用NewGen | Byte | |
jvm.committed_newgen | JVM内存池-已提交NewGen | Byte | |
内存池-OldGen | jvm.init_oldgen | JVM内存池-初始OldGen | Byte |
jvm.max_oldgen | JVM内存池-最大OldGen | Byte | |
jvm.used_oldgen | JVM内存池-已使用OldGen | Byte | |
jvm.committed_oldgen | JVM内存池-已提交OldGen | Byte | |
内存池-CodeCache | jvm.init_code_cache | JVM内存池-初始CodeCache | Byte |
jvm.max_code_cache | JVM内存池-最大CodeCache | Byte | |
jvm.used_code_cache | JVM内存池-已使用CodeCache | Byte | |
jvm.committed_code_cache | JVM内存池-已提交CodeCache | Byte | |
内存池-Survivor | jvm.init_survivor | JVM内存池-初始Survivor | Byte |
jvm.max_survivor | JVM内存池-最大Survivor | Byte | |
jvm.used_survivor | JVM内存池-已使用Survivor | Byte | |
jvm.committed_survivor | JVM内存池-已提交Survivor | Byte | |
内存池-MetaSpace | jvm.init_meta_space | JVM内存池-初始MetaSpace | Byte |
jvm.max_meta_space | JVM内存池-最大MetaSpace | Byte | |
jvm.used_meta_space | JVM内存池-已使用MetaSpace | Byte | |
vm.committed_meta_space | JVM内存池-已提交MetaSpace | Byte | |
内存池-PermGen | jvm.init_perm_gen | JVM内存池-初始PermGen | Byte |
jvm.max_perm_gen | JVM内存池-最大PermGen | Byte | |
jvm.used_perm_gen | JVM内存池-已使用PermGen | Byte | |
jvm.committed_perm_gen | JVM内存池-已提交PermGen | Byte | |
类加载 | jvm.loaded_class_count | JVM当前加载类数量 | count |
jvm.total_unloaded_class_count | JVM总计已卸载类数量 | count | |
vm.total_loaded_class_count | JVM总计加载类数量 | count | |
程数 | jvm.live_count | JVM存活线程数 | count |
jvm.daemon_count | JVM守护线程数 | count | |
jvm.peak_count | JVM峰值线程数 | count | |
jvm.runnable_state_thread_count | JVM可运行线程数 | count | |
jvm.blocked_state_thread_count | JVM阻塞线程数 | count | |
vm.waiting_state_thread_count | JVM等待线程数 | count | |
vm.timed_waiting_state_thread_count | JVM定时等待线程数 | count | |
GC-次数 | jvm.gc_count_old | JVM GC次数-OldGen | count |
jvm.gc_count_new | JVM GC次数-NewGen | count | |
GC-时间 | jvm.gc_time_old | JVM GC时间-OldGen | ms |
jvm.gc_time_new | JVM GC时间-NewGen | ms |
Java应用接入服务端后支持自定义代码监控的插桩。在平台上配置全局维度、服务维度的类名和方法名,即可完成对相关方法的插桩,插桩结果会随Trace链路一起上报并查询。
框架/组件 | Maven | 版本 |
---|---|---|
tomcat | org.apache.tomcat.embed:tomcat-embed-core | 7.x~8.x |
mysql | mysql:mysql-connector-java | 5.x~8.x |
oracle | com.oracle:ojdbc14 | 10.x及以上版本 |
redis | redis.clients:jedis | 2.x及以上版本 |
io.lettuce:lettuce-core | 5.x及以上版本 | |
Memcached | net.spy:spymemcached | 2.x及以上版本 |
com.googlecode.xmemcached:xmemcached | 2.x及以上版本 | |
MongoDB | org.mongodb:mongo-java-driver | 2.x~3.x |
org.mongodb:mongodb-driver-sync | 4.x及以上版本 | |
Kafka | org.apache.kafka:kafka-clients | 0.11.0.0及以上版本 |
RocketMQ | com.alibaba.rocketmq:rocketmq-client | 3.x及以上版本 |
org.apache.rocketmq:rocketmq-client | 4.x及以上版本 | |
RabbitMQ | com.rabbitmq:amqp-client | 5.x及以上版本 |
logback | ch.qos.logback:logback-classic | 1.x及以上版本 |
log4j | org.apache.logging.log4j:log4j-core | 2.x及以上版本 |
HttpClient | com.squareup.okhttp:okhttp | 2.x及以上版本 |
com.squareup.okhttp3:okhttp | 3.x~4.x | |
commons-httpclient:commons-httpclient | 3.x及以上版本 | |
org.apache.httpcomponents:httpclient | 4.x及以上版本 | |
org.apache.httpcomponents.client5:httpclient5 | 5.x及以上版本 | |
org.apache.httpcomponents:httpasyncclient | 4.x及以上版本 | |
org.asynchttpclient:async-http-client | 2.x及以上版本 | |
io.github.openfeign:feign-core | 9.x | |
org.springframework.cloud:spring-cloud-starter-feign | 1.x~2.x | |
Rest tempalte | org.springframework:spring-web | 4.x及以上版本 |
Spring | org.springframework:spring-webmvc | 3.x~5.x |
org.springframework:spring-context | 3.x~5.x |
Go应用接入服务端采用侵入式插桩方案,以下介绍Go应用接入服务端后支持的功能。
Go应用接入服务端无法采用无侵入式的插桩方案,只能通过框架集成实现,目前针对如下框架做了集成:
具体接入方式请参见trace功能说明。 接入后会自动生成如下Metrics:
Metrics | 说明 | Tags |
---|---|---|
apminsight.service.trace.called.throughput | 被调用次数 | service:被调用服务名 |
apminsight.service.trace.called.latency.us.{avg,pct50,pct90,pct99} | 被调用耗时 | service:被调用服务名 |
apminsight.service.trace.call.throughput | 调用其他服务次数 | service:服务名 |
apminsight.service.trace.call.latency.us.{avg,pct50,pct90,pct99} | 调用其他服务耗时 | service:被调用服务名 |
apminsight.service.performance.cpu.core | 服务CPU使用 | service:服务名 |
apminsight.service.performance.cpu_limit.core | 服务CPU限制 | service:服务名 |
apminsight.service.performance.rss.mb | 服务占用内存 | service:服务名 |
apminsight.service.performance.memory_limit.mb | 服务内存限制 | service:服务名 |
Go应用接入服务端,且与Trace和Log框架适配后,可以实现调用链检索、日志检索功能,目前针对如下框架做了集成:
具体接入方式请参见log功能说明。 接入后会自动生成如下Metrics:
Metrics | 说明 | Tags |
---|---|---|
apminsight.service.log.throughput | 服务日志条目 | service:服务名 |
Go SDK提供接口如下:
// 用于度量QPS等场景 func EmitCounter(name string, value float64, tags map[string]string) error { } // 用于度量耗时等需要分析均值、分位值的场景 func EmitTimer(name string, value float64, tags map[string]string) error { } // 用于度量绝对值场景 func EmitGauge(name string, value float64, tags map[string]string) error { }
具体接入方式请参见metrics功能说明。
框架 | 版本 |
---|---|
gin-gonic/gin | 1.x |
gorm.io/gorm.v1 | 1.x |
net/http | - |
sirupsen/logrus | 1.x |