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

dilip_cloudfront_logs_elasticsearch

Amazon ES(Amazon Elasticsearch Service)를 사용하여 Amazon CloudFront 로그를 처리하려면 어떻게 해야 합니까?

특정 요구 사항을 충족하는 사용자 지정 보고서를 생성하려면 다음을 수행합니다.

  1. CloudFront 배포에 대한 로깅을 활성화한 다음 CloudFront 로그를 S3 버킷에 전달합니다.
  2. Logstash를 클라이언트로 실행하는 Amazon EC2(Amazon Elastic Compute Cloud) 인스턴스를 사용하여 CloudFront 로그를 처리합니다.
  3. Amazon ES 도메인으로 로그를 푸시합니다.
  4. Kibana를 사용하여 보고서를 생성 및 시각화합니다.

1.    (선택 사항) Elasticsearch 도메인을 실행할 동일한 리전에 S3 버킷이 없는 경우 S3 버킷을 생성해야 합니다. 자세한 내용은 S3 버킷을 생성하려면 어떻게 해야 합니까?를 참조하십시오.

2.    Amazon CloudFront 콘솔에서 CloudFront 배포를 선택하고 [배포 설정]을 선택한 후 [편집]을 선택합니다. [로깅]에서 [켜기]를 선택합니다. [Bucket for Logs(로그용 버킷)] 필드에서 S3 버킷을 선택합니다. [Log Prefix(로그 접두사)] 필드에 로그 이름의 접두사를 입력합니다.

3.    [Yes, Edit(예, 편집함)]을 선택합니다. 참고: 로그 요청이 S3 버킷으로 전달되는 것을 확인하는 데 최대 24시간이 걸릴 수 있습니다.

4.    Amazon Elasticsearch Service 도메인 만들기 및 구성의 지침을 따라 Elasticsearch Service 콘솔에서 새로운 Amazon ES 도메인을 생성합니다.

5.    새로운 Amazon EC2 인스턴스를 시작합니다. 이 EC2 인스턴스를 Logstash 클라이언트로 사용하게 됩니다. 참고: S3(GET 객체) 및 Elasticsearch(PUT 문서)에 액세스할 수 있는 AWS IAM(Identity and Access Management) 역할을 구성해야 할 수 있습니다. 자세한 내용은 IAM 역할 생성을 참조하십시오.

6.    SSH를 사용하여 새로운 EC2 인스턴스에 연결합니다.

7.    명령줄에서 다음 명령을 실행하여 EC2 인스턴스에 Logstash 클라이언트를 다운로드하고 설치합니다.

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

8.    다음 명령을 사용하여 Logstash 클라이언트의 압축을 풉니다.

tar xvf logstash-5.5.0.tar.gz

9.    다음 명령을 사용하여 Elasticsearch용 Logstash 플러그인을 설치합니다.

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

10.    다음과 유사한 cloudfront.template.json 및 cloudfront.conf 파일을 생성합니다. 참고: 요구 사항을 충족하도록 템플릿을 편집해야 할 수 있습니다.

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

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

11.    vi와 같은 텍스트 편집기를 사용하여 cloudfront.conf 파일이 다음을 반영하도록 편집합니다. [bucket(버킷)]에는 S3 버킷의 이름을 사용합니다. [prefix(접두사)]에는 2단계에서 [Log Prefix(로그 접두사)]에 지정한 접두사를 사용합니다. [hosts(호스트)]에는 CloudFront 배포의 엔드포인트를 사용합니다. [region(리전)]에는 해당 리소스가 있는 리전을 사용합니다. [template(템플릿)]에는 CloudFront 템플릿이 있는 디렉터리를 사용합니다.

12.    cloudfront.conf의 변경 사항을 저장합니다.

13.   -f 옵션을 사용하여 Logstash를 실행하고 cloudfront.conf를 구성 파일로 지정합니다. 자세한 내용은 명령줄 플래그를 참조하십시오.

몇 분 후에 Logstash에서 사용자가 지정한 Elasticsearch 도메인에 문서를 게시합니다. 문서가 성공적으로 게시되었는지 확인하려면 Amazon ES 콘솔을 열고 ES 도메인을 선택한 다음 [Indices(색인)] 탭을 확인합니다.

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

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


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

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

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

게시된 날짜: 2018년 1월 9일

업데이트된 날짜: 2018년 6월 20일