

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 에이전트를 사용한 데이터 사전 처리
<a name="pre-processing"></a>

모니터링한 파일에서 구문 분석한 레코드를 Firehose 스트림으로 보내기 전에 에이전트가 사전 처리할 수 있습니다. 파일 흐름에 `dataProcessingOptions` 구성 설정을 추가하여 이 기능을 활성화할 수 있습니다. 하나 이상의 처리 옵션을 추가할 수 있으며, 추가된 옵션은 지정된 순서로 수행됩니다.

에이전트는 다음 처리 옵션을 지원합니다. 에이전트는 오픈 소스이므로, 처리 옵션을 더 개발하고 확장할 수 있습니다. 에이전트는 [Kinesis Agent](https://github.com/awslabs/amazon-kinesis-agent)에서 다운로드할 수 있습니다.처리 옵션

`SINGLELINE`  
줄 바꿈 문자, 선행 공백과 후행 공백을 삭제해 여러 줄 레코드를 한 줄 레코드로 변환합니다.  

```
{
    "optionName": "SINGLELINE"
}
```

`CSVTOJSON`  
구분 기호로 구분된 형식에서 JSON 형식으로 레코드를 변환합니다.  

```
{
    "optionName": "CSVTOJSON",
    "customFieldNames": [ "field1", "field2", ... ],
    "delimiter": "yourdelimiter"
}
```  
`customFieldNames`  
[필수] 각각의 JSON 키 값 쌍에서 키로 사용되는 필드 이름입니다. 예를 들어 `["f1", "f2"]`를 지정하면 레코드 "v1, v2"가 `{"f1":"v1","f2":"v2"}`로 변환됩니다.  
`delimiter`  
레코드에서 구분 기호로 사용되는 문자열입니다. 기본값은 쉼표(,)입니다.

`LOGTOJSON`  
로그 형식에서 JSON 형식으로 레코드를 변환합니다. 지원되는 로그 형식은 **Apache Common Log**, **Apache Combined Log**, **Apache Error Log** 및 **RFC3164 Syslog**입니다.  

```
{
    "optionName": "LOGTOJSON",
    "logFormat": "logformat",
    "matchPattern": "yourregexpattern",
    "customFieldNames": [ "field1", "field2", … ]
}
```  
`logFormat`  
[필수] 로그 항목 형식입니다. 유효한 값은 다음과 같습니다.  
+ `COMMONAPACHELOG` - Apache Common Log 형식입니다. 각 로그 항목에는 기본적으로 "`%{host} %{ident} %{authuser} [%{datetime}] \"%{request}\" %{response} %{bytes}`" 패턴이 있습니다.
+ `COMBINEDAPACHELOG` - Apache Combined Log 형식입니다. 각 로그 항목에는 기본적으로 "`%{host} %{ident} %{authuser} [%{datetime}] \"%{request}\" %{response} %{bytes} %{referrer} %{agent}`" 패턴이 있습니다.
+ `APACHEERRORLOG` - Apache Error Log 형식입니다. 각 로그 항목에는 기본적으로 "`[%{timestamp}] [%{module}:%{severity}] [pid %{processid}:tid %{threadid}] [client: %{client}] %{message}`" 패턴이 있습니다.
+ `SYSLOG` - RFC3164 Syslog 형식입니다. 각 로그 항목에는 기본적으로 "`%{timestamp} %{hostname} %{program}[%{processid}]: %{message}`" 패턴이 있습니다.  
`matchPattern`  
지정된 로그 형식에 대한 기본 패턴을 재정의합니다. 사용자 지정 형식을 사용하는 경우 이 설정을 이용해 로그 항목에서 값을 추출합니다. `matchPattern`을 지정하면 `customFieldNames`도 함께 지정해야 합니다.  
`customFieldNames`  
각각의 JSON 키 값 쌍에서 키로 사용되는 사용자 지정 필드 이름입니다. 이 설정을 사용하여 `matchPattern`에서 추출한 값에 필드 이름을 정의하거나 사전 정의된 로그 형식의 기본 필드 이름을 재정의합니다.

**Example : LOGTOJSON 구성**  <a name="example-logtojson"></a>
다음은 Apache Common Log 항목을 JSON 형식으로 변환하는 `LOGTOJSON` 구성의 예제입니다.  

```
{
    "optionName": "LOGTOJSON",
    "logFormat": "COMMONAPACHELOG"
}
```
변환 전:  

```
64.242.88.10 - - [07/Mar/2004:16:10:02 -0800] "GET /mailman/listinfo/hsdivision HTTP/1.1" 200 6291
```
변환 후:  

```
{"host":"64.242.88.10","ident":null,"authuser":null,"datetime":"07/Mar/2004:16:10:02 -0800","request":"GET /mailman/listinfo/hsdivision HTTP/1.1","response":"200","bytes":"6291"}
```

**Example : 사용자 지정 필드가 있는 LOGTOJSON 구성**  <a name="example-logtojson-custom-fields"></a>
다음은 `LOGTOJSON` 구성의 또 다른 예제입니다.  

```
{
    "optionName": "LOGTOJSON",
    "logFormat": "COMMONAPACHELOG",
    "customFieldNames": ["f1", "f2", "f3", "f4", "f5", "f6", "f7"]
}
```
이 구성 설정을 사용하면 이전 예제의 동일한 Apache Common Log 항목이 다음과 같이 JSON 형식으로 변환됩니다.  

```
{"f1":"64.242.88.10","f2":null,"f3":null,"f4":"07/Mar/2004:16:10:02 -0800","f5":"GET /mailman/listinfo/hsdivision HTTP/1.1","f6":"200","f7":"6291"}
```

**Example : Apache Common Log 항목 변환**  <a name="example-apache-common-log-entry"></a>
다음 흐름 구성은 Apache Common Log 항목을 JSON 형식의 한 줄 레코드로 변환합니다.  

```
{ 
    "flows": [
        {
            "filePattern": "/tmp/app.log*", 
            "deliveryStream": "my-delivery-stream",
            "dataProcessingOptions": [
                {
                    "optionName": "LOGTOJSON",
                    "logFormat": "COMMONAPACHELOG"
                }
            ]
        }
    ] 
}
```

**Example : 여러 줄 레코드 변환**  <a name="example-convert-multi-line"></a>
다음 흐름 구성은 첫 줄이 "`[SEQUENCE=`"로 시작하는 여러 줄 레코드를 구문 분석합니다. 먼저 각각의 레코드가 한 줄 레코드로 변환됩니다. 그런 다음 탭 구분 기호를 기반으로 레코드에서 값이 추출됩니다. 추출된 값은 지정된 `customFieldNames` 값에 매핑되어 JSON 형식의 한 줄 레코드를 형성합니다.  

```
{ 
    "flows": [
        {
            "filePattern": "/tmp/app.log*", 
            "deliveryStream": "my-delivery-stream",
            "multiLineStartPattern": "\\[SEQUENCE=",
            "dataProcessingOptions": [
                {
                    "optionName": "SINGLELINE"
                },
                {
                    "optionName": "CSVTOJSON",
                    "customFieldNames": [ "field1", "field2", "field3" ],
                    "delimiter": "\\t"
                }
            ]
        }
    ] 
}
```

**Example : 일치 패턴이 있는 LOGTOJSON 구성**  <a name="example-logtojson-match-pattern"></a>
다음은 마지막 필드(바이트)가 생략되어 있으며 Apache Common Log 항목을 JSON 형식으로 변환하는 `LOGTOJSON` 구성의 예제입니다.  

```
{
    "optionName": "LOGTOJSON",
    "logFormat": "COMMONAPACHELOG",
    "matchPattern": "^([\\d.]+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] \"(.+?)\" (\\d{3})",
    "customFieldNames": ["host", "ident", "authuser", "datetime", "request", "response"]
}
```
변환 전:  

```
123.45.67.89 - - [27/Oct/2000:09:27:09 -0400] "GET /java/javaResources.html HTTP/1.0" 200
```
변환 후:  

```
{"host":"123.45.67.89","ident":null,"authuser":null,"datetime":"27/Oct/2000:09:27:09 -0400","request":"GET /java/javaResources.html HTTP/1.0","response":"200"}
```