Fargate 로깅 - Amazon EKS

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Fargate 로깅

Amazon EKS 를 사용하는 는 기본 제공 로그 라우터를 Fargate 지원합니다. 즉, 설치 또는 유지 관리할 사이드카 컨테이너가 없습니다. 로그 라우터를 사용하면 에서 로그 분석 및 저장을 AWS 위해 광범위한 서비스를 사용할 수 있습니다. 에서 Fargate, Amazon CloudWatch및 Amazon Elasticsearch Service 대상(예: Amazon Kinesis Data Firehose, Amazon Amazon S3 Data Streams 및 파트너 도구)으로 로그를 Kinesis 직접 스트리밍할 수 있습니다. Fargate 는 에서 관리하는 Fluent Bit의 업스트림 규정 준수 배포인 Fluent AWS Bit용 버전을 사용합니다AWS. 자세한 내용은 의 Fluent AWS Bit용 를 참조하십시오GitHub.

Prerequisites

  • 기존 Amazon EKS 클러스터가 있어야 합니다. 클러스터는 다음(또는 이후) 플랫폼 버전 중 하나를 실행해야 합니다.

    EKS 버전 플랫폼 버전
    1.18 eks.3
    1.17 eks.5
    1.16 eks.5
    1.15 eks.6

    이러한 플랫폼 버전 중 하나에 기존 클러스터가 없는 경우 단원을 참조하여 클러스터를 시작하기Amazon EKS 배포합니다.

  • Fargate 포드를 배포하는 기존 Kubernetes 네임스페이스를 지정하는 기존 Fargate 프로파일입니다. 자세한 내용은 단원을 참조하세요.클러스터에 대한 Fargate 프로파일 생성.

선택한 대상으로 로그를 전송하려면

컨테이너 로그가 전송되는 위치를 정의하는 ConfigMap 데이터 값을 사용하여 Amazon EKS 를 Fluent Conf 클러스터에 적용합니다. Fluent Conf 는 컨테이너 로그를 원하는 로그 대상으로 라우팅하는 데 사용되는 빠르고 간단한 로그 프로세서 구성 언어인 Fluent Bit입니다. 자세한 내용은 Fluent Bit 설명서의 구성 파일을 참조하십시오.

다음 단계에서 를 <example values> 사용자의 값으로 바꿉니다.

  1. Kubernetes 네임스페이스를 생성합니다.

    1. 다음 콘텐츠를 컴퓨터에 aws-observability-namespace.yaml이라는 파일에 저장합니다. 이름은 이어야 합니다aws-observability.

      kind: Namespace apiVersion: v1 metadata: name: aws-observability labels: aws-observability: enabled
    2. 네임스페이스를 생성합니다.

      kubectl apply -f aws-observability-namespace.yaml
  2. 다음 대상 중 하나로 Fargate 로그를 전송하도록 Kubernetes를 구성합니다. ConfigMap 생성한 는 aws-observability 네임스페이스에 생성해야 합니다.

    1. (선택 사항) 에 로그를 전송합니다CloudWatch. 를 사용할 때 다음 두 가지 출력 옵션이 있습니다CloudWatch.

      • cloudwatch_logs – C로 작성된 출력 플러그인.

      • cloudwatch – Golang으로 작성된 출력 플러그인입니다.

      다음 예제에서는 cloudwatch_logs 플러그인을 사용하여 에 로그를 전송하는 방법을 보여줍니다CloudWatch.

      1. 다음 내용을 이라는 파일에 저장합니다aws-logging-cloudwatch-configmap.yaml.

        kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability labels: data: output.conf: | [OUTPUT] Name cloudwatch_logs Match * region <us-east-1> log_group_name fluent-bit-cloudwatch log_stream_prefix from-fluent-bit- auto_create_group true
      2. 매니페스트를 클러스터에 적용합니다.

        kubectl apply -f aws-logging-cloudwatch-configmap.yaml
      3. CloudWatch IAM 정책을 컴퓨터에 다운로드합니다. 에서 정책을 https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/cloudwatchlogs/permissions.json 볼 수도 GitHub있습니다.

        curl -o permissions.json https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/cloudwatchlogs/permissions.json
    2. (선택 사항) 에 로그를 전송합니다Amazon Elasticsearch Service. C로 작성된 플러그인인 es 출력을 사용할 수 있습니다. 다음 예제에서는 플러그인을 사용하여 로그를 Elasticsearch에 전송하는 방법을 보여줍니다.

      1. 다음 내용을 이라는 파일에 저장합니다aws-logging-elasticsearch-configmap.yaml.

        kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability labels: data: output.conf: | [OUTPUT] Name es Match * Host 192.168.2.3 Port 9200 Index my_index Type my_type AWS_Auth On AWS_Region <us-east-1>
      2. 매니페스트를 클러스터에 적용합니다.

        kubectl apply -f aws-logging-elasticsearch-configmap.yaml
      3. Elasticsearch IAM 정책을 컴퓨터에 다운로드합니다. 에서 정책을 https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/amazon-elasticsearch/permissions.json 볼 수도 GitHub있습니다.

        curl -o permissions.json https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/amazon-elasticsearch/permissions.json
    3. (선택 사항) 에 로그를 전송합니다Kinesis Data Firehose. 를 사용할 때 다음 두 가지 출력 옵션이 있습니다Kinesis Data Firehose.

      • kinesis_firehose – C로 작성된 출력 플러그인.

      • firehose – Golang으로 작성된 출력 플러그인입니다.

      다음 예제에서는 kinesis_firehose 플러그인을 사용하여 에 로그를 전송하는 방법을 보여줍니다Kinesis Data Firehose.

      1. 다음 내용을 이라는 파일에 저장합니다aws-logging-firehose-configmap.yaml.

        kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability labels: data: output.conf: | [OUTPUT] Name kinesis_firehose Match * region <us-east-1> delivery_stream my-stream-firehose
      2. 매니페스트를 클러스터에 적용합니다.

        kubectl apply -f aws-logging-firehose-configmap.yaml
      3. Kinesis Data Firehose IAM 정책을 컴퓨터에 다운로드합니다. 에서 정책을 https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/kinesis-firehose/permissions.json 볼 수도 GitHub있습니다.

        curl -o permissions.json https://raw.githubusercontent.com/aws-samples/amazon-eks-fluent-logging-examples/mainline/examples/fargate/kinesis-firehose/permissions.json
  3. IAM 정책을 생성합니다.

    aws iam create-policy --policy-name <eks-fargate-logging-policy> --policy-document file://permissions.json
  4. IAM 프로필에 지정된 포드 실행 역할에 Fargate 정책을 연결합니다. 을 계정 <111122223333> ID로 바꿉니다.

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::<111122223333>:policy/<eks-fargate-logging-policy> \ --role-name <your-pod-execution-role>
  5. 샘플 포드를 배포합니다.

    1. 다음 콘텐츠를 컴퓨터의 yaml 파일에 저장합니다.

      apiVersion: apps/v1 kind: Deployment metadata: name: sample-app namespace: <same-namespace-as-your-fargate-profile> spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - name: http containerPort: 80
    2. 매니페스트를 클러스터에 적용합니다.

      kubectl apply -f <name-of-file-from-previous-step>.yaml
  6. 로그를 보낸 도구를 사용하여 로그를 봅니다.

크기 고려 사항

로그에 대해 최대 50MB의 메모리를 계획하는 것이 좋습니다. 애플리케이션에서 매우 높은 처리량으로 로그를 생성할 것으로 예상되는 경우 최대 100MB를 계획해야 합니다.

Troubleshooting

로깅 기능이 유효하지 않은 과 같이 어떤 이유로 활성화 또는 비활성화되는지 확인하려면 로 포드 이벤트를 ConfigMap확인하십시오kubectl describe pod <pod_name>. 출력에는 다음 예제 출력과 같이 로깅이 활성화되었는지 여부를 명확히 하는 포드 이벤트가 포함될 수 있습니다.

... Annotations: CapacityProvisioned: 0.25vCPU 0.5GB Logging: LoggingDisabled: LOGGING_CONFIGMAP_NOT_FOUND kubernetes.io/psp: eks.privileged ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning LoggingDisabled <unknown> fargate-scheduler Disabled logging because aws-logging configmap was not found. configmap "aws-logging" not found

포드 이벤트는 설정에 따라 기간이 있는 임시 이벤트입니다. 를 사용하여 포드의 주석을 볼 수도 kubectl describe pod <pod-name>있습니다. 포드 주석에는 로깅 기능의 활성화 또는 비활성화 여부와 이유에 대한 정보가 있습니다.

검증 전략

일반적인 에 포함된 기본 섹션은 Fluent Conf Service, Input, Filter및 입니다Output. Filter, 및 Output Parser Service 는 에서 생성됩니다Input. Fargate는 에 Fargate 지정된 Filter, 및 OutputParser 검증Fluent Conf합니다. Filter, Output및 이외의 다른 제공된 섹션은 무시Parser됩니다. 다음 규칙을 사용하여 Filter Output, 및 Parser 필드를 검증합니다.

  1. [FILTER], [OUTPUT],[PARSER] 는 해당하는 각 키 : filters.conf, output.conf및 아래에 지정되어야 합니다parsers.conf. 예를 들어 는 아래에 [FILTER] 있어야 합니다filters.conf. 아래에 여러 [FILTER]를 보유할 수 filters.conf있습니다. [OUTPUT] 및 의 경우도 마찬가지입니다[PARSER].

  2. Fargate 는 각 섹션에 대한 필수 키를 검증합니다. Namematch 는 각 [FILTER] 및 에 필요합니다[OUTPUT]. Nameformat 는 각 에 필요합니다[PARSER]. 키는 대/소문자를 구분하지 않습니다.

  3. 와 같은 환경 변수는 에서 허용되지 ${ENV_VAR} 않습니다configmap.

  4. 들여쓰기는 각 filters.conf output.conf, 및 내의 명령 또는 키-값 페어에 대해 동일해야 합니다parsers.conf. 키-값 페어는 명령보다 더 많이 들여쓰기를 해야 합니다.

  5. Fargate 는 지원되는 grep, parser, , record_modifier, rewrite_tag throttle nest, 및 필터에 대해 검증modify합니다.

  6. Fargate 는 지원되는 출력 es, firehose, kinesis_firehose, cloudwatch, 및 cloudwatch_logs에 대해 검증kinesis합니다.

  7. 로깅을 활성화하려면 Output 에서 지원되는 ConfigMap 플러그인을 하나 이상 제공해야 합니다. FilterParser 는 로깅을 활성화하는 데 필요하지 않습니다.

에 대한 자세한 내용은 Fluent Bit 설명서의 Fluent Conf구성 파일을 참조하십시오. 원하는 구성을 Amazon EC2 사용하여 Fluent Bit on(Fluent Bit on)을 실행하여 검증으로 인해 발생하는 문제를 해결할 수도 있습니다.