Dilip 向您演示如何
使用
Amazon Elasticsearch Service 处理 Amazon CloudFront 日志

dilip_cloudfront_logs_elasticsearch

如何使用 Amazon Elasticsearch Service (Amazon ES) 处理 Amazon CloudFront 日志?

如要创建满足特定需求的自定义报告:

  1.     为您的 CloudFront 分配启用日志,并将 CloudFront 日志传送至 S3 存储桶。
  2.     使用运行 Logstash 的 Amazon EC2 实例,作为处理 CloudFront 日志的客户端。
  3.     将日志推送到 Amazon ES 域。
  4.     使用 Kibana 创建和可视化报告。

1.    (可选) 如果您在将要运行 Elasticsearch 域的区域没有 S3 存储桶,您必须首先创建一个。有关更多信息,请参阅如何创建 S3 存储桶?

2.    在 Amazon CloudFront 控制台,选择您的 CloudFront 分配,然后选择 Distribution Settings,然后选择 Edit。       对于 Logging,请选择 On。       在 Bucket for Logs 字段,选择您的 S3 存储桶。       在 Log Prefix 字段,输入日志名称的前缀。

3.    选择是,请修改注意:日志请求最多可能需要 24 小时才能传送到 S3 存储桶。

4.    在 Elasticsearch Service 控制台,按照创建和配置 Amazon Elasticsearch Service 域的说明创建新的 Amazon ES 域。

5.    启动新的 Amazon EC2 实例。您将使用此 EC2 实例作为 Logstash 客户端。注意:您可能需要配置一个拥有 S3(GET 对象)和 Elasticsearch(PUT 文档)访问权限的 AWS Identity and Access Management (IAM) 角色。有关更多信息,请参阅创建 IAM 角色

6.    使用 SSH 连接到新的 EC2 实例

7.    从命令行运行如下命令,以将 Logstash 客户端下载并安装到您的 EC2 实例上:

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 文件,体现以下内容:对于存储桶,请使用您的 S3 存储桶的名称。        对于 prefix,请使用您在第 2 步为 Log Prefix 指定的前缀。        对于 hosts,请使用您的 CloudFront 分配的终端节点。        对于 region,请使用您的资源所位于的区域。        对于 template,请使用您的 CloudFront 模板所在的目录。

12.   将您所进行的更改保存到 cloudfront.conf。

13.   以 -f 选项运行 Logstash,将 cloudfront.conf 指定为配置文件。有关更多信息,请参阅 Command-Line Flags

Logstash 将在几分钟内将文档发布到您指定的 Elasticsearch 域。为确保文档成功发布,请打开 Amazon ES 控制台,选择您的 ES 域,然后选择 Indices (索引) 选项卡。

您现在可以使用 Kibana 为您的日志创建自定义报告和可视化。有关更多信息,请参阅 Kibana 和 Logstash

注意:您可能需要配置访问策略以确保 Kibana 可以访问存储在 Amazon ES 域中的日志。


此页面对您有帮助吗? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS 支持中心

发布时间:2018 年 1 月 9 日

更新时间:2018 年 6 月 20 日