Основная идея состоит в том, чтобы создать отдельный модуль, который получает структурированные журналы через TCP и пересылает его в Cloud Logging, аналогично локально работающему агенту fluentd. Ниже приведены шаги, которые я использовал.
(К сожалению, протоколирование поддержка, которая встроена в Докер и Kubernetes не может быть использована - он просто передает отдельные строки текста из стандартного вывода/STDERR в виде отдельных записей журнала, который предотвращает отчеты об ошибках видеть полные следы стека.)
Создать Docker изображение для fluentd форвардера с использованием 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
Наконец, в приложении, вместо того, чтобы использовать «локальный» и 24224 для подключения к fluentd агента, как описано на https://cloud.google.com/error-reporting/docs/setting-up-on-compute-engine, использовать значения переменных Evironment FLUENTD_FORWARDER_SERVICE_HOST
и FLUENTD_FORWARDER_SERVICE_PORT
.
Вы используете GKE или GCE? –
Я менеджер продукта для отчета об ошибках Stackdriver. В настоящее время эта функция находится в бета-версии, и мы официально не поддерживаем Kubernetes. Мы постараемся предоставить наш лучший ответ здесь, когда у нас будет решение поделиться. – Steren
Спасибо за ответ. Мы используем GKE - мы хотим отправить отчет об ошибках из наших java-пакетов в Stackdriver Error Reporting. @Steren, спасибо, с нетерпением жду этого. – s3ncha