mirror of https://github.com/linkerd/linkerd2.git
2 Commits
Author | SHA1 | Message | Date |
---|---|---|---|
|
a3a240e0ef
|
Add TapEvent headers and trailers to the tap protobuf (#3410)
### Motivation In order to expose arbitrary headers through tap, headers and trailers should be read from the linkerd2-proxy-api `TapEvent`s and set in the public `TapEvent`s. This change should have no user facing changes as it just prepares the events for JSON output in linkerd/linkerd2#3390 ### Solution The public API has been updated with a headers field for `TapEvent_Http_RequestInit_` and `TapEvent_Http_ResponseInit_`, and trailers field for `TapEvent_Http_ResponseEnd_`. These values are set by reading the corresponding fields off of the proxy's tap events. The proto changes are equivalent to the proto changes proposed in linkerd/linkerd2-proxy-api#33 Closes #3262 Signed-off-by: Kevin Leimkuhler <kleimkuhler@icloud.com> |
|
|
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> |