Logging 在istio中为特使启用http标头日志记录
我希望能够在我的Logging 在istio中为特使启用http标头日志记录,logging,kubernetes,http-headers,istio,envoyproxy,Logging,Kubernetes,Http Headers,Istio,Envoyproxy,我希望能够在我的istio服务网格上捕获(记录)(至少部分)特使的HTTP头 我已经浏览了《特使》,在“日志级别”一节中,它没有提到任何特定于标题的信息 当前,我的istio代理日志如下所示(这来自stern输出): 有没有办法记录http标题?(理想情况下,其中一些,以控制伐木成本) edit1根据评论中的建议,我检查了我的istio操作符资源,我发现访问日志似乎已启用 meshConfig: accessLogEncoding: JSON accessLogF
istio
服务网格上捕获(记录)(至少部分)特使的HTTP头
我已经浏览了《特使》,在“日志级别”一节中,它没有提到任何特定于标题的信息
当前,我的istio代理
日志如下所示(这来自stern
输出):
有没有办法记录http
标题?(理想情况下,其中一些,以控制伐木成本)
edit1根据评论中的建议,我检查了我的istio操作符
资源,我发现访问日志似乎已启用
meshConfig:
accessLogEncoding: JSON
accessLogFile: /dev/stdout
edit2我还尝试了以下方法:
curl -i -H "Custom-Header: application/json" https://my.url.net
但是在istio-ingresgateway
的日志中,我没有看到我的自定义头
istio-ingressgateway-58f69d8696-rmpwn istio-proxy {"user_agent":"curl/7.64.1","response_code":"200","response_flags":"-","start_time":"2021-01-18T19:02:48.645Z","method":"GET","request_id":"8e32c93c-484d-9c56-9489-8c5392793d97","upstream_host":"10.16.32.55:20000","x_forwarded_for":"10.16.32.1","requested_server_name":"my.url.net","bytes_received":"0","istio_policy_status":"-","bytes_sent":"124","upstream_cluster":"outbound|80||mysvc.default.svc.cluster.local","downstream_remote_address":"10.16.32.1:52804","authority":"my.url.net","path":"/","protocol":"HTTP/2","upstream_service_time":"9","upstream_local_address":"10.16.32.17:49826","duration":"10","upstream_transport_failure_reason":"-","route_name":"-","downstream_local_address":"10.16.32.17:8443"}
我想我已经成功地复制了您的问题,并且我能够在入口网关日志中打印
MY_CUSTOM_HEADER
[2021-01-20T08:26:18.587Z] pkarambol GET /productpage HTTP/1.1 200
有一部分我的istio入口网关日志
[2021-01-20T08:26:18.587Z] pkarambol GET /productpage HTTP/1.1 200
我使用了下面的curl命令:
curl -v -H "MY_CUSTOM_HEADER: pkarambol" xx.xxx.xx.xxx/productpage
要做到这一点,您必须更改日志的格式。如中所述,您可以使用
meshConfig.accessLogFormat
来更改该格式
我用过一个例子
%REQ(我的自定义头)%
是负责显示自定义头的一部分
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: example-istiocontrolplane
spec:
profile: demo
meshConfig:
accessLogFile: /dev/stdout
accessLogFormat: "[%START_TIME%] %REQ(MY_CUSTOM_HEADER)% %REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%
%RESPONSE_CODE% %RESPONSE_FLAGS% %BYTES_RECEIVED% %BYTES_SENT% %DURATION%
%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% %REQ(X-FORWARDED-FOR)% %REQ(USER-AGENT)%
%REQ(X-REQUEST-ID)% %REQ(:AUTHORITY)% %UPSTREAM_HOST%\n"
你试过了吗?另外,您应该能够使用其中一个或一些来检查http头。感谢fdeedback Jakub,但是我刚刚检查了它,它似乎已启用;请参阅我的问题更新谢谢
Jakub
我得出了相同的结论;然而,我被以下事实所困扰:a)我在我的istio proxy
日志中看到了一些所谓默认格式中不存在的字段,例如istio_policy_status:“-”
;所以我试图找到一种附加到现有日志结构的方法,而不是重写它;我似乎找不到istio
添加了defailt格式中不存在的文件的地方
,事实上,由于这是您提供的一个很好的答案,我将接受它,并就一个新的SO问题(我将在这里发布供参考)进行跟进供参考