pricing prices fargate elastic ecs ec2 costs container aws amazon-web-services docker kubernetes amazon-cloudwatchlogs

amazon-web-services - prices - aws task pricing



¿Cómo enviar registros de Kubernetes a AWS CloudWatch? (4)

AWS CloudWatch Registra en Docker

La configuración de un controlador AWS CloudWatch Logs en la docker se realiza con log-driver=awslogs y log-opt , por ejemplo:

#!/bin/bash docker run / --log-driver=awslogs / --log-opt awslogs-region=eu-central-1 / --log-opt awslogs-group=whatever-group / --log-opt awslogs-stream=whatever-stream / --log-opt awslogs-create-group=true / wernight/funbox / fortune

Mi problema

Me gustaría usar los registros de AWS CloudWatch en un clúster Kubernetes, donde cada pod contiene algunos contenedores Docker. Cada implementación tendría un grupo de registro independiente y cada contenedor tendría una secuencia separada. No pude encontrar una forma de enviar / apply los parámetros de registro a los contenedores de la ventana acoplable mediante Kubernetes.

Mi pregunta

¿Cómo puedo enviar los parámetros log-driver y log-opt a un contenedor Docker en un pod / implementación?

Que he intentado


Por lo que entiendo, Kubernetes prefiere el registro a nivel de clúster al controlador de registro de Docker.

Podríamos usar fluentd para recopilar, transformar y enviar registros de contenedor a los registros de CloudWatch.

Todo lo que necesita es crear un DaemonSet fluido con ConfigMap y Secret. Los archivos se pueden encontrar en Github . Se ha probado con Kubernetes v1.7.5.

Los siguientes son algunos explicaciones.

En

Con DaemonSet, fluentd recopila todos los registros de contenedores de la carpeta de host /var/lib/docker/containers .

Filtrar

fluent-plugin-kubernetes_metadata_filter plugin carga los metadatos del pod desde el servidor de API de Kubernetes.

El registro de registro sería así.

{ "log": "INFO: 2017/10/02 06:44:13.214543 Discovered remote MAC 62:a1:3d:f6:eb:65 at 62:a1:3d:f6:eb:65(kube-235)/n", "stream": "stderr", "docker": { "container_id": "5b15e87886a7ca5f7ebc73a15aa9091c9c0f880ee2974515749e16710367462c" }, "kubernetes": { "container_name": "weave", "namespace_name": "kube-system", "pod_name": "weave-net-4n4kc", "pod_id": "ac4bdfc1-9dc0-11e7-8b62-005056b549b6", "labels": { "controller-revision-hash": "2720543195", "name": "weave-net", "pod-template-generation": "1" }, "host": "kube-234", "master_url": "https://10.96.0.1:443/api" } }

Haga algunas etiquetas con el record_transformer filtro Fluentd record_transformer .

{ "log": "...", "stream": "stderr", "docker": { ... }, "kubernetes": { ... }, "pod_name": "weave-net-4n4kc", "container_name": "weave" }

Afuera

fluent-plugin-cloudwatch-logs plugin enviado a AWS CloudWatch Logs.

Con la configuración log_group_name_key y log_stream_name_key , el grupo de registro y el nombre de la secuencia pueden ser cualquier campo del registro.

<match kubernetes.**> @type cloudwatch_logs log_group_name_key pod_name log_stream_name_key container_name auto_create_stream true put_log_events_retry_limit 20 </match>



Según kubernate, Kubernetes no proporciona una solución de almacenamiento nativa para los datos de registro, pero puede integrar muchas soluciones de registro existentes en su arquitectura de registro de cluster-level-logging-architectures Kubernetes y kubernate.

Kubernetes no especifica un agente de registro, pero dos agentes de registro opcionales están empaquetados con el lanzamiento de Kubernetes: Stackdriver Logging para su uso con Google Cloud Platform y Elasticsearch. Puede encontrar más información e instrucciones en los documentos dedicados. Ambos utilizan fluentd con configuración personalizada como agente en el nodo.

Fluentd imagen para enviar registros de Kubernetes a CloudWatch también, por lo que puede utilizar para Deploy ,


Sliverfox tiene una gran respuesta. No tienes que construir tu propia imagen. También se puede usar directamente la imagen oficial de la ventana acoplable fluentd, fluentd / kuentetes-daemonset: cloudwatch. El código está en fluentd-kubernetes-daemonset github .

Podría reemplazar el fluent.conf predeterminado con el mapa de configuración. Como a continuación en ds.yaml, y escriba su propio fluent.conf en configmap.yaml. Para obtener los archivos yaml completos, puede consultar los ejemplos ds.yaml y configmap.yaml que escribimos.

volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true - name: config-volume mountPath: /fluentd/etc/ volumes: - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers - name: config-volume configMap: name: fluentd-cw-config