10

我对如何在 kubernetes 中设置错误报告感到有些困惑,所以在 Google Cloud Console / Stackdriver“错误报告”中可以看到错误?

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

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

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

4

3 回答 3

14

基本思想是启动一个单独的 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

于 2016-04-07T12:52:02.110 回答
0

要添加到 Boris 的答案:只要以正确的格式记录错误(请参阅https://cloud.google.com/error-reporting/docs/troubleshooting)并启用 Cloud Logging(您可以在https中看到错误://console.cloud.google.com/logs/viewer)然后错误将进入错误报告,无需任何进一步的设置。

于 2016-08-01T10:58:48.797 回答
0

Boris 的回答很棒,但比它真正需要的复杂得多(无需构建 docker 映像)。如果您在本地机器上配置了 kubectl(或者您可以使用 Google Cloud Shell),请复制并粘贴以下内容,它将在您的集群中安装转发器(我从上面的答案更新了 fluent-gcp 的版本)。我的解决方案使用 ConfigMap 来存储文件,因此可以轻松更改它而无需重建。

cat << EOF | kubectl create -f -
apiVersion: v1
kind: ConfigMap
metadata:
  name: fluentd-forwarder
data:
  google-fluentd.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>

---
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/google_containers/fluentd-gcp:2.0.18
        env:
        - name: FLUENTD_ARGS
          value: -qq
        ports:
        - containerPort: 24224
        volumeMounts:
        - name: config-vol
          mountPath: /etc/google-fluentd
      volumes:
        - name: config-vol
          configMap:
            name: fluentd-forwarder
---
apiVersion: v1
kind: Service
metadata:
  name: fluentd-forwarder
spec:
  selector:
    app: fluentd-forwarder
  ports:
  - protocol: TCP
    port: 24224
EOF
于 2018-11-02T00:24:39.870 回答