主机代理 REST API
Instana 主机代理提供网络服务 REST API,可接受自定义事件、指标和跟踪数据。
基础设施的相关性 Linux
来自主机代理 1.1.582 ,如果满足以下前提条件,主机代理接收到的度量和跟踪数据将与发送数据的进程相关联:
- 主机代理在 Linux 系统上运行,可使用以下命令:
lsns,nsenter, 和ss。 - 发送度量和跟踪数据的进程与主机代理运行在同一主机上。
- 使用忽略进程功能不会忽略发送指标和跟踪数据的进程。
- 指标和跟踪会直接报告给主机代理,而不是代理(例如,使用 OpenTelemetry Collector 的 OpenTelemtry )。 如果度量和跟踪数据通过代理传输,代理进程将与度量和跟踪数据关联。
对于跟踪数据,应用程序视角服务仪表板可正确引用摄取相关跟踪的任何流程,例如包括该服务发生的基础架构变更。
如果其中任何一个前提条件未满足,指标和跟踪数据将与运行主机代理的主机相关联。
对于相应 API 的后续调用,强烈建议您重复使用与代理的 API 端点建立的连接。 否则,将针对每个新的 API 请求触发进程查找。 如果无法保证这一点,并且遇到问题(例如,高跟踪率的高负载场景),可以禁用进程查询。 来自应用程序接口的度量和跟踪仍将与采集数据的主机相关联,但不会与相应的流程实体相关联。
要禁用进程查询,请在代理的 configuration.yaml 文件中添加以下代码段:
com.instana.processlookup:
enabled: false
OpenTelemetry 度量和跟踪终端
有关 OpenTelemetry 指标和跟踪摄取,请参阅 OpenTelemetry 文档。
Prometheus 度量终端
有关 Prometheus 指标摄取,请参阅 Prometheus 远程写入文档。
事件 SDK Web 服务
终点: http://<agent_ip>:42699/com.instana.plugin.generic.event
通过使用事件 SDK REST 网络服务,您可以将自定义健康检查和其他事件源集成到 Instana 中。 每一个都在用于输入手动事件的 Instana 代理上运行。 该代理有一个端点,其监听地址为 http://<agent_ip>:42699/com.instana.plugin.generic.event ,例如接受以下带有 POST 请求的 JSON:
{
"title": <string>,
"text": <string>,
"severity": <integer>,
"timestamp": <integer>,
"duration": <integer>,
}
以下事件参数可用:
标题 :Instana 事件视图中显示的标题。
文本 :事件详情部分显示的描述。
severity:可选整数,为以下值之一,具体取决于预期的事件类型。
- 变更事件:
-1(缺省值) - 警告事件:
5 - 紧急事件:
10
此外,如果标题字段包含关键字 "online" 或 "offline",那么会将变更事件视为存在事件。
- 变更事件:
时间戳 :事件的时间戳( 毫秒),从 UNIX 时间开始计算。 如果不存在,则改用当前时间。
duration:可选的事件持续时间(毫秒)。 如果未指定值,事件将显示为无持续时间的 "即时 "事件。 此外,"变化 "事件或 "存在 "事件总是在持续时间结束后关闭。 要延长事件的持续时间,可使用
path参数确定一个开放事件,该事件的值与path参数设置的值相同。incident:可选 boolean 将其设置为 Incident 触发事件(如果设置为
true)。 这就要求severity具有积极性。path:可选标识符,在可能需要使用相同路径值通过对该端点的后续请求扩展事件时,可定义该标识符。
下面的示例显示了一个即时事件:
{
"title": "Instant critical event on the host",
"text": "Description of the event that occurred",
"severity": 10
}
下面的示例显示了一个持续时间为 5 分钟的事件,使用 path 参数可以延长该事件的持续时间。 如果没有发送具有相同 path 标识符的后续事件,事件将在 5 分钟后自动关闭:
{
"title": "WARNING: This event started to happen",
"text": "It will be active for 5 minutes",
"severity": 5,
"duration": 300000,
"path": "unique-event-identifier"
}
您可以使用相同的 path 参数发送后续事件,以延长事件的有效期。 下面的示例事件将上一个示例中的事件延长了 5 分钟:
{
"title": "WARNING: This event continues to happen",
"text": "It will be active for another 5 minutes",
"severity": 5,
"duration": 300000,
"path": "unique-event-identifier"
}
在指定数组时,端点也接受批量事件:
[
{
"title": "First event",
...
},
{
"title": "Second event",
...
}
]
Ruby 示例
下面的示例显示了一个 Ruby 实例:
duration = (Time.now.to_f * 1000).floor - deploy_start_time_in_ms
payload = {}
payload[:title] = 'Deployed MyApp'
payload[:text] = 'pglombardo deployed MyApp@revision'
payload[:duration] = duration
uri = URI('http://localhost:42699/com.instana.plugin.generic.event')
req = Net::HTTP::Post.new(uri, 'Content-Type' => 'application/json')
req.body = payload.to_json
Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(req)
end
Curl 示例
下面的示例显示了一个 Curl 瞬时:
curl -XPOST http://localhost:42699/com.instana.plugin.generic.event -H "Content-Type: application/json" -d '{"title":"Custom API Events ", "text": "Failure Redeploying Service Duration", "duration": 60000, "severity": 5}'
PowerShell 示例
对于 PowerShell, ,您可以使用标准 Cmdlets Invoke-WebRequest 或 Invoke-RestMethod。 需要提供的参数基本相同。
Invoke-RestMethod
-Uri http://localhost:42699/com.instana.plugin.generic.event
-Method POST
-Body '{"title":"PowerShell Event ", "text": "You used PowerShell to create this event!", "severity": -1}'
Invoke-WebRequest
-Uri http://localhost:42699/com.instana.plugin.generic.event
-Method Post
-Body '{"title":"PowerShell Event ", "text": "You used PowerShell to create this event!", "severity": -1}'
Mina 集成
有关 Mina 集成的更多信息,请参阅 Mina 事件集成。
跟踪 SDK Web 服务
终点: http://<agent_ip>:42699/com.instana.plugin.generic.trace
使用跟踪 SDK REST Web 服务,可以将 Instana 集成到任何应用程序,而无需考虑所用的语言。 每个活动 Instana 代理都可用于将手动捕获的跟踪馈送到 Web 服务,此 Web 服务既可以与自动捕获的跟踪相结合,也可以保持完全独立。 代理提供的端点监听 http://<agent_ip>:42699/com.instana.plugin.generic.trace URL ,并通过 POST 请求接受以下 JSON:
{
"spanId": <string>,
"parentId": <string>,
"traceId": <string>,
"timestamp": <64 bit long>,
"duration": <64 bit long>,
"name": <string>,
"type": <string>,
"error": <boolean>,
"data": {
<string> : <string>
}
}
spanId 是任何特定跨度的唯一标识符。 跟踪由根跨度定义,即没有 parentId 的跨度。 对于属于同一轨迹的所有跨度, traceId 必须相同,并允许与 spanId 重叠。 traceId, spanId, 和 parentId 是以十六进制字符串编码的 64 位唯一值,如 b0789916ff8f319f。 跨度通过将父级的 spanId 引用为 parentId 可形成层次结构。跟踪中的跨度层次结构示例如下:
root (spanId=1, traceId=1, type=Entry)
child A (spanId=2, traceId=1, parentId=1, type=Exit)
child A (spanId=3, traceId=1, parentId=2, type=Entry)
child B (spanId=4, traceId=1, parentId=3, type=Exit)
child B (spanId=5, traceId=1, parentId=4, type=Entry)
timestamp 和 duration 字段以毫秒为单位。 时间戳记必须是与全球标准时间协调的戳记时间戳记。
name 字段可以是用于对跟踪进行可视化和分组的任何字符串,并且可以包含任何文本。 但是,建议尽量简洁。
type 字段为可选字段,如果不存在,则视为 ENTRY。 选项包括 ENTRY、EXIT、INTERMEDIATE 或 EUM。 设置类型对于 UI 而言至关重要。 假设在 ENTRY 之后,子级跨度为 INTERMEDIATE 或 EXIT。 EXIT 之后, ENTRY 。 我们可以将其显示为一个远程调用。
data 字段为可选字段,可以包含任意的键值对。 未指定提供重复键的行为。
error 字段为可选字段,可以设置为 true 以指示错误的跨度。
端点也可以接受批量跨度,此类跨度需要作为数组提供:
[
{
// span as above
},
{
// span as above
}
]
对于通过使用跟踪 SDK Web 服务接收的跟踪,与转换和服务/端点命名相关的规则与 Java 跟踪 SDK 相同。 data 中的这些键值对尤其用于命名: service, endpoint, 和 call.name。
Kubernetes 上提供的可选 Instana 代理服务与 Instana 代理 Helm Chart 结合使用,对 Trace Web SDK 支持非常有用。 这是因为它能确保数据被推送到运行在同一 Kubernetes 节点上的 Instana 代理,并确保 Instana 代理能正确填写基础设施相关数据。
Curl 示例
下面的示例展示了如何向主机代理发送与 ENTRY 和 EXIT 调用相匹配的数据,该示例模拟了一个进程接收 HTTP GET 请求,该请求的目标地址是 https://orders.happyshop.com/my/service/asdasd URL ,并将其路由到上游服务 https://crm.internal/orders/asdasd URL。
#!/bin/bash
curl -0 -v -X POST 'http://localhost:42699/com.instana.plugin.generic.trace' -H 'Content-Type: application/json; charset=utf-8' -d @- <<EOF
[
{
"spanId": "8165b19a37094800",
"traceId": "1368e0592a91fe00",
"timestamp": 1591346182000,
"duration": 134,
"name": "GET /my/service/asdasd",
"type": "ENTRY",
"error": false,
"data": {
"http.url": "https://orders.happyshop.com/my/service/asdasd",
"http.method": "GET",
"http.status_code": 200,
"http.path": "/my/service/asdasd",
"http.host": "orders.happyshop.com"
}
},
{
"spanId": "7ddf6b31b320cc00",
"parentId": "8165b19a37094800",
"traceId": "1368e0592a91fe00",
"timestamp": 1591346182010,
"duration": 97,
"name": "GET /orders/asdasd",
"type": "EXIT",
"error": false,
"data": {
"http.url": "https://crm.internal/orders/asdasd",
"http.method": "GET",
"http.status_code": 200,
"http.path": "/orders/asdasd",
"http.host": "crm.internal"
}
}
]
EOF
限制
对于跟踪 Web 服务,请遵循以下速率限制:
- 每秒最大 API 调用数:20
- 每个 POST 请求的最大有效内容:跨度不得超过 4 KiB。 请求大小不得超过 4 MiB。
- 最大批处理大小(跨度/数组):1000
常见问题解答
Instana 代理向 Instana 后台调用的次数有限制吗?
Instana 代理与 Instana 后台之间的数据传输取决于许多因素。 可通过持久 HTTP2 连接来完成并经高度优化。
通过 Instana 代理向 Instana 后端发送 50,000 个大小约为 40 MiB 的跨距时,最佳包大小(分割大小)是多少?
建议策略是将跨度缓冲最长一秒,或者在收集了 500 个跨度之后,再将其传输给代理。 有关此传输策略的实施,请参阅 repo。
建议满足哪些要求才能获得最佳的代理性能(CPU、内存等)?
这取决于需要监控的主机,例如每台主机的 Docker 容器数量。
Instana代理环境需要如何配置?
更多信息,请参阅代理配置。