14

AWS CloudWatch에서 로그 도커

에서

docker의 AWS CloudWatch에서 로그 드라이버는 예를 들어, log-driver=awslogslog-opt 이루어집니다 설정 -Kubernetes Logs를 AWS CloudWatch에 보내는 방법은 무엇입니까?

#!/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 

내 문제

내가 AWS의 CloudWatch에 로그를 사용하고 싶습니다

Kubernetes 클러스터에는 각 포드에 몇 개의 Docker 컨테이너가 들어 있습니다. 각 배포에는 별도의 로그 그룹이 있고 각 컨테이너에는 별도의 스트림이 있습니다. Kubernetes create/apply을 통해 도킹 매개 변수를 도커 컨테이너에 보낼 수있는 방법을 찾지 못했습니다.

내 질문

내가 포드/배포에 도커 컨테이너에 log-driverlog-opt 매개 변수를 보낼 수있는 방법

? 나는 각 시스템에서 부두 노동자 데몬 관련 매개 변수를 설정

답변

9

읽기 kubectl apply

  • 에 대한
  • RTFM이는 Kubernetes은 도커 로그인 드라이버 클러스터 수준의 로깅을 선호한다.

    fluentd을 사용하여 컨테이너 로그를 수집하고 변환하고 CloudWatch 로그에 푸시 할 수 있습니다.

    필요한 것은 ConfigMap 및 Secret으로 Fluentd DaemonSet을 만드는 것입니다. 파일은 Github에서 찾을 수 있습니다. 그것은 Kubernetes v1.7.5로 테스트되었습니다.

    다음은 몇 가지 설명입니다. DaemonSet와

    에서

    는 호스트 폴더 /var/lib/docker/containers에서 모든 컨테이너의 로그를 수집 Fluentd에.

    필터

    fluent-plugin-kubernetes_metadata_filter 플러그인는 Kubernetes의 API 서버에서 포드의 메타 데이터를로드합니다.

    로그 레코드는 다음과 같습니다.

    { 
        "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" 
        } 
    } 
    

    Fluentd record_transformer 필터 플러그인으로 일부 태그를 만드십시오.

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

    fluent-plugin-cloudwatch-logs

    아웃 플러그인은 AWS CloudWatch를 로그로 보낼 수 있습니다.

    log_group_name_keylog_stream_name_key 구성의 경우 로그 그룹 및 스트림 이름은 레코드의 모든 필드가 될 수 있습니다. kubernate 당으로

    <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> 
    
  • +0

    이 솔루션은 컨테이너가 을 격리 했을까 :

    $ helm install --name my-release incubator/fluentd-cloudwatch 

    이에서 무엇입니까? 상대방의 로그를 읽을 수 있습니까? –

    +0

    예, 서로 격리되어 있습니다. 플루 언트 컨테이너 만이 볼륨 맵핑 때문에 모든 컨테이너의 로그 (호스트에 있음)를 읽을 수 있습니다. – silverfox

    4

    이는 Kubernetes는 로그 데이터에 대한 기본 스토리지 솔루션을 제공하지 않습니다,하지만 당신은 당신의는 Kubernetes 클러스터로 기존의 많은 로깅 솔루션을 통합하고 cluster-level-logging-architectures을 kubernate 수 있습니다.

    Kubernetes는 로깅 에이전트를 지정하지 않지만 Kubernetes 릴리스에는 2 개의 선택적 로깅 에이전트가 패키지되어 있습니다. Google Cloud Platform 및 Elasticsearch와 함께 사용하기위한 스택 드라이버 로깅. 전용 문서에서 자세한 정보와 지침을 찾을 수 있습니다. 둘 다 노드의 에이전트로 사용자 정의 구성과 함께 fluentd를 사용합니다. 당신이 Deploy에 그것을 사용할 수 있도록

    Fluentd에 이미지

    2

    sliverfox은 좋은 대답을 가지고, 너무 CloudWatch에로는 Kubernetes 로그를 보낼 수 있습니다. 자신 만의 이미지를 만들 필요는 없습니다. Coulld는 또한 fluentd 공식 도커 이미지 인 fluent/fluentd-kubernetes-daemonset : cloudwatch를 직접 사용합니다. 코드는 fluentd-kubernetes-daemonset github에 있습니다.

    기본 fluent.conf를 configmap으로 바꿀 수 있습니다. 아래의 ds.yaml에서와 같이 configmap.yaml에 자신의 fluent.conf를 작성하십시오. 완전한 yaml 파일은 우리가 작성한 예제 ds.yamlconfigmap.yaml을 참조 할 수 있습니다.

    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