如何在kubernetes pods中设置Stackdriver中的错误报告?

s3n*_*cha 11 google-compute-engine fluentd gcloud kubernetes stackdriver

我对如何在kubernetes中设置错误报告感到困惑,因此在Google Cloud Console/Stackdriver"错误报告"中可以看到错误?

根据文档 https://cloud.google.com/error-reporting/docs/setting-up-on-compute-engine, 我们需要启用流畅的"转发输入插件",然后从我们的应用程序发送异常数据.我认为如果我们自己设置了流畅的设置,这种方法会有效,但它已经预先安装在只运行gcr.io/google_containers/fluentd-gcp docker image的pod中的每个节点上.

我们如何在这些pod上启用前向输入并确保节点上的每个pod都可以使用http端口?我们还需要确保在向集群添加更多节点时默认使用此配置.

任何帮助将不胜感激,可能是我从错误的角度看待这一切?

小智 14

基本思想是启动一个单独的pod,它通过TCP接收结构化日志,并将其转发到Cloud Logging,类似于本地运行的流畅代理.请参阅下面的我使用的步骤.

(不幸的是,无法使用内置于Docker和Kubernetes中的日志记录支持 - 它只是将stdout/stderr中的各行文本作为单独的日志条目转发,以防止错误报告看到完整的堆栈跟踪.)

使用Dockerfile如下方法为流畅的转发器创建docker镜像:

FROM gcr.io/google_containers/fluentd-gcp:1.18

COPY fluentd-forwarder.conf /etc/google-fluentd/google-fluentd.conf
Run Code Online (Sandbox Code Playgroud)

其中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>
Run Code Online (Sandbox Code Playgroud)

然后构建并推送图像:

$ docker build -t gcr.io/###your project id###/fluentd-forwarder:v1 .
$ gcloud docker push gcr.io/###your project id###/fluentd-forwarder:v1
Run Code Online (Sandbox Code Playgroud)

您需要一个复制控制器(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
Run Code Online (Sandbox Code Playgroud)

您还需要一个服务(fluentd-forwarder-service.yaml):

apiVersion: v1
kind: Service
metadata:
  name: fluentd-forwarder
spec:
  selector:
    app: fluentd-forwarder
  ports:
  - protocol: TCP
    port: 24224
Run Code Online (Sandbox Code Playgroud)

然后创建复制控制器和服务:

$ kubectl create -f fluentd-forwarder-controller.yaml
$ kubectl create -f fluentd-forwarder-service.yaml
Run Code Online (Sandbox Code Playgroud)

最后,在您的应用程序中,不要使用"localhost"和24224连接到流畅的代理,如https://cloud.google.com/error-reporting/docs/setting-up-on-compute-engine所述,使用环境变量FLUENTD_FORWARDER_SERVICE_HOST和价值FLUENTD_FORWARDER_SERVICE_PORT.