如何在Kubernetes Pod中在Stackdriver中设置错误报告? [英] How to setup error reporting in Stackdriver from kubernetes pods?
问题描述
我对如何在kubernetes中设置错误报告感到有些困惑,因此错误在Google Cloud Console/Stackdriver错误报告"中可见吗?
根据文档 https://cloud.google.com/error-reporting /docs/setting-up-on-compute-engine 我们需要启用fluentd的前向输入插件",然后从我们的应用程序发送异常数据.我认为,如果我们能够熟练地进行设置,这种方法将行得通,但是它已经预先安装在只运行gcr.io/google_containers/fluentd-gcp docker映像的pod的每个节点上.
我们如何在这些Pod上启用前向输入并确保http端口可用于节点上的每个Pod?当我们向集群中添加更多节点时,我们还需要确保默认情况下使用此配置.
任何帮助都将不胜感激,也许我是从错误的角度来看待所有这一切?
基本思想是启动一个单独的Pod,该Pod通过TCP接收结构化日志并将其转发到Cloud Logging,类似于在本地运行的流利代理.有关我使用的步骤,请参见下文.
(不幸的是,无法使用Docker和Kubernetes内置的日志记录支持-它只是将来自stdout/stderr的文本行作为单独的日志条目转发,这阻止了Error Reporting查看完整的堆栈跟踪.)
使用Dockerfile
为流利的转发器创建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
最后,在您的应用程序中,而不是使用
According to documentation
https://cloud.google.com/error-reporting/docs/setting-up-on-compute-engine
we need to enable fluentd' "forward input plugin" and then send exception data from our apps. I think this approach would have worked if we had setup fluentd ourselves, but it's already pre-installed on every node in a pod that just runs gcr.io/google_containers/fluentd-gcp docker image. How do we enable forward input on those pods and make sure that http port available to every pod on the nodes? We also need to make sure this config is used by default when we add more nodes to our cluster. Any help would be appreciated, may be I'm looking at all this from a wrong point? The basic idea is to start a separate pod that receives structured logs over TCP and forwards it to Cloud Logging, similar to a locally-running fluentd agent. See below for the steps I used. (Unfortunately, the logging support that is built into Docker and Kubernetes cannot be used - it just forwards individual lines of text from stdout/stderr as separate log entries which prevents Error Reporting from seeing complete stack traces.) Create a docker image for a fluentd forwarder using a Where Then build and push the image: You need a replication controller ( You also need a service ( Then create the replication controller and service: Finally, in your application, instead of using 'localhost' and 24224 to connect to the fluentd agent as described on https://cloud.google.com/error-reporting/docs/setting-up-on-compute-engine, use the values of evironment variables 这篇关于如何在Kubernetes Pod中在Stackdriver中设置错误报告?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!Dockerfile
as follows:FROM gcr.io/google_containers/fluentd-gcp:1.18
COPY fluentd-forwarder.conf /etc/google-fluentd/google-fluentd.conf
fluentd-forwarder.conf
contains the following:<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
FLUENTD_FORWARDER_SERVICE_HOST
and FLUENTD_FORWARDER_SERVICE_PORT
.