

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

# Grok SerDe
<a name="grok-serde"></a>

Logstash Grok SerDe adalah perpustakaan dengan serangkaian pola khusus untuk deserialisasi data teks tidak terstruktur, biasanya log. Setiap pola Grok adalah ekspresi reguler bernama. Anda dapat mengidentifikasi dan menggunakan kembali pola deserialisasi ini sesuai kebutuhan. Ini membuatnya lebih mudah untuk menggunakan Grok dibandingkan dengan menggunakan ekspresi reguler. Grok menyediakan satu set pola yang [telah ditentukan sebelumnya](https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns). Anda juga dapat membuat pola khusus.

## Nama pustaka serialisasi
<a name="library-name"></a>

Nama perpustakaan serialisasi untuk Grok SerDe adalah. `com.amazonaws.glue.serde.GrokSerDe`

## Cara menggunakan Grok SerDe
<a name="grok-serde-using"></a>

Untuk menentukan Grok SerDe saat membuat tabel di Athena, gunakan `ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe'` klausa, diikuti dengan klausa `WITH SERDEPROPERTIES` yang menentukan pola yang cocok dalam data Anda, di mana:
+ `input.format`Ekspresi mendefinisikan pola yang cocok dalam data. Ini wajib diisi.
+ `input.grokCustomPatterns`Ekspresi mendefinisikan pola kustom bernama, yang selanjutnya dapat Anda gunakan dalam `input.format` ekspresi. Ini opsional. Untuk menyertakan beberapa entri pola ke dalam `input.grokCustomPatterns` ekspresi, gunakan karakter escape baris baru (`\n`) untuk memisahkannya, sebagai berikut:. `'input.grokCustomPatterns'='INSIDE_QS ([^\"]*){{\n}}INSIDE_BRACKETS ([^\\]]*)')`
+ `OUTPUTFORMAT`Klausul `STORED AS INPUTFORMAT` dan diperlukan.
+ `LOCATION`Klausa menentukan bucket Amazon S3, yang dapat berisi beberapa objek data. Semua objek data dalam bucket dideserialisasi untuk membuat tabel.

## Contoh
<a name="examples"></a>

Contoh di bagian ini bergantung pada daftar pola Grok yang telah ditentukan. Untuk informasi lebih lanjut, lihat [pola grok di GitHub .com](https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns).

### Contoh 1
<a name="example-1"></a>

Contoh ini menggunakan data sumber dari entri maillog Postfix yang disimpan di. `s3://amzn-s3-demo-bucket/groksample/`

```
Feb  9 07:15:00 m4eastmail postfix/smtpd[19305]: B88C4120838: connect from unknown[192.168.55.4]
Feb  9 07:15:00 m4eastmail postfix/smtpd[20444]: B58C4330038: client=unknown[192.168.55.4]
Feb  9 07:15:03 m4eastmail postfix/cleanup[22835]: BDC22A77854: message-id=<31221401257553.5004389LCBF@m4eastmail.example.com>
```

Pernyataan berikut membuat tabel di Athena dipanggil `mygroktable` dari sumber data, menggunakan pola kustom dan pola standar yang Anda tentukan:

```
CREATE EXTERNAL TABLE `mygroktable`(
   syslogbase string,
   queue_id string,
   syslog_message string
   )
ROW FORMAT SERDE
   'com.amazonaws.glue.serde.GrokSerDe'
WITH SERDEPROPERTIES (
   'input.grokCustomPatterns' = 'POSTFIX_QUEUEID [0-9A-F]{7,12}',
   'input.format'='%{SYSLOGBASE} %{POSTFIX_QUEUEID:queue_id}: %{GREEDYDATA:syslog_message}'
   )
STORED AS INPUTFORMAT
   'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
   'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
   's3://amzn-s3-demo-bucket/{{groksample}}/';
```

Mulailah dengan pola seperti `%{NOTSPACE:column}` untuk mendapatkan kolom dipetakan terlebih dahulu, dan kemudian mengkhususkan kolom jika diperlukan.

### Contoh 2
<a name="example-2"></a>

Dalam contoh berikut, Anda membuat kueri untuk log Log4j. Contoh log memiliki entri dalam format ini:

```
2017-09-12 12:10:34,972 INFO  - processType=AZ, processId=ABCDEFG614B6F5E49, status=RUN,
threadId=123:amqListenerContainerPool23P:AJ|ABCDE9614B6F5E49||2017-09-12T12:10:11.172-0700],
executionTime=7290, tenantId=12456, userId=123123f8535f8d76015374e7a1d87c3c, shard=testapp1,
jobId=12312345e5e7df0015e777fb2e03f3c, messageType=REAL_TIME_SYNC,
action=receive, hostname=1.abc.def.com
```

Untuk menanyakan data log ini:
+ Tambahkan pola Grok ke `input.format` untuk setiap kolom. Misalnya, untuk`timestamp`, tambahkan`%{TIMESTAMP_ISO8601:timestamp}`. Untuk`loglevel`, tambahkan`%{LOGLEVEL:loglevel}`.
+ Pastikan pola di `input.format` cocok dengan format log persis, dengan memetakan tanda hubung (`-`) dan koma yang memisahkan entri dalam format log.

  ```
  CREATE EXTERNAL TABLE bltest (
   timestamp STRING,
   loglevel STRING,
   processtype STRING,
   processid STRING,
   status STRING,
   threadid STRING,
   executiontime INT,
   tenantid INT,
   userid STRING,
   shard STRING,
   jobid STRING,
   messagetype STRING,
   action STRING,
   hostname STRING
   )
  ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe'
  WITH SERDEPROPERTIES (
  "input.grokCustomPatterns" = 'C_ACTION receive|send',
  "input.format" = "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} - processType=%{NOTSPACE:processtype}, processId=%{NOTSPACE:processid}, status=%{NOTSPACE:status}, threadId=%{NOTSPACE:threadid}, executionTime=%{POSINT:executiontime}, tenantId=%{POSINT:tenantid}, userId=%{NOTSPACE:userid}, shard=%{NOTSPACE:shard}, jobId=%{NOTSPACE:jobid}, messageType=%{NOTSPACE:messagetype}, action=%{C_ACTION:action}, hostname=%{HOST:hostname}"
  ) STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
  OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
  LOCATION 's3://amzn-s3-demo-bucket/{{samples}}/';
  ```

### Contoh 3
<a name="example-3"></a>

Contoh berikut `CREATE TABLE` pernyataan [log akses server Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/LogFormat.html) menunjukkan `'input.grokCustomPatterns'` ekspresi yang berisi dua entri pola, dipisahkan oleh karakter escape baris baru (`\n`), seperti yang ditunjukkan dalam cuplikan ini dari contoh kueri:. `'input.grokCustomPatterns'='INSIDE_QS ([^\"]*){{\n}}INSIDE_BRACKETS ([^\\]]*)')`

```
CREATE EXTERNAL TABLE `s3_access_auto_raw_02`(
  `bucket_owner` string COMMENT 'from deserializer', 
  `bucket` string COMMENT 'from deserializer', 
  `time` string COMMENT 'from deserializer', 
  `remote_ip` string COMMENT 'from deserializer', 
  `requester` string COMMENT 'from deserializer', 
  `request_id` string COMMENT 'from deserializer', 
  `operation` string COMMENT 'from deserializer', 
  `key` string COMMENT 'from deserializer', 
  `request_uri` string COMMENT 'from deserializer', 
  `http_status` string COMMENT 'from deserializer', 
  `error_code` string COMMENT 'from deserializer', 
  `bytes_sent` string COMMENT 'from deserializer', 
  `object_size` string COMMENT 'from deserializer', 
  `total_time` string COMMENT 'from deserializer', 
  `turnaround_time` string COMMENT 'from deserializer', 
  `referrer` string COMMENT 'from deserializer', 
  `user_agent` string COMMENT 'from deserializer', 
  `version_id` string COMMENT 'from deserializer')
ROW FORMAT SERDE 
  'com.amazonaws.glue.serde.GrokSerDe' 
WITH SERDEPROPERTIES ( 
  'input.format'='%{NOTSPACE:bucket_owner} %{NOTSPACE:bucket} \\[%{INSIDE_BRACKETS:time}\\] %{NOTSPACE:remote_ip} %{NOTSPACE:requester} %{NOTSPACE:request_id} %{NOTSPACE:operation} %{NOTSPACE:key} \"?%{INSIDE_QS:request_uri}\"? %{NOTSPACE:http_status} %{NOTSPACE:error_code} %{NOTSPACE:bytes_sent} %{NOTSPACE:object_size} %{NOTSPACE:total_time} %{NOTSPACE:turnaround_time} \"?%{INSIDE_QS:referrer}\"? \"?%{INSIDE_QS:user_agent}\"? %{NOTSPACE:version_id}', 
  'input.grokCustomPatterns'='INSIDE_QS ([^\"]*)\nINSIDE_BRACKETS ([^\\]]*)') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://amzn-s3-demo-bucket'
```

## Lihat juga
<a name="grok-serde-see-also"></a>
+ [Memahami Pola Grok](https://edgedelta.com/company/blog/what-are-grok-patterns) (situs web eksternal)
+ [Pola bawaan](https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html#classifier-builtin-patterns) (*Panduan AWS Glue Pengguna*)