

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

# 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
```