

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Layanan AWS Log kueri
<a name="querying-aws-service-logs"></a>

Bagian ini mencakup beberapa prosedur untuk menggunakan Amazon Athena untuk menanyakan kumpulan data populer, seperti log, log Amazon AWS CloudTrail , log Classic Load Balancer, CloudFront log Application Load Balancer, log aliran Amazon VPC, dan log Network Load Balancer.

[Tugas di bagian ini menggunakan konsol Athena, tetapi Anda juga dapat menggunakan alat lain seperti [driver Athena JDBC](connect-with-jdbc.md), [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/athena/)the, atau Referensi API Amazon Athena.](https://docs.aws.amazon.com/athena/latest/APIReference/)

Untuk informasi tentang penggunaan AWS CloudFormation untuk secara otomatis membuat tabel Layanan AWS log, partisi, dan contoh kueri di Athena, lihat [Mengotomatiskan pembuatan tabel Layanan AWS log dan menanyakannya dengan Amazon Athena](https://aws.amazon.com/blogs/big-data/automating-aws-service-logs-table-creation-and-querying-them-with-amazon-athena/) di Blog Big Data. AWS Untuk informasi tentang penggunaan pustaka Python untuk AWS Glue membuat kerangka kerja umum untuk memproses Layanan AWS log dan menanyakannya di Athena, lihat Kueri log [dengan mudah menggunakan Layanan AWS](https://aws.amazon.com/blogs/big-data/easily-query-aws-service-logs-using-amazon-athena/) Amazon Athena.

Topik di bagian ini mengasumsikan bahwa Anda telah mengonfigurasi izin yang sesuai untuk mengakses Athena dan bucket Amazon S3 tempat data kueri seharusnya berada. Untuk informasi selengkapnya, lihat [Menyiapkan, administratif, dan akses terprogram](setting-up.md) dan [Memulai](getting-started.md).

**Topics**
+ [Penyeimbang Beban Aplikasi](application-load-balancer-logs.md)
+ [Penyeimbang Beban Elastis](elasticloadbalancer-classic-logs.md)
+ [CloudFront](cloudfront-logs.md)
+ [CloudTrail](cloudtrail-logs.md)
+ [Amazon EMR](emr-logs.md)
+ [Global Accelerator](querying-global-accelerator-flow-logs.md)
+ [GuardDuty](querying-guardduty.md)
+ [Network Firewall](querying-network-firewall-logs.md)
+ [Penyeimbang Beban Jaringan](networkloadbalancer-classic-logs.md)
+ [Route 53](querying-r53-resolver-logs.md)
+ [Amazon SES](querying-ses-logs.md)
+ [Amazon VPC](vpc-flow-logs.md)
+ [AWS WAF](waf-logs.md)

# Log Query Application Load Balancer
<a name="application-load-balancer-logs"></a>

Application Load Balancer adalah opsi load balancing untuk LoElastic Load Balancing yang memungkinkan distribusi lalu lintas dalam deployment mikroservices menggunakan kontainer. Kueri Application Load Balancer log memungkinkan Anda melihat sumber lalu lintas, latency, dan byte yang ditransfer ke dan dari contoh Elastic Load Balancing dan aplikasi backend. Untuk informasi selengkapnya, lihat [Log akses untuk Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html) dan [log Koneksi untuk Application Load](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html) Balancer di *Panduan Pengguna untuk* Application Load Balancer.

## Prasyarat
<a name="application-load-balancer-logs-prerequisites"></a>
+ Aktifkan [pencatatan akses](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html) atau [pencatatan koneksi](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html) sehingga log Application Load Balancer dapat disimpan ke bucket Amazon S3 Anda.
+ Database untuk menyimpan tabel yang akan Anda buat untuk Athena. Untuk membuat database, Anda dapat menggunakan Athena atau AWS Glue konsol. Untuk informasi selengkapnya, lihat [Buat database di Athena](creating-databases.md) di panduan ini atau [Bekerja dengan database di konsol AWS lem](https://docs.aws.amazon.com/glue/latest/dg/console-databases.html) di *Panduan AWS Glue Pengembang*. 

**Topics**
+ [Prasyarat](#application-load-balancer-logs-prerequisites)
+ [Buat tabel untuk log akses ALB](create-alb-access-logs-table.md)
+ [Buat tabel untuk log akses ALB di Athena menggunakan proyeksi partisi](create-alb-access-logs-table-partition-projection.md)
+ [Contoh kueri untuk log akses ALB](query-alb-access-logs-examples.md)
+ [Buat tabel untuk log koneksi ALB](create-alb-connection-logs-table.md)
+ [Buat tabel untuk log koneksi ALB di Athena menggunakan proyeksi partisi](create-alb-connection-logs-table-partition-projection.md)
+ [Contoh kueri untuk log koneksi ALB](query-alb-connection-logs-examples.md)
+ [Sumber daya tambahan](application-load-balancer-logs-additional-resources.md)

# Buat tabel untuk log akses ALB
<a name="create-alb-access-logs-table"></a>

1. Salin dan tempel `CREATE TABLE` pernyataan berikut ke editor kueri di konsol Athena, lalu modifikasi seperlunya untuk persyaratan entri log Anda sendiri. Untuk informasi tentang memulai dengan konsol Athena, lihat. [Memulai](getting-started.md) Ganti jalur di `LOCATION` klausa dengan lokasi folder log akses Amazon S3 Anda. Untuk informasi selengkapnya tentang lokasi file log akses, lihat [Mengakses file log](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-log-file-format) di *Panduan Pengguna untuk Penyeimbang Beban Aplikasi*.

   Untuk informasi tentang setiap bidang file log, lihat [Mengakses entri log](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-log-entry-format) di *Panduan Pengguna untuk Penyeimbang Beban Aplikasi*.
**catatan**  
`CREATE TABLE`Pernyataan contoh berikut mencakup kolom yang baru ditambahkan`classification`,`classification_reason`, dan `conn_trace_id` ('ID ketertelusuran', atau TID). Untuk membuat tabel untuk log akses Application Load Balancer yang tidak berisi entri ini, hapus kolom yang sesuai dari `CREATE TABLE` pernyataan dan modifikasi ekspresi reguler yang sesuai. 

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS alb_access_logs (
               type string,
               time string,
               elb string,
               client_ip string,
               client_port int,
               target_ip string,
               target_port int,
               request_processing_time double,
               target_processing_time double,
               response_processing_time double,
               elb_status_code int,
               target_status_code string,
               received_bytes bigint,
               sent_bytes bigint,
               request_verb string,
               request_url string,
               request_proto string,
               user_agent string,
               ssl_cipher string,
               ssl_protocol string,
               target_group_arn string,
               trace_id string,
               domain_name string,
               chosen_cert_arn string,
               matched_rule_priority string,
               request_creation_time string,
               actions_executed string,
               redirect_url string,
               lambda_error_reason string,
               target_port_list string,
               target_status_code_list string,
               classification string,
               classification_reason string,
               conn_trace_id string
               )
               ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
               WITH SERDEPROPERTIES (
               'serialization.format' = '1',
               'input.regex' = 
           '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \"([^ ]*) (.*) (- |[^ ]*)\" \"([^\"]*)\" ([A-Z0-9-_]+) ([A-Za-z0-9.-]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^\"]*)\" ([-.0-9]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^ ]*)\" \"([^\\s]+?)\" \"([^\\s]+)\" \"([^ ]*)\" \"([^ ]*)\" ?([^ ]*)? ?( .*)?'
               )
               LOCATION 's3://amzn-s3-demo-bucket/access-log-folder-path/'
   ```
**catatan**  
Kami menyarankan bahwa pola *`?( .*)?`* di akhir `input.regex` parameter selalu tetap di tempatnya untuk menangani entri log future jika bidang log ALB baru ditambahkan. 

1. Jalankan kueri di konsol Athena. Setelah kueri selesai, Athena register`alb_access_logs`tabel, membuat data di dalamnya siap bagi Anda untuk mengeluarkan kueri.

# Buat tabel untuk log akses ALB di Athena menggunakan proyeksi partisi
<a name="create-alb-access-logs-table-partition-projection"></a>

Karena log akses ALB memiliki struktur yang diketahui skema partisi yang dapat Anda tentukan sebelumnya, Anda dapat mengurangi runtime kueri dan mengotomatiskan manajemen partisi dengan menggunakan fitur proyeksi partisi Athena. Proyeksi partisi secara otomatis menambahkan partisi baru saat data baru ditambahkan. Ini menghapus kebutuhan bagi Anda untuk menambahkan partisi secara manual dengan menggunakan`ALTER TABLE ADD PARTITION`. 

`CREATE TABLE`Pernyataan contoh berikut secara otomatis menggunakan proyeksi partisi pada log akses ALB dari tanggal tertentu hingga saat ini untuk satu AWS wilayah. Pernyataan ini didasarkan pada contoh di bagian sebelumnya tetapi menambahkan `PARTITIONED BY` dan `TBLPROPERTIES` klausa untuk mengaktifkan proyeksi partisi. Di `storage.location.template` klausa `LOCATION` dan, ganti placeholder dengan nilai yang mengidentifikasi lokasi bucket Amazon S3 dari log akses ALB Anda. Untuk informasi selengkapnya tentang lokasi file log akses, lihat [Mengakses file log](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-log-file-format) di *Panduan Pengguna untuk Penyeimbang Beban Aplikasi*. Untuk`projection.day.range`, ganti *2022**01*//*01*dengan tanggal mulai yang ingin Anda gunakan. Setelah Anda menjalankan kueri dengan sukses, Anda dapat meminta tabel. Anda tidak perlu menjalankan `ALTER TABLE ADD PARTITION` untuk memuat partisi. Untuk informasi tentang setiap bidang file log, lihat [Mengakses entri log](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-log-entry-format). 

```
CREATE EXTERNAL TABLE IF NOT EXISTS alb_access_logs (
            type string,
            time string,
            elb string,
            client_ip string,
            client_port int,
            target_ip string,
            target_port int,
            request_processing_time double,
            target_processing_time double,
            response_processing_time double,
            elb_status_code int,
            target_status_code string,
            received_bytes bigint,
            sent_bytes bigint,
            request_verb string,
            request_url string,
            request_proto string,
            user_agent string,
            ssl_cipher string,
            ssl_protocol string,
            target_group_arn string,
            trace_id string,
            domain_name string,
            chosen_cert_arn string,
            matched_rule_priority string,
            request_creation_time string,
            actions_executed string,
            redirect_url string,
            lambda_error_reason string,
            target_port_list string,
            target_status_code_list string,
            classification string,
            classification_reason string,
            conn_trace_id string
            )
            PARTITIONED BY
            (
             day STRING
            )
            ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
            WITH SERDEPROPERTIES (
            'serialization.format' = '1',
            'input.regex' = 
        '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \"([^ ]*) (.*) (- |[^ ]*)\" \"([^\"]*)\" ([A-Z0-9-_]+) ([A-Za-z0-9.-]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^\"]*)\" ([-.0-9]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^ ]*)\" \"([^\\s]+?)\" \"([^\\s]+)\" \"([^ ]*)\" \"([^ ]*)\" ?([^ ]*)? ?( .*)?'
            )
            LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/'
            TBLPROPERTIES
            (
             "projection.enabled" = "true",
             "projection.day.type" = "date",
             "projection.day.range" = "2022/01/01,NOW",
             "projection.day.format" = "yyyy/MM/dd",
             "projection.day.interval" = "1",
             "projection.day.interval.unit" = "DAYS",
             "storage.location.template" = "s3://amzn-s3-demo-bucket/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/${day}"
            )
```

Untuk informasi selengkapnya tentang proyek partisi, lihat [Gunakan proyeksi partisi dengan Amazon Athena](partition-projection.md).

**catatan**  
Kami menyarankan bahwa pola *?( .\$1)?* di akhir `input.regex` parameter selalu tetap di tempatnya untuk menangani entri log future jika bidang log ALB baru ditambahkan. 

# Contoh kueri untuk log akses ALB
<a name="query-alb-access-logs-examples"></a>

Kueri berikut menghitung jumlah permintaan HTTP GET yang diterima oleh load balancer dikelompokkan berdasarkan alamat IP klien:

```
SELECT COUNT(request_verb) AS
 count,
 request_verb,
 client_ip
FROM alb_access_logs
GROUP BY request_verb, client_ip
LIMIT 100;
```

Kueri lain menunjukkan yang URLs dikunjungi oleh pengguna browser Safari:

```
SELECT request_url
FROM alb_access_logs
WHERE user_agent LIKE '%Safari%'
LIMIT 10;
```

Kueri berikut menunjukkan catatan yang memiliki nilai kode status ELB lebih besar dari atau sama dengan 500.

```
SELECT * FROM alb_access_logs
WHERE elb_status_code >= 500
```

Contoh berikut menunjukkan cara mengurai log dengan`datetime`:

```
SELECT client_ip, sum(received_bytes) 
FROM alb_access_logs
WHERE parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') 
     BETWEEN parse_datetime('2018-05-30-12:00:00','yyyy-MM-dd-HH:mm:ss') 
     AND parse_datetime('2018-05-31-00:00:00','yyyy-MM-dd-HH:mm:ss') 
GROUP BY client_ip;
```

Kueri berikut menanyakan tabel yang menggunakan proyeksi partisi untuk semua log akses ALB dari hari yang ditentukan.

```
SELECT * 
FROM alb_access_logs 
WHERE day = '2022/02/12'
```

# Buat tabel untuk log koneksi ALB
<a name="create-alb-connection-logs-table"></a>

1. Salin dan tempel `CREATE TABLE` pernyataan contoh berikut ke editor kueri di konsol Athena, lalu modifikasi seperlunya untuk persyaratan entri log Anda sendiri. Untuk informasi tentang memulai dengan konsol Athena, lihat. [Memulai](getting-started.md) Ganti jalur di `LOCATION` klausa dengan lokasi folder log koneksi Amazon S3 Anda. Untuk informasi selengkapnya tentang lokasi file log [koneksi, lihat File log koneksi](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html#connection-log-file-format) di *Panduan Pengguna untuk Penyeimbang Beban Aplikasi*. Untuk informasi tentang setiap bidang file log, lihat [Entri log koneksi](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html#connection-log-entry-format). 

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS alb_connection_logs (
            time string,
            client_ip string,
            client_port int,
            listener_port int,
            tls_protocol string,
            tls_cipher string,
            tls_handshake_latency double,
            leaf_client_cert_subject string,
            leaf_client_cert_validity string,
            leaf_client_cert_serial_number string,
            tls_verify_status string,
            conn_trace_id string
            ) 
            ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
            WITH SERDEPROPERTIES (
            'serialization.format' = '1',
            'input.regex' =
             '([^ ]*) ([^ ]*) ([0-9]*) ([0-9]*) ([A-Za-z0-9.-]*) ([^ ]*) ([-.0-9]*) \"([^\"]*)\" ([^ ]*) ([^ ]*) ([^ ]*) ?([^ ]*)?( .*)?'
            )
            LOCATION 's3://amzn-s3-demo-bucket/connection-log-folder-path/'
   ```

1. Jalankan kueri di konsol Athena. Setelah kueri selesai, Athena register`alb_connection_logs`tabel, membuat data di dalamnya siap bagi Anda untuk mengeluarkan kueri.

# Buat tabel untuk log koneksi ALB di Athena menggunakan proyeksi partisi
<a name="create-alb-connection-logs-table-partition-projection"></a>

Karena log koneksi ALB memiliki struktur yang diketahui yang skema partisi dapat Anda tentukan sebelumnya, Anda dapat mengurangi runtime kueri dan mengotomatiskan manajemen partisi dengan menggunakan fitur proyeksi partisi Athena. Proyeksi partisi secara otomatis menambahkan partisi baru saat data baru ditambahkan. Ini menghapus kebutuhan bagi Anda untuk menambahkan partisi secara manual dengan menggunakan`ALTER TABLE ADD PARTITION`. 

`CREATE TABLE`Pernyataan contoh berikut secara otomatis menggunakan proyeksi partisi pada log koneksi ALB dari tanggal tertentu hingga saat ini untuk satu AWS wilayah. Pernyataan ini didasarkan pada contoh di bagian sebelumnya tetapi menambahkan `PARTITIONED BY` dan `TBLPROPERTIES` klausa untuk mengaktifkan proyeksi partisi. Di `storage.location.template` klausa `LOCATION` dan, ganti placeholder dengan nilai yang mengidentifikasi lokasi bucket Amazon S3 dari log koneksi ALB Anda. Untuk informasi selengkapnya tentang lokasi file log [koneksi, lihat File log koneksi](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html#connection-log-file-format) di *Panduan Pengguna untuk Penyeimbang Beban Aplikasi*. Untuk`projection.day.range`, ganti *2023**01*//*01*dengan tanggal mulai yang ingin Anda gunakan. Setelah Anda menjalankan kueri dengan sukses, Anda dapat meminta tabel. Anda tidak perlu menjalankan `ALTER TABLE ADD PARTITION` untuk memuat partisi. Untuk informasi tentang setiap bidang file log, lihat [Entri log koneksi](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html#connection-log-entry-format).

```
CREATE EXTERNAL TABLE IF NOT EXISTS alb_connection_logs (
         time string,
         client_ip string,
         client_port int,
         listener_port int,
         tls_protocol string,
         tls_cipher string,
         tls_handshake_latency double,
         leaf_client_cert_subject string,
         leaf_client_cert_validity string,
         leaf_client_cert_serial_number string,
         tls_verify_status string,
         conn_trace_id string
         )
            PARTITIONED BY
            (
             day STRING
            )
            ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
            WITH SERDEPROPERTIES (
            'serialization.format' = '1',
            'input.regex' =
             '([^ ]*) ([^ ]*) ([0-9]*) ([0-9]*) ([A-Za-z0-9.-]*) ([^ ]*) ([-.0-9]*) \"([^\"]*)\" ([^ ]*) ([^ ]*) ([^ ]*) ?([^ ]*)?( .*)?'
            )
            LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/'
            TBLPROPERTIES
            (
             "projection.enabled" = "true",
             "projection.day.type" = "date",
             "projection.day.range" = "2023/01/01,NOW",
             "projection.day.format" = "yyyy/MM/dd",
             "projection.day.interval" = "1",
             "projection.day.interval.unit" = "DAYS",
             "storage.location.template" = "s3://amzn-s3-demo-bucket/AWSLogs/<ACCOUNT-NUMBER>/elasticloadbalancing/<REGION>/${day}"
            )
```

Untuk informasi selengkapnya tentang proyek partisi, lihat [Gunakan proyeksi partisi dengan Amazon Athena](partition-projection.md).

# Contoh kueri untuk log koneksi ALB
<a name="query-alb-connection-logs-examples"></a>

Perhitungan kueri berikut terjadi di mana nilai untuk `tls_verify_status` tidak`'Success'`, dikelompokkan berdasarkan alamat IP klien:

```
SELECT DISTINCT client_ip, count() AS count FROM alb_connection_logs
WHERE tls_verify_status != 'Success'
GROUP BY client_ip
ORDER BY count() DESC;
```

Kueri berikut mencari kejadian di mana nilai untuk `tls_handshake_latency` lebih dari 2 detik dalam rentang waktu yang ditentukan:

```
SELECT * FROM alb_connection_logs
WHERE 
  (
    parse_datetime(time, 'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') 
    BETWEEN 
    parse_datetime('2024-01-01-00:00:00', 'yyyy-MM-dd-HH:mm:ss') 
    AND 
    parse_datetime('2024-03-20-00:00:00', 'yyyy-MM-dd-HH:mm:ss') 
  ) 
  AND 
    (tls_handshake_latency >= 2.0);
```

# Sumber daya tambahan
<a name="application-load-balancer-logs-additional-resources"></a>

Untuk informasi selengkapnya tentang penggunaan log ALB, lihat sumber daya berikut.
+ [Bagaimana cara menganalisis log akses Application Load Balancer menggunakan Amazon Athena](https://repost.aws/knowledge-center/athena-analyze-access-logs) *di AWS Pusat Pengetahuan.*
+ Untuk informasi tentang kode status HTTP di Elastic Load Balancing, lihat [Memecahkan masalah penyeimbang beban aplikasi Anda di *Panduan Pengguna* untuk Penyeimbang Beban Aplikasi](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-troubleshooting.html).
+ [Katalog dan analisis log Application Load Balancer lebih efisien dengan pengklasifikasi AWS Glue kustom dan Amazon Athena](https://aws.amazon.com/blogs/big-data/catalog-and-analyze-application-load-balancer-logs-more-efficiently-with-aws-glue-custom-classifiers-and-amazon-athena/) *di Big Data Blog.AWS *

# Kueri log Classic Load Balancer
<a name="elasticloadbalancer-classic-logs"></a>

Gunakan log Classic Load Balancer untuk menganalisis dan memahami pola lalu lintas ke dan dari contoh Elastic Load Balancing dan aplikasi backend. Anda dapat melihat sumber lalu lintas, latency, dan byte yang telah ditransfer.

Sebelum Anda menganalisis log Elastic Load Balancing, mengonfigurasi mereka untuk menyimpan di tujuan Amazon S3 bucket. Untuk informasi selengkapnya, lihat [Mengaktifkan log akses untuk Classic Load Balancer Anda](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/enable-access-logs.html).

**Untuk membuat tabel untuk log Elastic Load Balancing**

1. Salin dan tempel pernyataan DDL berikut ke konsol Athena. Periksa[sintaks](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/access-log-collection.html#access-log-entry-format)Catatan log Elastic Load Balancing. Anda mungkin perlu memperbarui kueri berikut untuk menyertakan kolom dan sintaks Regex untuk versi terbaru dari catatan. 

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS elb_logs (
    
    timestamp string,
    elb_name string,
    request_ip string,
    request_port int,
    backend_ip string,
    backend_port int,
    request_processing_time double,
    backend_processing_time double,
    client_response_time double,
    elb_response_code string,
    backend_response_code string,
    received_bytes bigint,
    sent_bytes bigint,
    request_verb string,
    url string,
    protocol string,
    user_agent string,
    ssl_cipher string,
    ssl_protocol string
   )
   ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
   WITH SERDEPROPERTIES (
    'serialization.format' = '1',
    'input.regex' = '([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \\\"([^ ]*) ([^ ]*) (- |[^ ]*)\\\" (\"[^\"]*\") ([A-Z0-9-]+) ([A-Za-z0-9.-]*)$'
   )
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/AWS_account_ID/elasticloadbalancing/';
   ```

1. Memodifikasi`LOCATION`Amazon S3 bucket untuk menentukan tujuan log Elastic Load Balancing Anda.

1. Jalankan kueri di konsol Athena. Setelah kueri selesai, Athena register`elb_logs`tabel, membuat data di dalamnya siap untuk mengkueri. Untuk informasi selengkapnya, lihat [Kueri contoh](#query-elb-classic-example).

## Kueri contoh
<a name="query-elb-classic-example"></a>

Gunakan kueri yang mirip dengan contoh berikut. Ini daftar server aplikasi backend yang mengembalikan sebuah`4XX`atau`5XX`Kode respons kesalahan. Menggunakan`LIMIT`Operator untuk membatasi jumlah log untuk mengkueri pada suatu waktu.

```
SELECT
 timestamp,
 elb_name,
 backend_ip,
 backend_response_code
FROM elb_logs
WHERE backend_response_code LIKE '4%' OR
      backend_response_code LIKE '5%'
LIMIT 100;
```

Gunakan kueri berikutnya untuk meringkas waktu respon dari semua transaksi dikelompokkan berdasarkan alamat IP backend dan nama contoh Elastic Load Balancing.

```
SELECT sum(backend_processing_time) AS
 total_ms,
 elb_name,
 backend_ip
FROM elb_logs WHERE backend_ip <> ''
GROUP BY backend_ip, elb_name
LIMIT 100;
```

Untuk informasi lebih lanjut, lihat [Menganalisis data di S3 menggunakan Athena](https://aws.amazon.com/blogs/big-data/analyzing-data-in-s3-using-amazon-athena/).

# Kueri CloudFront log Amazon
<a name="cloudfront-logs"></a>

Anda dapat mengonfigurasi Amazon CloudFront CDN untuk mengekspor log akses distribusi Web ke Amazon Simple Storage Service. Gunakan log ini untuk menjelajahi pola selancar pengguna di seluruh properti web Anda yang dilayani oleh. CloudFront

Sebelum Anda mulai menanyakan log, aktifkan log akses distribusi Web pada distribusi pilihan CloudFront Anda. Untuk selengkapnya, lihat [Akses log](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html) di *Panduan CloudFront Pengembang Amazon*. Catat bucket Amazon S3 tempat Anda menyimpan log ini.

**Topics**
+ [Buat tabel untuk log CloudFront standar (warisan)](create-cloudfront-table-standard-logs.md)
+ [Buat tabel untuk CloudFront log di Athena menggunakan partisi manual dengan JSON](create-cloudfront-table-manual-json.md)
+ [Buat tabel untuk CloudFront log di Athena menggunakan partisi manual dengan Parket](create-cloudfront-table-manual-parquet.md)
+ [Buat tabel untuk CloudFront log di Athena menggunakan proyeksi partisi dengan JSON](create-cloudfront-table-partition-json.md)
+ [Buat tabel untuk CloudFront log di Athena menggunakan proyeksi partisi dengan Parket](create-cloudfront-table-partition-parquet.md)
+ [Buat tabel untuk log CloudFront waktu nyata](create-cloudfront-table-real-time-logs.md)
+ [Sumber daya tambahan](cloudfront-logs-additional-resources.md)

# Buat tabel untuk log CloudFront standar (warisan)
<a name="create-cloudfront-table-standard-logs"></a>

**catatan**  
Prosedur berikut berfungsi untuk log akses distribusi Web CloudFront. Ini tidak sahih untuk streaming log dari RTMP distribusi.

**Untuk membuat tabel untuk bidang file log CloudFront standar**

1. Salin dan tempel contoh pernyataan DDL berikut ke Editor Kueri di konsol Athena. Pernyataan contoh menggunakan bidang file log yang didokumentasikan di bagian [bidang file log Standar](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html#BasicDistributionFileFormat) dari *Panduan CloudFront Pengembang Amazon*. Memodifikasi`LOCATION`untuk bucket Amazon S3 yang menyimpan log Anda. Untuk informasi selengkapnya, lihat [Memulai](getting-started.md) Penggunaan editor kueri untuk

   Kueri ini menentukan `ROW FORMAT DELIMITED` dan `FIELDS TERMINATED BY '\t'` untuk menunjukkan bahwa bidang dibatasi oleh karakter tab. Untuk`ROW FORMAT DELIMITED`, Athena menggunakan secara [LazySimpleSerDe](lazy-simple-serde.md)default. Kolom`date`melarikan diri menggunakan backticks (`) karena itu adalah kata reserved di Athena. Untuk informasi, lihat [Melarikan diri dari kata kunci yang dicadangkan dalam kueri](reserved-words.md).

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_standard_logs (
     `date` DATE,
     time STRING,
     x_edge_location STRING,
     sc_bytes BIGINT,
     c_ip STRING,
     cs_method STRING,
     cs_host STRING,
     cs_uri_stem STRING,
     sc_status INT,
     cs_referrer STRING,
     cs_user_agent STRING,
     cs_uri_query STRING,
     cs_cookie STRING,
     x_edge_result_type STRING,
     x_edge_request_id STRING,
     x_host_header STRING,
     cs_protocol STRING,
     cs_bytes BIGINT,
     time_taken FLOAT,
     x_forwarded_for STRING,
     ssl_protocol STRING,
     ssl_cipher STRING,
     x_edge_response_result_type STRING,
     cs_protocol_version STRING,
     fle_status STRING,
     fle_encrypted_fields INT,
     c_port INT,
     time_to_first_byte FLOAT,
     x_edge_detailed_result_type STRING,
     sc_content_type STRING,
     sc_content_len BIGINT,
     sc_range_start BIGINT,
     sc_range_end BIGINT
   )
   ROW FORMAT DELIMITED 
   FIELDS TERMINATED BY '\t'
   LOCATION 's3://amzn-s3-demo-bucket/'
   TBLPROPERTIES ( 'skip.header.line.count'='2' )
   ```

1. Jalankan kueri di konsol Athena. Setelah kueri selesai, Athena register`cloudfront_standard_logs`tabel, membuat data di dalamnya siap bagi Anda untuk mengeluarkan kueri.

## Kueri contoh
<a name="query-examples-cloudfront-logs"></a>

Kueri berikut menambahkan jumlah byte yang dilayani CloudFront antara 9 Juni dan 11 Juni 2018. Mengelilingi nama kolom tanggal dengan tanda kutip ganda karena merupakan kata reserved.

```
SELECT SUM(bytes) AS total_bytes
FROM cloudfront_standard_logs
WHERE "date" BETWEEN DATE '2018-06-09' AND DATE '2018-06-11'
LIMIT 100;
```

Untuk menghilangkan duplikat baris (misalnya, duplikat baris kosong) dari hasil kueri, Anda dapat menggunakan`SELECT DISTINCT`pernyataan, seperti dalam contoh berikut. 

```
SELECT DISTINCT * 
FROM cloudfront_standard_logs 
LIMIT 10;
```

# Buat tabel untuk CloudFront log di Athena menggunakan partisi manual dengan JSON
<a name="create-cloudfront-table-manual-json"></a>

**Untuk membuat tabel untuk bidang file log CloudFront standar menggunakan format JSON**

1. Salin dan tempel contoh pernyataan DDL berikut ke Editor Kueri di konsol Athena. Pernyataan contoh menggunakan bidang file log yang didokumentasikan di bagian [bidang file log Standar](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html#BasicDistributionFileFormat) dari *Panduan CloudFront Pengembang Amazon*. Memodifikasi`LOCATION`untuk bucket Amazon S3 yang menyimpan log Anda. 

   Query ini menggunakan OpenX JSON SerDe dengan SerDe properti berikut untuk membaca bidang JSON dengan benar di Athena.

   ```
   CREATE EXTERNAL TABLE `cf_logs_manual_partition_json`(
     `date` string , 
     `time` string , 
     `x-edge-location` string , 
     `sc-bytes` string , 
     `c-ip` string , 
     `cs-method` string , 
     `cs(host)` string , 
     `cs-uri-stem` string , 
     `sc-status` string , 
     `cs(referer)` string , 
     `cs(user-agent)` string , 
     `cs-uri-query` string , 
     `cs(cookie)` string , 
     `x-edge-result-type` string , 
     `x-edge-request-id` string , 
     `x-host-header` string , 
     `cs-protocol` string , 
     `cs-bytes` string , 
     `time-taken` string , 
     `x-forwarded-for` string , 
     `ssl-protocol` string , 
     `ssl-cipher` string , 
     `x-edge-response-result-type` string , 
     `cs-protocol-version` string , 
     `fle-status` string , 
     `fle-encrypted-fields` string , 
     `c-port` string , 
     `time-to-first-byte` string , 
     `x-edge-detailed-result-type` string , 
     `sc-content-type` string , 
     `sc-content-len` string , 
     `sc-range-start` string , 
     `sc-range-end` string )
   ROW FORMAT SERDE 
     'org.openx.data.jsonserde.JsonSerDe' 
   WITH SERDEPROPERTIES ( 
     'paths'='c-ip,c-port,cs(Cookie),cs(Host),cs(Referer),cs(User-Agent),cs-bytes,cs-method,cs-protocol,cs-protocol-version,cs-uri-query,cs-uri-stem,date,fle-encrypted-fields,fle-status,sc-bytes,sc-content-len,sc-content-type,sc-range-end,sc-range-start,sc-status,ssl-cipher,ssl-protocol,time,time-taken,time-to-first-byte,x-edge-detailed-result-type,x-edge-location,x-edge-request-id,x-edge-response-result-type,x-edge-result-type,x-forwarded-for,x-host-header') 
   STORED AS INPUTFORMAT 
     'org.apache.hadoop.mapred.TextInputFormat' 
   OUTPUTFORMAT 
     'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION
     's3://amzn-s3-demo-bucket/'
   ```

1. Jalankan kueri di konsol Athena. Setelah kueri selesai, Athena register`cf_logs_manual_partition_json`tabel, membuat data di dalamnya siap bagi Anda untuk mengeluarkan kueri.

## Kueri contoh
<a name="query-examples-cloudfront-logs-manual-json"></a>

Kueri berikut menambahkan jumlah byte yang dilayani CloudFront untuk 15 Januari 2025.

```
SELECT sum(cast("sc-bytes" as BIGINT)) as sc
FROM cf_logs_manual_partition_json
WHERE "date"='2025-01-15'
```

Untuk menghilangkan duplikat baris (misalnya, duplikat baris kosong) dari hasil kueri, Anda dapat menggunakan`SELECT DISTINCT`pernyataan, seperti dalam contoh berikut. 

```
SELECT DISTINCT * FROM cf_logs_manual_partition_json
```

# Buat tabel untuk CloudFront log di Athena menggunakan partisi manual dengan Parket
<a name="create-cloudfront-table-manual-parquet"></a>

**Untuk membuat tabel untuk bidang file log CloudFront standar menggunakan format Parket**

1. Salin dan tempel contoh pernyataan DDL berikut ke Editor Kueri di konsol Athena. Pernyataan contoh menggunakan bidang file log yang didokumentasikan di bagian [bidang file log Standar](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html#BasicDistributionFileFormat) dari *Panduan CloudFront Pengembang Amazon*. 

   Kueri ini menggunakan ParquetHiveSerDe SerDe properti berikut untuk membaca bidang Parket dengan benar di Athena.

   ```
   CREATE EXTERNAL TABLE `cf_logs_manual_partition_parquet`(
     `date` string, 
     `time` string, 
     `x_edge_location` string, 
     `sc_bytes` string, 
     `c_ip` string, 
     `cs_method` string, 
     `cs_host` string, 
     `cs_uri_stem` string, 
     `sc_status` string, 
     `cs_referer` string, 
     `cs_user_agent` string, 
     `cs_uri_query` string, 
     `cs_cookie` string, 
     `x_edge_result_type` string, 
     `x_edge_request_id` string, 
     `x_host_header` string, 
     `cs_protocol` string, 
     `cs_bytes` string, 
     `time_taken` string, 
     `x_forwarded_for` string, 
     `ssl_protocol` string, 
     `ssl_cipher` string, 
     `x_edge_response_result_type` string, 
     `cs_protocol_version` string, 
     `fle_status` string, 
     `fle_encrypted_fields` string, 
     `c_port` string, 
     `time_to_first_byte` string, 
     `x_edge_detailed_result_type` string, 
     `sc_content_type` string, 
     `sc_content_len` string, 
     `sc_range_start` string, 
     `sc_range_end` string)
   ROW FORMAT SERDE 
     'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
   STORED AS INPUTFORMAT 
     'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
   OUTPUTFORMAT 
     'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
   LOCATION
     's3://amzn-s3-demo-bucket/'
   ```

1. Jalankan kueri di konsol Athena. Setelah kueri selesai, Athena register`cf_logs_manual_partition_parquet`tabel, membuat data di dalamnya siap bagi Anda untuk mengeluarkan kueri.

## Kueri contoh
<a name="query-examples-cloudfront-logs-manual-parquet"></a>

Kueri berikut menambahkan jumlah byte yang dilayani CloudFront untuk 19 Januari 2025.

```
SELECT sum(cast("sc_bytes" as BIGINT)) as sc
FROM cf_logs_manual_partition_parquet
WHERE "date"='2025-01-19'
```

Untuk menghilangkan duplikat baris (misalnya, duplikat baris kosong) dari hasil kueri, Anda dapat menggunakan`SELECT DISTINCT`pernyataan, seperti dalam contoh berikut. 

```
SELECT DISTINCT * FROM cf_logs_manual_partition_parquet
```

# Buat tabel untuk CloudFront log di Athena menggunakan proyeksi partisi dengan JSON
<a name="create-cloudfront-table-partition-json"></a>

Anda dapat mengurangi runtime kueri dan mengotomatiskan manajemen partisi dengan fitur proyeksi partisi Athena. Proyeksi partisi secara otomatis menambahkan partisi baru saat data baru ditambahkan. Ini menghapus kebutuhan bagi Anda untuk menambahkan partisi secara manual dengan menggunakan`ALTER TABLE ADD PARTITION`.

Contoh berikut CREATE TABLE pernyataan otomatis menggunakan proyeksi partisi pada CloudFront log dari CloudFront distribusi tertentu sampai hadir untuk satu Wilayah AWS. Setelah Anda menjalankan kueri dengan sukses, Anda dapat meminta tabel.

```
CREATE EXTERNAL TABLE `cloudfront_logs_pp`(
  `date` string, 
  `time` string, 
  `x-edge-location` string, 
  `sc-bytes` string, 
  `c-ip` string, 
  `cs-method` string, 
  `cs(host)` string, 
  `cs-uri-stem` string, 
  `sc-status` string, 
  `cs(referer)` string, 
  `cs(user-agent)` string, 
  `cs-uri-query` string, 
  `cs(cookie)` string, 
  `x-edge-result-type` string, 
  `x-edge-request-id` string, 
  `x-host-header` string, 
  `cs-protocol` string, 
  `cs-bytes` string, 
  `time-taken` string, 
  `x-forwarded-for` string, 
  `ssl-protocol` string, 
  `ssl-cipher` string, 
  `x-edge-response-result-type` string, 
  `cs-protocol-version` string, 
  `fle-status` string, 
  `fle-encrypted-fields` string, 
  `c-port` string, 
  `time-to-first-byte` string, 
  `x-edge-detailed-result-type` string, 
  `sc-content-type` string, 
  `sc-content-len` string, 
  `sc-range-start` string, 
  `sc-range-end` string)
  PARTITIONED BY(
         distributionid string,
         year int,
         month int,
         day int,
         hour int )
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ( 
  'paths'='c-ip,c-port,cs(Cookie),cs(Host),cs(Referer),cs(User-Agent),cs-bytes,cs-method,cs-protocol,cs-protocol-version,cs-uri-query,cs-uri-stem,date,fle-encrypted-fields,fle-status,sc-bytes,sc-content-len,sc-content-type,sc-range-end,sc-range-start,sc-status,ssl-cipher,ssl-protocol,time,time-taken,time-to-first-byte,x-edge-detailed-result-type,x-edge-location,x-edge-request-id,x-edge-response-result-type,x-edge-result-type,x-forwarded-for,x-host-header') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/CloudFront/'
TBLPROPERTIES (
  'projection.distributionid.type'='enum',
  'projection.distributionid.values'='E2Oxxxxxxxxxxx',
  'projection.day.range'='01,31', 
  'projection.day.type'='integer', 
  'projection.day.digits'='2', 
  'projection.enabled'='true', 
  'projection.month.range'='01,12', 
  'projection.month.type'='integer', 
  'projection.month.digits'='2', 
  'projection.year.range'='2025,2026', 
  'projection.year.type'='integer', 
  'projection.hour.range'='00,23',
  'projection.hour.type'='integer',
  'projection.hour.digits'='2',
  'storage.location.template'='s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/CloudFront/${distributionid}/${year}/${month}/${day}/${hour}/')
```

Berikut ini adalah beberapa pertimbangan untuk properti yang digunakan dalam contoh sebelumnya.
+ **Nama tabel** - Nama *`cloudfront_logs_pp`* tabel dapat diganti. Anda dapat mengubahnya menjadi nama apa pun yang Anda inginkan.
+ **Lokasi** - Ubah `s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/` untuk menunjuk ke bucket Amazon S3 Anda.
+ **Distribusi IDs** — Untuk`projection.distributionid.values`, Anda dapat menentukan beberapa distribusi IDs jika Anda memisahkannya dengan koma. Misalnya,*<distributionID1>*,*<distributionID2>*.
+ **Rentang tahun** — Dalam`projection.year.range`, Anda dapat menentukan rentang tahun berdasarkan data Anda. Misalnya, Anda dapat menyesuaikannya dengan periode apa pun, seperti *2025, *2026**.
**catatan**  
Menyertakan partisi kosong, seperti partisi untuk masa depan (contoh: 2025-2040), dapat memengaruhi kinerja kueri. Namun, proyeksi partisi dirancang untuk menangani tanggal masa depan secara efektif. Untuk mempertahankan kinerja optimal, pastikan partisi dikelola dengan cermat dan hindari partisi kosong yang berlebihan bila memungkinkan.
+ **Template lokasi penyimpanan** - Anda harus memastikan untuk memperbarui `storage.location.template` dengan benar berdasarkan struktur CloudFront partisi berikut dan jalur S3.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/athena/latest/ug/create-cloudfront-table-partition-json.html)

  Setelah Anda mengonfirmasi bahwa struktur CloudFront partisi dan struktur S3 cocok dengan pola yang diperlukan, perbarui sebagai berikut`storage.location.template`:

  ```
  'storage.location.template'='s3://amzn-s3-demo-bucket/AWSLogs/account_id/CloudFront/${distributionid}/folder2/${year}/${month}/${day}/${hour}/folder3/'
  ```
**catatan**  
Konfigurasi yang tepat `storage.location.template` sangat penting untuk memastikan penyimpanan dan pengambilan data yang benar.

# Buat tabel untuk CloudFront log di Athena menggunakan proyeksi partisi dengan Parket
<a name="create-cloudfront-table-partition-parquet"></a>

Contoh berikut CREATE TABLE pernyataan otomatis menggunakan proyeksi partisi pada CloudFront log di Parket, dari CloudFront distribusi tertentu sampai hadir untuk satu. Wilayah AWS Setelah Anda menjalankan kueri dengan sukses, Anda dapat meminta tabel.

```
CREATE EXTERNAL TABLE `cloudfront_logs_parquet_pp`(
`date` string, 
`time` string, 
`x_edge_location` string, 
`sc_bytes` string, 
`c_ip` string, 
`cs_method` string, 
`cs_host` string, 
`cs_uri_stem` string, 
`sc_status` string, 
`cs_referer` string, 
`cs_user_agent` string, 
`cs_uri_query` string, 
`cs_cookie` string, 
`x_edge_result_type` string, 
`x_edge_request_id` string, 
`x_host_header` string, 
`cs_protocol` string, 
`cs_bytes` string, 
`time_taken` string, 
`x_forwarded_for` string, 
`ssl_protocol` string, 
`ssl_cipher` string, 
`x_edge_response_result_type` string, 
`cs_protocol_version` string, 
`fle_status` string, 
`fle_encrypted_fields` string, 
`c_port` string, 
`time_to_first_byte` string, 
`x_edge_detailed_result_type` string, 
`sc_content_type` string, 
`sc_content_len` string, 
`sc_range_start` string, 
`sc_range_end` string)
PARTITIONED BY(
 distributionid string,
 year int,
 month int,
 day int,
 hour int )
ROW FORMAT SERDE 
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
's3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/CloudFront/'
TBLPROPERTIES (
'projection.distributionid.type'='enum',
'projection.distributionid.values'='E3OK0LPUNWWO3',
'projection.day.range'='01,31',
'projection.day.type'='integer',
'projection.day.digits'='2',
'projection.enabled'='true',
'projection.month.range'='01,12',
'projection.month.type'='integer',
'projection.month.digits'='2',
'projection.year.range'='2019,2025',
'projection.year.type'='integer',
'projection.hour.range'='01,12',
'projection.hour.type'='integer',
'projection.hour.digits'='2',
'storage.location.template'='s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/CloudFront/${distributionid}/${year}/${month}/${day}/${hour}/')
```

Berikut ini adalah beberapa pertimbangan untuk properti yang digunakan dalam contoh sebelumnya.
+ **Nama tabel** - Nama *`cloudfront_logs_pp`* tabel dapat diganti. Anda dapat mengubahnya menjadi nama apa pun yang Anda inginkan.
+ **Lokasi** - Ubah `s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/` untuk menunjuk ke bucket Amazon S3 Anda.
+ **Distribusi IDs** — Untuk`projection.distributionid.values`, Anda dapat menentukan beberapa distribusi IDs jika Anda memisahkannya dengan koma. Misalnya,*<distributionID1>*,*<distributionID2>*.
+ **Rentang tahun** — Dalam`projection.year.range`, Anda dapat menentukan rentang tahun berdasarkan data Anda. Misalnya, Anda dapat menyesuaikannya dengan periode apa pun, seperti *2025, *2026**.
**catatan**  
Menyertakan partisi kosong, seperti partisi untuk masa depan (contoh: 2025-2040), dapat memengaruhi kinerja kueri. Namun, proyeksi partisi dirancang untuk menangani tanggal masa depan secara efektif. Untuk mempertahankan kinerja optimal, pastikan partisi dikelola dengan cermat dan hindari partisi kosong yang berlebihan bila memungkinkan.
+ **Template lokasi penyimpanan** - Anda harus memastikan untuk memperbarui `storage.location.template` dengan benar berdasarkan struktur CloudFront partisi berikut dan jalur S3.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/athena/latest/ug/create-cloudfront-table-partition-parquet.html)

  Setelah Anda mengonfirmasi bahwa struktur CloudFront partisi dan struktur S3 cocok dengan pola yang diperlukan, perbarui sebagai berikut`storage.location.template`:

  ```
  'storage.location.template'='s3://amzn-s3-demo-bucket/AWSLogs/account_id/CloudFront/${distributionid}/folder2/${year}/${month}/${day}/${hour}/folder3/'
  ```
**catatan**  
Konfigurasi yang tepat `storage.location.template` sangat penting untuk memastikan penyimpanan dan pengambilan data yang benar.

# Buat tabel untuk log CloudFront waktu nyata
<a name="create-cloudfront-table-real-time-logs"></a>

**Untuk membuat tabel untuk bidang file log CloudFront real-time**

1. Salin dan tempel contoh pernyataan DDL berikut ke Editor Kueri di konsol Athena. Pernyataan contoh menggunakan bidang file log yang didokumentasikan di bagian [log Real-time](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/real-time-logs.html) dari *Panduan CloudFront Pengembang Amazon*. Memodifikasi`LOCATION`untuk bucket Amazon S3 yang menyimpan log Anda. Untuk informasi selengkapnya, lihat [Memulai](getting-started.md) Penggunaan editor kueri untuk

   Kueri ini menentukan `ROW FORMAT DELIMITED` dan `FIELDS TERMINATED BY '\t'` untuk menunjukkan bahwa bidang dibatasi oleh karakter tab. Untuk`ROW FORMAT DELIMITED`, Athena menggunakan secara [LazySimpleSerDe](lazy-simple-serde.md)default. Kolom`timestamp`melarikan diri menggunakan backticks (`) karena itu adalah kata reserved di Athena. Untuk informasi, lihat [Melarikan diri dari kata kunci yang dicadangkan dalam kueri](reserved-words.md).

   Contoh berikut berisi semua bidang yang tersedia. Anda dapat mengomentari atau menghapus bidang yang tidak Anda perlukan.

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_real_time_logs ( 
   `timestamp` STRING,
   c_ip STRING,
   time_to_first_byte BIGINT,
   sc_status BIGINT,
   sc_bytes BIGINT,
   cs_method STRING,
   cs_protocol STRING,
   cs_host STRING,
   cs_uri_stem STRING,
   cs_bytes BIGINT,
   x_edge_location STRING,
   x_edge_request_id STRING,
   x_host_header STRING,
   time_taken BIGINT,
   cs_protocol_version STRING,
   c_ip_version STRING,
   cs_user_agent STRING,
   cs_referer STRING,
   cs_cookie STRING,
   cs_uri_query STRING,
   x_edge_response_result_type STRING,
   x_forwarded_for STRING,
   ssl_protocol STRING,
   ssl_cipher STRING,
   x_edge_result_type STRING,
   fle_encrypted_fields STRING,
   fle_status STRING,
   sc_content_type STRING,
   sc_content_len BIGINT,
   sc_range_start STRING,
   sc_range_end STRING,
   c_port BIGINT,
   x_edge_detailed_result_type STRING,
   c_country STRING,
   cs_accept_encoding STRING,
   cs_accept STRING,
   cache_behavior_path_pattern STRING,
   cs_headers STRING,
   cs_header_names STRING,
   cs_headers_count BIGINT,
   primary_distribution_id STRING,
   primary_distribution_dns_name STRING,
   origin_fbl STRING,
   origin_lbl STRING,
   asn STRING
   )
   ROW FORMAT DELIMITED 
   FIELDS TERMINATED BY '\t'
   LOCATION 's3://amzn-s3-demo-bucket/'
   TBLPROPERTIES ( 'skip.header.line.count'='2' )
   ```

1. Jalankan kueri di konsol Athena. Setelah kueri selesai, Athena register`cloudfront_real_time_logs`tabel, membuat data di dalamnya siap bagi Anda untuk mengeluarkan kueri.

# Sumber daya tambahan
<a name="cloudfront-logs-additional-resources"></a>

Untuk informasi lebih lanjut tentang menggunakan Athena untuk menanyakan CloudFront log, lihat posting berikut dari blog [data AWS besar](https://aws.amazon.com/blogs/big-data/).

[Kueri Layanan AWS log dengan mudah menggunakan Amazon Athena](https://aws.amazon.com/blogs/big-data/easily-query-aws-service-logs-using-amazon-athena/) (29 Mei 2019).

[Analisis log CloudFront akses Amazon Anda dalam skala besar](https://aws.amazon.com/blogs/big-data/analyze-your-amazon-cloudfront-access-logs-at-scale/) (21 Desember 2018).

[Bangun arsitektur tanpa server untuk menganalisis log CloudFront akses Amazon menggunakan AWS Lambda, Amazon Athena, dan Amazon Managed Service untuk Apache](https://aws.amazon.com/blogs/big-data/build-a-serverless-architecture-to-analyze-amazon-cloudfront-access-logs-using-aws-lambda-amazon-athena-and-amazon-kinesis-analytics/) Flink (26 Mei 2017).

# AWS CloudTrail Log kueri
<a name="cloudtrail-logs"></a>

AWS CloudTrail adalah layanan yang merekam panggilan AWS API dan peristiwa untuk akun Amazon Web Services. 

CloudTrail log menyertakan detail tentang panggilan API apa pun yang dilakukan ke Anda Layanan AWS, termasuk konsol. CloudTrail menghasilkan file log terenkripsi dan menyimpannya di Amazon S3. Untuk informasi selengkapnya, silakan lihat [Panduan Pengguna AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html). 

**catatan**  
Jika Anda ingin melakukan kueri SQL pada informasi CloudTrail acara di seluruh akun, wilayah, dan tanggal, pertimbangkan untuk menggunakan CloudTrail Lake. CloudTrail Lake adalah AWS alternatif untuk membuat jalur yang mengumpulkan informasi dari suatu perusahaan ke dalam satu penyimpanan data peristiwa yang dapat dicari. Alih-alih menggunakan penyimpanan bucket Amazon S3, ia menyimpan peristiwa di danau data, yang memungkinkan kueri yang lebih kaya dan lebih cepat. Anda dapat menggunakannya untuk membuat kueri SQL yang mencari peristiwa di seluruh organisasi, wilayah, dan dalam rentang waktu khusus. Karena Anda melakukan kueri CloudTrail Danau di dalam CloudTrail konsol itu sendiri, menggunakan CloudTrail Lake tidak memerlukan Athena. Untuk informasi lebih lanjut, lihat dokumentasi [CloudTrail Danau](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html).

Menggunakan Athena dengan CloudTrail log adalah cara ampuh untuk meningkatkan analisis aktivitas Anda. Layanan AWS Misalnya, Anda dapat menggunakan kueri untuk mengidentifikasi tren dan mengisolasi aktivitas selengkapnya berdasarkan atribut seperti alamat IP sumber atau pengguna.

Aplikasi umum adalah menggunakan CloudTrail log untuk menganalisis aktivitas operasional untuk keamanan dan kepatuhan. Untuk informasi tentang contoh terperinci, lihat posting Blog AWS Big Data, [Menganalisis keamanan, kepatuhan, dan aktivitas operasional menggunakan AWS CloudTrail dan Amazon Athena](https://aws.amazon.com/blogs/big-data/aws-cloudtrail-and-amazon-athena-dive-deep-to-analyze-security-compliance-and-operational-activity/).

Anda dapat menggunakan Athena untuk mengkueri berkas log ini langsung dari Amazon S3, menentukan`LOCATION`Berkas log. Anda dapat melakukannya dengan salah satu dari dua cara berikut:
+ Dengan membuat tabel untuk file CloudTrail log langsung dari CloudTrail konsol.
+ Dengan membuat tabel secara manual untuk file CloudTrail log di konsol Athena.

**Topics**
+ [Memahami CloudTrail log dan tabel Athena](create-cloudtrail-table-understanding.md)
+ [Gunakan CloudTrail konsol untuk membuat tabel Athena untuk log CloudTrail](create-cloudtrail-table-ct.md)
+ [Buat tabel untuk CloudTrail log di Athena menggunakan partisi manual](create-cloudtrail-table.md)
+ [Buat tabel untuk jejak luas organisasi menggunakan partisi manual](create-cloudtrail-table-org-wide-trail.md)
+ [Buat tabel untuk CloudTrail log di Athena menggunakan proyeksi partisi](create-cloudtrail-table-partition-projection.md)
+ [Contoh kueri CloudTrail log](query-examples-cloudtrail-logs.md)

# Memahami CloudTrail log dan tabel Athena
<a name="create-cloudtrail-table-understanding"></a>

Sebelum Anda mulai membuat tabel, Anda harus memahami sedikit lebih banyak tentang CloudTrail dan bagaimana menyimpan data. Ini dapat membantu Anda membuat tabel yang Anda butuhkan, apakah Anda membuatnya dari CloudTrail konsol atau dari Athena.

CloudTrail menyimpan log sebagai file teks JSON dalam format gzip terkompresi (). `*.json.gz` Lokasi file log tergantung pada cara Anda mengatur jejak, Wilayah AWS atau Wilayah tempat Anda masuk, dan faktor lainnya. 

Untuk informasi selengkapnya tentang tempat log disimpan, struktur JSON, dan isi file catatan, lihat topik berikut di[AWS CloudTrail Panduan Pengguna](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html):
+  [Menemukan file CloudTrail log Anda](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-find-log-files.html) 
+  [CloudTrail Contoh File Log](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-log-file-examples.html) 
+  [CloudTrail isi rekam](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html)
+  [CloudTrail referensi acara](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference.html) 

Untuk mengumpulkan log dan menyimpannya ke Amazon S3, aktifkan CloudTrail dari file. Konsol Manajemen AWS Untuk informasi selengkapnya, lihat [Membuat jejak](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-a-trail-using-the-console-first-time.html) di *Panduan AWS CloudTrail Pengguna*.

# Gunakan CloudTrail konsol untuk membuat tabel Athena untuk log CloudTrail
<a name="create-cloudtrail-table-ct"></a>

Anda dapat membuat tabel Athena yang tidak dipartisi untuk CloudTrail menanyakan log langsung dari konsol. CloudTrail Membuat tabel Athena dari CloudTrail konsol mengharuskan Anda masuk dengan peran yang memiliki izin yang cukup untuk membuat tabel di Athena.

**catatan**  
Anda tidak dapat menggunakan CloudTrail konsol untuk membuat tabel Athena untuk log jejak organisasi. Sebaliknya, buat tabel secara manual menggunakan konsol Athena sehingga Anda dapat menentukan lokasi penyimpanan yang benar. Untuk informasi tentang jalur organisasi, lihat[Membuat jejak untuk organisasi](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-trail-organization.html)di*AWS CloudTrail Panduan Pengguna*.
+ Untuk informasi tentang pengaturan izin untuk Athena, lihat[Menyiapkan, administratif, dan akses terprogram](setting-up.md).
+ Untuk informasi tentang membuat tabel dengan partisi, lihat[Buat tabel untuk CloudTrail log di Athena menggunakan partisi manual](create-cloudtrail-table.md).

**Untuk membuat tabel Athena untuk CloudTrail jejak menggunakan konsol CloudTrail**

1. Buka CloudTrail konsol di [https://console.aws.amazon.com/cloudtrail/](https://console.aws.amazon.com/cloudtrail/).

1. Pada panel navigasi, pilih **Riwayat peristiwa**. 

1. Pilih**Membuat tabel Athena**.  
![\[PilihMembuat tabel Athena\]](http://docs.aws.amazon.com/id_id/athena/latest/ug/images/cloudtrail-logs-create-athena-table.png)

1. Untuk**Lokasi penyimpanan**, gunakan panah bawah untuk memilih bucket Amazon S3 tempat berkas log disimpan untuk jejak untuk mengkueri.
**catatan**  
Untuk menemukan nama bucket yang dikaitkan dengan jejak, pilih **Trails** di panel CloudTrail navigasi dan lihat kolom bucket **S3** trail. Untuk melihat lokasi Amazon S3 untuk bucket, pilih tautan untuk bucket di**Bucket S3**kolom. Ini membuka konsol Amazon S3 ke lokasi CloudTrail bucket. 

1. Pilih **Buat tabel**. Tabel dibuat dengan nama default yang mencakup nama bucket Amazon S3.

# Buat tabel untuk CloudTrail log di Athena menggunakan partisi manual
<a name="create-cloudtrail-table"></a>

Anda dapat secara manual membuat tabel untuk file CloudTrail log di konsol Athena, dan kemudian menjalankan kueri di Athena.

**Untuk membuat tabel Athena untuk CloudTrail jejak menggunakan konsol Athena**

1. Salin dan tempel pernyataan DDL berikut ke editor kueri konsol Athena, lalu modifikasi sesuai dengan kebutuhan Anda. Perhatikan bahwa karena file CloudTrail log bukan merupakan jejak tumpukan terurut dari panggilan API publik, bidang dalam file log tidak muncul dalam urutan tertentu.

   ```
   CREATE EXTERNAL TABLE cloudtrail_logs (
   eventversion STRING,
   useridentity STRUCT<
                  type:STRING,
                  principalid:STRING,
                  arn:STRING,
                  accountid:STRING,
                  invokedby:STRING,
                  accesskeyid:STRING,
                  username:STRING,
                  onbehalfof: STRUCT<
                       userid: STRING,
                       identitystorearn: STRING>,
     sessioncontext:STRUCT<
       attributes:STRUCT<
                  mfaauthenticated:STRING,
                  creationdate:STRING>,
       sessionissuer:STRUCT<  
                  type:STRING,
                  principalid:STRING,
                  arn:STRING, 
                  accountid:STRING,
                  username:STRING>,
       ec2roledelivery:string,
       webidfederationdata: STRUCT<
                  federatedprovider: STRING,
                  attributes: map<string,string>>
     >
   >,
   eventtime STRING,
   eventsource STRING,
   eventname STRING,
   awsregion STRING,
   sourceipaddress STRING,
   useragent STRING,
   errorcode STRING,
   errormessage STRING,
   requestparameters STRING,
   responseelements STRING,
   additionaleventdata STRING,
   requestid STRING,
   eventid STRING,
   resources ARRAY<STRUCT<
                  arn:STRING,
                  accountid:STRING,
                  type:STRING>>,
   eventtype STRING,
   apiversion STRING,
   readonly STRING,
   recipientaccountid STRING,
   serviceeventdetails STRING,
   sharedeventid STRING,
   vpcendpointid STRING,
   vpcendpointaccountid STRING,
   eventcategory STRING,
   addendum STRUCT<
     reason:STRING,
     updatedfields:STRING,
     originalrequestid:STRING,
     originaleventid:STRING>,
   sessioncredentialfromconsole STRING,
   edgedevicedetails STRING,
   tlsdetails STRUCT<
     tlsversion:STRING,
     ciphersuite:STRING,
     clientprovidedhostheader:STRING>
   )
   PARTITIONED BY (region string, year string, month string, day string)
   ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
   STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
   OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/Account_ID/';
   ```
**catatan**  
Kami menyarankan menggunakan yang `org.apache.hive.hcatalog.data.JsonSerDe` ditunjukkan dalam contoh. Meskipun `com.amazon.emr.hive.serde.CloudTrailSerde` ada, saat ini tidak menangani beberapa CloudTrail bidang yang lebih baru. 

1. (Opsional) Hapus semua bidang yang tidak diperlukan untuk tabel Anda. Jika Anda hanya perlu membaca satu set kolom tertentu, definisi tabel Anda dapat mengecualikan kolom lainnya.

1. Ubah `s3://amzn-s3-demo-bucket/AWSLogs/Account_ID/` untuk menunjuk ke bucket Amazon S3 yang berisi data log yang ingin Anda kueri. Contoh menggunakan`LOCATION`nilai log untuk akun tertentu, tetapi Anda dapat menggunakan level kekhususan yang sesuai dengan aplikasi Anda. Contoh:
   + Untuk menganalisis data dari beberapa akun, Anda dapat memutar kembali`LOCATION`specifier untuk menunjukkan semua`AWSLogs`dengan menggunakan`LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/'`.
   + Untuk menganalisis data dari tanggal, akun, dan Wilayah tertentu, gunakan`LOCATION 's3://amzn-s3-demo-bucket/123456789012/CloudTrail/us-east-1/2016/03/14/'.` 
   + Untuk menganalisis data aktivitas jaringan alih-alih peristiwa manajemen, ganti `/CloudTrail/` dalam `LOCATION` klausa dengan`/CloudTrail-NetworkActivity/`. 

   Menggunakan level tertinggi dalam hirarki objek memberikan fleksibilitas terbesar saat Anda kueri menggunakan Athena.

1. Verifikasi bahwa bidang terdaftar dengan benar. Untuk informasi selengkapnya tentang daftar lengkap bidang dalam CloudTrail catatan, lihat [konten CloudTrail rekaman](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html).

   `CREATE TABLE`Pernyataan contoh di Langkah 1 menggunakan[Sarang JSON SerDe](hive-json-serde.md). Dalam contoh, bidang, `requestparameters``responseelements`, dan `additionaleventdata` terdaftar sebagai tipe `STRING` dalam kueri, tetapi tipe `STRUCT` data yang digunakan dalam JSON. Oleh karena itu, untuk mendapatkan data dari bidang ini, gunakan`JSON_EXTRACT`fungsi. Untuk informasi selengkapnya, lihat [Ekstrak data JSON dari string](extracting-data-from-JSON.md). Untuk peningkatan kinerja, contoh mempartisi data berdasarkan Wilayah AWS, tahun, bulan, dan hari.

1. Jalankan `CREATE TABLE` pernyataan di konsol Athena.

1. Menggunakan[ALTER TABLE ADD PARTITION](alter-table-add-partition.md)perintah untuk memuat partisi sehingga Anda dapat meminta mereka, seperti dalam contoh berikut.

   ```
   ALTER TABLE table_name ADD 
      PARTITION (region='us-east-1',
                 year='2019',
                 month='02',
                 day='01')
      LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/Account_ID/CloudTrail/us-east-1/2019/02/01/'
   ```

# Buat tabel untuk jejak luas organisasi menggunakan partisi manual
<a name="create-cloudtrail-table-org-wide-trail"></a>

Untuk membuat tabel untuk file CloudTrail log luas organisasi di Athena, ikuti langkah-langkahnya[Buat tabel untuk CloudTrail log di Athena menggunakan partisi manual](create-cloudtrail-table.md), tetapi buat modifikasi yang dicatat dalam prosedur berikut.

**Untuk membuat tabel Athena untuk log lebar organisasi CloudTrail**

1. Dalam `CREATE TABLE` pernyataan tersebut, ubah `LOCATION` klausa untuk menyertakan ID organisasi, seperti pada contoh berikut:

   ```
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/organization_id/'
   ```

1. Dalam `PARTITIONED BY` klausa, tambahkan entri untuk ID akun sebagai string, seperti pada contoh berikut:

   ```
   PARTITIONED BY (account string, region string, year string, month string, day string)
   ```

   Contoh berikut menunjukkan hasil gabungan:

   ```
   ...
   
   PARTITIONED BY (account string, region string, year string, month string, day string) 
   ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
   STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
   OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/organization_id/Account_ID/CloudTrail/'
   ```

1. Dalam `ADD PARTITION` klausa `ALTER TABLE` pernyataan, sertakan ID akun, seperti pada contoh berikut:

   ```
   ALTER TABLE table_name ADD
   PARTITION (account='111122223333',
   region='us-east-1',
   year='2022',
   month='08',
   day='08')
   ```

1. Dalam `LOCATION` klausa `ALTER TABLE` pernyataan, sertakan ID organisasi, ID akun, dan partisi yang ingin Anda tambahkan, seperti pada contoh berikut:

   ```
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/organization_id/Account_ID/CloudTrail/us-east-1/2022/08/08/'
   ```

   `ALTER TABLE`Pernyataan contoh berikut menunjukkan hasil gabungan:

   ```
   ALTER TABLE table_name ADD
   PARTITION (account='111122223333',
   region='us-east-1',
   year='2022',
   month='08',
   day='08')
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/organization_id/111122223333/CloudTrail/us-east-1/2022/08/08/'
   ```

Perhatikan bahwa, dalam organisasi besar, menggunakan metode ini untuk menambahkan dan memelihara partisi secara manual untuk setiap ID akun organisasi dapat menjadi rumit. Dalam skenario seperti itu, pertimbangkan untuk menggunakan CloudTrail Danau daripada Athena. CloudTrail Danau dalam skenario seperti itu menawarkan keuntungan sebagai berikut:
+ Secara otomatis menggabungkan log di seluruh organisasi
+ Tidak memerlukan pengaturan atau pemeliharaan partisi atau meja Athena
+ Kueri dijalankan langsung di konsol CloudTrail 
+ Menggunakan bahasa kueri yang kompatibel dengan SQL

Untuk informasi selengkapnya, lihat [Bekerja dengan AWS CloudTrail Danau](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html) di *Panduan AWS CloudTrail Pengguna*. 

# Buat tabel untuk CloudTrail log di Athena menggunakan proyeksi partisi
<a name="create-cloudtrail-table-partition-projection"></a>

Karena CloudTrail log memiliki struktur yang diketahui yang skema partisi dapat Anda tentukan sebelumnya, Anda dapat mengurangi runtime kueri dan mengotomatiskan manajemen partisi dengan menggunakan fitur proyeksi partisi Athena. Proyeksi partisi secara otomatis menambahkan partisi baru saat data baru ditambahkan. Ini menghapus kebutuhan bagi Anda untuk menambahkan partisi secara manual dengan menggunakan`ALTER TABLE ADD PARTITION`. 

`CREATE TABLE`Pernyataan contoh berikut secara otomatis menggunakan proyeksi partisi pada CloudTrail log dari tanggal tertentu hingga saat ini untuk satu Wilayah AWS. Dalam `storage.location.template` klausa `LOCATION` and, ganti, *bucket**account-id*, dan *aws-region* placeholder dengan nilai yang identik. Untuk`projection.timestamp.range`, ganti *2020**01*//*01*dengan tanggal mulai yang ingin Anda gunakan. Setelah Anda menjalankan kueri dengan sukses, Anda dapat meminta tabel. Anda tidak perlu menjalankan `ALTER TABLE ADD PARTITION` untuk memuat partisi.

```
CREATE EXTERNAL TABLE cloudtrail_logs_pp(
    eventversion STRING,
    useridentity STRUCT<
        type: STRING,
        principalid: STRING,
        arn: STRING,
        accountid: STRING,
        invokedby: STRING,
        accesskeyid: STRING,
        username: STRING,
        onbehalfof: STRUCT<
             userid: STRING,
             identitystorearn: STRING>,
        sessioncontext: STRUCT<
            attributes: STRUCT<
                mfaauthenticated: STRING,
                creationdate: STRING>,
            sessionissuer: STRUCT<
                type: STRING,
                principalid: STRING,
                arn: STRING,
                accountid: STRING,
                username: STRING>,
            ec2roledelivery:string,
            webidfederationdata: STRUCT<
                federatedprovider: STRING,
                attributes: map<string,string>>
        >
    >,
    eventtime STRING,
    eventsource STRING,
    eventname STRING,
    awsregion STRING,
    sourceipaddress STRING,
    useragent STRING,
    errorcode STRING,
    errormessage STRING,
    requestparameters STRING,
    responseelements STRING,
    additionaleventdata STRING,
    requestid STRING,
    eventid STRING,
    readonly STRING,
    resources ARRAY<STRUCT<
        arn: STRING,
        accountid: STRING,
        type: STRING>>,
    eventtype STRING,
    apiversion STRING,
    recipientaccountid STRING,
    serviceeventdetails STRING,
    sharedeventid STRING,
    vpcendpointid STRING,
    vpcendpointaccountid STRING,
    eventcategory STRING,
    addendum STRUCT<
      reason:STRING,
      updatedfields:STRING,
      originalrequestid:STRING,
      originaleventid:STRING>,
    sessioncredentialfromconsole STRING,
    edgedevicedetails STRING,
    tlsdetails STRUCT<
      tlsversion:STRING,
      ciphersuite:STRING,
      clientprovidedhostheader:STRING>
  )
PARTITIONED BY (
   `timestamp` string)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://amzn-s3-demo-bucket/AWSLogs/account-id/CloudTrail/aws-region'
TBLPROPERTIES (
  'projection.enabled'='true', 
  'projection.timestamp.format'='yyyy/MM/dd', 
  'projection.timestamp.interval'='1', 
  'projection.timestamp.interval.unit'='DAYS', 
  'projection.timestamp.range'='2020/01/01,NOW', 
  'projection.timestamp.type'='date', 
  'storage.location.template'='s3://amzn-s3-demo-bucket/AWSLogs/account-id/CloudTrail/aws-region/${timestamp}')
```

Untuk informasi selengkapnya tentang proyek partisi, lihat [Gunakan proyeksi partisi dengan Amazon Athena](partition-projection.md).

# Contoh kueri CloudTrail log
<a name="query-examples-cloudtrail-logs"></a>

Contoh berikut menunjukkan sebagian kueri yang mengembalikan semua permintaan anonim (tidak ditandatangani) dari tabel yang dibuat untuk log CloudTrail peristiwa. Kueri ini memilih permintaan tersebut tempat`useridentity.accountid`adalah anonim, dan`useridentity.arn`tidak ditentukan:

```
SELECT *
FROM cloudtrail_logs
WHERE 
    eventsource = 's3.amazonaws.com' AND 
    eventname in ('GetObject') AND 
    useridentity.accountid = 'anonymous' AND 
    useridentity.arn IS NULL AND
    requestparameters LIKE '%[your bucket name ]%';
```

Untuk informasi selengkapnya, lihat posting blog AWS Big Data [Menganalisis keamanan, kepatuhan, dan aktivitas operasional menggunakan AWS CloudTrail Amazon Athena](https://aws.amazon.com/blogs/big-data/aws-cloudtrail-and-amazon-athena-dive-deep-to-analyze-security-compliance-and-operational-activity/).

## Kueri bidang bersarang di log CloudTrail
<a name="cloudtrail-logs-nested-fields"></a>

Karena`userIdentity`dan`resources`adalah tipe data Nest, kueri mereka memerlukan perlakuan khusus.

Parameter`userIdentity`objek terdiri dari bersarang`STRUCT`jenis. Ini dapat bertanya menggunakan titik untuk memisahkan bidang, seperti dalam contoh berikut:

```
SELECT 
    eventsource, 
    eventname,
    useridentity.sessioncontext.attributes.creationdate,
    useridentity.sessioncontext.sessionissuer.arn
FROM cloudtrail_logs
WHERE useridentity.sessioncontext.sessionissuer.arn IS NOT NULL
ORDER BY eventsource, eventname
LIMIT 10
```

Parameter`resources`bidang adalah sebuah larik dari`STRUCT`objek. Untuk larik ini, gunakan`CROSS JOIN UNNEST`untuk unnest larik sehingga Anda dapat mengkueri objeknya.

Contoh berikut mengembalikan semua baris tempat sumber daya ARN berakhir di`example/datafile.txt`. Untuk dibaca,[mengganti](https://prestodb.io/docs/current/functions/string.html#replace)fungsi menghapus awal`arn:aws:s3:::`substring dari ARN.

```
SELECT 
    awsregion,
    replace(unnested.resources_entry.ARN,'arn:aws:s3:::') as s3_resource,
    eventname,
    eventtime,
    useragent
FROM cloudtrail_logs t
CROSS JOIN UNNEST(t.resources) unnested (resources_entry)
WHERE unnested.resources_entry.ARN LIKE '%example/datafile.txt'
ORDER BY eventtime
```

Contoh kueri berikut untuk`DeleteBucket`peristiwa. Kueri mengekstraksi nama bucket dan ID akun yang bucket milik`resources`objek.

```
SELECT 
    awsregion,
    replace(unnested.resources_entry.ARN,'arn:aws:s3:::') as deleted_bucket,
    eventtime AS time_deleted,
    useridentity.username, 
    unnested.resources_entry.accountid as bucket_acct_id 
FROM cloudtrail_logs t
CROSS JOIN UNNEST(t.resources) unnested (resources_entry)
WHERE eventname = 'DeleteBucket'
ORDER BY eventtime
```

Untuk informasi selengkapnya tentang unnesting, lihat[Filter array](filtering-arrays.md).

## Kiat untuk menanyakan log CloudTrail
<a name="tips-for-querying-cloudtrail-logs"></a>

Pertimbangkan hal berikut saat menjelajahi data CloudTrail log:
+ Sebelum kueri log, verifikasi bahwa tabel log Anda terlihat sama dengan yang di[Buat tabel untuk CloudTrail log di Athena menggunakan partisi manual](create-cloudtrail-table.md). Jika tidak tabel pertama, menghapus tabel yang ada menggunakan perintah berikut:`DROP TABLE cloudtrail_logs`.
+ Setelah Anda drop tabel yang ada, kembali membuat itu. Untuk informasi selengkapnya, lihat [Buat tabel untuk CloudTrail log di Athena menggunakan partisi manual](create-cloudtrail-table.md).

  Verifikasi bahwa bidang dalam permintaan Athena Anda terdaftar dengan benar. Untuk informasi tentang daftar lengkap bidang dalam CloudTrail catatan, lihat [konten CloudTrail rekaman](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html). 

  Jika kueri Anda termasuk bidang dalam format JSON, seperti`STRUCT`, ekstrak data dari JSON. Untuk informasi selengkapnya, lihat [Ekstrak data JSON dari string](extracting-data-from-JSON.md). 

  Beberapa saran untuk mengeluarkan kueri terhadap tabel Anda CloudTrail :
+ Mulailah dengan melihat pengguna mana yang memanggil operasi API mana dan dari alamat IP sumber mana.
+ Gunakan kueri SQL dasar berikut sebagai templat Anda. Tempelkan kueri ke konsol Athena dan jalankannya.

  ```
  SELECT
   useridentity.arn,
   eventname,
   sourceipaddress,
   eventtime
  FROM cloudtrail_logs
  LIMIT 100;
  ```
+ Ubah kueri untuk mengeksplorasi data Anda lebih lanjut.
+ Untuk meningkatkan performa, sertakan`LIMIT`klausa untuk mengembalikan subset tertentu dari baris.

# Kueri log EMR Amazon
<a name="emr-logs"></a>

Amazon EMR dan aplikasi big data yang berjalan di Amazon EMR menghasilkan berkas log. File log ditulis ke [simpul utama](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-master-core-task-nodes.html), dan Anda juga dapat mengonfigurasi Amazon EMR untuk mengarsipkan file log ke Amazon S3 secara otomatis. Anda dapat menggunakan Amazon Athena untuk mengkueri log ini untuk mengidentifikasi peristiwa dan tren untuk aplikasi dan cluster. Untuk informasi selengkapnya tentang jenis file log di Amazon EMR dan menyimpannya ke Amazon S3, [lihat Melihat file log](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-view-web-log-files.html) di Panduan Manajemen *EMR Amazon*.

**Topics**
+ [Buat dan kueri tabel dasar berdasarkan file log Amazon EMR](emr-create-table.md)
+ [Buat dan kueri tabel yang dipartisi berdasarkan log EMR Amazon](emr-create-table-partitioned.md)

# Buat dan kueri tabel dasar berdasarkan file log Amazon EMR
<a name="emr-create-table"></a>

Contoh berikut membuat tabel dasar,`myemrlogs`, berdasarkan berkas log yang disimpan ke`s3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/elasticmapreduce/`. Lokasi Amazon S3 yang digunakan dalam contoh di bawah ini mencerminkan pola lokasi log default untuk klaster EMR yang dibuat oleh akun Amazon Web Services di Wilayah. *123456789012* *us-west-2* Jika Anda menggunakan lokasi khusus, polanya adalah s3://amzn-s3-demo-bucket/*ClusterID*.

Untuk informasi tentang cara membuat tabel dipartisi untuk berpotensi meningkatkan performa permintaan dan mengurangi transfer data, lihat[Buat dan kueri tabel yang dipartisi berdasarkan log EMR Amazon](emr-create-table-partitioned.md).

```
CREATE EXTERNAL TABLE `myemrlogs`(
  `data` string COMMENT 'from deserializer')
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6'
```

## Kueri contoh
<a name="emr-example-queries-basic"></a>

Contoh kueri berikut dapat dijalankan pada`myemrlogs`tabel yang dibuat oleh contoh sebelumnya.

**Example — Log langkah kueri untuk terjadinya ERROR, WARN, INFO, EXCEPTION, FATAL, atau DEBUG**  

```
SELECT data,
        "$PATH"
FROM "default"."myemrlogs"
WHERE regexp_like("$PATH",'s-86URH188Z6B1')
        AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;
```

**Example — Kueri log contoh tertentu, i-00b3c0a839ece0a9c, untuk ERROR, WARN, INFO, EXCEPTION, FATAL, atau DEBUG**  

```
SELECT "data",
        "$PATH" AS filepath
FROM "default"."myemrlogs"
WHERE regexp_like("$PATH",'i-00b3c0a839ece0a9c')
        AND regexp_like("$PATH",'state')
        AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;
```

**Example — Kueri log aplikasi presto untuk ERROR, WARN, INFO, EXCEPTION, FATAL, atau DEBUG**  

```
SELECT "data",
        "$PATH" AS filepath
FROM "default"."myemrlogs"
WHERE regexp_like("$PATH",'presto')
        AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;
```

**Example — Log aplikasi Query Namenode untuk ERROR, WARN, INFO, EXCEPTION, FATAL, atau DEBUG**  

```
SELECT "data",
        "$PATH" AS filepath
FROM "default"."myemrlogs"
WHERE regexp_like("$PATH",'namenode')
        AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;
```

**Example — Kueri semua log berdasarkan tanggal dan jam untuk ERROR, WARN, INFO, EXCEPTION, FATAL, atau DEBUG**  

```
SELECT distinct("$PATH") AS filepath
FROM "default"."myemrlogs"
WHERE regexp_like("$PATH",'2019-07-23-10')
        AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;
```

# Buat dan kueri tabel yang dipartisi berdasarkan log EMR Amazon
<a name="emr-create-table-partitioned"></a>

Contoh ini menggunakan lokasi log yang sama untuk membuat tabel Athena, tetapi tabel dipartisi, dan partisi kemudian dibuat untuk setiap lokasi log. Untuk informasi selengkapnya, lihat [Partisi data Anda](partitions.md).

Kueri berikut membuat tabel dipartisi bernama`mypartitionedemrlogs`:

```
CREATE EXTERNAL TABLE `mypartitionedemrlogs`(
  `data` string COMMENT 'from deserializer')
 partitioned by (logtype string)
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6'
```

Pernyataan kueri berikut kemudian membuat partisi tabel berdasarkan sub-direktori untuk jenis log yang berbeda yang Amazon EMR menciptakan di Amazon S3:

```
ALTER TABLE mypartitionedemrlogs ADD
     PARTITION (logtype='containers')
     LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/containers/'
```

```
ALTER TABLE mypartitionedemrlogs ADD
     PARTITION (logtype='hadoop-mapreduce')
     LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/hadoop-mapreduce/'
```

```
ALTER TABLE mypartitionedemrlogs ADD
     PARTITION (logtype='hadoop-state-pusher')
     LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/hadoop-state-pusher/'
```

```
ALTER TABLE mypartitionedemrlogs ADD
     PARTITION (logtype='node')
     LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/node/'
```

```
ALTER TABLE mypartitionedemrlogs ADD
     PARTITION (logtype='steps')
     LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/steps/'
```

Setelah Anda membuat partisi, Anda dapat menjalankan`SHOW PARTITIONS`query di atas tabel untuk mengkonfirmasi:

```
SHOW PARTITIONS mypartitionedemrlogs;
```

## Kueri contoh
<a name="emr-example-queries-partitioned"></a>

Contoh berikut menunjukkan kueri untuk entri log tertentu menggunakan tabel dan partisi yang dibuat oleh contoh di atas.

**Example — Meminta aplikasi application\$11561661818238\$10002 log di partisi kontainer untuk ERROR atau WARN**  

```
SELECT data,
        "$PATH"
FROM "default"."mypartitionedemrlogs"
WHERE logtype='containers'
        AND regexp_like("$PATH",'application_1561661818238_0002')
        AND regexp_like(data, 'ERROR|WARN') limit 100;
```

**Example — Menanyakan partisi Hadoop-mapReduce untuk pekerjaan job\$11561661818238\$10004 dan gagal mengurangi**  

```
SELECT data,
        "$PATH"
FROM "default"."mypartitionedemrlogs"
WHERE logtype='hadoop-mapreduce'
        AND regexp_like(data,'job_1561661818238_0004|Failed Reduces') limit 100;
```

**Example — Meminta log Hive di partisi node untuk ID kueri 056e0609-33e1-4611-956c-7a31b42d2663**  

```
SELECT data,
        "$PATH"
FROM "default"."mypartitionedemrlogs"
WHERE logtype='node'
        AND regexp_like("$PATH",'hive')
        AND regexp_like(data,'056e0609-33e1-4611-956c-7a31b42d2663') limit 100;
```

**Example — Meminta log resourcemanager di partisi node untuk aplikasi 1567660019320\$10001\$101\$1000001**  

```
SELECT data,
        "$PATH"
FROM "default"."mypartitionedemrlogs"
WHERE logtype='node'
        AND regexp_like(data,'resourcemanager')
        AND regexp_like(data,'1567660019320_0001_01_000001') limit 100
```

# Log AWS Global Accelerator aliran kueri
<a name="querying-global-accelerator-flow-logs"></a>

Anda dapat menggunakan AWS Global Accelerator untuk membuat akselerator yang mengarahkan lalu lintas jaringan ke titik akhir yang optimal melalui jaringan AWS global. Untuk informasi selengkapnya tentang Global Accelerator, lihat [Apa itu AWS Global Accelerator](https://docs.aws.amazon.com/global-accelerator/latest/dg/what-is-global-accelerator.html).

Log aliran Global Accelerator memungkinkan Anda menangkap informasi tentang lalu lintas alamat IP yang pergi ke dan dari antarmuka jaringan di akselerator Anda. Data log alur diterbitkan ke Amazon S3, tempat Anda dapat mengambil dan melihat data Anda. Untuk informasi selengkapnya, lihat [Flow log in AWS Global Accelerator](https://docs.aws.amazon.com/global-accelerator/latest/dg/monitoring-global-accelerator.flow-logs.html).

Anda dapat menggunakan Athena untuk mengkueri log alur Global Accelerator Anda dengan membuat tabel yang menentukan lokasi mereka di Amazon S3.

**Untuk membuat tabel untuk log alur Global Accelerator**

1. Salin dan tempel pernyataan DDL berikut ke konsol Athena. Query ini menentukan *ROW FORMAT DELIMITED* dan menghilangkan menentukan [SerDe](serde-reference.md), yang berarti bahwa query menggunakan. [`LazySimpleSerDe`](lazy-simple-serde.md) Dalam kueri ini, bidang diakhiri oleh spasi.

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS aga_flow_logs (
     version string,
     account string,
     acceleratorid string,
     clientip string,
     clientport int,
     gip string,
     gipport int,
     endpointip string,
     endpointport int,
     protocol string,
     ipaddresstype string,
     numpackets bigint,
     numbytes int,
     starttime int,
     endtime int,
     action string,
     logstatus string,
     agasourceip string,
     agasourceport int,
     endpointregion string,
     agaregion string,
     direction string,
     vpc_id string,
     reject_reason string
   )
   PARTITIONED BY (dt string)
   ROW FORMAT DELIMITED
   FIELDS TERMINATED BY ' '
   LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/account_id/globalaccelerator/region/'
   TBLPROPERTIES ("skip.header.line.count"="1");
   ```

1. Memodifikasi`LOCATION`Nilai untuk menunjuk ke bucket Amazon S3 yang berisi data log Anda.

   ```
   's3://amzn-s3-demo-bucket/prefix/AWSLogs/account_id/globalaccelerator/region_code/'
   ```

1. Jalankan kueri di konsol Athena. Setelah kueri selesai, Athena register`aga_flow_logs`tabel, membuat data di dalamnya tersedia untuk mengkueri.

1. Membuat partisi untuk membaca data, seperti dalam contoh kueri berikut. kueri menciptakan partisi tunggal untuk tanggal yang ditentukan. Ganti placeholder untuk tanggal dan lokasi.

   ```
   ALTER TABLE aga_flow_logs
   ADD PARTITION (dt='YYYY-MM-dd')
   LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/account_id/globalaccelerator/region_code/YYYY/MM/dd';
   ```

## Contoh kueri untuk log AWS Global Accelerator aliran
<a name="querying-global-accelerator-flow-logs-examples"></a>

**Example — Daftar permintaan yang melewati lokasi tepi tertentu**  
Contoh kueri berikut mencantumkan permintaan yang melewati lokasi tepi LHR. Menggunakan`LIMIT`Operator untuk membatasi jumlah log untuk mengkueri pada satu waktu.  

```
SELECT 
  clientip, 
  agaregion, 
  protocol, 
  action 
FROM 
  aga_flow_logs 
WHERE 
  agaregion LIKE 'LHR%' 
LIMIT 
  100;
```

**Example — Daftar alamat IP endpoint yang menerima paling banyak permintaan HTTPS**  
Untuk melihat alamat IP endpoint mana yang menerima jumlah tertinggi permintaan HTTPS, gunakan kueri berikut. Kueri ini menghitung jumlah paket yang diterima pada HTTPS port 443, kelompoknya berdasarkan alamat IP tujuan, dan mengembalikan 10 alamat IP teratas.  

```
SELECT 
  SUM(numpackets) AS packetcount, 
  endpointip 
FROM 
  aga_flow_logs 
WHERE 
  endpointport = 443 
GROUP BY 
  endpointip 
ORDER BY 
  packetcount DESC 
LIMIT 
  10;
```

# Kueri GuardDuty temuan Amazon
<a name="querying-guardduty"></a>

[Amazon GuardDuty](https://aws.amazon.com/guardduty/) adalah layanan pemantauan keamanan untuk membantu mengidentifikasi aktivitas yang tidak terduga dan berpotensi tidak sah atau berbahaya di AWS lingkungan Anda. Saat mendeteksi aktivitas yang tidak terduga dan berpotensi berbahaya, GuardDuty hasilkan [temuan](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_findings.html) keamanan yang dapat Anda ekspor ke Amazon S3 untuk penyimpanan dan analisis. Setelah Anda mengekspor temuan Anda ke Amazon S3, Anda dapat menggunakan Athena untuk mengkueri mereka. Artikel ini menunjukkan cara membuat tabel di Athena untuk GuardDuty temuan Anda dan menanyakannya.

Untuk informasi selengkapnya tentang Amazon GuardDuty, lihat [Panduan GuardDuty Pengguna Amazon](https://docs.aws.amazon.com/guardduty/latest/ug/).

## Prasyarat
<a name="querying-guardduty-prerequisites"></a>
+ Aktifkan GuardDuty fitur untuk mengekspor temuan ke Amazon S3. Untuk langkahnya, lihat [Mengekspor temuan](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_exportfindings.html) di Panduan GuardDuty Pengguna Amazon.

## Buat tabel di Athena untuk temuan GuardDuty
<a name="querying-guardduty-creating-a-table-in-athena-for-guardduty-findings"></a>

Untuk menanyakan GuardDuty temuan Anda dari Athena, Anda harus membuat tabel untuk mereka.

**Untuk membuat tabel di Athena untuk temuan GuardDuty**

1. Buka konsol Athena di [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Paste pernyataan DDL berikut ke konsol Athena. Ubah nilai `LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/account-id/GuardDuty/'` untuk menunjukkan GuardDuty temuan Anda di Amazon S3.

   ```
   CREATE EXTERNAL TABLE `gd_logs` (
     `schemaversion` string,
     `accountid` string,
     `region` string,
     `partition` string,
     `id` string,
     `arn` string,
     `type` string,
     `resource` string,
     `service` string,
     `severity` string,
     `createdat` string,
     `updatedat` string,
     `title` string,
     `description` string)
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/account-id/GuardDuty/'
    TBLPROPERTIES ('has_encrypted_data'='true')
   ```
**catatan**  
 SerDe Mengharapkan setiap dokumen JSON berada pada satu baris teks tanpa karakter penghentian baris yang memisahkan bidang dalam catatan. Jika teks JSON dalam format cetak cantik, Anda mungkin menerima pesan kesalahan seperti HIVE\$1CURSOR\$1ERROR: Row is not a valid JSON Object or HIVE\$1CURSOR\$1ERROR:: Unexpected JsonParseException end-of-input: expected close marker for OBJECT saat Anda mencoba menanyakan tabel setelah Anda membuatnya. Untuk informasi selengkapnya, lihat [File Data JSON](https://github.com/rcongiu/Hive-JSON-Serde#json-data-files) di dokumentasi SerDe OpenX. GitHub 

1. Menjalankan kueri di konsol Athena untuk mendaftar`gd_logs`tabel. Saat kueri selesai, temuan siap bagi Anda untuk mengkueri dari Athena.

## Kueri contoh
<a name="querying-guardduty-examples"></a>

Contoh berikut menunjukkan cara menanyakan GuardDuty temuan dari Athena.

**Example — Ekskfiltrasi data DNS**  
Kueri berikut menampilkan informasi tentang EC2 instans Amazon yang mungkin mengeksfiltrasi data melalui kueri DNS.  

```
SELECT
    title,
    severity,
    type,
    id AS FindingID,
    accountid,
    region,
    createdat,
    updatedat,
    json_extract_scalar(service, '$.count') AS Count,
    json_extract_scalar(resource, '$.instancedetails.instanceid') AS InstanceID,
    json_extract_scalar(service, '$.action.actiontype') AS DNS_ActionType,
    json_extract_scalar(service, '$.action.dnsrequestaction.domain') AS DomainName,
    json_extract_scalar(service, '$.action.dnsrequestaction.protocol') AS protocol,
    json_extract_scalar(service, '$.action.dnsrequestaction.blocked') AS blocked
FROM gd_logs
WHERE type = 'Trojan:EC2/DNSDataExfiltration'
ORDER BY severity DESC
```

**Example — Akses pengguna IAM tidak sah**  
Kueri berikut mengembalikan semua`UnauthorizedAccess:IAMUser`menemukan jenis untuk IAM Principal dari semua wilayah.   

```
SELECT title,
         severity,
         type,
         id,
         accountid,
         region,
         createdat,
         updatedat,
         json_extract_scalar(service, '$.count') AS Count, 
         json_extract_scalar(resource, '$.accesskeydetails.username') AS IAMPrincipal, 
         json_extract_scalar(service,'$.action.awsapicallaction.api') AS APIActionCalled
FROM gd_logs
WHERE type LIKE '%UnauthorizedAccess:IAMUser%' 
ORDER BY severity desc;
```

## Kiat untuk menanyakan temuan GuardDuty
<a name="querying-guardduty-tips"></a>

Saat Anda membuat kueri Anda, ingatlah hal berikut.
+ Untuk mengekstraksi data dari bidang JSON Nest, gunakan Presto`json_extract`atau`json_extract_scalar`fungsi. Untuk informasi selengkapnya, lihat [Ekstrak data JSON dari string](extracting-data-from-JSON.md).
+ Pastikan bahwa semua karakter di bidang JSON dalam huruf kecil.
+  Untuk informasi tentang cara mengunduh hasil kueri, lihat [Unduh file hasil kueri menggunakan konsol Athena](saving-query-results.md).

# AWS Network Firewall Log kueri
<a name="querying-network-firewall-logs"></a>

AWS Network Firewall adalah layanan terkelola yang dapat Anda gunakan untuk menerapkan perlindungan jaringan penting untuk instans Amazon Virtual Private Cloud Anda. AWS Network Firewall bekerja sama dengan AWS Firewall Manager sehingga Anda dapat membuat kebijakan berdasarkan AWS Network Firewall aturan dan kemudian menerapkan kebijakan tersebut secara terpusat di seluruh akun VPCs dan akun Anda. Untuk informasi lebih lanjut tentang AWS Network Firewall, lihat [AWS Network Firewall](https://aws.amazon.com/network-firewall/).

Anda dapat mengonfigurasi AWS Network Firewall pencatatan untuk lalu lintas yang Anda teruskan ke mesin aturan stateful firewall Anda. Logging memberikan informasi rinci tentang lalu lintas jaringan, termasuk waktu yang mesin stateful menerima paket, informasi rinci tentang paket, dan setiap tindakan aturan stateful diambil terhadap paket. Log diterbitkan ke tujuan log yang telah dikonfigurasi, tempat Anda dapat mengambil dan melihatnya. Untuk informasi selengkapnya, lihat.[Log lalu lintas jaringan dari AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/firewall-logging.html)di*AWS Network Firewall Panduan Developer*.

**Topics**
+ [Buat dan kueri tabel untuk log peringatan](querying-network-firewall-logs-sample-alert-logs-table.md)
+ [Buat dan kueri tabel untuk log netflow](querying-network-firewall-logs-sample-netflow-logs-table.md)

# Buat dan kueri tabel untuk log peringatan
<a name="querying-network-firewall-logs-sample-alert-logs-table"></a>

1. Ubah contoh pernyataan DDL berikut agar sesuai dengan struktur log peringatan Anda. Anda mungkin perlu memperbarui pernyataan untuk menyertakan kolom untuk versi terbaru dari log. Untuk informasi selengkapnya, lihat.[Isi dari log firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/firewall-logging.html#firewall-logging-contents)di*AWS Network Firewall Panduan Developer*.

   ```
   CREATE EXTERNAL TABLE network_firewall_alert_logs (
     firewall_name string,
     availability_zone string,
     event_timestamp string,
     event struct<
       timestamp:string,
       flow_id:bigint,
       event_type:string,
       src_ip:string,
       src_port:int,
       dest_ip:string,
       dest_port:int,
       proto:string,
       app_proto:string,
       sni:string,
       tls_inspected:boolean,
       tls_error:struct<
         error_message:string>,
       revocation_check:struct<
         leaf_cert_fpr:string,
         status:string,
         action:string>,
       alert:struct<
         alert_id:string,
         alert_type:string,
         action:string,
         signature_id:int,
         rev:int,
         signature:string,
         category:string,
         severity:int,
         rule_name:string,
         alert_name:string,
         alert_severity:string,
         alert_description:string,
         file_name:string,
         file_hash:string,
         packet_capture:string,
         reference_links:array<string>
       >, 
       src_country:string, 
       dest_country:string, 
       src_hostname:string, 
       dest_hostname:string, 
       user_agent:string, 
       url:string
      >
   )
    ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    LOCATION 's3://amzn-s3-demo-bucket/path_to_alert_logs_folder/';
   ```

1. Ubah `LOCATION` klausa untuk menentukan folder log Anda di Amazon S3.

1. Jalankan `CREATE TABLE` kueri Anda di editor kueri Athena. Setelah kueri selesai, Athena mendaftarkan tabel, membuat data `network_firewall_alert_logs` yang ditunjuknya siap untuk kueri.

## Kueri contoh
<a name="querying-network-firewall-logs-alert-log-sample-query"></a>

Contoh kueri log peringatan di bagian ini menyaring peristiwa di mana inspeksi TLS dilakukan yang memiliki peringatan dengan tingkat keparahan 2 atau lebih tinggi.

Kueri menggunakan alias untuk membuat judul kolom keluaran yang menunjukkan `struct` bahwa kolom milik. Misalnya, judul kolom untuk `event.alert.category` bidang `event_alert_category` bukan hanya`category`. Untuk menyesuaikan nama kolom lebih lanjut, Anda dapat memodifikasi alias agar sesuai dengan preferensi Anda. Misalnya, Anda dapat menggunakan garis bawah atau pemisah lain untuk membatasi nama dan `struct` nama bidang. 

Ingatlah untuk memodifikasi nama kolom dan `struct` referensi berdasarkan definisi tabel Anda dan pada bidang yang Anda inginkan dalam hasil kueri.

```
SELECT 
  firewall_name,
  availability_zone,
  event_timestamp,
  event.timestamp AS event_timestamp,
  event.flow_id AS event_flow_id,
  event.event_type AS event_type,
  event.src_ip AS event_src_ip,
  event.src_port AS event_src_port,
  event.dest_ip AS event_dest_ip,
  event.dest_port AS event_dest_port,
  event.proto AS event_protol,
  event.app_proto AS event_app_proto,
  event.sni AS event_sni,
  event.tls_inspected AS event_tls_inspected,
  event.tls_error.error_message AS event_tls_error_message,
  event.revocation_check.leaf_cert_fpr AS event_revocation_leaf_cert,
  event.revocation_check.status AS event_revocation_check_status,
  event.revocation_check.action AS event_revocation_check_action,
  event.alert.alert_id AS event_alert_alert_id,
  event.alert.alert_type AS event_alert_alert_type,
  event.alert.action AS event_alert_action,
  event.alert.signature_id AS event_alert_signature_id,
  event.alert.rev AS event_alert_rev,
  event.alert.signature AS event_alert_signature,
  event.alert.category AS event_alert_category,
  event.alert.severity AS event_alert_severity,
  event.alert.rule_name AS event_alert_rule_name,
  event.alert.alert_name AS event_alert_alert_name,
  event.alert.alert_severity AS event_alert_alert_severity,
  event.alert.alert_description AS event_alert_alert_description,
  event.alert.file_name AS event_alert_file_name,
  event.alert.file_hash AS event_alert_file_hash,
  event.alert.packet_capture AS event_alert_packet_capture,
  event.alert.reference_links AS event_alert_reference_links,
  event.src_country AS event_src_country,
  event.dest_country AS event_dest_country,
  event.src_hostname AS event_src_hostname,
  event.dest_hostname AS event_dest_hostname,
  event.user_agent AS event_user_agent,
  event.url AS event_url
FROM 
  network_firewall_alert_logs 
WHERE 
  event.alert.severity >= 2
  AND event.tls_inspected = true 
LIMIT 10;
```

# Buat dan kueri tabel untuk log netflow
<a name="querying-network-firewall-logs-sample-netflow-logs-table"></a>

1. Ubah contoh pernyataan DDL berikut agar sesuai dengan struktur log netflow Anda. Anda mungkin perlu memperbarui pernyataan untuk menyertakan kolom untuk versi terbaru dari log. Untuk informasi selengkapnya, lihat.[Isi dari log firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/firewall-logging.html#firewall-logging-contents)di*AWS Network Firewall Panduan Developer*.

   ```
   CREATE EXTERNAL TABLE network_firewall_netflow_logs (
     firewall_name string,
     availability_zone string,
     event_timestamp string,
     event struct<
       timestamp:string,
       flow_id:bigint,
       event_type:string,
       src_ip:string,
       src_port:int,
       dest_ip:string,
       dest_port:int,
       proto:string,
       app_proto:string,
       tls_inspected:boolean,
       netflow:struct<
         pkts:int,
         bytes:bigint,
         start:string,
         `end`:string,
         age:int,
         min_ttl:int,
         max_ttl:int,
         tcp_flags:struct<
           syn:boolean,
           fin:boolean,
           rst:boolean,
           psh:boolean,
           ack:boolean,
           urg:boolean
           >
         >
       >
   )
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' 
   LOCATION 's3://amzn-s3-demo-bucket/path_to_netflow_logs_folder/';
   ```

1. Ubah `LOCATION` klausa untuk menentukan folder log Anda di Amazon S3.

1. Jalankan `CREATE TABLE` kueri di editor kueri Athena. Setelah kueri selesai, Athena mendaftarkan tabel, membuat data `network_firewall_netflow_logs` yang ditunjuknya siap untuk kueri.

## Kueri contoh
<a name="querying-network-firewall-logs-netflow-log-sample-query"></a>

Contoh kueri log netflow di bagian ini menyaring peristiwa di mana inspeksi TLS dilakukan.

Kueri menggunakan alias untuk membuat judul kolom keluaran yang menunjukkan `struct` bahwa kolom milik. Misalnya, judul kolom untuk `event.netflow.bytes` bidang `event_netflow_bytes` bukan hanya`bytes`. Untuk menyesuaikan nama kolom lebih lanjut, Anda dapat memodifikasi alias agar sesuai dengan preferensi Anda. Misalnya, Anda dapat menggunakan garis bawah atau pemisah lain untuk membatasi nama dan `struct` nama bidang. 

Ingatlah untuk memodifikasi nama kolom dan `struct` referensi berdasarkan definisi tabel Anda dan pada bidang yang Anda inginkan dalam hasil kueri.

```
SELECT
  event.src_ip AS event_src_ip,
  event.dest_ip AS event_dest_ip,
  event.proto AS event_proto,
  event.app_proto AS event_app_proto,
  event.tls_inspected AS event_tls_inspected,
  event.netflow.pkts AS event_netflow_pkts,
  event.netflow.bytes AS event_netflow_bytes,
  event.netflow.tcp_flags.syn AS event_netflow_tcp_flags_syn 
FROM network_firewall_netflow_logs 
WHERE event.tls_inspected = true
```

# Log Query Network Load Balancer
<a name="networkloadbalancer-classic-logs"></a>

Gunakan Athena untuk menganalisis dan memproses log dari Network Load Balancer. Log ini menerima informasi rinci tentang permintaan Transport Layer Security (TLS) yang dikirim ke Network Load Balancer. Anda dapat menggunakan log akses ini untuk menganalisis pola lalu lintas dan memecahkan masalah. 

Sebelum Anda menganalisis log akses Network Load Balancer, aktifkan dan konfigurasikan untuk disimpan di bucket Amazon S3 tujuan. Untuk informasi selengkapnya, dan untuk informasi tentang setiap entri log akses Network Load Balancer, lihat [Log akses untuk Network Load Balancer Anda](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-access-logs.html).

**Untuk membuat tabel untuk log Network Load Balancer Anda**

1. Salin dan tempel pernyataan DDL berikut ke konsol Athena. Periksa[sintaks](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-access-logs.html#access-log-file-format)dari catatan log Network Load Balancer. Perbarui pernyataan sebagaimana diperlukan untuk menyertakan kolom dan regex yang sesuai dengan catatan log Anda.

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS nlb_tls_logs (
               type string,
               version string,
               time string,
               elb string,
               listener_id string,
               client_ip string,
               client_port int,
               target_ip string,
               target_port int,
               tcp_connection_time_ms double,
               tls_handshake_time_ms double,
               received_bytes bigint,
               sent_bytes bigint,
               incoming_tls_alert int,
               cert_arn string,
               certificate_serial string,
               tls_cipher_suite string,
               tls_protocol_version string,
               tls_named_group string,
               domain_name string,
               alpn_fe_protocol string,
               alpn_be_protocol string,
               alpn_client_preference_list string,
               tls_connection_creation_time string
               )
               ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
               WITH SERDEPROPERTIES (
               'serialization.format' = '1',
               'input.regex' = 
               '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*):([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-0-9]*) ([-0-9]*) ([-0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ?([^ ]*)?( .*)?'
               )
               LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/AWS_account_ID/elasticloadbalancing/region';
   ```

1. Memodifikasi`LOCATION`Bucket Amazon S3 untuk menentukan tujuan log Network Load Balancer Anda.

1. Jalankan kueri di konsol Athena. Setelah kueri selesai, Athena register`nlb_tls_logs`tabel, membuat data di dalamnya siap untuk mengkueri.

## Kueri contoh
<a name="query-nlb-example"></a>

Untuk melihat berapa kali sertifikat yang digunakan, gunakan kueri yang mirip dengan contoh ini:

```
SELECT count(*) AS 
         ct,
         cert_arn
FROM "nlb_tls_logs"
GROUP BY  cert_arn;
```

Kueri berikut menunjukkan berapa banyak pengguna yang menggunakan versi TLS lebih awal dari 1.3:

```
SELECT tls_protocol_version,
         COUNT(tls_protocol_version) AS 
         num_connections,
         client_ip
FROM "nlb_tls_logs"
WHERE tls_protocol_version < 'tlsv13'
GROUP BY tls_protocol_version, client_ip;
```

Gunakan kueri berikut untuk mengidentifikasi koneksi yang mengambil waktu lama TLS jabat tangan:

```
SELECT *
FROM "nlb_tls_logs"
ORDER BY  tls_handshake_time_ms DESC 
LIMIT 10;
```

Gunakan kueri berikut untuk mengidentifikasi dan menghitung versi protokol TLS dan cipher suite mana yang telah dinegosiasikan dalam 30 hari terakhir.

```
SELECT tls_cipher_suite,
         tls_protocol_version,
         COUNT(*) AS ct
FROM "nlb_tls_logs"
WHERE from_iso8601_timestamp(time) > current_timestamp - interval '30' day
        AND NOT tls_protocol_version = '-'
GROUP BY tls_cipher_suite, tls_protocol_version
ORDER BY ct DESC;
```

# Kueri log kueri penyelesai Amazon Route 53
<a name="querying-r53-resolver-logs"></a>

Anda dapat membuat tabel Athena untuk Amazon Route 53 Resolver permintaan log dan kueri mereka dari Athena.

Route 53 penyelesai permintaan penebangan untuk penebangan permintaan DNS yang dibuat oleh sumber daya dalam VPC, lokal sumber daya yang menggunakan inbound resolver endpoint, permintaan yang menggunakan akhir Resolver keluar untuk rekursif DNS resolusi, dan permintaan yang menggunakan Route 53 Resolver DNS firewall aturan untuk memblokir, memungkinkan, atau memantau daftar domain. Untuk informasi selengkapnya, lihat [Mencatat Log Kueri DNS](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-query-logs.html) dalam *Panduan Developer Amazon Route 53*. Untuk informasi tentang masing-masing bidang dalam log, lihat [Nilai yang muncul di log kueri resolver di](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-query-logs-format.html) Panduan *Pengembang Amazon Route 53*.

**Topics**
+ [Buat tabel untuk log kueri resolver](querying-r53-resolver-logs-creating-the-table.md)
+ [Gunakan proyeksi partisi](querying-r53-resolver-logs-partitioning-example.md)
+ [Kueri contoh](querying-r53-resolver-logs-example-queries.md)

# Buat tabel untuk log kueri resolver
<a name="querying-r53-resolver-logs-creating-the-table"></a>

Anda dapat menggunakan Editor Kueri di konsol Athena untuk membuat dan kueri tabel untuk log permintaan Route 53 penyelesai Anda.

**Untuk membuat dan menanyakan tabel Athena untuk log kueri resolver Route 53**

1. Buka konsol Athena di [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Dalam Editor Kueri Athena, masukkan yang berikut`CREATE TABLE`. Ganti`LOCATION`dengan yang sesuai dengan lokasi log Resolver Anda di Amazon S3.

   ```
   CREATE EXTERNAL TABLE r53_rlogs (
     version string,
     account_id string,
     region string,
     vpc_id string,
     query_timestamp string,
     query_name string,
     query_type string,
     query_class
       string,
     rcode string,
     answers array<
       struct<
         Rdata: string,
         Type: string,
         Class: string>
       >,
     srcaddr string,
     srcport int,
     transport string,
     srcids struct<
       instance: string,
       resolver_endpoint: string
       >,
     firewall_rule_action string,
     firewall_rule_group_id string,
     firewall_domain_list_id string
    )
        
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
   LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/aws_account_id/vpcdnsquerylogs/{vpc-id}/'
   ```

   Karena data log kueri Resolver dalam format JSON, pernyataan CREATE TABLE menggunakan [ SerDepustaka JSON](json-serde.md) untuk menganalisis data.
**catatan**  
 SerDe Mengharapkan setiap dokumen JSON berada pada satu baris teks tanpa karakter penghentian baris yang memisahkan bidang dalam catatan. Jika teks JSON dalam format cetak cantik, Anda mungkin menerima pesan kesalahan seperti HIVE\$1CURSOR\$1ERROR: Row is not a valid JSON Object or HIVE\$1CURSOR\$1ERROR:: Unexpected JsonParseException end-of-input: expected close marker for OBJECT saat Anda mencoba menanyakan tabel setelah Anda membuatnya. Untuk informasi selengkapnya, lihat [File Data JSON](https://github.com/rcongiu/Hive-JSON-Serde#json-data-files) di dokumentasi SerDe OpenX. GitHub 

1. Pilih **Run query** (Jalankan kueri). Pernyataan itu menciptakan tabel Athena bernama`r53_rlogs`kolom yang mewakili masing-masing bidang dalam data log Resolver Anda.

1. Di Athena konsol Kueri Editor, jalankan kueri berikut untuk memverifikasi bahwa tabel Anda telah dibuat.

   ```
   SELECT * FROM "r53_rlogs" LIMIT 10
   ```

# Gunakan proyeksi partisi
<a name="querying-r53-resolver-logs-partitioning-example"></a>

Contoh berikut menunjukkan `CREATE TABLE` pernyataan untuk log query Resolver yang menggunakan proyeksi partisi dan dipartisi oleh vpc dan tanggal. Untuk informasi selengkapnya tentang proyek partisi, lihat [Gunakan proyeksi partisi dengan Amazon Athena](partition-projection.md).

```
CREATE EXTERNAL TABLE r53_rlogs (
  version string,
  account_id string,
  region string,
  vpc_id string,
  query_timestamp string,
  query_name string,
  query_type string,
  query_class string,
  rcode string,
  answers array<
    struct<
      Rdata: string,
      Type: string,
      Class: string>
    >,
  srcaddr string,
  srcport int,
  transport string,
  srcids struct<
    instance: string,
    resolver_endpoint: string
    >,
  firewall_rule_action string,
  firewall_rule_group_id string,
  firewall_domain_list_id string
)
PARTITIONED BY (
`date` string,
`vpc` string
)
ROW FORMAT SERDE      'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT          'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION              's3://amzn-s3-demo-bucket/route53-query-logging/AWSLogs/aws_account_id/vpcdnsquerylogs/'
TBLPROPERTIES(
'projection.enabled' = 'true',
'projection.vpc.type' = 'enum',
'projection.vpc.values' = 'vpc-6446ae02',
'projection.date.type' = 'date',
'projection.date.range' = '2023/06/26,NOW',
'projection.date.format' = 'yyyy/MM/dd',
'projection.date.interval' = '1',
'projection.date.interval.unit' = 'DAYS',
'storage.location.template' = 's3://amzn-s3-demo-bucket/route53-query-logging/AWSLogs/aws_account_id/vpcdnsquerylogs/${vpc}/${date}/'
)
```

# Kueri contoh
<a name="querying-r53-resolver-logs-example-queries"></a>

Contoh berikut menunjukkan beberapa pertanyaan yang dapat Anda lakukan dari Athena pada log permintaan Resolver Anda.

## Contoh 1 - log kueri dalam urutan query\$1timestamp menurun
<a name="querying-r53-resolver-logs-example-1-query-logs-in-descending-query_timestamp-order"></a>

Kueri berikut menampilkan hasil log dalam turun`query_timestamp`Agar.

```
SELECT * FROM "r53_rlogs"
ORDER BY query_timestamp DESC
```

## Contoh 2 - log kueri dalam waktu mulai dan akhir yang ditentukan
<a name="querying-r53-resolver-logs-example-2-query-logs-within-specified-start-and-end-times"></a>

Kueri kueri berikut log antara tengah malam dan 8 pagi pada 24 September 2020. Gantikan waktu awal dan akhir sesuai dengan kebutuhan Anda sendiri.

```
SELECT query_timestamp, srcids.instance, srcaddr, srcport, query_name, rcode
FROM "r53_rlogs"
WHERE (parse_datetime(query_timestamp,'yyyy-MM-dd''T''HH:mm:ss''Z')
     BETWEEN parse_datetime('2020-09-24-00:00:00','yyyy-MM-dd-HH:mm:ss') 
     AND parse_datetime('2020-09-24-00:08:00','yyyy-MM-dd-HH:mm:ss'))
ORDER BY query_timestamp DESC
```

## Contoh 3 - log kueri berdasarkan pola nama kueri DNS tertentu
<a name="querying-r53-resolver-logs-example-3-query-logs-based-on-a-specified-dns-query-name-pattern"></a>

Kueri berikut memilih catatan yang nama kueri termasuk string “example.com”.

```
SELECT query_timestamp, srcids.instance, srcaddr, srcport, query_name, rcode, answers
FROM "r53_rlogs"
WHERE query_name LIKE '%example.com%'
ORDER BY query_timestamp DESC
```

## Contoh 4 - permintaan log kueri tanpa jawaban
<a name="querying-r53-resolver-logs-example-4-query-log-requests-with-no-answer"></a>

Kueri berikut memilih entri log tempat permintaan tidak menerima jawaban.

```
SELECT query_timestamp, srcids.instance, srcaddr, srcport, query_name, rcode, answers
FROM "r53_rlogs"
WHERE cardinality(answers) = 0
```

## Contoh 5 - log kueri dengan jawaban tertentu
<a name="querying-r53-resolver-logs-example-5-query-logs-with-a-specific-answer"></a>

Kueri berikut menunjukkan log tempat`answer.Rdata`nilai memiliki alamat IP yang ditentukan.

```
SELECT query_timestamp, srcids.instance, srcaddr, srcport, query_name, rcode, answer.Rdata
FROM "r53_rlogs"
CROSS JOIN UNNEST(r53_rlogs.answers) as st(answer)
WHERE answer.Rdata='203.0.113.16';
```

# Kueri log peristiwa Amazon SES
<a name="querying-ses-logs"></a>

Anda dapat menggunakan Amazon Athena untuk menanyakan log peristiwa [Amazon Simple Email Service](https://aws.amazon.com/ses/) (Amazon SES).

Amazon SES adalah platform email yang menyediakan cara yang nyaman dan hemat biaya untuk mengirim dan menerima email menggunakan alamat email dan domain Anda sendiri. Anda dapat memantau aktivitas pengiriman Amazon SES Anda pada tingkat terperinci menggunakan peristiwa, metrik, dan statistik.

Berdasarkan karakteristik yang Anda tentukan, Anda dapat mempublikasikan acara Amazon SES ke Amazon CloudWatch, [Amazon](https://aws.amazon.com/cloudwatch/) [Data Firehose](https://aws.amazon.com/kinesis/data-firehose/), atau [Amazon Simple Notification Service](https://aws.amazon.com/sns/). Setelah informasi disimpan di Amazon S3, Anda dapat menanyakannya dari Amazon Athena. 

Misalnya `CREATE TABLE` pernyataan Athena untuk log Amazon SES, termasuk langkah-langkah tentang cara membuat tampilan dan meratakan array bersarang di data log peristiwa Amazon SES, lihat “Langkah 3: Menggunakan Amazon Athena untuk menanyakan log peristiwa SES” di AWS posting blog Menganalisis data peristiwa [Amazon SES](https://aws.amazon.com/blogs/messaging-and-targeting/analyzing-amazon-ses-event-data-with-aws-analytics-services/) dengan Layanan Analytics. AWS 

# Kueri log aliran VPC Amazon
<a name="vpc-flow-logs"></a>

Log aliran Amazon Virtual Private Cloud menangkap informasi tentang lalu lintas IP yang pergi ke dan dari antarmuka jaringan di VPC. Gunakan log untuk menyelidiki pola lalu lintas jaringan dan mengidentifikasi ancaman dan risiko di seluruh jaringan VPC Anda.

Untuk menanyakan log aliran VPC Amazon Anda, Anda memiliki dua opsi:

****
+ **Konsol VPC Amazon** — Gunakan fitur integrasi Athena di Konsol VPC Amazon untuk membuat template CloudFormation yang membuat database Athena, workgroup, dan tabel flow log dengan partisi untuk Anda. Template ini juga membuat serangkaian [kueri log alur yang telah ditentukan sebelumnya](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-athena.html#predefined-queries) yang dapat Anda gunakan untuk mendapatkan wawasan tentang lalu lintas yang mengalir melalui VPC Anda.

  Untuk informasi tentang pendekatan ini, lihat [Log alur kueri menggunakan Amazon Athena](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-athena.html) di Panduan Pengguna Amazon *VPC*.
+ **Konsol Amazon Athena** — Buat tabel dan kueri langsung di konsol Athena. Untuk informasi lebih lanjut, lanjutkan membaca halaman ini.

Sebelum Anda mulai mengkueri log di Athena,[Aktifkan log alur VPC](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/flow-logs.html), dan konfigurasikan untuk disimpan ke bucket Amazon S3. Setelah Anda membuat log, biarkan mereka berjalan selama beberapa menit untuk mengumpulkan beberapa data. Log dibuat dalam format kompresi GZIP yang Athena memungkinkan Anda kueri secara langsung. 

Saat Anda membuat log aliran VPC, Anda dapat menggunakan format khusus saat Anda ingin menentukan bidang yang akan dikembalikan dalam log aliran dan urutan bidang yang muncul. Untuk informasi selengkapnya tentang catatan log alur, lihat [Catatan log aliran](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records) di *Panduan Pengguna Amazon VPC*.

## Pertimbangan dan batasan
<a name="vpc-flow-logs-common-considerations"></a>

Saat Anda membuat tabel di Athena untuk log aliran VPC Amazon, ingat poin-poin berikut:
+ Secara default, di Athena, Parket akan mengakses kolom berdasarkan nama. Untuk informasi selengkapnya, lihat [Menangani pembaruan skema](handling-schema-updates-chapter.md).
+ Gunakan nama dalam catatan log alur untuk nama kolom di Athena. Nama-nama kolom dalam skema Athena harus sama persis dengan nama bidang di log aliran VPC Amazon, dengan perbedaan berikut: 
  + Ganti tanda hubung di nama bidang log Amazon VPC dengan garis bawah di nama kolom Athena. Untuk informasi tentang karakter yang dapat diterima untuk nama database, nama tabel, dan nama kolom di Athena, lihat. [Nama database, tabel, dan kolom](tables-databases-columns-names.md)
  + Lepaskan nama catatan log alur yang merupakan [kata kunci yang dicadangkan](reserved-words.md) di Athena dengan melampirkannya dengan backticks. 
+ Log aliran VPC bersifat Akun AWS spesifik. Saat Anda memublikasikan file log Anda ke Amazon S3, jalur yang dibuat Amazon VPC di Amazon S3 menyertakan ID yang digunakan untuk Akun AWS membuat log aliran. Untuk informasi selengkapnya, lihat [Menerbitkan log alur ke Amazon S3](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-s3.html) di Panduan Pengguna Amazon *VPC*.

**Topics**
+ [Pertimbangan dan batasan](#vpc-flow-logs-common-considerations)
+ [Buat tabel untuk log aliran VPC Amazon dan kueri](vpc-flow-logs-create-table-statement.md)
+ [Buat tabel untuk log aliran dalam format Apache Parquet](vpc-flow-logs-parquet.md)
+ [Buat dan kueri tabel untuk log aliran VPC Amazon menggunakan proyeksi partisi](vpc-flow-logs-partition-projection.md)
+ [Buat tabel untuk log aliran dalam format Apache Parquet menggunakan proyeksi partisi](vpc-flow-logs-partition-projection-parquet-example.md)
+ [Sumber daya tambahan](query-examples-vpc-logs-additional-resources.md)

# Buat tabel untuk log aliran VPC Amazon dan kueri
<a name="vpc-flow-logs-create-table-statement"></a>

Prosedur berikut membuat tabel VPC Amazon untuk log aliran VPC Amazon. Saat Anda membuat log alur dengan format kustom, Anda membuat tabel dengan bidang yang cocok dengan bidang yang Anda tentukan saat membuat log alur dalam urutan yang sama dengan yang Anda tentukan.

**Untuk membuat tabel Athena untuk log aliran VPC Amazon**

1. Masukkan pernyataan DDL seperti berikut ini ke editor kueri konsol Athena, mengikuti pedoman di [Pertimbangan dan batasan](vpc-flow-logs.md#vpc-flow-logs-common-considerations) bagian ini. Pernyataan sampel membuat tabel yang memiliki kolom untuk log aliran VPC Amazon versi 2 hingga 5 seperti yang didokumentasikan dalam [catatan log Flow](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records). Jika Anda menggunakan kumpulan kolom atau urutan kolom yang berbeda, ubah pernyataan yang sesuai.

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS `vpc_flow_logs` (
     version int,
     account_id string,
     interface_id string,
     srcaddr string,
     dstaddr string,
     srcport int,
     dstport int,
     protocol bigint,
     packets bigint,
     bytes bigint,
     start bigint,
     `end` bigint,
     action string,
     log_status string,
     vpc_id string,
     subnet_id string,
     instance_id string,
     tcp_flags int,
     type string,
     pkt_srcaddr string,
     pkt_dstaddr string,
     region string,
     az_id string,
     sublocation_type string,
     sublocation_id string,
     pkt_src_aws_service string,
     pkt_dst_aws_service string,
     flow_direction string,
     traffic_path int
   )
   PARTITIONED BY (`date` date)
   ROW FORMAT DELIMITED
   FIELDS TERMINATED BY ' '
   LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/'
   TBLPROPERTIES ("skip.header.line.count"="1");
   ```

   Perhatikan poin-poin berikut:
   + Query menentukan `ROW FORMAT DELIMITED` dan menghilangkan menentukan. SerDe Ini berarti bahwa kueri menggunakan[Lazy Simple SerDe untuk CSV, TSV, dan file yang dibatasi khusus](lazy-simple-serde.md). Dalam kueri ini, bidang diakhiri oleh spasi.
   + Parameter`PARTITIONED BY`Klausul menggunakan`date`Jenis. Ini memungkinkan untuk menggunakan operator matematika dalam kueri untuk memilih apa yang lebih tua atau lebih baru dari tanggal tertentu.
**catatan**  
Karena `date` merupakan kata kunci yang dicadangkan dalam pernyataan DDL, itu lolos oleh karakter centang kembali. Untuk informasi selengkapnya, lihat [Melarikan diri dari kata kunci yang dicadangkan dalam kueri](reserved-words.md).
   + Untuk log aliran VPC dengan format kustom yang berbeda, ubah bidang agar sesuai dengan bidang yang Anda tentukan saat membuat log alur.

1. Memodifikasi`LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/'`Untuk menunjuk ke bucket Amazon S3 yang berisi data log Anda.

1. Jalankan kueri di konsol Athena. Setelah kueri selesai, Athena register`vpc_flow_logs`tabel, membuat data di dalamnya siap bagi Anda untuk mengeluarkan kueri.

1. Membuat partisi untuk dapat membaca data, seperti dalam contoh kueri berikut. Kueri ini menciptakan partisi tunggal untuk tanggal yang ditentukan. Ganti placeholder untuk tanggal dan lokasi yang diperlukan. 
**catatan**  
Kueri ini menciptakan satu partisi saja, untuk tanggal yang Anda tentukan. [Untuk mengotomatisasi proses, gunakan skrip yang menjalankan query ini dan membuat partisi dengan cara ini untuk`year/month/day`, atau gunakan `CREATE TABLE` pernyataan yang menentukan proyeksi partisi.](vpc-flow-logs-partition-projection.md)

   ```
   ALTER TABLE vpc_flow_logs
   ADD PARTITION (`date`='YYYY-MM-dd')
   LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/YYYY/MM/dd';
   ```

## Contoh kueri untuk tabel vpc\$1flow\$1logs
<a name="query-examples-vpc-logs"></a>

Gunakan editor kueri di konsol Athena untuk menjalankan pernyataan SQL pada tabel yang Anda buat. Anda dapat menyimpan kueri, melihat kueri sebelumnya, atau mengunduh hasil kueri dalam format CSV. Dalam contoh berikut, ganti `vpc_flow_logs` dengan nama tabel Anda. Ubah nilai kolom dan variabel lain sesuai dengan kebutuhan Anda.

Contoh kueri berikut mencantumkan maksimum 100 log alur untuk tanggal yang ditentukan.

```
SELECT * 
FROM vpc_flow_logs 
WHERE date = DATE('2020-05-04') 
LIMIT 100;
```

Kueri berikut mencantumkan semua koneksi TCP ditolak dan menggunakan kolom partisi tanggal yang baru dibuat,`date`, untuk mengekstraknya dari hari dalam seminggu dimana peristiwa-peristiwa ini terjadi.

```
SELECT day_of_week(date) AS
  day,
  date,
  interface_id,
  srcaddr,
  action,
  protocol
FROM vpc_flow_logs
WHERE action = 'REJECT' AND protocol = 6
LIMIT 100;
```

Untuk melihat server mana yang menerima permintaan HTTPS dengan jumlah tertinggi, gunakan kueri berikut. Ini menghitung jumlah paket yang diterima pada HTTPS port 443, grup mereka berdasarkan alamat IP tujuan, dan mengembalikan 10 besar dari minggu lalu.

```
SELECT SUM(packets) AS
  packetcount,
  dstaddr
FROM vpc_flow_logs
WHERE dstport = 443 AND date > current_date - interval '7' day
GROUP BY dstaddr
ORDER BY packetcount DESC
LIMIT 10;
```

# Buat tabel untuk log aliran dalam format Apache Parquet
<a name="vpc-flow-logs-parquet"></a>

Prosedur berikut membuat tabel VPC Amazon untuk log aliran Amazon VPC dalam format Apache Parquet.

**Untuk membuat tabel Athena untuk log aliran Amazon VPC dalam format Parket**

1. Masukkan pernyataan DDL seperti berikut ini ke editor kueri konsol Athena, mengikuti pedoman di [Pertimbangan dan batasan](vpc-flow-logs.md#vpc-flow-logs-common-considerations) bagian ini. Pernyataan sampel membuat tabel yang memiliki kolom untuk log aliran VPC Amazon versi 2 hingga 5 seperti yang didokumentasikan dalam [catatan log Aliran](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records) dalam format Parket, Hive dipartisi setiap jam. Jika Anda tidak memiliki partisi per jam, hapus `hour` dari klausa. `PARTITIONED BY`

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS vpc_flow_logs_parquet (
     version int,
     account_id string,
     interface_id string,
     srcaddr string,
     dstaddr string,
     srcport int,
     dstport int,
     protocol bigint,
     packets bigint,
     bytes bigint,
     start bigint,
     `end` bigint,
     action string,
     log_status string,
     vpc_id string,
     subnet_id string,
     instance_id string,
     tcp_flags int,
     type string,
     pkt_srcaddr string,
     pkt_dstaddr string,
     region string,
     az_id string,
     sublocation_type string,
     sublocation_id string,
     pkt_src_aws_service string,
     pkt_dst_aws_service string,
     flow_direction string,
     traffic_path int
   )
   PARTITIONED BY (
     `aws-account-id` string,
     `aws-service` string,
     `aws-region` string,
     `year` string, 
     `month` string, 
     `day` string,
     `hour` string
   )
   ROW FORMAT SERDE 
     'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
   STORED AS INPUTFORMAT 
     'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
   OUTPUTFORMAT 
     'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
   LOCATION
     's3://amzn-s3-demo-bucket/prefix/AWSLogs/'
   TBLPROPERTIES (
     'EXTERNAL'='true', 
     'skip.header.line.count'='1'
     )
   ```

1. Ubah sampel `LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/'` untuk menunjuk ke jalur Amazon S3 yang berisi data log Anda.

1. Jalankan kueri di konsol Athena.

1. Jika data Anda dalam format yang kompatibel dengan HIVE, jalankan perintah berikut di konsol Athena untuk memperbarui dan memuat partisi Hive di metastore. Setelah kueri selesai, Anda dapat menanyakan data dalam `vpc_flow_logs_parquet` tabel.

   ```
   MSCK REPAIR TABLE vpc_flow_logs_parquet
   ```

   Jika Anda tidak menggunakan data yang kompatibel dengan Hive, jalankan [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) untuk memuat partisi.

*Untuk informasi selengkapnya tentang penggunaan Athena untuk menanyakan log aliran VPC Amazon dalam format Parket, lihat posting [Optimalkan kinerja dan kurangi biaya untuk analitik jaringan dengan Log Aliran VPC dalam format Parket Apache di Blog Big](https://aws.amazon.com/blogs/big-data/optimize-performance-and-reduce-costs-for-network-analytics-with-vpc-flow-logs-in-apache-parquet-format/) Data.AWS *

# Buat dan kueri tabel untuk log aliran VPC Amazon menggunakan proyeksi partisi
<a name="vpc-flow-logs-partition-projection"></a>

Gunakan `CREATE TABLE` pernyataan seperti berikut ini untuk membuat tabel, partisi tabel, dan mengisi partisi secara otomatis dengan menggunakan proyeksi [partisi](partition-projection.md). Ganti nama tabel `test_table_vpclogs` dalam contoh dengan nama tabel Anda. Edit `LOCATION` klausa untuk menentukan bucket Amazon S3 yang berisi data log VPC Amazon Anda.

`CREATE TABLE`Pernyataan berikut adalah untuk log aliran VPC yang dikirimkan dalam format partisi gaya non-HIVE. Contoh ini memungkinkan agregasi multi-akun. Jika Anda memusatkan log VPC Flow dari beberapa akun ke dalam satu bucket Amazon S3, ID akun harus dimasukkan di jalur Amazon S3.

```
CREATE EXTERNAL TABLE IF NOT EXISTS test_table_vpclogs (
  version int,
  account_id string,
  interface_id string,
  srcaddr string,
  dstaddr string,
  srcport int,
  dstport int,
  protocol bigint,
  packets bigint,
  bytes bigint,
  start bigint,
  `end` bigint,
  action string,
  log_status string,
  vpc_id string,
  subnet_id string,
  instance_id string,
  tcp_flags int,
  type string,
  pkt_srcaddr string,
  pkt_dstaddr string,
  az_id string,
  sublocation_type string,
  sublocation_id string,
  pkt_src_aws_service string,
  pkt_dst_aws_service string,
  flow_direction string,
  traffic_path int
)
PARTITIONED BY (accid string, region string, day string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
LOCATION '$LOCATION_OF_LOGS'
TBLPROPERTIES
(
"skip.header.line.count"="1",
"projection.enabled" = "true",
"projection.accid.type" = "enum",
"projection.accid.values" = "$ACCID_1,$ACCID_2",
"projection.region.type" = "enum",
"projection.region.values" = "$REGION_1,$REGION_2,$REGION_3",
"projection.day.type" = "date",
"projection.day.range" = "$START_RANGE,NOW",
"projection.day.format" = "yyyy/MM/dd",
"storage.location.template" = "s3://amzn-s3-demo-bucket/AWSLogs/${accid}/vpcflowlogs/${region}/${day}"
)
```

## Contoh kueri untuk test\$1table\$1vpclogs
<a name="query-examples-vpc-logs-pp"></a>

Contoh query berikut `test_table_vpclogs` dibuat oleh pernyataan sebelumnya`CREATE TABLE`. Ganti `test_table_vpclogs` dalam kueri dengan nama tabel Anda sendiri. Ubah nilai kolom dan variabel lain sesuai dengan kebutuhan Anda.

Untuk mengembalikan 100 entri log akses pertama dalam urutan kronologis untuk jangka waktu tertentu, jalankan kueri seperti berikut ini.

```
SELECT *
FROM test_table_vpclogs
WHERE day >= '2021/02/01' AND day < '2021/02/28'
ORDER BY day ASC
LIMIT 100
```

Untuk melihat server mana yang menerima sepuluh besar paket HTTP untuk jangka waktu tertentu, jalankan kueri seperti berikut ini. Kueri menghitung jumlah paket yang diterima pada port HTTPS 443, mengelompokkannya berdasarkan alamat IP tujuan, dan mengembalikan 10 entri teratas dari minggu sebelumnya.

```
SELECT SUM(packets) AS packetcount, 
       dstaddr
FROM test_table_vpclogs
WHERE dstport = 443
  AND day >= '2021/03/01'
  AND day < '2021/03/31'
GROUP BY dstaddr
ORDER BY packetcount DESC
LIMIT 10
```

Untuk mengembalikan log yang dibuat selama periode waktu tertentu, jalankan kueri seperti berikut ini.

```
SELECT interface_id,
       srcaddr,
       action,
       protocol,
       to_iso8601(from_unixtime(start)) AS start_time,
       to_iso8601(from_unixtime("end")) AS end_time
FROM test_table_vpclogs
WHERE DAY >= '2021/04/01'
  AND DAY < '2021/04/30'
```

Untuk mengembalikan log akses untuk alamat IP sumber antara periode waktu tertentu, jalankan kueri seperti berikut ini.

```
SELECT *
FROM test_table_vpclogs
WHERE srcaddr = '10.117.1.22'
  AND day >= '2021/02/01'
  AND day < '2021/02/28'
```

Untuk membuat daftar koneksi TCP yang ditolak, jalankan kueri seperti berikut ini.

```
SELECT day,
       interface_id,
       srcaddr,
       action,
       protocol
FROM test_table_vpclogs
WHERE action = 'REJECT' AND protocol = 6 AND day >= '2021/02/01' AND day < '2021/02/28'
LIMIT 10
```

Untuk mengembalikan log akses untuk rentang alamat IP yang dimulai dengan`10.117`, jalankan kueri seperti berikut ini.

```
SELECT *
FROM test_table_vpclogs
WHERE split_part(srcaddr,'.', 1)='10'
  AND split_part(srcaddr,'.', 2) ='117'
```

Untuk mengembalikan log akses untuk alamat IP tujuan antara rentang waktu tertentu, jalankan kueri seperti berikut ini.

```
SELECT *
FROM test_table_vpclogs
WHERE dstaddr = '10.0.1.14'
  AND day >= '2021/01/01'
  AND day < '2021/01/31'
```

# Buat tabel untuk log aliran dalam format Apache Parquet menggunakan proyeksi partisi
<a name="vpc-flow-logs-partition-projection-parquet-example"></a>

`CREATE TABLE`Pernyataan proyeksi partisi berikut untuk log aliran VPC dalam format Apache Parquet, tidak kompatibel dengan Hive, dan dipartisi berdasarkan jam dan tanggal, bukan hari. Ganti nama tabel `test_table_vpclogs_parquet` dalam contoh dengan nama tabel Anda. Edit `LOCATION` klausa untuk menentukan bucket Amazon S3 yang berisi data log VPC Amazon Anda.

```
CREATE EXTERNAL TABLE IF NOT EXISTS test_table_vpclogs_parquet (
  version int,
  account_id string,
  interface_id string,
  srcaddr string,
  dstaddr string,
  srcport int,
  dstport int,
  protocol bigint,
  packets bigint,
  bytes bigint,
  start bigint,
  `end` bigint,
  action string,
  log_status string,
  vpc_id string,
  subnet_id string,
  instance_id string,
  tcp_flags int,
  type string,
  pkt_srcaddr string,
  pkt_dstaddr string,
  az_id string,
  sublocation_type string,
  sublocation_id string,
  pkt_src_aws_service string,
  pkt_dst_aws_service string,
  flow_direction string,
  traffic_path int
)
PARTITIONED BY (region string, date string, hour string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/'
TBLPROPERTIES (
"EXTERNAL"="true",
"skip.header.line.count" = "1",
"projection.enabled" = "true",
"projection.region.type" = "enum",
"projection.region.values" = "us-east-1,us-west-2,ap-south-1,eu-west-1",
"projection.date.type" = "date",
"projection.date.range" = "2021/01/01,NOW",
"projection.date.format" = "yyyy/MM/dd",
"projection.hour.type" = "integer",
"projection.hour.range" = "00,23",
"projection.hour.digits" = "2",
"storage.location.template" = "s3://amzn-s3-demo-bucket/prefix/AWSLogs/${account_id}/vpcflowlogs/${region}/${date}/${hour}"
)
```

# Sumber daya tambahan
<a name="query-examples-vpc-logs-additional-resources"></a>

Untuk informasi selengkapnya tentang penggunaan Athena untuk menganalisis log aliran VPC, lihat posting blog AWS Big Data berikut:
+ [Analisis Log Aliran VPC dengan integrasi Amazon point-and-click Athena](https://aws.amazon.com/blogs/networking-and-content-delivery/analyze-vpc-flow-logs-with-point-and-click-amazon-athena-integration/) 
+ [Menganalisis log aliran VPC menggunakan Amazon Athena dan Quick](https://aws.amazon.com/blogs/big-data/analyzing-vpc-flow-logs-using-amazon-athena-and-amazon-quicksight/)
+ [Mengoptimalkan performa dan mengurangi biaya untuk analitik jaringan dengan VPC Flow Logs dalam format Apache Parquet ](https://aws.amazon.com/blogs/big-data/optimize-performance-and-reduce-costs-for-network-analytics-with-vpc-flow-logs-in-apache-parquet-format/)

# AWS WAF Log kueri
<a name="waf-logs"></a>

AWS WAF adalah firewall aplikasi web yang memungkinkan Anda memantau dan mengontrol permintaan HTTP dan HTTPS yang diterima aplikasi web Anda yang dilindungi dari klien. Anda menentukan cara menangani permintaan web dengan mengonfigurasi aturan di dalam daftar kontrol akses AWS WAF web (ACL). Anda kemudian melindungi aplikasi web dengan mengaitkan ACL web ke dalamnya. Contoh sumber daya aplikasi web yang dapat Anda lindungi AWS WAF termasuk CloudFront distribusi Amazon, Amazon API Gateway REST APIs, dan Application Load Balancer. Untuk informasi selengkapnya AWS WAF, lihat [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html)di *panduan AWS WAF pengembang*.

AWS WAF log mencakup informasi tentang lalu lintas yang dianalisis oleh ACL web Anda, seperti waktu yang AWS WAF menerima permintaan dari AWS sumber daya Anda, informasi rinci tentang permintaan, dan tindakan untuk aturan yang dicocokkan oleh setiap permintaan.

Anda dapat mengonfigurasi ACL AWS WAF web untuk mempublikasikan log ke salah satu dari beberapa tujuan, tempat Anda dapat menanyakan dan melihatnya. *Untuk informasi selengkapnya tentang mengonfigurasi pencatatan ACL web dan konten AWS WAF log, lihat [Mencatat lalu lintas ACL AWS WAF web di panduan](https://docs.aws.amazon.com/waf/latest/developerguide/logging.html) pengembang.AWS WAF *

Untuk informasi tentang cara menggunakan Athena untuk menganalisis AWS WAF log untuk wawasan tentang deteksi ancaman dan potensi serangan keamanan, lihat posting Blog AWS Networking & Content Delivery [Cara menggunakan kueri Amazon Athena untuk menganalisis AWS WAF log dan menyediakan visibilitas yang diperlukan untuk](https://aws.amazon.com/blogs/networking-and-content-delivery/how-to-use-amazon-athena-queries-to-analyze-aws-waf-logs-and-provide-the-visibility-needed-for-threat-detection/) deteksi ancaman.

Untuk contoh cara menggabungkan AWS WAF log ke dalam repositori data lake pusat dan menanyakannya dengan Athena, lihat posting Blog AWS Big Data [Menganalisis AWS WAF log dengan Layanan, OpenSearch Amazon Athena,](https://aws.amazon.com/blogs/big-data/analyzing-aws-waf-logs-with-amazon-es-amazon-athena-and-amazon-quicksight/) dan Cepat.

Topik ini memberikan contoh `CREATE TABLE` pernyataan untuk proyeksi partisi, partisi manual, dan salah satu yang tidak menggunakan partisi apapun.

**catatan**  
`CREATE TABLE`Pernyataan dalam topik ini dapat digunakan untuk AWS WAF log v1 dan v2. Di v1, `webaclid` bidang berisi ID. Di v2, `webaclid` bidang berisi ARN lengkap. `CREATE TABLE`Pernyataan di sini memperlakukan konten ini secara agnostik dengan menggunakan tipe data. `string`

**Topics**
+ [Buat tabel untuk log AWS WAF S3 di Athena menggunakan proyeksi partisi](create-waf-table-partition-projection.md)
+ [Buat tabel untuk log AWS WAF S3 di Athena menggunakan partisi manual](create-waf-table-manual-partition.md)
+ [Buat tabel untuk AWS WAF log tanpa partisi](create-waf-table.md)
+ [Contoh kueri untuk log AWS WAF](query-examples-waf-logs.md)

# Buat tabel untuk log AWS WAF S3 di Athena menggunakan proyeksi partisi
<a name="create-waf-table-partition-projection"></a>

[Karena AWS WAF log memiliki struktur yang diketahui yang skema partisi dapat Anda tentukan sebelumnya, Anda dapat mengurangi runtime kueri dan mengotomatiskan manajemen partisi dengan menggunakan fitur proyeksi partisi Athena.](partition-projection.md) Proyeksi partisi secara otomatis menambahkan partisi baru saat data baru ditambahkan. Ini menghapus kebutuhan bagi Anda untuk menambahkan partisi secara manual dengan menggunakan`ALTER TABLE ADD PARTITION`. 

`CREATE TABLE`Pernyataan contoh berikut secara otomatis menggunakan proyeksi partisi pada AWS WAF log dari tanggal tertentu hingga saat ini untuk empat AWS wilayah yang berbeda. `PARTITION BY`Klausul dalam contoh ini partisi berdasarkan wilayah dan tanggal, tetapi Anda dapat memodifikasi ini sesuai dengan kebutuhan Anda. Ubah bidang seperlunya agar sesuai dengan keluaran log Anda. Di `storage.location.template` klausa `LOCATION` dan, ganti placeholder *amzn-s3-demo-bucket* dan *AWS\$1ACCOUNT\$1NUMBER* placeholder dengan nilai yang mengidentifikasi lokasi bucket Amazon S3 log Anda. AWS WAF Untuk`projection.day.range`, ganti *2021**01*//*01*dengan tanggal mulai yang ingin Anda gunakan. Setelah Anda menjalankan kueri dengan sukses, Anda dapat meminta tabel. Anda tidak perlu menjalankan `ALTER TABLE ADD PARTITION` untuk memuat partisi. 

```
CREATE EXTERNAL TABLE `waf_logs_partition_projection`(
  `timestamp` bigint, 
  `formatversion` int, 
  `webaclid` string, 
  `terminatingruleid` string, 
  `terminatingruletype` string, 
  `action` string, 
  `terminatingrulematchdetails` array<struct<conditiontype:string,sensitivitylevel:string,location:string,matcheddata:array<string>>>, 
  `httpsourcename` string, 
  `httpsourceid` string, 
  `rulegrouplist` array<struct<rulegroupid:string,terminatingrule:struct<ruleid:string,action:string,rulematchdetails:array<struct<conditiontype:string,sensitivitylevel:string,location:string,matcheddata:array<string>>>>,nonterminatingmatchingrules:array<struct<ruleid:string,action:string,overriddenaction:string,rulematchdetails:array<struct<conditiontype:string,sensitivitylevel:string,location:string,matcheddata:array<string>>>,challengeresponse:struct<responsecode:string,solvetimestamp:string>,captcharesponse:struct<responsecode:string,solvetimestamp:string>>>,excludedrules:string>>, 
  `ratebasedrulelist` array<struct<ratebasedruleid:string,limitkey:string,maxrateallowed:int>>, 
  `nonterminatingmatchingrules` array<struct<ruleid:string,action:string,rulematchdetails:array<struct<conditiontype:string,sensitivitylevel:string,location:string,matcheddata:array<string>>>,challengeresponse:struct<responsecode:string,solvetimestamp:string>,captcharesponse:struct<responsecode:string,solvetimestamp:string>>>, 
  `requestheadersinserted` array<struct<name:string,value:string>>, 
  `responsecodesent` string, 
  `httprequest` struct<clientip:string,country:string,headers:array<struct<name:string,value:string>>,uri:string,args:string,httpversion:string,httpmethod:string,requestid:string,fragment:string,scheme:string,host:string>,
  `labels` array<struct<name:string>>, 
  `captcharesponse` struct<responsecode:string,solvetimestamp:string,failurereason:string>, 
  `challengeresponse` struct<responsecode:string,solvetimestamp:string,failurereason:string>, 
  `ja3fingerprint` string, 
  `ja4fingerprint` string, 
  `oversizefields` string, 
  `requestbodysize` int, 
  `requestbodysizeinspectedbywaf` int)
  PARTITIONED BY ( 
   `log_time` string)
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_NUMBER/WAFLogs/cloudfront/testui/'
TBLPROPERTIES (
 'projection.enabled'='true',
  'projection.log_time.format'='yyyy/MM/dd/HH/mm',
  'projection.log_time.interval'='1',
  'projection.log_time.interval.unit'='minutes',
  'projection.log_time.range'='2025/01/01/00/00,NOW',
  'projection.log_time.type'='date',
  'storage.location.template'='s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_NUMBER/WAFLogs/cloudfront/testui/${log_time}')
```

**catatan**  
Format jalur dalam `LOCATION` klausa dalam contoh adalah standar tetapi dapat bervariasi berdasarkan AWS WAF konfigurasi yang telah Anda terapkan. Misalnya, jalur AWS WAF log contoh berikut adalah untuk CloudFront distribusi:   

```
s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_NUMBER/WAFLogs/cloudfront/cloudfronyt/2025/01/01/00/00/
```
Jika Anda mengalami masalah saat membuat atau menanyakan tabel AWS WAF log Anda, konfirmasikan lokasi data log atau [kontak Dukungan](https://console.aws.amazon.com/support/home/) Anda.

Untuk informasi selengkapnya tentang proyek partisi, lihat [Gunakan proyeksi partisi dengan Amazon Athena](partition-projection.md).

# Buat tabel untuk log AWS WAF S3 di Athena menggunakan partisi manual
<a name="create-waf-table-manual-partition"></a>

Bagian ini menjelaskan cara membuat tabel untuk AWS WAF log menggunakan partisi manual.

Di `storage.location.template` klausa `LOCATION` dan, ganti placeholder *amzn-s3-demo-bucket* dan *AWS\$1ACCOUNT\$1NUMBER* placeholder dengan nilai yang mengidentifikasi lokasi bucket Amazon S3 log Anda. AWS WAF 

```
CREATE EXTERNAL TABLE `waf_logs_manual_partition`(
  `timestamp` bigint, 
  `formatversion` int, 
  `webaclid` string, 
  `terminatingruleid` string, 
  `terminatingruletype` string, 
  `action` string, 
  `terminatingrulematchdetails` array<struct<conditiontype:string,sensitivitylevel:string,location:string,matcheddata:array<string>>>, 
  `httpsourcename` string, 
  `httpsourceid` string, 
  `rulegrouplist` array<struct<rulegroupid:string,terminatingrule:struct<ruleid:string,action:string,rulematchdetails:array<struct<conditiontype:string,sensitivitylevel:string,location:string,matcheddata:array<string>>>>,nonterminatingmatchingrules:array<struct<ruleid:string,action:string,overriddenaction:string,rulematchdetails:array<struct<conditiontype:string,sensitivitylevel:string,location:string,matcheddata:array<string>>>,challengeresponse:struct<responsecode:string,solvetimestamp:string>,captcharesponse:struct<responsecode:string,solvetimestamp:string>>>,excludedrules:string>>, 
  `ratebasedrulelist` array<struct<ratebasedruleid:string,limitkey:string,maxrateallowed:int>>, 
  `nonterminatingmatchingrules` array<struct<ruleid:string,action:string,rulematchdetails:array<struct<conditiontype:string,sensitivitylevel:string,location:string,matcheddata:array<string>>>,challengeresponse:struct<responsecode:string,solvetimestamp:string>,captcharesponse:struct<responsecode:string,solvetimestamp:string>>>, 
  `requestheadersinserted` array<struct<name:string,value:string>>, 
  `responsecodesent` string, 
  `httprequest` struct<clientip:string,country:string,headers:array<struct<name:string,value:string>>,uri:string,args:string,httpversion:string,httpmethod:string,requestid:string,fragment:string,scheme:string,host:string>, 
  `labels` array<struct<name:string>>, 
  `captcharesponse` struct<responsecode:string,solvetimestamp:string,failurereason:string>, 
  `challengeresponse` struct<responsecode:string,solvetimestamp:string,failurereason:string>, 
  `ja3fingerprint` string, 
  `ja4fingerprint` string, 
  `oversizefields` string, 
  `requestbodysize` int, 
  `requestbodysizeinspectedbywaf` int)
  PARTITIONED BY ( `year` string, `month` string, `day` string, `hour` string, `min` string)
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_NUMBER/WAFLogs/cloudfront/webacl/'
```

# Buat tabel untuk AWS WAF log tanpa partisi
<a name="create-waf-table"></a>

Bagian ini menjelaskan cara membuat tabel untuk AWS WAF log tanpa partisi atau proyeksi partisi.

**catatan**  
Untuk alasan kinerja dan biaya, kami tidak menyarankan menggunakan skema non-partisi untuk kueri. Untuk informasi lebih lanjut, lihat [10 Tips Tuning Kinerja Terbaik untuk Amazon](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/) Athena di Blog Big AWS Data.

**Untuk membuat AWS WAF tabel**

1. Salin dan tempel pernyataan DDL berikut ke konsol Athena. Ubah bidang seperlunya agar sesuai dengan keluaran log Anda. `LOCATION`Ubah bucket Amazon S3 agar sesuai dengan bucket yang menyimpan log Anda.

   Kueri ini menggunakan[OpenX JSON SerDe](openx-json-serde.md).
**catatan**  
 SerDe Mengharapkan setiap dokumen JSON berada pada satu baris teks tanpa karakter penghentian baris yang memisahkan bidang dalam catatan. Jika teks JSON dalam format cetak cantik, Anda mungkin menerima pesan kesalahan seperti HIVE\$1CURSOR\$1ERROR: Row is not a valid JSON Object or HIVE\$1CURSOR\$1ERROR:: Unexpected JsonParseException end-of-input: expected close marker for OBJECT saat Anda mencoba menanyakan tabel setelah Anda membuatnya. Untuk informasi selengkapnya, lihat [File Data JSON](https://github.com/rcongiu/Hive-JSON-Serde#json-data-files) di dokumentasi SerDe OpenX. GitHub 

   ```
   CREATE EXTERNAL TABLE `waf_logs`(
     `timestamp` bigint,
     `formatversion` int,
     `webaclid` string,
     `terminatingruleid` string,
     `terminatingruletype` string,
     `action` string,
     `terminatingrulematchdetails` array <
                                       struct <
                                           conditiontype: string,
                                           sensitivitylevel: string,
                                           location: string,
                                           matcheddata: array < string >
                                             >
                                        >,
     `httpsourcename` string,
     `httpsourceid` string,
     `rulegrouplist` array <
                         struct <
                             rulegroupid: string,
                             terminatingrule: struct <
                                                 ruleid: string,
                                                 action: string,
                                                 rulematchdetails: array <
                                                                      struct <
                                                                          conditiontype: string,
                                                                          sensitivitylevel: string,
                                                                          location: string,
                                                                          matcheddata: array < string >
                                                                             >
                                                                       >
                                                   >,
                             nonterminatingmatchingrules: array <
                                                                 struct <
                                                                     ruleid: string,
                                                                     action: string,
                                                                     overriddenaction: string,
                                                                     rulematchdetails: array <
                                                                                          struct <
                                                                                              conditiontype: string,
                                                                                              sensitivitylevel: string,
                                                                                              location: string,
                                                                                              matcheddata: array < string >
                                                                                                 >
                                                                      >,
                                                                     challengeresponse: struct <
                                                                               responsecode: string,
                                                                               solvetimestamp: string
                                                                                 >,
                                                                     captcharesponse: struct <
                                                                               responsecode: string,
                                                                               solvetimestamp: string
                                                                                 >
                                                                       >
                                                                >,
                             excludedrules: string
                               >
                          >,
   `ratebasedrulelist` array <
                            struct <
                                ratebasedruleid: string,
                                limitkey: string,
                                maxrateallowed: int
                                  >
                             >,
     `nonterminatingmatchingrules` array <
                                       struct <
                                           ruleid: string,
                                           action: string,
                                           rulematchdetails: array <
                                                                struct <
                                                                    conditiontype: string,
                                                                    sensitivitylevel: string,
                                                                    location: string,
                                                                    matcheddata: array < string >
                                                                       >
                                                                >,
                                           challengeresponse: struct <
                                                               responsecode: string,
                                                               solvetimestamp: string
                                                                >,
                                           captcharesponse: struct <
                                                               responsecode: string,
                                                               solvetimestamp: string
                                                                >
                                             >
                                        >,
     `requestheadersinserted` array <
                                   struct <
                                       name: string,
                                       value: string
                                         >
                                    >,
     `responsecodesent` string,
     `httprequest` struct <
                       clientip: string,
                       country: string,
                       headers: array <
                                   struct <
                                       name: string,
                                       value: string
                                         >
                                    >,
                       uri: string,
                       args: string,
                       httpversion: string,
                       httpmethod: string,
                       requestid: string
                         >,
     `labels` array <
                  struct <
                      name: string
                        >
                   >,
     `captcharesponse` struct <
                           responsecode: string,
                           solvetimestamp: string,
                           failureReason: string
                             >,
     `challengeresponse` struct <
                           responsecode: string,
                           solvetimestamp: string,
                           failureReason: string
                           >,
     `ja3Fingerprint` string,
     `oversizefields` string,
     `requestbodysize` int,
     `requestbodysizeinspectedbywaf` int
   )
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
   STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
   OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION 's3://amzn-s3-demo-bucket/prefix/'
   ```

1. Jalankan `CREATE EXTERNAL TABLE` pernyataan di editor kueri konsol Athena. Ini mendaftarkan`waf_logs`tabel dan membuat data di dalamnya tersedia untuk pertanyaan dari Athena.

# Contoh kueri untuk log AWS WAF
<a name="query-examples-waf-logs"></a>

Banyak contoh query di bagian ini menggunakan tabel proyeksi partisi yang dibuat sebelumnya. Ubah nama tabel, nilai kolom, dan variabel lain dalam contoh sesuai dengan kebutuhan Anda. Untuk meningkatkan performa permintaan Anda dan mengurangi biaya, menambahkan kolom partisi dalam syarat filter.

**Topics**
+ [Hitung perujuk, alamat IP, atau aturan yang cocok](query-examples-waf-logs-count.md)
+ [Kueri menggunakan tanggal dan waktu](query-examples-waf-logs-date-time.md)
+ [Kueri untuk permintaan atau alamat yang diblokir](query-examples-waf-logs-blocked-requests.md)

# Hitung perujuk, alamat IP, atau aturan yang cocok
<a name="query-examples-waf-logs-count"></a>

Contoh di bagian ini meminta jumlah item log yang menarik.
+ [Count the number of referrers that contain a specified term](#waf-example-count-referrers-with-specified-term)
+ [Count all matched IP addresses in the last 10 days that have matched excluded rules](#waf-example-count-matched-ip-addresses)
+ [Group all counted managed rules by the number of times matched](#waf-example-group-managed-rules-by-times-matched)
+ [Group all counted custom rules by number of times matched](#waf-example-group-custom-rules-by-times-matched)

**Example — Hitung jumlah perujuk yang berisi istilah tertentu**  
Kueri berikut menghitung jumlah perujuk yang berisi istilah “amazon” untuk rentang tanggal yang ditentukan.  

```
WITH test_dataset AS 
  (SELECT header FROM waf_logs
    CROSS JOIN UNNEST(httprequest.headers) AS t(header) WHERE "date" >= '2021/03/01'
    AND "date" < '2021/03/31')
SELECT COUNT(*) referer_count 
FROM test_dataset 
WHERE LOWER(header.name)='referer' AND header.value LIKE '%amazon%'
```

**Example — Hitung semua alamat IP yang cocok dalam 10 hari terakhir yang telah cocok dengan aturan yang dikecualikan**  
Kueri berikut menghitung jumlah kali dalam 10 hari terakhir bahwa alamat IP cocok aturan dikecualikan dalam grup aturan.   

```
WITH test_dataset AS 
  (SELECT * FROM waf_logs 
    CROSS JOIN UNNEST(rulegrouplist) AS t(allrulegroups))
SELECT 
  COUNT(*) AS count, 
  "httprequest"."clientip", 
  "allrulegroups"."excludedrules",
  "allrulegroups"."ruleGroupId"
FROM test_dataset 
WHERE allrulegroups.excludedrules IS NOT NULL AND from_unixtime(timestamp/1000) > now() - interval '10' day
GROUP BY "httprequest"."clientip", "allrulegroups"."ruleGroupId", "allrulegroups"."excludedrules"
ORDER BY count DESC
```

**Example — Kelompokkan semua aturan terkelola yang dihitung dengan berapa kali dicocokkan**  
Jika Anda menetapkan tindakan aturan grup aturan ke Hitung dalam konfigurasi ACL web Anda sebelum 27 Oktober 2022, AWS WAF simpan penggantian Anda di web ACL JSON sebagai. `excludedRules` Sekarang, pengaturan JSON untuk mengganti aturan ke Count ada di `ruleActionOverrides` pengaturan. Untuk informasi selengkapnya, lihat [Penggantian tindakan di grup aturan di Panduan AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-rule-group-override-options.html) *Pengembang*. Untuk mengekstrak aturan terkelola dalam mode Hitung dari struktur log baru, kueri `nonTerminatingMatchingRules` di `ruleGroupList` bagian alih-alih `excludedRules` bidang, seperti pada contoh berikut.  

```
SELECT
 count(*) AS count,
 httpsourceid,
 httprequest.clientip,
 t.rulegroupid, 
 t.nonTerminatingMatchingRules
FROM "waf_logs" 
CROSS JOIN UNNEST(rulegrouplist) AS t(t) 
WHERE action <> 'BLOCK' AND cardinality(t.nonTerminatingMatchingRules) > 0 
GROUP BY t.nonTerminatingMatchingRules, action, httpsourceid, httprequest.clientip, t.rulegroupid 
ORDER BY "count" DESC 
Limit 50
```

**Example — Kelompokkan semua aturan kustom yang dihitung dengan berapa kali cocok**  
Kelompok kueri berikut semua menghitung aturan kustom dengan berapa kali cocok.  

```
SELECT
  count(*) AS count,
         httpsourceid,
         httprequest.clientip,
         t.ruleid,
         t.action
FROM "waf_logs" 
CROSS JOIN UNNEST(nonterminatingmatchingrules) AS t(t) 
WHERE action <> 'BLOCK' AND cardinality(nonTerminatingMatchingRules) > 0 
GROUP BY t.ruleid, t.action, httpsourceid, httprequest.clientip 
ORDER BY "count" DESC
Limit 50
```

Untuk informasi tentang lokasi log untuk aturan kustom dan grup aturan terkelola, lihat [Memantau dan menyetel](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-testing-activities.html) di *Panduan AWS WAF Pengembang*.

# Kueri menggunakan tanggal dan waktu
<a name="query-examples-waf-logs-date-time"></a>

Contoh di bagian ini mencakup kueri yang menggunakan nilai tanggal dan waktu.
+ [Return the timestamp field in human-readable ISO 8601 format](#waf-example-return-human-readable-timestamp)
+ [Return records from the last 24 hours](#waf-example-return-records-last-24-hours)
+ [Return records for a specified date range and IP address](#waf-example-return-records-date-range-and-ip)
+ [For a specified date range, count the number of IP addresses in five minute intervals](#waf-example-count-ip-addresses-in-date-range)
+ [Count the number of X-Forwarded-For IP in the last 10 days](#waf-example-count-x-forwarded-for-ip)

**Example — Kembalikan bidang stempel waktu dalam format ISO 8601 yang dapat dibaca manusia**  
Kueri berikut menggunakan`from_unixtime`dan`to_iso8601`fungsi untuk mengembalikan`timestamp`dalam format ISO 8601 yang dapat dibaca manusia (misalnya,`2019-12-13T23:40:12.000Z`Sebagai gantinya`1576280412771`). kueri juga mengembalikan nama sumber HTTP, sumber ID, dan permintaan.   

```
SELECT to_iso8601(from_unixtime(timestamp / 1000)) as time_ISO_8601,
       httpsourcename,
       httpsourceid,
       httprequest
FROM waf_logs
LIMIT 10;
```

**Example — Kembalikan catatan dari 24 jam terakhir**  
Kueri berikut menggunakan filter di`WHERE`klausa untuk mengembalikan nama sumber HTTP, ID sumber HTTP, dan bidang permintaan HTTP untuk catatan dari 24 jam terakhir.  

```
SELECT to_iso8601(from_unixtime(timestamp/1000)) AS time_ISO_8601, 
       httpsourcename, 
       httpsourceid, 
       httprequest 
FROM waf_logs
WHERE from_unixtime(timestamp/1000) > now() - interval '1' day
LIMIT 10;
```

**Example — Kembalikan catatan untuk rentang tanggal dan alamat IP yang ditentukan**  
Kueri berikut mencantumkan catatan dalam rentang tanggal yang ditentukan untuk alamat IP klien tertentu.  

```
SELECT * 
FROM waf_logs 
WHERE httprequest.clientip='53.21.198.66' AND "date" >= '2021/03/01' AND "date" < '2021/03/31'
```

**Example — Untuk rentang tanggal tertentu, hitung jumlah alamat IP dalam interval lima menit**  
Kueri berikut menghitung, untuk rentang tanggal tertentu, jumlah alamat IP dalam interval lima menit.  

```
WITH test_dataset AS 
  (SELECT 
     format_datetime(from_unixtime((timestamp/1000) - ((minute(from_unixtime(timestamp / 1000))%5) * 60)),'yyyy-MM-dd HH:mm') AS five_minutes_ts,
     "httprequest"."clientip" 
     FROM waf_logs 
     WHERE "date" >= '2021/03/01' AND "date" < '2021/03/31')
SELECT five_minutes_ts,"clientip",count(*) ip_count 
FROM test_dataset 
GROUP BY five_minutes_ts,"clientip"
```

**Example — Hitung jumlah X-Forwarded-For IP dalam 10 hari terakhir**  
Kueri berikut memfilter header permintaan dan menghitung jumlah X-Forwarded-For IP dalam 10 hari terakhir.  

```
WITH test_dataset AS
  (SELECT header
   FROM waf_logs
   CROSS JOIN UNNEST (httprequest.headers) AS t(header)
   WHERE from_unixtime("timestamp"/1000) > now() - interval '10' DAY) 
SELECT header.value AS ip,
       count(*) AS COUNT 
FROM test_dataset 
WHERE header.name='X-Forwarded-For' 
GROUP BY header.value 
ORDER BY COUNT DESC
```

Untuk informasi selengkapnya tentang fungsi tanggal dan waktu, lihat [Fungsi dan operator tanggal dan waktu](https://trino.io/docs/current/functions/datetime.html) dalam dokumentasi Trino.

# Kueri untuk permintaan atau alamat yang diblokir
<a name="query-examples-waf-logs-blocked-requests"></a>

Contoh di bagian ini meminta permintaan atau alamat yang diblokir.
+ [Extract the top 100 IP addresses blocked by a specified rule type](#waf-example-extract-top-100-blocked-ip-by-rule)
+ [Count the number of times a request from a specified country has been blocked](#waf-example-count-request-blocks-from-country)
+ [Count the number of times a request has been blocked, grouping by specific attributes](#waf-example-count-request-blocks-by-attribute)
+ [Count the number of times a specific terminating rule ID has been matched](#waf-example-count-terminating-rule-id-matches)
+ [Retrieve the top 100 IP addresses blocked during a specified date range](#waf-example-top-100-ip-addresses-blocked-for-date-range)

**Example — Ekstrak 100 alamat IP teratas yang diblokir oleh jenis aturan tertentu**  
Kueri berikut ekstrak dan menghitung atas 100 alamat IP yang telah diblokir oleh`RATE_BASED`mengakhiri aturan selama rentang tanggal yang ditentukan.  

```
SELECT COUNT(httpRequest.clientIp) as count,
httpRequest.clientIp
FROM waf_logs
WHERE terminatingruletype='RATE_BASED' AND action='BLOCK' and "date" >= '2021/03/01'
AND "date" < '2021/03/31'
GROUP BY httpRequest.clientIp
ORDER BY count DESC
LIMIT 100
```

**Example — Hitung berapa kali permintaan dari negara tertentu telah diblokir**  
Kueri berikut menghitung jumlah kali permintaan telah tiba dari alamat IP milik Irlandia (IE) dan telah diblokir oleh`RATE_BASED`mengakhiri aturan.  

```
SELECT 
  COUNT(httpRequest.country) as count, 
  httpRequest.country 
FROM waf_logs
WHERE 
  terminatingruletype='RATE_BASED' AND 
  httpRequest.country='IE'
GROUP BY httpRequest.country
ORDER BY count
LIMIT 100;
```

**Example — Hitung berapa kali permintaan diblokir, dikelompokkan berdasarkan atribut tertentu**  
Kueri berikut menghitung berapa kali permintaan telah diblokir, dengan hasil dikelompokkan berdasarkan WebACL,, Clientip RuleId, dan HTTP Request URI.  

```
SELECT 
  COUNT(*) AS count,
  webaclid,
  terminatingruleid,
  httprequest.clientip,
  httprequest.uri
FROM waf_logs
WHERE action='BLOCK'
GROUP BY webaclid, terminatingruleid, httprequest.clientip, httprequest.uri
ORDER BY count DESC
LIMIT 100;
```

**Example — Hitung berapa kali ID aturan penghentian tertentu telah dicocokkan**  
Kueri berikut menghitung berapa kali ID aturan terminating tertentu telah dicocokkan (`WHERE terminatingruleid='e9dd190d-7a43-4c06-bcea-409613d9506e'`). Kueri kemudian grup hasil dengan WebACL, Action, ClientIP, dan HTTP Request URI.  

```
SELECT 
  COUNT(*) AS count,
  webaclid,
  action,
  httprequest.clientip,
  httprequest.uri
FROM waf_logs
WHERE terminatingruleid='e9dd190d-7a43-4c06-bcea-409613d9506e'
GROUP BY webaclid, action, httprequest.clientip, httprequest.uri
ORDER BY count DESC
LIMIT 100;
```

**Example — Ambil 100 alamat IP teratas yang diblokir selama rentang tanggal tertentu**  
Kueri berikut ekstrak atas 100 alamat IP yang telah diblokir untuk rentang tanggal yang ditentukan. Kueri juga mencantumkan berapa kali alamat IP telah diblokir.  

```
SELECT "httprequest"."clientip", "count"(*) "ipcount", "httprequest"."country"
FROM waf_logs
WHERE "action" = 'BLOCK' and "date" >= '2021/03/01'
AND "date" < '2021/03/31'
GROUP BY "httprequest"."clientip", "httprequest"."country"
ORDER BY "ipcount" DESC limit 100
```

Untuk informasi selengkapnya tentang CloudTrail dan Amazon S3, lihat topik berikut:
+ [Bagaimana cara menganalisis log akses server Amazon S3 menggunakan Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/analyze-logs-athena/)di AWS Pusat Pengetahuan
+ [Menanyakan log akses Amazon S3 untuk permintaan menggunakan Amazon Athena](https://docs.aws.amazon.com/AmazonS3/latest/dev/using-s3-access-logs-to-identify-requests.html#querying-s3-access-logs-for-requests) di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon
+ [Menggunakan AWS CloudTrail untuk mengidentifikasi permintaan Amazon S3 di Panduan](https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudtrail-request-identification.html) Pengguna Layanan Penyimpanan Sederhana Amazon