基本思想是启动一个单独的 pod,它通过 TCP 接收结构化日志并将其转发到 Cloud Logging,类似于本地运行的 fluentd 代理。有关我使用的步骤,请参见下文。
(不幸的是,无法使用 Docker 和 Kubernetes 中内置的日志记录支持 - 它只是将来自 stdout/stderr 的单个文本行作为单独的日志条目转发,这会阻止错误报告看到完整的堆栈跟踪。)
Dockerfile
使用如下所示为 fluentd 转发器创建 docker 映像:
FROM gcr.io/google_containers/fluentd-gcp:1.18
COPY fluentd-forwarder.conf /etc/google-fluentd/google-fluentd.conf
其中fluentd-forwarder.conf
包含以下内容:
<source>
type forward
port 24224
</source>
<match **>
type google_cloud
buffer_chunk_limit 2M
buffer_queue_limit 24
flush_interval 5s
max_retry_wait 30
disable_retry_limit
</match>
然后构建并推送镜像:
$ docker build -t gcr.io/###your project id###/fluentd-forwarder:v1 .
$ gcloud docker push gcr.io/###your project id###/fluentd-forwarder:v1
您需要一个复制控制器 ( fluentd-forwarder-controller.yaml
):
apiVersion: v1
kind: ReplicationController
metadata:
name: fluentd-forwarder
spec:
replicas: 1
template:
metadata:
name: fluentd-forwarder
labels:
app: fluentd-forwarder
spec:
containers:
- name: fluentd-forwarder
image: gcr.io/###your project id###/fluentd-forwarder:v1
env:
- name: FLUENTD_ARGS
value: -qq
ports:
- containerPort: 24224
您还需要一个服务 ( fluentd-forwarder-service.yaml
):
apiVersion: v1
kind: Service
metadata:
name: fluentd-forwarder
spec:
selector:
app: fluentd-forwarder
ports:
- protocol: TCP
port: 24224
然后创建复制控制器和服务:
$ kubectl create -f fluentd-forwarder-controller.yaml
$ kubectl create -f fluentd-forwarder-service.yaml
最后,在您的应用程序中,不要使用 'localhost' 和 24224 来连接到https://cloud.google.com/error-reporting/docs/setting-up-on-compute-engine中描述的 fluentd 代理,而是使用环境变量FLUENTD_FORWARDER_SERVICE_HOST
和的值FLUENTD_FORWARDER_SERVICE_PORT
。