如何更改 GKE 管理的日志记录代理的 fluentd 配置?
How to change fluentd config for GKE-managed logging agent?
我在 Google 容器引擎中有一个容器集群,启用了 Stackdriver 日志记录代理。它正确地从我的容器中提取标准输出日志。现在我想更改 fluentd 配置以指定日志解析器,以便 GCP 日志视图中显示的日志具有正确的严重性和组件。
在此 Stackdriver logging guide from kubernetes.io 之后,我已尝试:
- 获取 fluentd
ConfigMap
作为 yml 文件
- 根据我的log4js日志格式添加了一个新的
<filter>
- 在
kube-system
命名空间 中创建了一个名为 fluentd-cm-2 的新 ConfigMap
- 编辑了 fluentd 的
DaemonSet
并将其 ConfigMap
设置为 fluentd-cm-2。我使用 kubectl edit ds
而不是 kubectl replace -f
执行此操作,因为后者失败并显示错误消息:"the object has been modified",即使在获得 DaemonSet
yaml 的新副本后也是如此。
意外结果:DaemonSet
重新启动了,但是它的配置恢复到原来的ConfigMap
,所以我的更改没有生效。
我也试过直接编辑 ConfigMap
(kubectl edit cm fluentd-gcp-config-v1.1 --namespace kube-system
) 并保存它,但它也被还原了。
我注意到 fluentd 的 DaemonSet
和 ConfigMap
被标记为 addonmanager.kubernetes.io/mode: Reconcile
。由于这种 "reconcile" 模式,我会得出结论,GKE 已经覆盖了我的设置。
所以,我的问题是:当 GKE 在集群配置中安装了日志代理时,我如何更改 Google Container Engine 集群中的 fluentd 配置?
请查看 documentation page you mentioned 上的先决条件部分。那里提到,在 GKE 上,您无法更改默认的 Stackdriver Logging 集成。原因是 GKE 维护此配置:更新代理、监视其运行状况等。不可能为所有可能的配置提供相同级别的支持。
但是,您始终可以禁用默认集成并部署您自己的 DaemonSet 补丁版本。您可以在 GKE documentation:
中找到如何禁用默认集成
gcloud beta container clusters update [CLUSTER-NAME] \
--logging-service=none
请注意,禁用默认集成后,您必须自己维护新部署:更新代理、设置资源、观察其运行状况。
这是一个使用您自己的 fluentd daemonset 的解决方案,它与 GKE 中包含的非常相似。
https://cloud.google.com/solutions/customizing-stackdriver-logs-fluentd
我在 Google 容器引擎中有一个容器集群,启用了 Stackdriver 日志记录代理。它正确地从我的容器中提取标准输出日志。现在我想更改 fluentd 配置以指定日志解析器,以便 GCP 日志视图中显示的日志具有正确的严重性和组件。
在此 Stackdriver logging guide from kubernetes.io 之后,我已尝试:
- 获取 fluentd
ConfigMap
作为 yml 文件 - 根据我的log4js日志格式添加了一个新的
<filter>
- 在
kube-system
命名空间 中创建了一个名为 fluentd-cm-2 的新 - 编辑了 fluentd 的
DaemonSet
并将其ConfigMap
设置为 fluentd-cm-2。我使用kubectl edit ds
而不是kubectl replace -f
执行此操作,因为后者失败并显示错误消息:"the object has been modified",即使在获得DaemonSet
yaml 的新副本后也是如此。
ConfigMap
意外结果:DaemonSet
重新启动了,但是它的配置恢复到原来的ConfigMap
,所以我的更改没有生效。
我也试过直接编辑 ConfigMap
(kubectl edit cm fluentd-gcp-config-v1.1 --namespace kube-system
) 并保存它,但它也被还原了。
我注意到 fluentd 的 DaemonSet
和 ConfigMap
被标记为 addonmanager.kubernetes.io/mode: Reconcile
。由于这种 "reconcile" 模式,我会得出结论,GKE 已经覆盖了我的设置。
所以,我的问题是:当 GKE 在集群配置中安装了日志代理时,我如何更改 Google Container Engine 集群中的 fluentd 配置?
请查看 documentation page you mentioned 上的先决条件部分。那里提到,在 GKE 上,您无法更改默认的 Stackdriver Logging 集成。原因是 GKE 维护此配置:更新代理、监视其运行状况等。不可能为所有可能的配置提供相同级别的支持。
但是,您始终可以禁用默认集成并部署您自己的 DaemonSet 补丁版本。您可以在 GKE documentation:
中找到如何禁用默认集成gcloud beta container clusters update [CLUSTER-NAME] \
--logging-service=none
请注意,禁用默认集成后,您必须自己维护新部署:更新代理、设置资源、观察其运行状况。
这是一个使用您自己的 fluentd daemonset 的解决方案,它与 GKE 中包含的非常相似。
https://cloud.google.com/solutions/customizing-stackdriver-logs-fluentd