You need to enable JavaScript to run this app.
导航

APMPlus自研监控系统说明

最近更新时间2023.03.21 14:33:52

首次发布时间2022.12.12 17:34:09

APMPlus自研监控系统是应用性能监控全链路版自主研发的数据采集工具,负责采集应用与基础设施的监控数据,然后相关数据上报到APMPlus服务端用于可视化查询分析。

系统框架结构

图片
由上图可以看出,服务端监控整体采用了三层架构。

  • 应用探针:集成Trace、Log、Metrics SDK通过IPC(Inter Process Communication,即进程间通讯)和本机Agent进行通信。
  • Agent:负责采集宿主机数据和宿主机上容器数据,并且接收应用发送的监控数据,缓存后经过压缩和加密转发到数据中心,同时负责将数据中心的动态配置定时同步给应用。
  • 数据中心:负责接收数据,清洗存储最终展示给用户,并提供分析和报警功能。

Java应用功能

Java应用接入服务端采用无侵入式的插桩方案,以下介绍Java应用接入服务端后支持的功能。

Trace

Java应用接入服务端后,JavaAgent可以自动收集Trace信息、自动生成Metric指标。
目前已经支持的框架请参见支持的框架列表,接入后会自动生成Metrics如下所示:

Metrics

说明

Tags

apminsight.service.trace.called.throughput

被调用次数

service:被调用服务名
resource:被调用接口名
status:返回码
instance_id:进程ID

apminsight.service.trace.called.latency.us.{avg,pct50,pct90,pct99}

被调用耗时

service:被调用服务名
resource:被调用接口名
status:返回码
instance_id:进程ID

apminsight.service.trace.call.throughput

调用其他服务次数

service:服务名
resource:接口名
status:返回码
instance_id:进程ID
call_service:调用服务名
call_resource:调用接口名
db.slow_query:是否是慢SQL

apminsight.service.trace.call.latency.us.{avg,pct50,pct90,pct99}

调用其他服务耗时

service:被调用服务名
resource:被调用接口名
status:返回码
instance_id:进程ID
call_service:调用服务名
call_resource:调用接口名
db.slow_query:是否是慢SQL

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:服务名

Log

Java应用接入服务端后可以实现调用链检索、日志检索功能,目前针对如下框架做了集成:

  • Logback
  • log4j2

Metrics

Java应用接入服务端后支持Metrics打点功能,详情请参见apminsight-server-sdk-java

JVM监控

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

Go应用接入服务端无法采用无侵入式的插桩方案,只能通过框架集成实现,目前针对如下框架做了集成:

  • gin-gonic/gin
  • gorm.io/gorm.v1
  • net/http
    具体接入方式请参见trace功能说明。 接入后会自动生成如下Metrics:

Metrics

说明

Tags

apminsight.service.trace.called.throughput

被调用次数

service:被调用服务名
resource:被调用接口名
status:返回码
instance_id:进程ID

apminsight.service.trace.called.latency.us.{avg,pct50,pct90,pct99}

被调用耗时

service:被调用服务名
resource:被调用接口名
status:返回码
instance_id:进程ID

apminsight.service.trace.call.throughput

调用其他服务次数

service:服务名
resource:接口名
status:返回码
instance_id:进程
IDcall_service:调用服务名
call_resource:调用接口名
db.slow_query:是否是慢
SQL

apminsight.service.trace.call.latency.us.{avg,pct50,pct90,pct99}

调用其他服务耗时

service:被调用服务名
resource:被调用接口名
status:返回码
instance_id:进程
IDall_service:调用服务名
call_resource:调用接口名
db.slow_query:是否是慢SQL

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:服务名

Log

Go应用接入服务端,且与Trace和Log框架适配后,可以实现调用链检索、日志检索功能,目前针对如下框架做了集成:

  • sirupsen/logrus
    具体接入方式请参见log功能说明。 接入后会自动生成如下Metrics:

Metrics

说明

Tags

apminsight.service.log.throughput

服务日志条目

service:服务名
log_level:日志级别

Metrics

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