本教程介绍了如何为 Google Kubernetes Engine 集群自定义 Fluentd 日志记录。您将学习如何托管您自己的可配置 Fluentd 守护进程集以将日志发送到 Cloud Logging,而不是在创建 Google Kubernetes Engine (GKE) 集群时选择云日志记录选项,因为此选项不允许配置 Fluentd 守护进程。
目标
- 在 Google Kubernetes Engine 集群上部署您自己的 Fluentd 守护进程集,并将其配置为将数据记录到 Cloud Logging。本教程假设您已熟悉 Kubernetes。
- 自定义 GKE 日志记录以从 Cloud Logging 日志中移除敏感数据。
- 自定义 GKE 日志记录将节点级事件添加到 Cloud Logging 日志中。
费用
本教程使用 Google Cloud 的以下收费组件:
- 三节点 Google Kubernetes Engine 集群。
经价格计算器估算,该环境的费用约为 $1.14/8 小时。
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
启用 Google Kubernetes Engine, Compute Engine API。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
启用 Google Kubernetes Engine, Compute Engine API。
初始化通用变量
您必须定义多个变量来控制基础架构元素的部署位置。
使用文本编辑器修改以下脚本,并将项目 ID 替换为
[YOUR_PROJECT_ID]
。该脚本将区域设置为us-east-1
。如果对脚本进行了任何更改,请确保地区值引用您指定的区域。export region=us-east1 export zone=${region}-b export project_id=[YOUR_PROJECT_ID]
转至 Cloud Shell。
将脚本复制到 Cloud Shell 窗口并运行。
运行以下命令以设置默认地区和项目 ID,这样您就不必在每个后续命令中指定这些值:
gcloud config set compute/zone ${zone} gcloud config set project ${project_id}
创建 GKE 集群
在 Cloud Shell 中,克隆示例代码库:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-customize-fluentd
示例代码库包括 Fluentd 守护进程集的 Kubernetes 清单以及您将在本教程后面部署的测试日志记录程序。
将您的工作目录更改为克隆的代码库:
cd kubernetes-engine-customize-fluentd
仅创建具有系统日志记录和监控功能的 GKE 集群:
gcloud container clusters create gke-with-custom-fluentd \ --zone us-east1-b \ --logging=SYSTEM \ --tags=gke-cluster-with-customized-fluentd \ --scopes=logging-write,storage-rw
部署测试记录器应用
默认情况下,您部署的示例应用会连续发出随机日志记录语句。Docker 容器是根据 test-logger
子目录的源代码构建的。
在 Cloud Shell 中,构建
test-logger
容器映像:docker build -t test-logger test-logger
在推送到注册表之前标记容器:
docker tag test-logger gcr.io/${project_id}/test-logger
推送容器映像:
docker push gcr.io/${project_id}/test-logger
更新部署文件:
envsubst < kubernetes/test-logger.yaml > kubernetes/test-logger-deploy.yaml
将
test-logger
应用部署到 GKE 集群:kubectl apply -f kubernetes/test-logger-deploy.yaml
查看
test-logger
pod 的状态:kubectl get pods
重复此命令,直到输出如下所示,且同时运行所有三个
test-logger
pod:
将 Fluentd 守护进程集部署到您的集群
接下来,您将配置和部署 Fluentd 守护进程集。
在 Cloud Shell 中,部署 Fluentd 配置:
kubectl apply -f kubernetes/fluentd-configmap.yaml
部署 Fluentd 后台支撑服务集:
kubectl apply -f kubernetes/fluentd-daemonset.yaml
检查 Fluentd pod 是否已启动:
kubectl get pods --namespace=kube-system
如果它们正在运行,您会看到如下输出:
验证您是否在 Logging 中看到日志。在控制台的左侧,选择 Logging > 日志浏览器,然后在资源列表中选择 Kubernetes 容器作为资源类型。
点击运行查询。
在日志字段浏览器中,为 CONTAINER_NAME 选择 test-logger:
过滤日志文件中的信息
下一步是指示 Fluentd 在日志中过滤掉某些数据。在本教程中,您将过滤掉社会保障号、信用卡号和电子邮件地址。要进行此更新,请更改后台支撑服务集以使用包含这些过滤器的另一个 ConfigMap。此时,您将使用 Kubernetes 滚动更新功能并保留旧版本的 ConfigMap。
通过编辑器打开
kubernetes/fluentd-configmap.yaml
文件。取消对行
### sample log scrubbing filters
和行### end sample log scrubbing filters
之间所有行(但不包括这两行本身)的注释:通过修改
metadata.name
字段,将 ConfigMap 的名称从fluentd-gcp-config
更改为fluentd-gcp-config-filtered
:保存并关闭文件。
更新 Fluentd 守护进程集以使用新配置
现在,您需要更改 kubernetes/fluentd-daemonset.yaml
以装载 ConfigMap fluentd-gcp-config-filtered
而不是 fluentd-gcp-config
。
通过编辑器打开
kubernetes/fluentd-daemonset.yaml
文件。通过修改
configMap.name
字段,将 ConfigMap 的名称从fluentd-gcp-config
更改为fluentd-gcp-config-filtered
:将新版本的 ConfigMap 部署到您的集群:
kubectl apply -f kubernetes/fluentd-configmap.yaml
推出新版本的后台支撑服务集:
kubectl apply -f kubernetes/fluentd-daemonset.yaml
推出更新并等待它完成更新:
kubectl rollout status ds/fluentd-gcp --namespace=kube-system
更新发布完成后,刷新 Logging 日志并确保已过滤掉社会保障号、信用卡号和电子邮件地址数据。
记录节点级事件
如果您希望 GKE 节点上发生的事件也显示在 Logging 中,请将以下行添加到 ConfigMap 中,并按照上一节中的说明操作:
<source> @type systemd filters [{ "SYSLOG_IDENTIFIER": "sshd" }] pos_file /var/log/journal/gcp-journald-ssh.pos read_from_head true tag sshd </source> <source> @type systemd filters [{ "SYSLOG_IDENTIFIER": "sudo" }] pos_file /var/log/journal/gcp-journald-sudo.pos read_from_head true tag sudo </source>
清除数据
完成本教程后,您可以清理您在 Google Cloud 上创建的资源,以免这些资源将来产生费用。
删除项目
为了避免产生费用,最简单的方法是删除您为本教程创建的项目。
如需删除项目,请执行以下操作:
- 在 Google Cloud 控制台中,进入管理资源页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击关闭以删除项目。
删除 GKE 集群
如果您不想删除整个项目,请运行以下命令删除 GKE 集群:
gcloud container clusters delete gke-with-custom-fluentd --zone us-east1-b
后续步骤
- 深入阅读 Fluentd 文档。
- 深入阅读 Google Kubernetes Engine 文档。
- 探索有关 Google Cloud 的参考架构、图表和最佳做法。查看我们的 Cloud Architecture Center。