要获取每个路由的指标,您必须首先创建一个 service profile
。创建 service profile
后,Linkerd
将向 Prometheus
指标添加标签, 将特定请求与特定路由相关联。
有关展示此功能的教程,请查看 books demo
。
您可以通过运行 linkerd viz routes
在 CLI
中查看每个路由的指标:
$ 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 是一个包罗万象的东西, 任何与您的 service profile 中指定的正则表达式不匹配的东西都将在那里结束。
还可以通过其他资源类型查找指标,例如:
$ 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
这将仅选择观察到的请求并显示用于每个请求的 :authority
和 rt_route
。
- Linkerd 通过
:authority
或Host
头发现要使用的正确服务配置文件。您的 service profile 的名称必须与这些 headers 匹配。这些不匹配的原因有很多,请参阅ingress
(原因之一)。另一个是直接使用 IP 的客户端,例如 Prometheus。 - 让正则表达式匹配可能很困难,排序很重要。注意
rt_route
。如果完全丢失,请将:path
与您希望它匹配的正则表达式进行比较, 并使用具有 Golang 正则表达式风格的 tester。