云服务器内容精选

  • 为什么 应用运维管理 AOM中有一条调用链,在 APM 界面上没有显示? 在企业微服务之间调用复杂的场景下,APM Agent会抽样一些请求,拦截对应请求及后续一系列的调用信息。比如在A调用B然后调用C的场景,请求进入A后,APM系统会采用智能采样算法,决定是否对请求进行调用链跟踪。 AOM 应用运维管理有访问的数据才会显示调用链,而且在显示的时候,一般情况下会有几分钟的延时。 如果没有访问或者没有数据,就不会显示调用链。
  • JavaAgent更新说明 目前仅支持主流的jdk8和jdk17,jdk17环境请选用末尾带-jdk17的版本。 下载Agent请参见JavaAgent下载地址。 表1 JavaAgent更新列表 版本号 更新说明 2.4.12-profiler 1、优化Debugging诊断处理逻辑。 2.4.11-profiler 1、支持Profiler的Live Object Memory类型。 2、支持全采样设置。 2.4.10-profiler 1、支持Debugging诊断。 2.4.9-profiler 1、Profiler时延度量线程采集算法优化。 2.4.9 1、优化springbean启动时间。 2.4.8-profiler 1、Profiler支持性能优化推荐。 2.4.8 1、支持redisson支持3.17.x。 2、url接口调用支持分位数。 2.4.7-profiler 1.支持用户包数据采集。 2.4.7 1.支持sql字节数的配置。 2.支持springbean插件。 3.支持jedis2.9.3。 2.4.6-profiler 支持时延持续性能剖析。 2.4.5-profiler 支持CPU、内存持续性能剖析。 2.4.5-jdk17 新增支持httpclient5,仅支持同步场景。 2.4.5 指标采集队列增加老化机制。 2.4.4 新增支持SpringCloudGateway(2.1.x~3.1.x)。 2.4.3 1.修复异常数未清零问题。 2.修复日志过大问题。 3.新增redisson基本信息。 2.4.2-jdk17 该版本只支持jdk17。 2.4.2 支持FunctionGraph在启动时关闭agent。 2.4.1 1.支持动态修改指标采集阈值。 2.接口调用维度新增异常数,统计url中日志标记的异常。 3.新增通过代理传输数据的功能。 2.3.19 1.支持日志自动打印traceId。 2.提高线程详情上限。 2.3.17 1.AKSK可以从环境变量读取。 2.调用链增加sqlId。 3.sql增加最近调用链。 4.补齐接口调用的集群维度分析能力。 2.3.16 1.指定注册协议。 2.兼容ibm sdk不支持线程内存获取。 2.3.15 1.新增支持dubbo2.8.x版本。 2.新增支持JDKhttp子类。 2.3.13 1. CS E Provider bizcode支持多key。 2.支持hikari插件。 2.3.12 1.客户端统计时,hashmap的key数量溢出后,之前是停止采集,现在修改为继续采集。 2.Url支持自动规整能力,当在后台配置为自动规整后,url按照原始格式规整。 3.oracle插件补齐读取行数和更新行数能力。 4.CSE Provider提供显示bizCode的功能。 5.修复CSE Provider修复状态码400时调用链没有标红。 2.3.5 1.支持启动脚本配置access地址。 2.3.2 1.支持jetty-client。 2.取消对com.huawei.bsp.commonlib.roa.restclient的支持。 3.url支持采集apdex。 2.3.1 1.支持cce解密sk。 2.支持jedis拦截key和value。 3.支持cassandra3。 2.2.15 1.支持sk自定义解密。 2.支持在启动脚本中配置master地址。 3.支持apacheHttpclient的responseBody采集。 2.2.13 1.使NamedTransformer加载接口类时直接返回原字节码。 2.解决mariadb3.0.4 sql没有采集到的问题。 3.支持oracle。 2.2.10 1.支持gauss-zenith数据库。 2.支持com.huawei.bsp.commonlib.roa.restclient。 2.2.9 1.支持jetcd 5.x - 6.x。 2.支持采集netty直接内存。 表2 CCE和Servicestage界面上 JavaAgent latest版本指向说明 版本号 实际版本号 latest-x86_64 2.4.3,支持x86架构。 latest-aarch64 2.4.3,支持arm架构。 latest-noroot-x86_64 2.4.3,支持x86架构,支持非root用户身份运行容器。 latest-noroot-aarch64 2.4.3,支持arm架构,支持非root用户身份运行容器。 latest 2.1.17,兼容x86和arm架构。
  • 智能采样算法 APM系统会采用智能采样算法,决定是否对请求进行调用链跟踪。 如果决定要跟踪,那么就会生成一个TraceID,拦截A下面的一些重要方法(一般具有树结构父子关系)的详细信息(称为event),同时APM会将TraceID透传到B,B也会拦截下面的重要方法,同时透传TraceID到C,C也跟B和A类似。每个节点分别上报event信息,通过TraceID形成关联,这样通过TraceID就可以查看整个请求的调用详情。 如果决定不跟踪,那么就不会生成TraceID,B服务由于没有收到TraceID,自身也会产生跟A服务一样的算法,决定是否要进行调用链跟踪。 数据上报后,APM系统除了会存储所有event详情,同时会将每个服务的根event(称为span)信息额外存储起来,用于后续调用链搜索。用户一般是先搜索到span信息,然后根据span信息上附带的TraceID获取到总体调用链详情。 调用链采样策略系统默认是智能采样,url分为错误url、慢url(默认800ms、用户自定义配置)、正常url三种url,每种url调用链数据的采样率单独计算。APM的统计数据是一分钟采集上报一次,第一个采集周期所有url调用链数据都按正常url采样。第二个采集周期时,根据上一个采集周期的统计数据,将url分类为错误url、慢url、正常url三种url。 错误url的采样率:cpu小于30%每分钟采集100条,cpu大于或等于30%小于60%每分钟采集50条,cpu大于或等于60%每分钟采集10条,每条url至少采集2条。 慢url的采样率:cpu小于30%每分钟采集100条,cpu大于或等于30%小于60%每分钟采集50条,cpu大于或等于60%每分钟采集10条,每条url至少采集2条。 正常url的采样率:cpu小于30%每分钟采集20条,cpu大于或等于30%小于60%每分钟采集10条,cpu大于或等于60%每分钟采集5条,每条url至少采集1条。 上述调用链算法优点是,一旦决定产生调用链信息,那么链路是完整的,帮用户做正确决策。对于大量调用的url,可能会采集不到异常请求,可以通过异常监控的指标采集等其他方式来定位系统中的异常。
  • 查看调用链详情 根据搜索条件查询出来的调用链列表可以查看调用链的基本信息 在查询后的调用链列表中,单击待查看的调用链前的,查看该调用链基本信息,如下图所示。 图2 调用链基本信息 表中标识的具体参数所代表的含义如下: 调用链的HttpMethod。 调用链的RestURL,Rest URL为restful风格的URL,URL中带有变量名称,如/apm/get/{id};单击该URL可以跳转到调用链的详情页面。 调用链的开始时间。 调用链返回的HTTP状态码。 调用链的响应时间。 调用链的TraceID。 调用链所在组件。 调用链所在环境。 调用链所在实例的主机名。 调用链所在实例的IP。 调用链的实际URL。 调用链支持“查看日志”功能。 在LTS服务侧,配置“采集配置”,详细操作参见 云日志 服务 LTS《用户指南》的ECS接入章节。 单击“查看日志”,根据traceid跳转至LTS页面。LTS页面相关操作,请参见日志搜索。 如果未开通traceid关联日志,弹出“未关联日志服务”提示框。单击“跳转”,页面跳转至“关联日志服务”页面。“关联日志服务”详细操作,参见组件设置。 支持仅展示“请求成功”或“请求失败”调用链信息,以绿色“请求成功”按钮为例。 单击处于高亮状态的绿色“请求成功”按钮,仅展示“请求成功”的调用链信息,同时红色“请求失败”按钮置灰。 当红色“请求失败”按钮置灰时,单击处于高亮状态的绿色“请求成功”按钮,则展示所有调用链信息,同时红色“请求失败”恢复高亮。 绿色“请求成功”按钮和红色“请求失败”按钮,不支持同时置灰。 用户也可以从一些监控项视图页面,比如Url监控项的table视图,单击具体的Url跳转过来,这样就已经预先填写好搜索条件,帮助用户更快速搜索出所需要的调用链信息。 调用链详情页面可以查看调用链的完整链路信息,包含本地方法堆栈和相关远程调用的调用关系 单击调用链名称,可查看调用链详细信息,如下图所示。 上半部分为调用链完整链路的时序图,展示组件之间的完整调用关系,内部包含一次调用对应的客户端和服务器端的信息,然后线条越在下面,越晚发生调用。 下半部分为调用链详细的方法堆栈,每一行代表一个方法调用,展示了调用链内部方法的详细调用关系。默认只展示javaagent支持的组件方法,如需展示应用方法,可以在JavaMethod配置中配置需要拦截的应用方法。 图3 调用关系 表中标识的具体参数所代表的含义如下: 调用链的时序图中调用接口所属的组件和环境。 数字为接口调用的客户端响应时间,单位ms,具可将鼠标指针放置在该位置进行查看。 数字为接口调用的服务端响应时间,单位ms。 调用链方法堆栈中该方法对应的关键参数数据,如tomcat入口方法展示实际url、mysql的sql调用方法则展示具体执行sql。 调用链方法的扩展数据,一般展示该方法相关的参数信息。 调用链是“树”状结构,深度表示“树”状结构的层数。如图4所示。 图4 深度 单击“查看”,展示对应的Spans详细信息。单击“查看日志”,根据traceid跳转至LTS页面。详细介绍,参见“查看日志”章节。 时序图支持折叠,单击“收起时序图”,则时序图被折叠,不再展示。 图5 时序图折叠 单击“展开时序图”则时序图被展开,展示时序图。 调用链的时序图中,如下图。 使用不同类型探针或用户接入端接入时,图中1和2显示的内容不同,详见下表。 探针类型或用户接入的类型 显示内容 web前端 WEB 微信 WE_CHAT 百度 BAIDU 支付宝 ALIPAY 钉钉 DING_TALK 移动端App Android ANDROID 移动端App iOS IOS 其它 user
  • APM服务中调用链相关的参数说明 apm-traceid: apm服务采集到调用链的唯一标识。 图1 采集调用链的唯一标识 apm-gtraceid: apm服务中未被采样到的调用关系的唯一标识。 apm服务的调用链具有一定采样率,所以用apm-gtrace-id来表示未被采样的调用链的唯一标识。 apm-spanid:在某个调用链的微服务之间调用,表示某一个微服务的id,示例如下。 图2 调用链的微服务之间调用
  • 操作步骤 编辑deployment.yaml。 在volumes中增加一个emptyDir。 volumes: - name: paas-apm2 emptyDir: {} 在containers.volumeMounts中增加moutPath。 volumeMounts: - name: paas-apm2 mountPath: /paas-apm2/javaagent/ 在env中增加JAVA_TOOL_OPTIONS环境变量。 env: - name: JAVA_TOOL_OPTIONS value: '-javaagent:/paas-apm2/javaagent/apm-javaagent/apm-javaagent.jar' 新增initContainers。 initContainers: - name: init-javaagent image: {swrAddress}/op_svc_apm/javaagent:{agentVersion} command: - /bin/sh - '-c' - cd /paas-apm2/javaagent/apm-javaagent; /bin/sh init-config.sh -master_address {masterAddress} -app_name {appName} -access_key {accessKey} -access_value {secretKey} -business {business} -env {env} resources: limits: cpu: 250m memory: 250Mi requests: cpu: 250m memory: 250Mi volumeMounts: - name: paas-apm2 mountPath: /var/init/javaagent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File imagePullPolicy: Always monitorGroup: default
  • 配置示例 spec: replicas: 1 selector: matchLabels: app: vmall-admin version: v1 template: metadata: creationTimestamp: null labels: app: vmall-admin version: v1 spec: volumes: - name: vol-171526714525730640 hostPath: path: /vmall/vmall-deploy/vmall-data/app/vmall-admin/logs type: '' - name: paas-apm2 emptyDir: {} initContainers: - name: init-javaagent image: swr.cn-north-4.myhuaweicloud.com/op_svc_apm/javaagent:2.4.8-x86_64 command: - /bin/sh - '-c' - cd /paas-apm2/javaagent/apm-javaagent; /bin/sh init-config.sh -master_address https://100.125.12.108:41333 -app_name vmall-admin -access_key {AK} -access_value {SK} -business vmall-demo resources: limits: cpu: 250m memory: 250Mi requests: cpu: 250m memory: 250Mi volumeMounts: - name: paas-apm2 mountPath: /var/init/javaagent terminationMessagePath: /dev/termination-log terminationMessagePolicy: File imagePullPolicy: Always monitorGroup: default containers: - name: vmall-admin image: swr.cn-north-4.myhuaweicloud.com/vmall-org/vmall-admin:1.0.0 env: - name: PAAS_APP_NAME value: vmall-admin - name: PAAS_NAMESPACE value: default - name: PAAS_PROJECT_ID value: e49731583bc54978aa7b4da1a2196e46 - name: CLOUDDEPLOY_SYS_INCREMENT value: '1719279081896' - name: JAVA_TOOL_OPTIONS value: '-javaagent:/paas-apm2/javaagent/apm-javaagent/apm-javaagent.jar' resources: limits: cpu: '1' memory: 2Gi requests: cpu: 500m memory: 1Gi volumeMounts: - name: vol-171526714525730640 mountPath: /var/logs - name: paas-apm2 mountPath: /paas-apm2/javaagent/ terminationMessagePath: /dev/termination-log terminationMessagePolicy: File imagePullPolicy: Always restartPolicy: Always terminationGracePeriodSeconds: 30 dnsPolicy: ClusterFirst securityContext: {} imagePullSecrets: - name: default-secret schedulerName: default-scheduler tolerations: - key: node.kubernetes.io/not-ready operator: Exists effect: NoExecute tolerationSeconds: 300 - key: node.kubernetes.io/unreachable operator: Exists effect: NoExecute tolerationSeconds: 300
  • 操作步骤 生成一个含有解密方法的jar包,假设jar包名为demo.jar , 内置解密类为com.demo.DecryptDemo,解密方法为decrypt(注意decrypt得是静态方法)。然后将该jar打包一个镜像,上传到镜像仓,获取密钥方法参见访问密钥。 在CCE deployment yaml中添加一个initContainer属性,如下所示。 示例: 步骤1中上传的镜像地址为swr.cn-north-5.myhuaweicloud.com/hwstaff_pub_apmpaasw3/decrypt:v2 解密的类名为com.demo.DecryptDemo,解密方法为decrypt。 按如下方式添加一个initContainer,注意替换加粗部分。 initContainers: - name: init-secret image: swr.cn-north-5.myhuaweicloud.com/hwstaff_pub_apmpaasw3/decrypt:v2 command: - /bin/sh - '-c' - cp /root/com.demo.DecryptDemo.jar /var/init/secret/apm-javaagent/ext; sed -i 's%#decrypt.className=.*%decrypt.className=com.demo.DecryptDemo%g' /var/init/secret/apm-javaagent/apm.config; sed -i 's%#decrypt.methodName=.*%decrypt.methodName=decrypt%g' /var/init/secret/apm-javaagent/apm.config; resources: limits: cpu: 100m memory: 100Mi requests: cpu: 100m memory: 100Mi volumeMounts: - name: paas-apm2 mountPath: /var/init/secret 添加该initContainer可以实现将jar包复制到apm-javaagent/ext目录下,以及修改配置文件的目的。 在apm页面获取AK 和SK,然后对sk进行加密处理,将AK和加密后的SK替换yaml文件中的如下值。 保存配置对CCE实例进行升级即可。
  • 背景信息 在外部请求激增、负载突变等场景下,极易出现应用性能问题,比如外部请求响应变慢、部分请求异常等。快速识别发现、定位处理应用性能问题成为越来越常见的日常运维场景。 APM作为云应用性能问题诊断服务,拥有强大的分析工具,通过拓扑图、调用链可视化地展现应用状态、调用过程、用户对应用的各种操作,快速定位问题和改善性能瓶颈。 例如,通过APM拓扑功能可视化服务间的调用关系,迅速找到有问题的实例;通过APM调用链功能下钻到服务内部,根据出现问题的方法调用链路,确认问题根因。
  • Profiler性能剖析配置 进入组件配置页,在“Profiler性能剖析配置”表单中填写相关信息。 图7 Profiler性能剖析配置 表2 Profiler性能剖析配置说明 参数 说明 Profiler启停 开启后,将对低开销的应用进行持续诊断,解决Java程序中因为CPU、内存和时延导致的瓶颈问题。 开关默认为关闭,开关置灰。总开关关闭时,所有子开关都处于关闭状态。 CPU 开启后将采集应用运行过程中CPU火焰图信息。 开关默认为关闭,开关置灰。 内存 开启后将采集应用运行过程中堆内存火焰图信息。 开关默认为关闭,开关置灰。 Live Object Memory:已分配但未被回收的堆内存,使用场景主要包括内存泄漏等。该特性需要JDK版本为JDK17。 Allocated Memory:已分配的堆内存(包括已被回收和未被回收的部分),使用场景包括频繁GC等。 时延 开启后将采集应用运行过程中时延火焰图信息。 开关默认为关闭,开关置灰。 生效范围 组件:组件级范围生效。该组件下关联的所有实例生成Profiler数据。开关默认为开启,组件按钮标记为蓝色。 实例:实例级范围生效。仅所选实例生成Profiler数据,开关默认为关闭,开关置灰。 单击实例开关,开启“实例”,实例按钮标记为蓝色。 单击“选择实例”,选择所需要的实例。 图8 选择实例 选择1个或多个实例后,单击“确定”,设置成功。 图9 选择需要的实例 注意: 如果选择了实例级范围生效,则不能复制到其他组件/环境。 “组件”和“实例”只能选择其中一项,不支持同时选择。 单击“保存”,提示保存成功。 单击“复用到其他组件”,弹出“复用到其他组件”选择框。 图10 复用到其他组件 选择一个或多个组件,单击“复用到其他组件”,则当前“Profiler性能剖析配置”信息,成功的复制到被选择的组件中。
  • 全采样设置 为了减少调用链数据频繁上报给服务造成的性能影响,探针侧发送的调用链数据,默认情况下最大100TPS的速率上报。所以在服务并发量超过100TPS的情况下,调用链不会全部上报,如有需要可以通过修改配置文件的方式修改上报阈值,但请做好性能开销的评估。 全采样功能在设置100%采样率,500TPS、1000TPS、2000TPS的情况下,CPU的消耗相对于智能采样分别增加约5%、10%、20%。 进入组件配置页,在“全采样配置”中选择采样策略。 图11 全采样设置 智能采样。 全采样策略系统默认是智能采样,url分为错误url、慢url(默认800ms、用户自定义配置)、正常url三种url,每种url调用链数据的采样率单独计算。APM的统计数据是一分钟采集上报一次,第一个采集周期所有url调用链数据都按正常url采样。第二个采集周期时,根据上一个采集周期的统计数据,将url分类为错误url、慢url、正常url三种url。 错误url的采样率:cpu小于30%每分钟采集100条,cpu大于或等于30%小于60%每分钟采集50条,cpu大于或等于60%每分钟采集10条,每条url至少采集2条。 慢url的采样率:cpu小于30%每分钟采集100条,cpu大于或等于30%小于60%每分钟采集50条,cpu大于或等于60%每分钟采集10条,每条url至少采集2条。 正常url的采样率:cpu小于30%每分钟采集20条,cpu大于或等于30%小于60%每分钟采集10条,cpu大于或等于60%每分钟采集5条,每条url至少采集1条。 全局采样。 全局采样针对所有调用链的采样率设置, 默认值(%):100,取值范围(%):0~100。 自定义采样。 自定义采样可以按照用户的需求,自定义采样率。 表3 自定义采样说明 采样率名称 默认值(%) 取值范围(%) 说明 成功请求采样率 100 0~100 成功请求指请求状态码为非错误返回且无异常的请求。 URL采样率 - - URL:URL路径,例如:/apm2/health/v1/health-check。 采样率:默认值(%):0,取值范围(%):0~100 单击“删除”,删除当前行的采样率配置。 URL配置是指单独定义url的响应时间阈值,该url超过指定阈值后,该url调用链数据的采样率会提高。相关配置说明参见配置url监控项。 说明: URL采样率,仅针对成功请求生效。 错误请求采样率 100 0~100 错误请求即“错误状态码定义”。 错误状态码定义有两个可选项:状态码400以上统计为错误、为状态码500以上统计为错误。默认值为状态码500以上统计为错误。 相关配置说明参见配置url监控项。 慢请求采样率 100 0~100 慢请求是指全局请求响应时间大于阈值的请求。 慢请求阈值配置说明参见配置url监控项。 单击“保存”,完成配置。 全采样设置完成约10分钟后,该配置生效。
  • 关联日志服务设置 应用性能管理 (APM)与云日志服务(LTS)关联,您可以在 LTS中关联调用链的 TraceID 信息,当应用出现故障时,可以通过调用链的 TraceID 快速关联到业务日志,及时定位分析并解决问题。 关联业务日志与TraceId开关,开启后业务日志中会自动生成调用链的TraceId。如果关闭关联业务日志与TraceId开关,则关联日志服务设置不生效。 关联业务日志支持Log4j/Log4j2/Logback日志组件。 自定义设置只支持java类型。 进入组件配置页,在“关联日志服务设置”表单中填写相关信息。 图4 关联日志服务设置 表1 关联日志服务设置参数说明 参数 说明 项目 在下拉菜单中选择项目。 日志组 日志组(LogGroup)是云日志服务进行日志管理的基本单位,可以创建日志流以及设置日志存储时间,每个账号下可以创建100个日志组。创建日志组详细操作参见日志组。 日志流 日志流(LogStream)是日志读写的基本单位,日志组中可以创建日志流,将不同类型的日志分类存储,方便对日志进一步分类管理。详细操作参见日志流。 单击“保存”,弹出“关联日志服务”提示框。 图5 关联日志服务 单击“确认”,关联成功。 单击“复用到其他组件”,弹出“复用到其他组件”选择框。 图6 复用到其他组件 选择一个或多个组件,单击“保存并复用到其他组件”,则当前“关联日志服务”的配置,成功的复制到被选择的组件中。
  • 计费示例 前端监控按上报量计费,假设您在2023/03/08 15:50:04购买了企业版1600万特惠包,则:在2024/03/08 15:50:04前,支持上报量为16000万条。 第一个话单上报周期为:2024/03/09 01:00:00开始结算2023/03/08 15:50:04 ~ 2024/03/08 23:59:59之间的上报量。 第二个话单上报周期为:2024/03/10 01:00:00开始结算2024/03/08 23:59:59 ~ 2024/03/09 23:59:59之间的上报量。
  • 计费说明 APM提供特惠包以及按需计费模式,计费项按照上报量计费。具体内容如表1所示。 表1 计费规则 区域 产品规格 计费方式 特惠包名称 规格 价格 有效期 华北-北京四 华北-乌兰察布一 华东-上海一 华南-广州 华南-广州-友好用户环境 西南-贵阳一 亚太-新加坡 中国-香港 企业版 特惠包 200万特惠包 200万条 ¥420 1年 1600万特惠包 1600万条 ¥2520 1年 12800万特惠包 12800万条 ¥15120 1年 按需计费 - - 0.28元/1000条 - - 免费版 不计费,限制上报量:2000条/天。
  • 计费模式概述 APM目前产品规格包括免费版和企业版。当您从免费版切换到企业版后,计费方式默认为按需计费。如果购买了特惠包,将优先使用您购买的特惠包中的配额,配额使用完或者到期时间之后再按照您选择版本的按需费用,进行按使用量扣费。 特惠包购买之后,不支持退订啦。特惠包到期以后,不会影响您在APM的使用和数据安全。 支持直接开通免费版、企业版,支持由免费版更改为企业版。 前端监控按上报量计费。 父主题: 前端监控