我有一个基本的nginx部署,提供了在GKE集群上运行的静态内容。我已经按照说明here为集群配置了Stackdriver Logging(启用了对现有集群的日志记录),并且还启用了here所述的Stackdriver Kubernetes Monitoring功能。日志记录本身似乎运行良好,因为我可以在Stackdriver中看到nginx的日志。
我正在尝试创建一些基于日志的指标,例如已完成2xx请求的数量,但是我在Stackdriver中的日志条目中得到的只是textPayload
字段。据我了解,在集群上启用Stackdriver Monitoring会启动一些Fluentd代理(我可以查看它们是否运行kubectl get pods -n kube-system
),并且默认情况下它们应启用nginx日志解析器(根据文档{{3} })。但是,Stackdriver中显示的所有日志条目都没有jsonPayload
字段,该字段应用于结构化日志。
我正在为nginx使用默认的log_format
配置,并且已经验证了默认的nginx解析器能够解析我的应用程序正在编写的日志(我复制了here和一个日志从我的应用程序到default Fluentd nginx parser plugin regular expression的条目,它就能够解析该条目)
我确定我一定会丢失一些东西,但我不知道是什么。
编辑:
作为参考,这是我的NGINX日志格式:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';
到目前为止,我已经尝试了以下方法:
jsonPayload
字段,只有textPayload
。到目前为止,这些都还没有解决。
答案 0 :(得分:0)
您是否正在运行Kubernetes 1.11.4? Beta release 1.11.4是一个已知问题。该修复程序在Beta Update (Kubernetes 1.11.6)中可用。 请确认您的版本。
答案 1 :(得分:0)
与Google Cloud支持人员联系后,我们能够针对此问题设计解决方法,尽管根本原因仍然未知。
解决方法是将NGINX日志格式本身定义为JSON字符串。这将允许Google-Fluentd解析器将有效负载正确解析为JSON对象。到目前为止,这是唯一对我有用的解决方案。
作为参考,我使用的日志格式为:
log_format json_combined escape=json
'{'
'"time_local":"$time_local",'
'"remote_addr":"$remote_addr",'
'"remote_user":"$remote_user",'
'"request_method":"$request_method",'
'"request":"$request",'
'"status": "$status",'
'"body_bytes_sent":"$body_bytes_sent",'
'"request_time":"$request_time",'
'"http_referrer":"$http_referer",'
'"http_user_agent":"$http_user_agent"'
'}';
access_log /var/log/nginx/access.log json_combined;
答案 2 :(得分:0)
我们以 Cloud Logging 直接理解的方式格式化日志,如下所示:
log_format json_combined escape=json
'{'
'"httpRequest":{'
'"requestMethod":"$request_method",'
'"requestUrl":"$scheme://$host$request_uri",'
'"requestSize":$request_length,'
'"status":$status,'
'"responseSize":$bytes_sent,'
'"userAgent":"$http_user_agent",'
'"remoteIp":"$remote_addr",'
'"referer":"$http_referer",'
'"latency":"${request_time}s",'
'"protocol":"$server_protocol",'
'"request":"$request",'
'"remoteUser":"$remote_user"'
'}'
'}';
这样你就不需要使用 fluentd。您可以在这里找到参考:https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry#HttpRequest