端点

端点定义了服务的应用程序接口(API),并提供了一个细粒度视图,让人了解服务公开了哪些操作。 对服务的每次调用都发生在单个端点上。 每个端点都有一个自动发现的单一类型: BATCH, SHELL, DATABASE, HTTP, MESSAGING, RPC。与服务一样,端点也可以从应用程序的角度来看待。

端点可以静态声明,也可以基于调用标记,与服务相反,通常使用基础结构标记(例如 SpringBoot 名称)确定。 例如,{call.http.method} {call.http.path}的组合将是 HTTP 服务的典型端点。

为服务定义单独端点的另一个好处是,主要使用“monoliths”,服务可以包含许多不同的框架和技术;HTTP/REST API,数据库访问,消息总线集成等。 通过为每种类型的 API 创建至少一个端点,并可能进一步细分(例如协议详细信息),按 API 类型捕获度量和统计信息。

Instana 根据缺省规则自动映射端点。 有关更多信息,请参阅端点映射

预定义规则

Instana 可根据一组预定义规则自动映射端点。 以下规则将按降序进行考虑。 当规则匹配时,就会创建相应的端点。

规则 标记
自定义端点规则 用户定义的标签(参见自定义端点映射
用户通过 HTTP 标头定义的端点名称 {call.http.header.x-instana-endpoint}
sdk span 数据中用户定义的端点名称 {call.tag.endpoint}
OpenTelemetry 定义的操作名称 {otel.operation}
积木定义的操作名称 {call.tag.jaeger.operation}
Zipkin 定义的操作名称 {call.tag.zipkin.operation}
SOAP 操作 HTTP 标头 {call.http.header.soapaction}
使用 WSDL 命名空间的 RPC {call.rpc.method-1}
RPC {call.rpc.method}
GraphQL {call.graphql.operationType?} {call.graphql.operationName?}
批处理石英类型,而不是六角形图案 {call.batch.jobType}
批处理石英类型,而不是截止日期 {call.batch.jobType}
带前缀的批次十六进制 {call.batch.job-1}
批量石英数字后缀 {call.batch.job-1}
Spring 批处理作业 {call.batch.job-1}
批处理 {call.batch.job}
Prisma 型号 {call.database.statement-1}
棱镜模型回退 棱镜
JDBC 解析后的语句 {call.database.statement-1}
JDBC 存储过程语句结果 {call.database.statement-1}
Neo4j 解析后的语句 {call.database.statement-1}
Cassandra 解析后的语句 {call.database.statement-1}
Cosmos 非 sql 命令 {call.database.schema-1}
ElasticSearch 多种指数 {call.database.schema-1}
ElasticSearch 单一索引 {call.database.schema}
ElasticSearch 行动 {call.database.commandType}
ElasticSearch 其他应用程序接口端点 其他应用程序接口端点
MongoDB 从查询中解析的集合 {call.database.schema-1}.{call.database.statement-2}
MongoDB 从查询中无法解析的集合 {call.database.schema-1}
MongoDB 从命名空间解析的集合 {call.database.schema}
DynamoDB 表格 {call.database.schema}
Redis 指挥部 {call.database.statement}
AWS S3 存储区 {call.database.schema}
AWS S3 操作 其他应用程序接口端点
GCS 存储区 {call.database.schema}
GCS 操作 其他应用程序接口端点
Azure 存储容器 {call.database.schema}
Azure 存储操作 其他应用程序接口端点
Memcache / Memcached / EhCache 操作 {call.database.commandType}
Couchbase 水桶 {call.database.schema}
数据网格缓存 {call.database.schema}
Couchbase 解析后的语句 {call.database.statement-1}
Aerospike 声明 {call.database.statement}
IMS 带声明的数据库 {call.database.statement}
IMS 无报表的 DB IMS DB
数据库后备 {call.database.commandType}
临时消息队列 暂存队列
IBM MQ span使用地址 {call.messaging.address-1}
IBM ACE 跨度使用地址 {call.messaging.address-1}
信息传递默认交换为 AzureQueue {call.messaging.exchangeType}
Apache RocketMQ span使用地址 {call.messaging.address-1}
通用信息传递 {call.messaging.address}
信息传递默认交换为 RabbitMQ 默认交换
临时消息队列 暂存队列
z/OS 连接应用程序接口 {call.zcee.apiName}
HTTP 带路径模板 {call.http.method?} /{call.http.pathTemplate-1}
HTTP 带路由编号 {call.http.routeId}
API 版本后的第一个 HTTP 路径段(如果有的话 {call.http.method?} {call.http.path-1}
HTTP 带根路径的方法 {call.http.method} /
HTTP 根路径 {call.http.method?} /
通用活动 {call.event.source}
获取不带参数的二进制 Shell 名称和不带参数的脚本名称 {call.shell.command-1} {call.shell.command-2}
不带参数获取 Shell 二进制名称 {call.shell.command}
作为服务的功能,包含名称和版本 {faas.functionname}:{faas.functionversion}
仅以名称作为服务功能 {faas.functionname}
作为带有标识符的服务功能 {cloud.id}
SDK.name {call.sdk.name}

端点映射

端点会根据端点类型自动映射。

例如,Instana 根据路径模板(如果可访问)自动对 HTTP 端点进行分组。

/hospital/1948/patient/291148
/hospital/728/patient/924892
/hospital/47/patient/25978
/hospital/108429/patient/1847

在前面的示例中,前面的端点由相同的应用程序代码提供服务,因此具有共享的性能配置文件,这些端点将被分组并一起报告:

/hospital/{hid}/patient/{pid}

这是自动完成的,对于已知的框架,用户无需采取任何步骤。

当路径模板不可用时,端点会映射到第一个路径段,也可根据需要进行配置

下面是一些无法使用路径模板的示例:

  • 受监控服务未使用路径模板。
  • Tracer 不支持路径模板。
  • 在某些边缘情况(如身份验证失败)下,Tracer 无法访问路径模板信息。
  • 目的地服务不受监控,客户端的退出跨度不知道路径模板。

如果您要编写自己的跟踪代码,请参阅我们的 自定义跟踪最佳实践 ,了解如何实现相同的结果。

自定义端点映射

对于每项服务,Instana 允许使用一种配置来控制服务端点的提取方式。 要访问配置,请浏览至服务仪表板,转至“端点”选项卡并单击“配置端点”。

应用程序依赖关系图概览

请注意,自定义端点配置仅适用于基于 HTTP 的服务。

自定义端点规则

Instana 自带三个默认的 HTTP 规则,它们始终是提取链的一部分:

  • 检测到的框架:抽取检测到的框架中指定的端点(如果可访问)。
  • /* :根据第一个路径参数提取端点。
  • 未指定:与先前规则不匹配的调用将分配给此端点

要指定其他配置,您可以定义多个定制规则。 为此,请从任何 HTTP 服务访问自定义端点配置对话框,然后选择添加自定义 HTTP 规则。 即将出现的对话框使您能够定义特定路径(实际规则)和多个测试用例,以检查已定义的路径是否按预期工作。 对于路径,您可以使用静态段(如 /api/myShopEndpoint )、路径参数(如 /{productId} )或与任何段匹配的 /*

在对话框的规则测试程序部分中,您可以定义多个测试用例验证规则。 例如,给定查询/api/*/{version},以下测试用例/api/anyName/123将匹配,而/otherApi/anyName/123将不匹配。

应用程序依赖关系图概览

顺序评估

规则按从先到后的顺序应用,呼叫分配给第一个匹配规则。 更改顺序,仅对规则进行重新排序,而仅进行拖放。 可以禁用实例缺省规则,但不能对其进行重新排序。

应用程序依赖关系图概览

合成端点

只接收合成流量的端点(如对健康检查端点的调用)会使应用程序和服务的关键绩效指标出现偏差。 Instana 会自动检测这些端点并将其标记为合成,以防止它们影响应用程序和服务 KPI。

在 Instana 中如何使用合成端点

在 Unbounded Analytics 中,合成端点下的每个呼叫都被标记为合成呼叫,不会计入应用程序视角、服务和端点视图的关键绩效指标。

合成端点

尽管他们的调用不计入 Application Perspectives 和 Services 的 KPI,但各个合成端点与非合成端点一样具有自己的仪表板。

合成端点

默认合成端点

默认情况下,合成端点通过以下 URL 模式识别:

您可以禁用内置规则并指定自定义规则,将其他端点标记为合成。 更多信息,请参阅合成端点自定义规则文档。 内置和自定义端点规则的配置可通过服务列表上的配置服务按钮进行访问。

合成端点的自定义规则

注意: 自定义规则适用于所有服务的全局。

为了帮助进行配置,将显示受影响的端点和服务。

合成端点配置

合成电话

除了可以将整个端点标记为 "合成 "外,还可以将单个呼叫标记为 "合成"。 这在您的合成检查使用“生产”API(通常是优秀构想)时特别有用。

合成呼叫规则

如果满足以下一个或多个条件,Instana 就会将呼叫标记为 "合成":

无界分析中的合成调用

合成调用在无界分析中默认是隐藏的,因为只有当它们出现严重错误时,才会引起性能分析的兴趣。 要使 Unbounded Analytics 查询也具有合成调用,您必须通过隐藏调用 -> 合成调用开关选择性加入。

在无界分析中选择合成调用

未指定的终点

如果没有足够的信息来自动将调用映射到端点(例如,没有提供足够数据的手动仪表端点),这些调用就会映射到特殊的 "未指定 "端点。

其他终点

当检测到某项服务的端点过多时,呼叫就会被归类到特殊的 "其他 "端点下。 此保护措施旨在将端点集保持在合理大小。

这种情况通常发生在 Instana 预定义规则自定义规则之一将呼叫分组到大量端点时,而这些端点每个都接收到一个呼叫。

例如,其中一个 Instana 预定义规则是将 HTTP 调用映射到其名称来自 URL 中找到的第一个路径段的端点。 如果这些分段是由动态值构建的(例如 "GET /blue-item"、"GET /red-item"......)、 应用这一规则会导致端点数量过多,而这是没有用的。

在处理 HTTP 端点时,可以通过更改端点抽取规则的配置改进此情况。

内部触发端点

Instana 自动捕获的跟踪通常从服务的来电开始。 不过,在使用 Instana SDK 时,可以通过服务的外呼启动跟踪。 在这种情况下,Instana 将创建对该服务的合成父调用(映射到“内部触发器”端点)以提高可读性。

内部触发端点

端点流程图

端点流量图显示端点的上游和下游端点。

终端流量图限制

目前,端点流程图只显示在 20 秒内完成的短时同步跟踪的准确数据。 在其他情况下,端点流量图可能会显示不准确的数据。