mirror of https://github.com/linkerd/linkerd2.git
2 Commits
Author | SHA1 | Message | Date |
---|---|---|---|
|
c62c90870e
|
Add JSON output to tap command (#3434)
Replaces #3411 ### Motivation It is a little tough to filter/read the current tap output. As headers are being added to tap, the output is starting to get difficult to consume. Take a peek at #3262 for an example. It would be nice to have some more machine readable output that can be sliced and diced with tools such as jq. ### Solution A new output option has been added to the `linkerd tap` command that returns the JSON encoding of tap events. The default output is line oriented; `-o wide` appends the request's target resource type to the tap line oriented tap events. In order display certain values in a more human readable form, a tap event display struct has been introduced. This struct maps public API `TapEvent`s directly to a private `tapEvent`. This struct offers a flatter JSON structure than the protobuf JSON rendering. It also can format certain field--such as addresses--better than the JSON protobuf marshaler. Closes #3390 **Default**: ``` ➜ linkerd2 git:(kleimkuhler/tap-json-output) linkerd -n linkerd tap deploy/linkerd-web req id=5:0 proxy=in src=10.1.6.146:36976 dst=10.1.6.148:9994 tls=not_provided_by_remote :method=GET :authority=10.1.6.148:9994 :path=/metrics rsp id=5:0 proxy=in src=10.1.6.146:36976 dst=10.1.6.148:9994 tls=not_provided_by_remote :status=200 latency=3366µs end id=5:0 proxy=in src=10.1.6.146:36976 dst=10.1.6.148:9994 tls=not_provided_by_remote duration=132µs response-length=1505B ``` **Wide**: ``` ➜ linkerd2 git:(kleimkuhler/tap-json-output) linkerd -n linkerd tap deploy/linkerd-web -o wide req id=6:0 proxy=in src=10.1.0.1:35394 dst=10.1.6.148:9994 tls=not_provided_by_remote :method=GET :authority=10.1.6.148:9994 :path=/ping dst_res=deploy/linkerd-web dst_ns=linkerd rsp id=6:0 proxy=in src=10.1.0.1:35394 dst=10.1.6.148:9994 tls=not_provided_by_remote :status=200 latency=1442µs dst_res=deploy/linkerd-web dst_ns=linkerd end id=6:0 proxy=in src=10.1.0.1:35394 dst=10.1.6.148:9994 tls=not_provided_by_remote duration=88µs response-length=5B dst_res=deploy/linkerd-web dst_ns=linkerd ``` **JSON**: *Edit: Flattened `Method` and `Scheme` formatting* ``` { "source": { "ip": "10.138.0.28", "port": 47078, "metadata": { "daemonset": "ip-masq-agent", "namespace": "kube-system", "pod": "ip-masq-agent-4d5s9", "serviceaccount": "ip-masq-agent", "tls": "not_provided_by_remote" } }, "destination": { "ip": "10.60.1.49", "port": 9994, "metadata": { "control_plane_ns": "linkerd", "deployment": "linkerd-web", "namespace": "linkerd", "pod": "linkerd-web-6988999458-c6wpw", "pod_template_hash": "6988999458", "serviceaccount": "linkerd-web" } }, "routeMeta": null, "proxyDirection": "INBOUND", "requestInitEvent": { "id": { "base": 0, "stream": 0 }, "method": "GET", "scheme": "", "authority": "10.60.1.49:9994", "path": "/ready" } } { "source": { "ip": "10.138.0.28", "port": 47078, "metadata": { "daemonset": "calico-node", "namespace": "kube-system", "pod": "calico-node-bbrjq", "serviceaccount": "calico-sa", "tls": "not_provided_by_remote" } }, "destination": { "ip": "10.60.1.49", "port": 9994, "metadata": { "control_plane_ns": "linkerd", "deployment": "linkerd-web", "namespace": "linkerd", "pod": "linkerd-web-6988999458-c6wpw", "pod_template_hash": "6988999458", "serviceaccount": "linkerd-web" } }, "routeMeta": null, "proxyDirection": "INBOUND", "responseInitEvent": { "id": { "base": 0, "stream": 0 }, "sinceRequestInit": { "nanos": 644820 }, "httpStatus": 200 } } { "source": { "ip": "10.138.0.28", "port": 47078, "metadata": { "deployment": "calico-typha", "namespace": "kube-system", "pod": "calico-typha-59cb487c49-8247r", "pod_template_hash": "59cb487c49", "serviceaccount": "calico-sa", "tls": "not_provided_by_remote" } }, "destination": { "ip": "10.60.1.49", "port": 9994, "metadata": { "control_plane_ns": "linkerd", "deployment": "linkerd-web", "namespace": "linkerd", "pod": "linkerd-web-6988999458-c6wpw", "pod_template_hash": "6988999458", "serviceaccount": "linkerd-web" } }, "routeMeta": null, "proxyDirection": "INBOUND", "responseEndEvent": { "id": { "base": 0, "stream": 0 }, "sinceRequestInit": { "nanos": 790898 }, "sinceResponseInit": { "nanos": 146078 }, "responseBytes": 3, "grpcStatusCode": 0 } } ``` Signed-off-by: Kevin Leimkuhler <kleimkuhler@icloud.com> |
|
|
b8434d60d4
|
Add resource metadata to Tap CLI output (#1437)
Closes #1170. This branch adds a `-o wide` (or `--output wide`) flag to the Tap CLI. Passing this flag adds `src_res` and `dst_res` elements to the Tap output, as described in #1170. These use the metadata labels in the tap event to describe what Kubernetes resource the source and destination peers belong to, based on what resource type is being tapped, and fall back to pods if either peer is not a member of the specified resource type. In addition, when the resource type is not `namespace`, `src_ns` and `dst_ns` elements are added, which show what namespaces the the source and destination peers are in. For peers which are not in the Kubernetes cluster, none of these labels are displayed. The source metadata added in #1434 is used to populate the `src_res` and `src_ns` fields. Also, this branch includes some refactoring to how tap output is formatted. Signed-off-by: Eliza Weisman <eliza@buoyant.io> |