设置日志格式
编辑ingress-nginx-controller的configmap,输入一下参数可设置ingress日志格式:
kubectl edit cm -n ingress-nginx ingress-nginx-controller
在data下输入:
log-format-upstream: '{"time": "$time_iso8601", "k8s_service_name":"$service_name", "remote_addr": "$remote_addr", "x_forward_for": "$http_x_forwarded_for", "request_id":"$req_id", "remote_user": "$remote_user", "bytes_sent": $bytes_sent, "request_time":$request_time, "status": $status, "vhost": "$host", "request_proto": "$server_protocol","path": "$uri", "request_query": "$args", "request_length": $request_length, "duration":$request_time,"method": "$request_method", "http_referrer": "$http_referer", "http_user_agent": "$http_user_agent", "http_vni": "$http_vni", "http_user": "$http_user" }'
上面的http_user_agent, http_vni, http_user为自定义输出字段,user_agent,vni,user为http 请求头内容
重建ingress controller pod,使日志配置生效
以nginx ingress为例,重建ingress controller pod
kubectl delete po -n ingress-nginx ingress-nginx-controller-6b79d4df7b-hnm6s
查看日志结果
kubectl logs -f -n ingress-nginx ingress-nginx-controller-6b79d4df7b-hnm6s
curl -H "user:zhangsan" -H "vni:875" http://127.0.0.1:80/aaa/bbb/ccc
日志输出结果如下:
{"time": "2022-09-05T02:00:52+00:00", "k8s_service_name":"svc1", "remote_addr": "192.168.90.91", "x_forward_for": "-", "request_id": "a0c440331f7c17fbd329ebeb6cd89b3a", "remote_user": "-", "bytes_sent": 345, "request_time": 0.000, "status": 503, "vhost": "192.168.90.125", "request_proto": "HTTP/1.1", "path": "/informer2/aaa/bbb/ccc", "request_query": "-", "request_length": 133, "duration": 0.000,"method": "GET", "http_referrer": "-", "http_user_agent": "curl/7.29.0", "http_vni": "875", "http_user": "zhangsan", "http_great": "-" }
可以看到我们自定义的输出字段:
"http_user_agent": "curl/7.29.0", "http_vni": "875", "http_user": "zhangsan"