18. 获取每条路由指标

要获取每个路由的指标,您必须首先创建一个 服务配置文件。 创建服务配置文件后,Linkerd 将向 Prometheus 指标添加标签, 将特定请求特定路由相关联。

有关展示此功能的教程,请查看books demo

您可以通过运行 linkerd viz routesCLI 中查看每个路由的指标:

$ linkerd viz routes svc/webapp
ROUTE                       SERVICE   SUCCESS      RPS   LATENCY_P50   LATENCY_P95   LATENCY_P99
GET /                        webapp   100.00%   0.6rps          25ms          30ms          30ms
GET /authors/{id}            webapp   100.00%   0.6rps          22ms          29ms          30ms
GET /books/{id}              webapp   100.00%   1.2rps          18ms          29ms          30ms
POST /authors                webapp   100.00%   0.6rps          32ms          46ms          49ms
POST /authors/{id}/delete    webapp   100.00%   0.6rps          45ms          87ms          98ms
POST /authors/{id}/edit      webapp     0.00%   0.0rps           0ms           0ms           0ms
POST /books                  webapp    50.76%   2.2rps          26ms          38ms          40ms
POST /books/{id}/delete      webapp   100.00%   0.6rps          24ms          29ms          30ms
POST /books/{id}/edit        webapp    60.71%   0.9rps          75ms          98ms         100ms
[DEFAULT]                    webapp     0.00%   0.0rps           0ms           0ms           0ms

[DEFAULT] route 是一个捕获所有(catch-all)和兜底的路由, 任何与您的服务配置文件中指定的正则表达式不匹配的东西都将在那里结束。

还可以通过其他资源类型查找指标,例如:

$ linkerd viz routes deploy/webapp
ROUTE                          SERVICE   SUCCESS      RPS   LATENCY_P50   LATENCY_P95   LATENCY_P99
[DEFAULT]                   kubernetes     0.00%   0.0rps           0ms           0ms           0ms
GET /                           webapp   100.00%   0.5rps          27ms          38ms          40ms
GET /authors/{id}               webapp   100.00%   0.6rps          18ms          29ms          30ms
GET /books/{id}                 webapp   100.00%   1.1rps          17ms          28ms          30ms
POST /authors                   webapp   100.00%   0.5rps          25ms          30ms          30ms
POST /authors/{id}/delete       webapp   100.00%   0.5rps          58ms          96ms          99ms
POST /authors/{id}/edit         webapp     0.00%   0.0rps           0ms           0ms           0ms
POST /books                     webapp    45.58%   2.5rps          33ms          82ms          97ms
POST /books/{id}/delete         webapp   100.00%   0.6rps          33ms          48ms          50ms
POST /books/{id}/edit           webapp    55.36%   0.9rps          79ms         160ms         192ms
[DEFAULT]                       webapp     0.00%   0.0rps           0ms           0ms           0ms

然后,可以一直过滤到从特定资源其他服务的请求:

$ linkerd viz routes deploy/webapp --to svc/books
ROUTE                     SERVICE   SUCCESS      RPS   LATENCY_P50   LATENCY_P95   LATENCY_P99
DELETE /books/{id}.json     books   100.00%   0.5rps          18ms          29ms          30ms
GET /books.json             books   100.00%   1.1rps           7ms          12ms          18ms
GET /books/{id}.json        books   100.00%   2.5rps           6ms          10ms          10ms
POST /books.json            books    52.24%   2.2rps          23ms          34ms          39ms
PUT /books/{id}.json        books    41.98%   1.4rps          73ms          97ms          99ms
[DEFAULT]                   books     0.00%   0.0rps           0ms           0ms           0ms

故障排除

如果您没有看到任何指标,则可能有两个罪魁祸首。 在这两种情况下,都可以使用 linkerd viz tap 来理解问题。 对于服务指向的资源,运行:

linkerd viz tap deploy/webapp -o wide | grep req

示例输出是:

req id=3:1 proxy=in  src=10.4.0.14:58562 dst=10.4.1.4:7000 tls=disabled :method=POST :authority=webapp:7000 :path=/books/24783/edit src_res=deploy/traffic src_ns=default dst_res=deploy/webapp dst_ns=default rt_route=POST /books/{id}/edit

这将仅选择观察到的请求并显示用于每个请求的 :authorityrt_route

  • Linkerd 通过 :authorityHost header发现要使用的正确服务配置文件。 您的服务配置文件的名称必须与这些 headers 匹配。 这些不匹配的原因有很多,请参阅 ingress(原因之一)。 另一个是直接使用 IP 的客户端,例如 Prometheus
  • 让正则表达式匹配可能很困难,排序很重要。 注意 rt_route。 如果完全丢失,请将 :path 与您希望它匹配的正则表达式进行比较, 并使用具有 Golang 正则表达式风格的 tester