Как настроить отчеты об ошибках в Stackdriver из бобов kubernetes?
Я немного озадачен тем, как настроить отчеты об ошибках в kubernetes, поэтому ошибки видны в Консоли Google / Stackdriver "Отчеты об ошибках"?
Согласно документации https://cloud.google.com/error-reporting/docs/setting-up-on-compute-engine нам нужно включить fluentd "плагин прямого ввода", а затем отправлять данные исключений из наших приложений. Я думаю, что этот подход сработал бы, если бы у нас была свободная настройка, но он уже предустановлен на каждом узле в модуле, который просто запускает образ докера gcr.io/google_containers/fluentd-gcp.
Как включить прямой ввод на этих модулях и обеспечить доступность порта http для каждого модуля на узлах? Мы также должны убедиться, что эта конфигурация используется по умолчанию, когда мы добавляем больше узлов в наш кластер.
Любая помощь будет оценена, может быть, я смотрю на все это с неправильной точки зрения?
3 ответа
Основная идея состоит в том, чтобы запустить отдельный модуль, который получает структурированные журналы по TCP и перенаправляет их в Cloud Logging, подобно локальному агенту fluentd. Ниже приведены шаги, которые я использовал.
(К сожалению, поддержка ведения журнала, встроенная в Docker и Kubernetes, не может быть использована - она просто перенаправляет отдельные строки текста из stdout/stderr в виде отдельных записей журнала, что не позволяет отчетам об ошибках видеть полные трассировки стека.)
Создайте образ докера для сервера пересылки, используя Dockerfile
следующее:
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 для подключения к агенту fluentd, как описано на https://cloud.google.com/error-reporting/docs/setting-up-on-compute-engine, используйте значения переменных среды FLUENTD_FORWARDER_SERVICE_HOST
а также FLUENTD_FORWARDER_SERVICE_PORT
,
Чтобы добавить к ответу Бориса: пока ошибки регистрируются в правильном формате (см. https://cloud.google.com/error-reporting/docs/troubleshooting устранение неисправностей) и включена регистрация в облаке (вы можете увидеть ошибки в https://console.cloud.google.com/logs/viewer), после чего ошибки попадут в Отчеты об ошибках без дальнейшей настройки.
Ответ Бориса был великолепен, но был намного сложнее, чем нужно (не нужно создавать образ докера). Если у вас настроен 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