Kubernetes 集群中的自定义 docker 容器,带有使用 Stackdriver 的日志

Custom docker container in Kubernetes cluster with log using Stackdriver

我想知道我必须遵循哪些步骤才能将在我的自定义 apache 容器(部署在带有 Kubernetes 的 pod 中)中创建的日志发送到 Stackdriver 收集器。

我注意到,如果我使用标准 apache(或 nginx)容器创建 pod,access.log 和 error.log 会自动发送到 Stackdriver。

事实上,我可以在 Kubernetes 仪表板和 Google Cloud 仪表板--->Logging--->Logs 上看到日志 相反,我没有看到任何与我的自定义 Apache 相关的内容...

有什么建议吗?

经过一些研究,我已经解决了自定义 apache 容器中的日志转发器问题。

我不知道为什么 "standard redirection"(使用 /dev/stdout 或 /proc/self/fd/1)无论如何都不起作用,我遵循的解决方案称为 "sidecar container with the logging agent"

1) 创建一个 configMag 文件,您将在其中设置 fluentd 配置:

apiVersion: v1
data:
  fluentd.conf: |
    <source>
      type tail
      format none
      path /var/log/access.log
      pos_file /var/log/access.log.pos
      tag count.format1
    </source>

    <source>
      type tail
      format none
      path /var/log/error.log
      pos_file /var/log/error.log.pos
      tag count.format2
    </source>

    <match **>
      type google_cloud
    </match>
kind: ConfigMap
metadata:
  name: my-fluentd-config

2) 创建一个包含 2 个容器的 pod:自定义 apache + 日志代理。两个容器都会挂载一个日志文件夹。只有日志代理会挂载 fluentd 配置:

apiVersion: v1
kind: Pod
metadata:
  name: my-sidecar
  labels:
    app: my-sidecar 
spec:
  volumes:
  - name: varlog
    emptyDir: {}
  - name: config-volume
    configMap:
      name: my-fluentd-config 

  containers:
  - name: my-apache
    image: <your_custom_image_repository>
    ports:
      - containerPort: 80
        name: http
        protocol: TCP 
    volumeMounts:
    - name: varlog
      mountPath: /var/log

  - name: log-agent
    image: gcr.io/google_containers/fluentd-gcp:1.30
    env:
    - name: FLUENTD_ARGS
      value: -c /etc/fluentd-config/fluentd.conf
    volumeMounts:
    - name: varlog
      mountPath: /var/log
    - name: config-volume
      mountPath: /etc/fluentd-config

3) 在 my-apache 容器中输入:

kubectl exec -it my-sidecar --container my-apache -- /bin/bash

和 change/check httpd.conf 正在使用以下文件:

ErrorLog /var/log/error.log

CustomLog /var/log/access.log common

(如果你改变了什么记得重启apache..)

4) 现在,在 Google Cloud Console -> Logging 中,您将能够看到 Stackdriver 中的 apache access/error 日志,过滤器如下:

resource.type="container"
labels."compute.googleapis.com/resource_name"="my-sidecar"