Dilip 씨가 Amazon Elasticsearch Service를
사용하여 Amazon CloudFront 로그를
처리하는 방법을 보여줍니다.

dilip_cloudfront_logs_elasticsearch

Amazon CloudFront 배포의 액세스 로그를 사용하여 사용자 지정 보고서를 작성하려고 합니다. 사용자 지정 보고서를 만들 수 있도록 Amazon Elasticsearch Service(Amazon ES)로 CloudFront 로그를 처리하려면 어떻게 해야 합니까?

Amazon ES를 사용하여 CloudFront 로그를 처리하려면 다음 단계를 수행하십시오.

  1. 동일한 AWS 리전에 Amazon ES 도메인 및 Amazon Simple Storage Service(Amazon S3) 버킷을 만드십시오.
  2. CloudFront 배포를 구성해 Amazon S3 버킷에 액세스 로그를 저장합니다.
  3. Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스가 Logstash를 사용하여 CloudFront 로그를 처리하고 이를 Amazon ES 도메인으로 푸시하도록 구성합니다.

동일한 AWS 리전에 Amazon ES 도메인 및 Amazon S3 버킷 생성

Amazon ES를 사용하여 CloudFront 로그를 처리하려면 먼저 동일한 AWS 리전에 이러한 리소스를 설정해야 합니다.

CloudFront 배포를 구성해 Amazon S3 버킷에 액세스 로그 저장

  1. Amazon CloudFront 콘솔을 여십시오.
  2. CloudFront 배포를 선택한 다음, Distribution Settings를 선택하십시오.
  3. 일반 보기에서 편집을 선택하고 다음을 수행합니다.
    로깅에서 켜기를 선택하십시오.
    로그용 버킷에서 Amazon ES 도메인과 동일한 AWS 리전에 있는 S3 버킷을 선택하십시오.
    Log Prefix(로그 접두사)에 로그 이름의 접두사를 입력하십시오.
  4. Yes, Edit(에, 편집합니다)를 선택하십시오.

참고: 로그 요청이 S3 버킷으로 전달되는 데 최대 24시간이 걸릴 수 있습니다.

Amazon EC2 인스턴스가 Logstash를 사용하여 CloudFront 로그를 처리한 후 이를 Amazon ES 도메인으로 푸시하도록 구성

1.    Amazon EC2 인스턴스를 시작하십시오.
참고: 이 인스턴스는 Amazon S3(GET 객체) 및 Amazon ES(PUT 문서)에 액세스할 수 있는 AWS Identity and Access Management(IAM) 역할을 사용해야 합니다. 자세한 내용은 IAM 역할 생성을 참조하십시오.

2.    SSH를 이용해 인스턴스에 연결하십시오.

3.    인스턴스에 Java 8을 설치하십시오. 이 작업은 Logstash를 실행하기 위해 필요합니다. 자세한 내용은 Elastic 웹 사이트의 Installing Logstash를 참조하십시오.

4.    이 명령을 실행하여 인스턴스에서 Logstash 클라이언트를 다운로드하십시오.

wget https://artifacts.elastic.co/downloads/logstash/logstash-5.5.0.tar.gz

5.    이 명령을 실행하여 Logstash 클라이언트를 추출하십시오.

tar xvf logstash-5.5.0.tar.gz

6.    이 명령을 실행하여 Amazon ES용 Logstash 플러그인을 설치하십시오.

cd logstash-5.5.0
bin/logstash-plugin install logstash-output-amazon_es

7.    Logstash 출력용 템플릿으로 사용할 JSON 형식의 파일을 생성하십시오. 템플릿 파일은 다음과 유사할 수 있습니다.
참고: 보고 요구 사항에 따라 템플릿을 수정해야 합니다.

cloudfront.template.json

#cloudfront.template.json
{
  "template": "cloudfront-logs-*",
  "mappings": {
    "logs": {
      "_source": {
        "enabled": false
      },
      "_all": {
        "enabled": false
      },
      "dynamic_templates": [
        {
          "string_fields": {
            "mapping": {
              "index": "not_analyzed",
              "type": "string"
            },
            "match_mapping_type": "string",
            "match": "*"
          }
        }
      ],
      "properties": {
        "geoip": {
          "dynamic": true,
          "properties": {
            "ip": {
              "type": "ip"
            },
            "location": {
              "type": "geo_point"
            },
            "latitude": {
              "type": "float"
            },
            "longitude": {
              "type": "float"
            }
          }
        }
      }
    }
  }
}

8.    Logstash 구성 파일을 생성하여 CloudFront 로그가 있는 S3 버킷을 입력으로 정의하고 Amazon ES 도메인을 출력으로 정의하십시오. 구성 파일은 다음과 유사할 수 있습니다.

cloudfront.conf

#cloudfront.conf
input {
  s3 {
    bucket => "{CLOUDFRONT_LOG_BUCKET}"
    prefix => "{CLOUDFRONT_LOG_KEY_PREFIX}"
    region => "{BUCKET_REGION_NAME}"
  }
}


filter {
  grok {
    match => { "message" => "%{DATE_EU:date}\t%{TIME:time}\t%{WORD:x_edge_location}\t(?:%{NUMBER:sc_bytes:int}|-)\t%{IPORHOST:c_ip}\t%{WORD:cs_method}\t%{HOSTNAME:cs_host}\t%{NOTSPACE:cs_uri_stem}\t%{NUMBER:sc_status:int}\t%{GREEDYDATA:referrer}\t%{GREEDYDATA:User_Agent}\t%{GREEDYDATA:cs_uri_stem}\t%{GREEDYDATA:cookies}\t%{WORD:x_edge_result_type}\t%{NOTSPACE:x_edge_request_id}\t%{HOSTNAME:x_host_header}\t%{URIPROTO:cs_protocol}\t%{INT:cs_bytes:int}\t%{GREEDYDATA:time_taken}\t%{GREEDYDATA:x_forwarded_for}\t%{GREEDYDATA:ssl_protocol}\t%{GREEDYDATA:ssl_cipher}\t%{GREEDYDATA:x_edge_response_result_type}" }
  }

  mutate {
    add_field => [ "listener_timestamp", "%{date} %{time}" ]
  }

  date {
    match => [ "listener_timestamp", "yy-MM-dd HH:mm:ss" ]
    target => "@timestamp"
  }

  geoip {
    source => "c_ip"
  }

  useragent {
    source => "User_Agent"
    target => "useragent"
  }

  mutate {
    remove_field => ["date", "time", "listener_timestamp", "cloudfront_version", "message", "cloudfront_fields", "User_Agent"]
  }
}

output {
  amazon_es {
    hosts => ["{AMAZON_ES_DOMAIN_ENDPOINT}"]
    region => "{AMAZON_ES_DOMAIN_REGION_NAME}"
    index => "cloudfront-logs-%{+YYYY.MM.dd}"
    template => "/path-to-file/cloudfront.template.json"
  }
}

9.    vi와 같은 텍스트 편집기를 사용하여 구성 파일에서 다음 값을 편집하십시오.
버킷에 CloudFront 로그를 저장하는 S3 버킷의 이름을 입력하십시오.
접두사에 CloudFront 배포에서 로깅을 활성화할 때 로그 접두사로 지정한 접두사를 입력하십시오.
리전에 S3 버킷 및 Amazon ES 도메인의 AWS 리전을 입력하십시오.
호스트에 Amazon ES 도메인의 엔드포인트를 입력하십시오.
템플릿에 작성한 템플릿 파일의 경로를 입력하십시오.

10.    구성 파일에 대한 변경 사항을 저장하십시오.

11.    -f 옵션으로 Logstash를 실행하고 생성한 구성 파일을 지정하십시오. 자세한 내용은 Elasic 웹사이트의 Command-Line Flag를 참조하십시오.

이 단계를 완료한 후, Logstash가 지정한 Amazon ES 도메인에 문서를 게시합니다. 문서가 성공적으로 게시되었는지 확인하려면 Amazon ES 콘솔에서 Amazon ES 도메인을 연 다음 인덱스 보기를 확인하십시오.

이제 Kibana를 사용하여 로그에 대한 사용자 지정 보고서 및 시각화를 생성할 수 있습니다. 자세한 내용은 Kibana 및 Logstash를 참고하십시오.

참고: Kibana가 Amazon ES 도메인에 저장된 로그에 액세스할 수 있도록 액세스 정책을 구성해야 할 수 있습니다.


페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시 날짜: 2018년 1월 9일

업데이트 날짜: 2019년 2월 12일