链路追踪
链路追踪提供了完整的调用链路拓扑、trace查询、方法追踪等功能,可以帮助开发者快速发现和定位分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。主要功能如下:
- 调用链查询和诊断:追踪分布式架构中的所有微服务用户请求,并将它们汇总成分布式调用链。
- 全链路拓扑动态发现:用户的所有微服务应用、中间件可以通过链路追踪收集到的分布式调用信息。
- 多语言开发程序接入。
- 方法追踪:实现对某个类的某个方法的动态埋点
- 链路告警:基于链路监控指标及时告警,遇到问题时,可快速通知相关人员进行处理
- 租户管理员已为目标业务项目配置链路组件地址
- 服务已接入链路,详见链路配置
全链路拓扑
全链路拓扑选择链路后,支持跨集群、租户、项目查看服务之间的调用关系,点击服务展开多维度面板,可快速获取资源、JVM、中间件、流量、详情等方面的监控数据,同时还支持实例级别调用数据展示,有助于及时发现问题、排查问题,以及在资源利用方面给用户决策提供数据支撑。页面及说明如下所示
- 区域1:支持选择链路组件、租户、集群、项目,多维度展示服务调用拓扑
- 区域2:动态拓扑,可拖动,放大,缩小等,可点击服务查看多维度监控信息
- 区域3:当接入服务过多时,通过缩略图帮助用户快速定位服务
拓扑图使用说明:
- 进入[性能监控/链路追踪/全链路拓扑]页签,拓扑图中点击右上角
设置
按钮
- 勾选“显示服务实例”,拓扑图所有服务均展开到实例维度,可查看具体到每个实例的调用数据
- 连线上默认展示“成功次数/总调用次数”,也可切换显示“平均响应时间ms”
- 当部署服务网格 TDSF 产品后,会展示 “网格服务显示mTLS标记”选项,默认不勾选
- 拓扑图中点击右上角
帮助
按钮,可查看拓扑图详细说明
- 对于不属于当前所选集群的服务独立展示,属于第三方服务
- 对于从浏览器或控制台命令发出的服务调用,统一归属为客户端调用
- 所有中间件服务独立展示,支持MySQL、Redis、rabbitmq、kafka、rocketmq等
- 支持按服务名称搜索,高亮显示某服务所有拓扑关系,从繁杂的拓扑图中快速定位服务关系
- 服务/实例健康状态:按ApdexScore,显示不同的颜色
- 点击拓扑图中的服务,会展开各种监控指标项
- 详情:展示服务名称(服务分组、所属项目、所属租户)、当前实例数、调用次数、失败次数、平均相应时间、ApdexScore、Service ApdexScore
- 接口:新的标签页跳转接口监控,并以当前服务、时间范围填充查询条件,查看此段时间内服务各接口的监控信息,包括平均耗时ms、请求数、吞吐量(calls/min)、错误数等
- JVM:弹出面板展示对应容器组(支持历史容器组筛选)统计的JVM信息
- 流量:弹出面板展示对应服务的调用次数&失败次数,平均相应时间,百分位响应时延,调用成功率曲线图,支持服务、实例维度查询
- 中间件:弹出面板展示
- Redis展示IP地址、端口,分别展示调用次数&错误次数、平均响应时间ms、成功率曲线图;Operation统计,分别展示每个Redis操作的类型、平均响应时间ms、调用次数/失败次数,并支持关键字查询;
- MySQL展示IP地址、端口,分别展示调用次数/失败次数、平均响应时间ms等信息;SQL统计,分别展示每条SQL的语句、平均响应时间ms、调用次数、失败数,并支持关键字查询;
- RabbitMQ展示IP地址、端口,分别展示名称(条数)、平均响应时间、调用次数&失败次数,并支持按名称查询;
- RocketMQ:展示IP地址、端口,分别展示Topic名称(条数)、平均响应时间、调用次数&失败次数;
- Kafka:展示IP地址、端口,分别展示Topic名称(条数)、平均响应时间、调用次数&失败次数。
- 链路:新标签页跳转到“调用链查询”页面,并填充当前查询条件
- 展开:服务展开多实例。
- 定位异常服务,当服务黄色或红色时,如果用户想进一步确定是哪个pod出现异常,点击服务的展开选项,显示各实例(即pod)。调用连线先到服务(service),服务再连向实例(多个相互调用的服务均展开)
- 实例显示实例名称(版本号)
中间件面板数据展示:Operation统计/SQL统计/推送&订阅/topic统计中数据由于会涉及业务敏感信息,故仅展示用户有权限的项目&服务调用中间件的数据。
调用链查询
随着业务的扩展服务增多,很难洞察数据如何在蛛网般复杂的服务结构中流转。因此引入服务调用链来跟踪服务调用关系,分析分布式系统的每一次调用,从而精确发现系统的瓶颈和隐患。此处可查询特定的项目&集群下,调用链路的状态,定位某一次调用情况,帮助排查问题。
- 仅Trace查询时可基于标签进行调用链查询。默认展示的key:http.method、http.status_code、grayEnable、grayTag,用户自定义配置后,会动态显示
- 基于标签查询后,系统会展示带有此key:value的trace,key显示在span的详情中
- 如使用时速云全链路灰度产品,监控灰度过程时,可通过灰度标签grayEnable、grayTag,快速定位灰度数据
调用链查询使用说明:
- 进入[性能监控/链路追踪/调用链查询]页签,设置查询条件,单击<搜索>按钮
- 选择链路组件:链路组件名称由链路部署所在的项目&集群组成。仅支持单选,
- 下拉框分别选择租户、集群、项目:选中的是使用此链路组件的项目&集群。
- 下拉选择服务。
- 当选择“所有服务”时,仅支持Trace查询
- 当选择某一服务时,支持Trace 或Span查询
- Trace查询:可按Trace入口方法名、TraceID、返回条数上限,默认10000条、耗时(ms)>=、状态(全部状态、成功or失败)、时间段进行联合查询
- Trace ID:若使用Trace ID查询(完全匹配查询),则其他设置条件无效。
- 选择请求状态:所有状态、成功、失败。
- 返回条数:默认返回查询的近10000条,并做分页处理。
- 耗时(ms)>=:自定义查询大于等于xxms的trace。
- 基于标签的查询:选择条件与或条件或,选择标签,自定义标签值进行查询。只有core/default/searchableTracesTags中定义的标记才可搜索。查看配置词汇表页面上的更多详细信息。
- trace耗时气泡图:默认展开,支持收起,点击小气泡,可以选中下方列表中对应的trace。根据圆点的颜色、大小、位置快速定位所需的调用
- 大小表示该Trace包含的Span数量,越大表示Span越多。
- 颜色表示状态:蓝色表示成功,红色表示失败。
- 纵轴位置表示耗时时间,越往上表示耗时越大。
- 横轴位置表示Trace产生的时间。
- 气泡图下方左侧列表是trace列表
- 默认按开始时间倒序,每条trace展示入口方法名、开始时间、耗时、状态(成功or失败)、涉及服务名
- 气泡图下方右侧是trace详情:
- 展示span列表:方法名、状态、总耗时、耗时、时间线、微服务名称、实例名称、操作(查看详情)
- span列表展示支持树形图展示,树结构展示span关系
- 点击span右侧操作列的<查看详情>按钮,可查看该完整调用span详情,请求相对开始时间、span总耗时、系统annotation、自定义annotation等信息。通过两个服务之间调用的耗时可大概定位问题产生的原因,如:若客户端发出请求耗时和客户端收到响应耗时较长,可考虑是否网络传输压力较大等;若服务端处理请求耗时较长,可考虑服务端本身是否出现问题
- Span查询:选择span名称、设置返回条数上限、设置耗时(ms)>=、状态、时间段进行查询。查询结果列表中展示span名称、状态、TraceID、服务名称、实例名称、开始时间、耗时、查看详情
接口监控
为了保证线上服务的稳定运行,除了要保证线上关键服务的正常运行外,各服务接口也非常重要。接口异常这类问题的排查往往比服务异常更耗时费力,通过接口监控功能模块帮助用户解决以下问题。
- 接口的不稳定导致APP/WEB端上的超时、抛错,而资源级监控不能达到业务健康状况监控的目的。
- 接口众多,服务部署后不知道是否每个接口都正常。
- 依赖的其他接口异常导致不可用。
- 重要的接口不能等用户触发异常,需要在用户请求前就发现异常并处理掉。
统一展示接口的调用概览、调用链路等信息:
- 通过拓扑展示接口调用关系及接口详情。可查看接口对应的租户/集群/项目/服务/接口名称等信息。
- 以折线图的形式统一展示在选定时间段内接口调用的吞吐量、平均相应时间、相应时间百分比、接口请求成功率。
- 单击调用链路系统会按照当前配置的接口筛选条件进入调用链查询页面,系统按照入口方法名进行查询。
JVM监控
服务接入链路后,系统监控容器组的JVM数据,用户可根据业务需要配置对应的进行查看。 统计展示筛选条件下的内存和线程数据。
- 堆内存的最大内存和使用内存、Old Gen、Survivor、Space、Eden Space;非堆内存的最大内存和使用内存、Code Cache、Metaspace、Permgen;垃圾收集的YoungGC次数、OldGC次数、YoungGC耗时、OldGC耗时
- 线程:活跃线程数、死锁线程数、守护线程数、峰值线程数
链路告警
为完善微服务的管理、治理能力,系统提供链路告警能力。详细说明如下:
- 区域1:切换告警设置/告警记录
- 区域2:提供链路告警相应操作,例如创建/启用/停用/刷新/搜索告警策略
- 区域3:统计展示项目集群下的链路告警策略,针对单个告警策略用户可执行忽略/删除/编辑/启用/查看/清除告警记录等操作
告警策略
操作步骤如下:
- 进入[性能监控/链路追踪/链路告警]页签,默认进入告警设置列表页面
- 点击
创建
按钮,配置参数说明如下:
- 告警名称:输入
3-40位字符,以英文字母或数字开头或结尾,支持下划线“_”、中划线“-”
,修改时禁用不支持修改。 - 告警级别:配置当前告警策略的告警级别,支持设置的级别有:通知、告警、危险,用户可根据实际的业务需求进行配置。
- 指标类型:服务调用支持服务、实例、接口维度设置告警策略,JVM监控、线程监控仅支持实例维度设置告警策略。
- 线程监控:活跃线程总数live(个)、死锁线程总数deadlock(个)、峰值线程数peak(个)。
- JVM监控:堆内存used(MB)、非堆内存used(MB)、OldGC总次数(次)、YoungGC总次数(次)、OldGC总耗时(ms)、YoungGC总耗时(ms)。
- 服务调用:调用每分钟请求数(次)、调用总次数(次)、调用总错误次数(次)、调用错误率(%)、调用平均响应时间(ms)、调用TP99(ms)、调用TP95(ms)、调用TP90(ms)、Apdex Score(最大值)。
- 告警服务:选择安装了agent的服务,如果指标类型为服务调用时支持配置“基于告警接口设置告警规则”,此处服务发生调用后才能读取到相关接口。
- 告警规则:支持最近“N”分钟,某一规则>(>=、<、<=、=)阈值(个/次/ms/MB)。
- 生效范围:配置链路告警策略的生效范围是服务级别还是示例级别。
- 通知配置:配置触发告警策略时是否发送通知,发送通知的时间间隔,选择告警通知方式,系统支持通过钉钉、企业微信、Webhook等通知方式。
- 策略参数配置完成后,单击<确定>按钮,新建链路告警策略操作完成。
- 用户按需可编辑/启用/停用/忽略/删除告警策略。
告警记录
告警记录页面呈现了历史所有的告警策略产生的告警情况,这里可以通过筛选规则来定位查询历史的告警记录,来帮助运维开发同学来进行问题定位,应用运行的情况诊断。支持多维度监控、查询,支持清空告警记录。
- 系统支持清除所有告警记录,该操作将会清空所有告警记录,并且已经清除的告警数据无法恢复。
- 告警记录分布:统计项目集群下的所有告警记录,告警记录类型有:通知、危险、告警。
- 告警总数:展示项目集群下的所有告警详情,用户可查看对应告警记录的告警时间、告警服务、告警实例、告警接口、告警当前值、告警规则等属性。
- 自定义列表项:系统支持自定义告警列表项,可选的配置列表项有:告警级别、策略名称、指标类型、是否发送通知。
- 重置:系统支持重置告警记录筛选条件
方法追踪
方法追踪是对某个类的某个方法进行动态埋点,当这个类的方法被调用时,链路会按照用户配置的方法追踪规则对方法的调用数据进行采集,并将调用数据展现在调用链页面中。方法追踪主要用来帮助应用的开发人员在线定位方法级性能问题。
运维或开发人员定位问题
- 希望在调用链详情内看到链路追踪没有覆盖到的自身业务内部的方法,链路追踪默认采集的内容粒度不够细,故增加方法级别的自定义埋点,将想采集的信息手动配置进去。
- 对于链路追踪默认没有支持采集的第三方框架,出现问题不好定位,通过自定义埋点可以扩展采集范围。对方法的埋点支持自定义标记参数信息,方便排错是检查方法参数值是否准确。
- 服务在移出链路的时候,会将该服务下所有的埋点配置都删除,埋点列表中将不再展示这些埋点配置。
- 服务在关闭采集的时候,会将该服务下所有的埋点配置都停用,埋点列表中埋点状态将变为停用。
配置埋点操作如下:
- 进入[性能监控/链路追踪/方法追踪]页面,点击
添加埋点
按钮,参数说明:
- 微服务:配置要埋点的服务。
- 全类名:服务对应的全类名,例如:包为
com.t7d.user
,类为UserService
,则全类名为com.t7d.user.UserService
。 - 方法名及参数:方法是代表功能的模块,传递给方法的参数,填写参数对应方法中参数的全类名,且必须和方法的参数顺序一致,并以英文逗号分隔,例如:方法为public int login(int id, String name),则方法名及参数为login(int.class,java.lang.String)。
- Span名称:Span是分布式系统中的一个小的调用单元,可以是一个微服务中的service,也可以是一次方法调用,甚至一个简单的代码块调用。Span可以包含起始时间戳、log等信息。每一个Span会有一个独有的Span ID。
- 自定义Annotation:程序的注解,用户可以配置注解为对象附加任意的非标识的元数据。服务程序能够获取元数据信息。
- 以上参数配置完成后,单击<确定>按钮,埋点设置配置成功。在调用链查询中,进入span详情可查看埋点信息
- 编辑埋点时,只允许调整方法是否是静态、Span名称、自定义Annotations等参数
链路配置
本小节提供服务可视化接入链路的能力。服务接入链路后方可支持链路追踪、链路拓扑等功能;同时为减少资源占用,您可以按需进行采集配置(采样率、Apdex阈值等)。
容器服务接入链路
PaaS部署服务后,服务均是未接入链路的状态,需要再此接入链路,接入成功后,默认开启采集,采样率100%,Apdex阈值500ms。操作步骤如下:
- 进入[性能监控/链路追踪/链路配置]页面。
- 单击<接入链路>按钮,弹框展示当前项目&集群下有pod的service列表。
- 勾选目标服务,点击<确定>,接入链路完成。
可视化接入链路,兼容JAVA应用 服务接入、移出链路均会自动重启
容器服务移出链路
接入链路后支持移出,移出时,历史调用链相关数据不会被删除,移出步骤如下:
- 进入[性能监控/链路追踪/链路配置],进入链路配置列表页面。
- 找到要移出链路的服务,单击<移出链路>按钮,二次弹框提示”移出链路后,服务xx会自动重启,且不在采集服务调用相关数据,确定移出吗?”
- 弹框中输入“移出”,点击<确定>,移出链路成功。
采集配置
为减少资源占用,用户可以按需对目标服务进行采集配置,配置步骤如下:
- 进入[性能监控/链路追踪/链路配置],进入链路配置列表页面。
- 找到要配置采集的服务,单击<采集配置>按钮,弹框中配置采集参数:Apdex阈值,默认500ms
- Apdex阈值:定义了服务响应时间的最优门槛为T(即Apdex阈值,T由性能评估人员根据预期性能要求确定),单位ms
- 可按需为服务开启/关闭采集
传统主机服务接入链路
本章节主要介绍虚拟机、物理机上的java服务如何接入链路。接入后,可支持全链路拓扑、调用链查询、接口监控、JVM监控、链路告警能力。 操作步骤如下:
- 下载skywalking-agent.tar.gz到目标虚拟机或物理机上,解压到目标路径,例 /home/skywalking-agent
- 重启目标虚拟机或物理机上的java服务。启动命令需要添加以下参数,例
java -javaagent:/home/skywalking-agent/skywalking-agent.jar -Dskywalking.collector.backend_service=172.22.50.50:22398 -Dskywalking.agent.service_name=demo -Dskywalking.agent.instance_name=demo-172-22-90-90 -Dskywalking.extended.paas_tenant=TENANT-4WXNi4sfvSLS -Dskywalking.extended.cluster_id=CID-585ae638bd68 -Dskywalking.extended.paas_namespace=test -Dskywalking.extended.paas_version=v1 -jar /app/app.jar
- 参数说明:
- javaagent:skywalking-agent.jar的绝对路径
- Dskywalking.collector.backend_service:链路组件配置的外网地址 接入链路后,各功能页面均需选择租户、项目、集群、服务进行查询,按需指定
- Dskywalking.extended.paas_tenant:目标租户ID,联系管理员通过[管理工作台/租户管理]页面可查询到
- Dskywalking.extended.paas_namespace:目标项目的命名空间名称,联系管理员通过[管理工作台/项目管理]页面可查询到
- Dskywalking.extended.cluster_id:目标集群的ID,联系管理员通过[管理工作台/集群管理]页面可查询到
- Dskywalking.agent.service_name:目标服务名称,便于接入后进行查询、观测
- Dskywalking.agent.instance_name:目标服务名称+目标虚拟机或物理机IP,例demo-172-22-90-90
- Dskywalking.extended.paas_version:自定义目标服务版本