

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

# Firehose 스트림으로 데이터 전송
<a name="basic-write"></a>

이 섹션은 다양한 데이터 소스를 사용하여 Firehose 스트림으로 데이터를 전송하는 방법을 설명합니다. Amazon Data Firehose를 처음 사용하는 경우, 잠시 시간을 내어 [Amazon Data Firehose란?](what-is-this-service.md) 섹션에 설명된 개념과 용어를 익히는 것이 좋습니다.

**참고**  
일부 AWS 서비스는 동일한 리전에 있는 Firehose 스트림에만 메시지와 이벤트를 보낼 수 있습니다. Amazon CloudWatch Logs, CloudWatch Events에 대한 대상을 구성할 때 Firehose 스트림이 옵션으로 표시되지 않는 경우 Firehose 스트림이 다른 서비스와 동일한 리전에 있는지 AWS IoT확인합니다. 각 리전의 서비스 엔드포인트에 대한 자세한 정보는 [Amazon Data Firehose endpoints](https://docs.aws.amazon.com/general/latest/gr/fh.html#fh_region)(Amazon Data Firehose 엔드포인트)를 참조하세요.

다음 데이터 소스에서 Firehose 스트림으로 데이터를 보낼 수 있습니다.

**Topics**
+ [

# 데이터를 전송하도록 Kinesis 에이전트 구성
](writing-with-agents.md)
+ [

# AWS SDK를 사용하여 데이터 전송
](writing-with-sdk.md)
+ [

# Firehose에 CloudWatch Logs 전송
](writing-with-cloudwatch-logs.md)
+ [

# Firehose에 CloudWatch Events 전송
](writing-with-cloudwatch-events.md)
+ [

# Firehose AWS IoT 로 데이터를 전송하도록 구성
](writing-with-iot.md)

# 데이터를 전송하도록 Kinesis 에이전트 구성
<a name="writing-with-agents"></a>

Amazon Kinesis 에이전트는 데이터를 수집하고 Firehose로 전송하는 방법을 보여주는 참조 구현 역할을 하는 독립형 Java 소프트웨어 애플리케이션입니다. 에이전트가 파일 세트를 지속적으로 모니터링하고 새로운 데이터를 Firehose 스트림에 보냅니다. 에이전트는 파일 로테이션, 체크포인팅을 수행하는 방법을 보여주고, 실패할 경우 다시 시도합니다. 적시에 안정적이고 단순한 방식으로 모든 데이터를 전달하는 방법을 보여줍니다. 또한 효과적으로 모니터링하고 스트리밍 프로세스 문제를 해결하도록 Amazon CloudWatch 지표를 내보내는 방법을 보여줍니다. 자세한 내용은 [awslabs/amazon-kinesis-agent](https://github.com/awslabs/amazon-kinesis-agent)를 참조하세요.

기본적으로 줄 바꿈 문자(`'\n'`)를 기반으로 각 파일에서 레코드가 구문 분석됩니다. 그러나 여러 줄 레코드를 구문 분석하도록 에이전트를 구성할 수도 있습니다([에이전트 구성 설정 지정](agent-config-settings.md) 참조).

웹 서버, 로그 서버, 데이터베이스 서버 등 Linux 기반 서버 환경에 에이전트를 설치할 수 있습니다. 에이전트를 설치한 후 모니터링할 파일과 데이터의 Firehose 스트림을 지정하여 에이전트를 구성합니다. 에이전트가 구성되면 파일에서 일관되게 데이터를 수집하고, 안정적으로 Firehose 스트림에 전송합니다.

## 사전 조건
<a name="prereqs"></a>

Kinesis 에이전트 사용을 시작하기 전에 다음 사전 조건을 충족하는지 확인해야 합니다.
+ 사용자 운영 체제가 Amazon Linux 또는 Red Hat Enterprise Linux 버전 7 이상이어야 합니다.
+ 에이전트 버전 2.0.0 이상은 JRE 버전 1.8 이상을 사용해 실행됩니다. 에이전트 버전 1.1.x는 JRE 버전 1.7 이상을 사용해 실행됩니다.
+ Amazon EC2를 사용하여 에이전트를 실행하는 경우 EC2 인스턴스를 시작합니다.
+ 지정한 IAM 역할 또는 AWS 자격 증명에는 에이전트가 Firehose 스트림으로 데이터를 전송하기 위해 Amazon Data Firehose [PutRecordBatch](https://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecordBatch.html) 작업을 수행할 수 있는 권한이 있어야 합니다. 에이전트에 CloudWatch 모니터링을 활성화하는 경우 CloudWatch [PutMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html) 작업을 수행할 권한도 필요합니다. 자세한 내용은 [Amazon Data Firehose를 통한 액세스 제어](controlling-access.md), [Kinesis 에이전트 상태 모니터링](agent-health.md), [Amazon CloudWatch에 대한 인증 및 액세스 제어](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/auth-and-access-control-cw.html)를 참조하세요.

# AWS 자격 증명 관리
<a name="agent-credentials"></a>

다음 방법 중 하나를 사용하여 AWS 자격 증명을 관리합니다.
+ 사용자 지정 자격 증명 공급자를 생성합니다. 자세한 내용은 [사용자 지정 자격 증명 공급자 생성](custom-cred-provider.md)을 참조하세요.
+ EC2 인스턴스를 시작할 때 IAM 역할을 지정합니다.
+ 에이전트를 구성할 때 AWS 자격 증명을 지정합니다(의 구성 표`awsSecretAccessKey`에서 `awsAccessKeyId` 및 항목 참조[에이전트 구성 설정 지정](agent-config-settings.md)).
+ 를 편집`/etc/sysconfig/aws-kinesis-agent`하여 AWS 리전 및 AWS 액세스 키를 지정합니다.
+ EC2 인스턴스가 다른 AWS 계정에 있는 경우 IAM 역할을 생성하여 Amazon Data Firehose 서비스에 대한 액세스를 제공합니다. 에이전트를 구성할 때 해당 역할을 지정합니다([assumeRoleARN](agent-config-settings.md#assumeRoleARN) 및 [assumeRoleExternalId](agent-config-settings.md#assumeRoleExternalId) 참조). 이전 방법 중 하나를 사용하여이 역할을 수임할 권한이 있는 다른 계정의 사용자의 AWS 자격 증명을 지정합니다.

# 사용자 지정 자격 증명 공급자 생성
<a name="custom-cred-provider"></a>

사용자 지정 자격 증명 공급자를 생성하고 `userDefinedCredentialsProvider.classname` 및 `userDefinedCredentialsProvider.location` 구성 설정에서 클래스 이름과 Kinesis 에이전트까지의 jar 경로를 지정할 수 있습니다. 이러한 두 가지 구성 설정에 대한 설명은 [에이전트 구성 설정 지정](agent-config-settings.md) 섹션을 참조하세요.

사용자 지정 자격 증명 공급자를 생성하려면 다음 예와 같이 `AWS CredentialsProvider` 인터페이스를 구현하는 클래스를 정의합니다.

```
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;

public class YourClassName implements AWSCredentialsProvider {
    public YourClassName() {
    }

    public AWSCredentials getCredentials() {
        return new BasicAWSCredentials("key1", "key2");
    }

    public void refresh() {
    }
}
```

클래스에는 인수를 취하지 않는 생성자가 있어야 합니다.

AWS 는 새로 고침 방법을 주기적으로 호출하여 업데이트된 자격 증명을 가져옵니다. 자격 증명 공급자가 수명 주기 동안 계속 다른 자격 증명을 제공하도록 하려면 이 메서드에 자격 증명을 새로 고치는 코드를 포함합니다. 또는 자격 증명 공급자가 정적(변경되지 않는) 자격 증명을 제공하기를 원할 경우 이 메서드를 비워 둘 수 있습니다.

# 에이전트 다운로드 및 설치
<a name="download-install"></a>

우선 인스턴스에 연결합니다. 자세한 내용은 **Amazon EC2 사용 설명서의 [인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-connect-to-instance-linux.html)을 참조하세요. 연결 문제가 있는 경우 **Amazon EC2 사용 설명서의 [인스턴스 연결 문제 해결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html)을 참조하세요.

다음으로, 다음 중 한 가지 방법을 사용하여 인스턴스를 설치합니다.
+ **Amazon Linux 리포지토리에서 에이전트 설정하는 방법**

  이 방법은 Amazon Linux 인스턴스에만 해당됩니다. 다음 명령을 사용합니다.

  ```
  sudo yum install –y aws-kinesis-agent
  ```

  에이전트 v 2.0.0 이상은 운영 체제가 Amazon Linux 2(AL2)인 컴퓨터에 설치됩니다. 이 에이전트 버전에는 Java 1.8 이상이 필요합니다. 필요한 Java 버전이 아직 없는 경우 에이전트 설치 프로세스에서 해당 버전이 설치됩니다. Amazon Linux 2에 대한 자세한 내용은 [https://aws.amazon.com/amazon-linux-2/](https://aws.amazon.com/amazon-linux-2/)를 참조하세요.
+ **Amazon S3 리포지토리에서 에이전트 설정하는 방법**

  이 방법은 공개적으로 사용 가능한 리포지토리에서 에이전트를 설치하기 때문에, Red Hat Enterprise Linux 및 Amazon Linux 2 인스턴스에도 적용됩니다. 다음 명령을 사용하여 에이전트 버전 2.x.x의 최신 버전을 다운로드하고 설치합니다.

  ```
  sudo yum install –y https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-latest.amzn2.noarch.rpm
  ```

  특정 버전의 에이전트를 설치하려면 명령에서 버전 번호를 지정합니다. 예를 들어 다음 명령은 에이전트 버전 2.0.1을 설치합니다.

  ```
  sudo yum install –y https://streaming-data-agent.s3.amazonaws.com/aws-kinesis-agent-2.0.1-1.amzn1.noarch.rpm
  ```

  현재 Java 1.7을 사용하고 있고 업그레이드를 원하지 않는 경우 Java 1.7과 호환되는 에이전트 버전 1.xx를 다운로드할 수 있습니다. 예를 들어 다음 명령을 사용하여 에이전트 버전 1.1.6을 다운로드할 수 있습니다.

  ```
  sudo yum install –y https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-1.1.6-1.amzn1.noarch.rpm
  ```

  다음 명령을 사용하여 최신 에이전트를 다운로드할 수 있습니다.

  ```
  sudo yum install -y https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-latest.amzn2.noarch.rpm
  ```
+ **GitHub 리포지토리에서 에이전트 설정하는 방법**

  1. 먼저 에이전트 버전에 따라 필요한 Java 버전이 설치되어 있는지 확인합니다.

  1.  [awslabs/amazon-kinesis-agent](https://github.com/awslabs/amazon-kinesis-agent) GitHub 리포지토리에서 에이전트를 다운로드합니다.

  1. 다운로드 디렉터리로 이동하고 다음 명령을 실행해 에이전트를 설치합니다.

     ```
     sudo ./setup --install
     ```
+ 

**Docker 컨테이너에서 에이전트 설정**  
[amazonlinux](https://docs.aws.amazon.com/AmazonECR/latest/userguide/amazon_linux_container_image.html) 컨테이너 베이스를 통해서도 컨테이너에서 Kinesis 에이전트를 실행할 수 있습니다. 다음 Dockerfile을 사용하여 `docker build`를 실행합니다.

  ```
  FROM amazonlinux
  
  RUN yum install -y aws-kinesis-agent which findutils
  COPY agent.json /etc/aws-kinesis/agent.json
  
  CMD ["start-aws-kinesis-agent"]
  ```

# 에이전트 구성 및 시작
<a name="config-start"></a>

**에이전트를 구성하고 시작하려면**

1. 구성 파일(`/etc/aws-kinesis/agent.json`)을 열고 편집합니다(기본 파일 액세스 권한을 사용하는 경우 수퍼유저로).

   이 구성 파일에서, 에이전트가 데이터를 수집하는 파일(`"filePattern"`)과 에이전트가 데이터를 보내는 대상 Firehose 스트림의 이름(`"deliveryStream"`)을 지정합니다. 파일 이름은 패턴이며, 에이전트가 파일 로테이션을 인식합니다. 파일을 로테이션하거나 초당 1회 이하 새 파일을 생성할 수 있습니다. 에이전트는 파일 생성 타임스탬프를 사용하여 추적할 파일을 결정하고 Firehose 스트림으로 추적합니다. 초당 1회보다 자주 새 파일을 생성하거나 파일을 로테이션하면 에이전트가 제대로 구별되지 않습니다.

   ```
   { 
      "flows": [
           { 
               "filePattern": "/tmp/app.log*", 
               "deliveryStream": "yourdeliverystream"
           } 
      ] 
   }
   ```

   기본 AWS 리전은 입니다`us-east-1`. 다른 리전을 사용 중이라면 리전에 엔드포인트를 지정해 구성 파일에 `firehose.endpoint` 설정을 추가합니다. 자세한 내용은 [에이전트 구성 설정 지정](agent-config-settings.md) 섹션을 참조하세요.

1. 에이전트를 수동으로 시작합니다.

   ```
   sudo service aws-kinesis-agent start
   ```

1. (선택 사항) 시스템 시작 시 에이전트가 시작되도록 구성합니다.

   ```
   sudo chkconfig aws-kinesis-agent on
   ```

현재 이 에이전트는 배경에서 시스템 서비스로 실행 중입니다. 지정된 파일을 지속적으로 모니터링하고 지정된 Firehose 스트림으로 데이터를 보냅니다. 에이전트 활동은 `/var/log/aws-kinesis-agent/aws-kinesis-agent.log`에 기록됩니다.

# 에이전트 구성 설정 지정
<a name="agent-config-settings"></a>

이 에이전트는 두 가지 의무 구성 설정인 `filePattern`, `deliveryStream`과 추가 기능을 제공하는 선택적 구성 설정을 지원합니다. `/etc/aws-kinesis/agent.json`에서 의무 및 선택적 구성 설정을 지정할 수 있습니다.

구성 파일을 변경할 때마다 다음 명령을 이용해 에이전트를 중지했다 시작해야 합니다.

```
sudo service aws-kinesis-agent stop
sudo service aws-kinesis-agent start
```

또는 다음 명령을 사용할 수 있습니다.

```
sudo service aws-kinesis-agent restart
```

다음은 일반적인 구성 설정입니다.


| 구성 설정 | 설명 | 
| --- | --- | 
| <a name="assumeRoleARN"></a>assumeRoleARN |  사용자가 맡을 역할의 Amazon 리소스 이름(ARN). 자세한 내용은 [IAM 사용 설명서의 IAM 역할을 사용하여 AWS 계정 간 액세스 권한 위임을 참조하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html). **   | 
| <a name="assumeRoleExternalId"></a>assumeRoleExternalId |  역할을 맡을 사람을 결정하는 선택적 식별자입니다. 자세한 내용은 **IAM 사용 설명서의 [외부 ID 사용 방법](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html)을 참조하세요.  | 
| <a name="awsAccessKeyId"></a>awsAccessKeyId |  AWS 기본 자격 증명을 재정의하는 액세스 키 ID입니다. 이 설정은 다른 모든 자격 증명 공급자보다 우선 적용됩니다.  | 
| <a name="awsSecretAccessKey"></a>awsSecretAccessKey |  AWS 기본 자격 증명을 재정의하는 보안 암호 키입니다. 이 설정은 다른 모든 자격 증명 공급자보다 우선 적용됩니다.  | 
| cloudwatch.emitMetrics |  (true)로 설정하면 에이전트가 CloudWatch로 지표를 내보낼 수 있습니다. 기본값: true  | 
| cloudwatch.endpoint |  CloudWatch에 대한 리전 엔드포인트. 기본값: `monitoring.us-east-1.amazonaws.com`  | 
| firehose.endpoint |  Amazon Data Firehose의 리전 엔드포인트입니다. 기본값: `firehose.us-east-1.amazonaws.com`  | 
| sts.endpoint |   AWS Security Token Service의 리전 엔드포인트입니다. 기본값: `https://sts.amazonaws.com`  | 
| userDefinedCredentialsProvider.classname | 사용자 지정 자격 증명 공급자를 정의하는 경우 이 설정을 사용하여 정규화된 클래스 이름을 지정합니다. 클래스 이름 끝에 .class를 포함하지 마세요. | 
| userDefinedCredentialsProvider.location | 사용자 지정 자격 증명 공급자를 정의하는 경우 이 설정을 사용하여 사용자 지정 자격 증명 공급자를 포함하는 jar의 절대 경로를 지정합니다. 또한 에이전트는 /usr/share/aws-kinesis-agent/lib/ 위치에서 jar 파일을 찾습니다. | 

다음은 흐름 구성 설정입니다.


| 구성 설정 | 설명 | 
| --- | --- | 
| aggregatedRecordSizeBytes |  에이전트가 레코드를 집계한 다음, 한 번의 작업으로 Firehose 스트림에 입력하도록 하려면 이 설정을 지정합니다. 에이전트가 Firehose 스트림에 넣기 전에 집계 레코드에 대해 원하는 크기로 설정합니다. 기본값: 0(집계 없음)  | 
| dataProcessingOptions |  Firehose 스트림으로 전송되기 전에 구문 분석된 각 레코드에 적용되는 처리 옵션 목록입니다. 처리 옵션은 지정된 순서로 진행됩니다. 자세한 내용은 [에이전트를 사용한 데이터 사전 처리](pre-processing.md) 섹션을 참조하세요.  | 
| deliveryStream |  [필수] Firehose 스트림 이름입니다.  | 
| filePattern |  [필수] 에이전트가 모니터링해야 하는 파일에 대한 glob입니다. 이 패턴과 일치하는 파일을 에이전트가 자동으로 선별하여 모니터링합니다. 이 패턴과 일치하는 모든 파일에 대한 읽기 권한을 `aws-kinesis-agent-user`에 부여해야 합니다. 파일이 포함된 디렉터리에 대한 읽기 및 실행 권한을 `aws-kinesis-agent-user`에 부여해야 합니다.  에이전트는 이 패턴과 일치하는 파일을 선택합니다. 에이전트가 의도하지 않은 레코드를 선택하지 않도록 하려면 이 패턴을 신중하게 선택합니다.   | 
| initialPosition |  파일 구문 분석이 처음 시작된 위치입니다. 유효 값은 `START_OF_FILE` 및 `END_OF_FILE`입니다. 기본값: `END_OF_FILE`  | 
| maxBufferAgeMillis |  Firehose 스트림으로 보내기 전 에이전트가 데이터를 버퍼링하는 최대 시간(밀리초)입니다. 값 범위: 1,000\$1900,000(1초 \$1 15분) 기본값: 60,000(1분)  | 
| maxBufferSizeBytes |  Firehose 스트림으로 보내기 전 에이전트가 데이터를 버퍼링하는 최대 크기(바이트)입니다. 값 범위: 1\$14,194,304(4MB) 기본값: 4,194,304(4MB)  | 
| maxBufferSizeRecords |  Firehose 스트림으로 보내기 전 에이전트가 데이터를 버퍼링하는 최대 레코드 수입니다. 값 범위: 1\$1500 기본값: 500  | 
| minTimeBetweenFilePollsMillis |  에이전트가 새로운 데이터에 대해 모니터링한 파일을 폴링하고 구문 분석하는 시간 간격(밀리초)입니다. 값 범위: 1 이상 기본값: 100  | 
| multiLineStartPattern |  레코드의 시작을 식별하기 위한 패턴입니다. 레코드는 패턴과 일치하는 줄 1개 및 패턴과 일치하지 않는 나머지 줄로 이루어져 있습니다. 유효한 값은 정규식입니다. 기본적으로 로그 파일에서 각각의 줄 바꿈은 하나의 레코드로 구문 분석됩니다.  | 
| skipHeaderLines |  모니터링한 파일을 시작할 때 에이전트가 구문 분석을 건너뛰는 줄의 개수입니다. 값 범위: 0 이상 기본값: 0(영)  | 
| truncatedRecordTerminator |  레코드 크기가 Amazon Data Firehose 레코드 크기 제한을 초과할 때 에이전트가 구문 분석된 레코드를 자르는 데 사용하는 문자열입니다. (1,000KB) 기본값: `'\n'`(줄 바꿈)  | 

# 여러 파일 디렉터리 및 스트림 구성
<a name="sim-writes"></a>

여러 개의 흐름 구성 설정을 지정하여, 에이전트가 여러 파일 디렉터리를 모니터링하고 여러 스트림으로 데이터를 보내도록 구성할 수 있습니다. 다음 구성 예제에서 에이전트는 두 개의 파일 디렉터리를 모니터링하고 각각 Kinesis 데이터 스트림 및 Firehose 스트림으로 데이터를 보냅니다. 데이터 스트림과 Firehose 스트림이 같은 리전에 있을 필요가 없도록 Kinesis Data Streams 및 Amazon Data Firehose에 서로 다른 엔드포인트를 지정할 수 있습니다.

```
{
    "cloudwatch.emitMetrics": true,
    "kinesis.endpoint": "https://your/kinesis/endpoint", 
    "firehose.endpoint": "https://your/firehose/endpoint", 
    "flows": [
        {
            "filePattern": "/tmp/app1.log*", 
            "kinesisStream": "yourkinesisstream"
        }, 
        {
            "filePattern": "/tmp/app2.log*",
            "deliveryStream": "yourfirehosedeliverystream" 
        }
    ] 
}
```

Amazon Kinesis Data Streams에서 에이전트를 사용하는 방법에 대한 자세한 내용은 [Kinesis Agent를 사용하여 Amazon Kinesis Data Streams에 쓰기](https://docs.aws.amazon.com/kinesis/latest/dev/writing-with-agents.html)를 참조하세요.

# 에이전트를 사용한 데이터 사전 처리
<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"}
```

# 일반적인 에이전트 CLI 명령 사용
<a name="cli-commands"></a>

다음 표에는 AWS Kinesis 에이전트 작업을 위한 일련의 일반적인 사용 사례와 해당 명령이 나와 있습니다.


| 사용 사례: | 명령 | 
| --- | --- | 
|  시스템 시작 시 에이전트가 자동으로 시작됩니다.  |  <pre>sudo chkconfig aws-kinesis-agent on</pre>  | 
|  에이전트의 상태를 확인합니다.  |  <pre>sudo service aws-kinesis-agent status</pre>  | 
|  에이전트를 중지합니다.  |  <pre>sudo service aws-kinesis-agent stop</pre>  | 
|  이 위치에서 에이전트의 로그 파일을 읽습니다.  |  <pre>/var/log/aws-kinesis-agent/aws-kinesis-agent.log</pre>  | 
|  에이전트를 제거합니다.  |  <pre>sudo yum remove aws-kinesis-agent</pre>  | 

# Kinesis Agent에서 전송할 때 문제 해결
<a name="agent-faq"></a>

이 표는 Amazon Kinesis Agent를 사용할 때 발생하는 일반적인 문제에 대한 문제 해결 정보와 솔루션을 제공합니다.


| 문제 | Solution | 
| --- | --- | 
| Kinesis Agent가 Windows에서 작동하지 않는 이유는 무엇인가요? |  [Windows용 Kinesis 에이전트](https://docs.aws.amazon.com/kinesis-agent-windows/latest/userguide/what-is-kinesis-agent-windows.html)는 Linux 플랫폼용 Kinesis 에이전트와 다른 소프트웨어입니다.  | 
| 왜 Kinesis 에이전트가 느려지거나 RecordSendErrors가 증가하나요? |  이는 대개 Kinesis에서 제한하기 때문입니다. Kinesis Data Streams의 `WriteProvisionedThroughputExceeded` 지표나 Firehose 스트림의 `ThrottledRecords` 지표를 확인하세요. 이 지표 중 0에서 증가한 수치가 있으면 스트림 제한을 늘려야 한다는 의미입니다. 자세한 내용은 [Kinesis Data Stream limits](https://docs.aws.amazon.com/streams/latest/dev/service-sizes-and-limits.html) 및 [Firehose 스트림](https://docs.aws.amazon.com/firehose/latest/dev/limits.html)을 참조하세요. 제한을 확인한 후에는 Kinesis 에이전트가 대량의 작은 파일을 테일링하도록 구성되어 있는지 확인하세요. Kinesis 에이전트가 새 파일을 테일링할 때 지연이 발생하므로 Kinesis 에이전트는 소량의 대용량 파일을 추적합니다. 로그 파일을 더 큰 파일로 통합해 보세요.  | 
| java.lang.OutOfMemoryError 예외를 해결하려면 어떻게 해야 하나요? | Kinesis 에이전트에는 현재 워크로드를 처리할 메모리가 충분하지 않을 때 발생합니다. /usr/bin/start-aws-kinesis-agent의 JAVA\$1START\$1HEAP 및 JAVA\$1MAX\$1HEAP을 늘리고 에이전트를 다시 시작해 보세요. | 
| IllegalStateException : connection pool shut down 예외를 해결하려면 어떻게 해야 하나요? | Kinesis 에이전트에는 현재 워크로드를 처리할 연결이 충분하지 않습니다. /etc/aws-kinesis/agent.json에서 일반 에이전트 구성 설정의 maxConnections 및 maxSendingThreads를 늘려 보세요. 이 필드의 기본값은 제공되는 런타임 프로세서의 12배입니다. 고급 에이전트 구성 설정에 대한 자세한 내용은 [AgentConfiguration.java](https://github.com/awslabs/amazon-kinesis-agent/blob/master/src/com/amazon/kinesis/streaming/agent/config/AgentConfiguration.java)를 참조하세요. | 
| Kinesis 에이전트의 다른 문제는 어떻게 디버그할 수 있나요? | /etc/aws-kinesis/log4j.xml에서 DEBUG 레벨 로그를 활성화할 수 있습니다. | 
| Kinesis 에이전트는 어떻게 구성하나요? | maxBufferSizeBytes의 크기가 작을수록 Kinesis 에이전트는 더 자주 데이터를 전송합니다. 이렇게 하면 레코드의 전송 시간이 줄어 유용하지만, Kinesis에 대한 초당 요청 수가 증가합니다. | 
| 왜 Kinesis 에이전트가 중복 레코드를 보내나요? | 이 문제는 파일 테일링이 잘못 구성되어 발생합니다. fileFlow’s filePattern마다 매칭되는 파일은 하나뿐이어야 합니다. 사용 중인 logrotate 모드가 copytruncate 모드인 경우에도 이 문제가 발생할 수 있습니다. 모드를 기본 모드 또는 생성 모드로 변경하여 중복을 피하세요. 중복 레코드 처리에 대한 자세한 내용은 [중복 레코드 처리](https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-duplicates.html)를 참조하세요. | 

# AWS SDK를 사용하여 데이터 전송
<a name="writing-with-sdk"></a>

[Amazon Data Firehose API](https://docs.aws.amazon.com/firehose/latest/APIReference/)를 사용하면 [Java용AWS SDK](https://aws.amazon.com/sdk-for-java/), [.NET](https://aws.amazon.com/sdk-for-net/), [Node.js](https://aws.amazon.com/sdk-for-javascript/), [Python](https://aws.amazon.com/sdk-for-python/) 또는 [Ruby](https://aws.amazon.com/sdk-for-ruby/)를 사용하여 Firehose 스트림에 데이터를 전송할 수 있습니다. Amazon Data Firehose를 처음 사용하는 경우, 잠시 시간을 내어 [Amazon Data Firehose란?](what-is-this-service.md) 섹션에 설명된 개념과 용어를 익히는 것이 좋습니다. 자세한 내용은 [Amazon Web Services로 개발 시작](https://aws.amazon.com/developers/getting-started/)을 참조하세요.

이 예제는 가능한 모든 예외를 확인하지 않거나 가능한 모든 보안 및 성능 고려 사항을 감안하지 않는다는 점에서 프로덕션 지원 코드가 아닙니다.

Amazon Data Firehose API는 Firehose 스트림에 데이터를 전송하기 위한 두 가지 작업, [PutRecord](https://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecord.html)와 [PutRecordBatch](https://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecordBatch.html)를 제공합니다. `PutRecord()`는 한 호출 내에 하나의 데이터 레코드를 보내고 `PutRecordBatch()`는 한 호출 내에 여러 데이터 레코드를 보낼 수 있습니다.

## PutRecord를 이용한 단일 쓰기 작업
<a name="putrecord"></a>

데이터 저장에는 Firehose 스트림 이름과 바이트 버퍼(<=1000KB)만 있으면 됩니다. Amazon Data Firehose는 파일을 Amazon S3에 로드하기 전에 여러 레코드를 일괄 처리하기 때문에 레코드 구분 기호를 추가해야 할 수 있습니다. Firehose 스트림에 한 번에 한 레코드씩 데이터를 제공하려면 다음 코드를 사용합니다.

```
PutRecordRequest putRecordRequest = new PutRecordRequest();
putRecordRequest.setDeliveryStreamName(deliveryStreamName);

String data = line + "\n";

Record record = new Record().withData(ByteBuffer.wrap(data.getBytes()));
putRecordRequest.setRecord(record);

// Put record into the DeliveryStream
firehoseClient.putRecord(putRecordRequest);
```

자세한 코드 컨텍스트는 AWS SDK에 포함된 샘플 코드를 참조하세요. 요청 및 응답 구문에 대한 자세한 내용은 [Firehose API 작업](https://docs.aws.amazon.com/firehose/latest/APIReference/API_Operations.html)의 관련 주제를 참조하세요.

## PutRecordBatch를 이용한 일괄 쓰기 작업
<a name="putrecordbatch"></a>

데이터 저장에는 Firehose 스트림 이름과 레코드 목록만 있으면 됩니다. Amazon Data Firehose는 파일을 Amazon S3에 로드하기 전에 여러 레코드를 일괄 처리하기 때문에 레코드 구분 기호를 추가해야 할 수 있습니다. Firehose 스트림에 레코드 배치로 데이터를 제공하려면 다음 코드를 사용합니다.

```
PutRecordBatchRequest putRecordBatchRequest = new PutRecordBatchRequest();
putRecordBatchRequest.setDeliveryStreamName(deliveryStreamName);
putRecordBatchRequest.setRecords(recordList);

// Put Record Batch records. Max No.Of Records we can put in a
// single put record batch request is 500
firehoseClient.putRecordBatch(putRecordBatchRequest);

recordList.clear();
```

자세한 코드 컨텍스트는 AWS SDK에 포함된 샘플 코드를 참조하세요. 요청 및 응답 구문에 대한 자세한 내용은 [Firehose API 작업](https://docs.aws.amazon.com/firehose/latest/APIReference/API_Operations.html)의 관련 주제를 참조하세요.

# Firehose에 CloudWatch Logs 전송
<a name="writing-with-cloudwatch-logs"></a>

CloudWatch Logs 이벤트는 CloudWatch 구독 필터를 사용하여 Firehose로 전송할 수 있습니다. 자세한 내용은 [Amazon Data Firehose를 사용한 구독 필터](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html#FirehoseExample)를 참조하세요.

CloudWatch Logs 이벤트는 압축된 gzip 형식으로 Firehose로 전송됩니다. 압축 해제된 로그 이벤트를 Firehose 대상에 전송하려면 Firehose의 압축 해제 기능을 사용하여 CloudWatch Logs의 압축을 자동으로 해제할 수 있습니다.

**중요**  
Firehose는 현재 Amazon OpenSearch Service 대상으로 CloudWatch Logs를 전송하는 것을 지원하지 않습니다. Amazon CloudWatch는 여러 로그 이벤트를 하나의 Firehose 레코드로 결합하고 Amazon OpenSearch Service는 하나의 레코드로 된 여러 로그 이벤트를 받아들일 수 없기 때문입니다. 대신 [CloudWatch Logs에서 Amazon OpenSearch Service에 대한 구독 필터 사용](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_OpenSearch_Stream.html)을 고려할 수 있습니다.

# CloudWatch Logs 압축 해제
<a name="writing-with-cloudwatch-logs-decompression"></a>

Firehose를 사용하여 CloudWatch Logs를 전송하고 압축 해제된 데이터를 Firehose 스트림 대상으로 전송하려는 경우 Firehose [데이터 형식 변환](https://docs.aws.amazon.com/firehose/latest/dev/data-transformation.html)(Parquet, ORC) 또는 [동적 파티셔닝](https://docs.aws.amazon.com/firehose/latest/dev/dynamic-partitioning.html)을 사용합니다. Firehose 스트림에 대해 압축 해제를 활성화해야 합니다.

 AWS Management Console AWS Command Line Interface 또는 AWS SDKs.

**참고**  
스트림에서 압축 해제 기능을 활성화하는 경우, 해당 스트림은 Vended Logs가 아닌 CloudWatch Logs 구독 필터에만 사용합니다. CloudWatch Logs와 Vended Logs를 모두 수집하는 데 사용되는 스트림에서 압축 해제 기능을 활성화하면 Firehose로의 Vended Logs 수집이 실패합니다. 이 압축 해제 기능은 CloudWatch Logs에만 적용됩니다.

# CloudWatch Logs 압축 해제 후 메시지 추출
<a name="Message_extraction"></a>

압축 해제를 활성화하면 메시지 추출도 활성화할 수 있습니다. 메시지 추출을 사용할 때 Firehose는 압축 해제된 CloudWatch Logs 레코드에서 소유자, 로그 그룹, 로그 스트림 등의 모든 메타데이터를 필터링하고 메시지 필드 내의 콘텐츠만 전송합니다. Splunk 대상으로 데이터를 전송하는 경우 Splunk에서 데이터를 구문 분석하기 위해 메시지 추출을 활성화해야 합니다. 다음은 메시지 추출을 사용하거나 사용하지 않은 압축 해제 후의 샘플 출력입니다.

그림 1: 메시지 추출 없이 압축 해제 후 샘플 출력:

```
{
 "owner": "111111111111",
 "logGroup": "CloudTrail/logs",
 "logStream": "111111111111_CloudTrail/logs_us-east-1",
 "subscriptionFilters": [
 "Destination"
 ],
 "messageType": "DATA_MESSAGE",
 "logEvents": [
 {
 "id": "31953106606966983378809025079804211143289615424298221568",
 "timestamp": 1432826855000,
 "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root1\"}"
 },
 {
 "id": "31953106606966983378809025079804211143289615424298221569",
 "timestamp": 1432826855000,
 "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root2\"}"
 },
 {
 "id": "31953106606966983378809025079804211143289615424298221570",
 "timestamp": 1432826855000,
 "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root3\"}"
 }
 ]
}
```

그림 2: 메시지 추출을 사용한 압축 해제 후 샘플 출력:

```
{"eventVersion":"1.03","userIdentity":{"type":"Root1"}
{"eventVersion":"1.03","userIdentity":{"type":"Root2"}
{"eventVersion":"1.03","userIdentity":{"type":"Root3"}
```

# 콘솔에서 새 Firehose 스트림에 대한 압축 해제 활성화
<a name="writing-with-cloudwatch-logs-decompression-enabling-console"></a>

**를 사용하여 새 Firehose 스트림에서 압축 해제를 활성화하려면 AWS Management Console**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis) Kinesis 콘솔을 엽니다.

1. 탐색 창에서 **Amazon Data Firehose**를 선택합니다.

1. **Firehose 스트림 생성**을 선택합니다.

1. **소스 및 대상 선택**에서  
****소스****  
Firehose 스트림의 소스 다음 중 하나의 소스를 선택합니다.  
   + **Direct PUT** - 생산자 애플리케이션이 직접 쓰는 대상 Firehose 스트림을 생성하려면 이 옵션을 선택합니다. Firehose의 Direct PUT와 통합된 AWS 서비스 및 에이전트와 오픈 소스 서비스 목록은 [이](create-name.md) 섹션을 참조하세요.
   + **Kinesis 스트림:** Kinesis 데이터 스트림을 데이터 소스로 사용하는 Firehose 스트림을 구성하려면 이 옵션을 선택합니다. 그러면 Firehose를 사용하여 기존 Kinesis 데이터 스트림에서 간편하게 데이터를 읽고 대상에 로드할 수 있습니다. 자세한 내용은 [Writing to Firehose Using Kinesis Data Streams](https://docs.aws.amazon.com/firehose/latest/dev/writing-with-kinesis-streams.html)를 참조하세요.  
****Destination****  
Firehose 스트림의 대상. 다음 중 하나를 선택합니다.  
   + Amazon S3
   + Splunk

1. **Firehose 스트림 이름**에 스트림 이름을 입력합니다.

1. (선택 사항) **레코드 변환에서:**
   + **Amazon CloudWatch Logs의 소스 레코드 압축 해제** 섹션에서 **압축 해제 켜기**를 선택합니다.
   + 압축 해제 후 메시지 추출을 사용하려면 **메시지 추출 켜기**를 선택합니다.

# 기존 Firehose 스트림에서 압축 해제 활성화
<a name="enabling-decompression-existing-stream-console"></a>

이 섹션에서는 기존 Firehose 스트림에서 압축 해제를 활성화하는 지침을 제공합니다. 여기에는 Lambda 처리가 비활성화된 스트림과 Lambda 처리가 이미 활성화된 스트림이라는 두 가지 시나리오가 포함됩니다. 다음 섹션에서는 Lambda 함수 생성 또는 수정, Firehose 설정 업데이트, 내장 Firehose 압축 해제 기능의 성공적인 구현을 보장하기 위한 CloudWatch 지표 모니터링 등 각 사례에 대한 단계별 절차를 간략하게 설명합니다.

## Lambda 처리가 비활성화된 경우 압축 해제 활성화
<a name="enabling-decomp-exist-stream-lam-disable"></a>

Lambda 처리가 비활성화된 기존 Firehose 스트림에서 압축 해제를 활성화하려면 먼저 Lambda 처리를 활성화해야 합니다. 이 조건은 기존 스트림에만 유효합니다. 다음 단계에서는 Lambda 처리가 활성화되지 않은 기존 스트림에서 압축 해제를 활성화하는 방법을 보여줍니다.

1. Lambda 함수를 생성합니다. 더미 레코드 패스스루를 생성하거나 이 [블루프린트](https://github.com/aws-samples/aws-kinesis-firehose-resources/tree/main/blueprints/kinesis-firehose-cloudwatch-logs-processor)를 사용하여 새 Lambda 함수를 생성할 수 있습니다.

1. 현재 Firehose 스트림을 업데이트하여 Lambda 처리를 활성화하고 처리를 위해 생성한 Lambda 함수를 사용합니다.

1. 새 Lambda 함수로 스트림을 업데이트한 후 Firehose 콘솔로 돌아가 압축 해제를 활성화합니다.

1. 1단계에서 활성화한 Lambda 처리를 비활성화합니다. 이제 1단계에서 생성한 기능을 삭제할 수 있습니다.

## Lambda 처리가 활성화된 경우 압축 해제 활성화
<a name="enabling-decomp-exist-stream-lam-enable"></a>

압축 해제를 수행하기 위해 Lambda 함수가 있는 Firehose 스트림이 이미 있는 경우 Firehose 압축 해제 기능으로 바꿀 수 있습니다. 계속하기 전에 Lambda 함수 코드를 검토하여 압축 해제 또는 메시지 추출만 수행하는지 확인합니다. Lambda 함수의 출력은 [그림 1 또는 그림 2](Message_extraction.md)에 표시된 예제와 비슷해야 합니다. 출력이 비슷한 경우 다음 단계를 사용하여 Lambda 함수를 교체할 수 있습니다.

1. 현재 Lambda 함수를 이 [블루프린트](https://github.com/aws-samples/aws-kinesis-firehose-resources/tree/main/blueprints/kinesis-firehose-cloudwatch-logs-processor)로 바꿉니다. 새로운 블루프린트 Lambda 함수는 수신 데이터가 압축되었는지 압축 해제되었는지 자동으로 감지합니다. 입력 데이터가 압축된 경우에만 압축 해제를 수행합니다.

1. 압축 해제를 위해 내장 Firehose 옵션을 사용하여 압축 해제를 켭니다.

1. Firehose 스트림이 아직 활성화되지 않은 경우 CloudWatch 지표를 활성화합니다. 지표 `CloudWatchProcessorLambda_IncomingCompressedData`를 모니터링하고이 지표가 0으로 변경될 때까지 기다립니다. 이렇게 하면 Lambda 함수로 전송된 모든 입력 데이터가 압축 해제되고 Lambda 함수가 더 이상 필요하지 않습니다.

1. Lambda 데이터 변환은 더 이상 스트림 압축을 풀 필요가 없으므로 제거합니다.

# Firehose 스트림에서 압축 해제 비활성화
<a name="writing-with-cloudwatch-logs-decompression-disabling-console"></a>

****

를 사용하여 데이터 스트림에서 압축 해제를 비활성화하려면 AWS Management Console

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis) Kinesis 콘솔을 엽니다.

1. 탐색 창에서 **Amazon Data Firehose**를 선택합니다.

1. 편집하려는 Firehose 스트림을 선택합니다.

1. **Firehose 스트림 세부 정보** 페이지에서 **구성** 탭을 선택합니다.

1. **레코드 변환 및 변환** 섹션에서 **편집**을 선택합니다.

1. **Amazon CloudWatch Logs에서 소스 레코드 압축 해제**에서 **압축 해제 켜기**를 해제한 다음 **변경 사항 저장**을 선택합니다.

# Firehose의 압축 해제 문제 해결
<a name="decomp-faq"></a>

다음 표는 Firehose가 데이터 압축 해제 및 처리 중에 오류 S3 버킷으로 레코드 전송, 오류 로깅, 지표 전송을 포함하여 오류를 처리하는 방법을 보여줍니다. 또한 승인되지 않은 데이터 풋 작업에 대해 반환된 오류 메시지도 설명합니다.


| 문제 | Solution | 
| --- | --- | 
| 압축 해제 중에 오류가 발생할 경우 소스 데이터는 어떻게 되나요? |  Amazon Data Firehose가 레코드의 압축을 풀 수 없는 경우 레코드는 Firehose 스트림 생성 시간 동안 지정한 오류 S3 버킷에 있는 그대로(압축된 형식) 전달됩니다. 레코드와 함께 전달된 객체에는 오류 코드와 오류 메시지도 포함되며 이러한 객체는 `decompression-failed`라는 S3 버킷 접두사로 전달됩니다. Firehose는 레코드의 압축 해제 실패 후에도 다른 레코드를 계속 처리합니다.  | 
| 압축 해제 성공 후 처리 파이프라인에 오류가 발생할 경우 소스 데이터는 어떻게 됩니까? |  동적 분할 및 데이터 형식 변환과 같은 압축 해제 후 처리 단계에서 Amazon Data Firehose 오류가 발생하는 경우 레코드는 Firehose 스트림 생성 시간 동안 지정한 오류 S3 버킷으로 압축된 형식으로 전송됩니다. 전송된 객체에는 레코드와 함께 오류 코드 및 오류 메시지도 포함됩니다.  | 
| 오류 또는 예외가 발생할 경우 어떻게 알 수 있나요? |  압축 해제 중에 오류 또는 예외가 발생하는 경우 CloudWatch Logs를 구성하면 Firehose는 오류 메시지를 CloudWatch Logs에 기록합니다. 또한 Firehose는 모니터링할 수 있는 CloudWatch 지표로 지표를 전송합니다. Firehose에서 내보낸 지표를 기반으로 경보를 선택적으로 생성할 수도 있습니다.  | 
| put 작업이 CloudWatch Logs에서 오지 않으면 어떻게 되나요? | puts 고객이 CloudWatch Logs에서 오지 않으면 다음 오류 메시지가 반환됩니다.<pre>Put to Firehose failed for AccountId: <accountID>, FirehoseName:  <firehosename> because the request is not originating from allowed source types.</pre> | 
| Firehose는 압축 해제 기능을 위해 어떤 지표를 방출합니까? | Firehose는 모든 레코드의 압축 해제에 대한 지표를 내보냅니다. 기간(1분), 통계(합계), 날짜 범위를 선택하여 DecompressedRecords 실패 또는 성공 또는 DecompressedBytes 실패 또는 성공의 수를 구해야 합니다. 자세한 내용은 [CloudWatch Logs 압축 해제 지표](monitoring-with-cloudwatch-metrics.md#decompression-metrics-cw) 섹션을 참조하세요. | 

# Firehose에 CloudWatch Events 전송
<a name="writing-with-cloudwatch-events"></a>

CloudWatch Events 규칙에 대상을 추가하여 Firehose 스트림에 이벤트를 보내도록 Amazon CloudWatch를 구성할 수 있습니다.

**기존 Firehose 스트림에 이벤트를 보내는 CloudWatch Events 규칙의 대상 만드는 방법**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) CloudWatch 콘솔을 엽니다.

1. **규칙 생성**을 선택합니다.

1. **1단계: 규칙 생성** 페이지에서 **대상**에 대해 **대상 추가**를 선택한 후 **Firehose 스트림**을 선택합니다.

1. 기존 **Firehose 스트림**을 선택합니다.

CloudWatch Events 규칙 생성에 대한 자세한 내용은 [Amazon CloudWatch Events 시작하기](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CWE_GettingStarted.html)를 참조하세요.

# Firehose AWS IoT 로 데이터를 전송하도록 구성
<a name="writing-with-iot"></a>

작업을 추가하여 Firehose 스트림에 정보를 보내 AWS IoT 도록를 구성할 수 있습니다.

**기존 Firehose 스트림으로 이벤트를 보내는 작업을 생성하려면**

1.  AWS IoT 콘솔에서 규칙을 생성할 때 **규칙 생성** 페이지의 **하나 이상의 작업 설정**에서 **작업 추가**를 선택합니다.

1. **Amazon Kinesis Firehose 스트림으로 메시지 전송**을 선택합니다.

1. **작업 구성**을 선택합니다.

1. **스트림 이름**에 대해 기존 Firehose 스트림을 선택합니다.

1. [**Separator**]에 대해 레코드 사이에 삽입할 구분자 문자를 선택합니다.

1. **IAM 역할 이름**에 대해서는 기존 IAM 역할을 선택하거나 **새 역할 생성**을 선택합니다.

1. **작업 추가**를 선택합니다.

 AWS IoT 규칙 생성에 대한 자세한 내용은 [AWS IoT 규칙 자습서를 참조하세요](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules-tutorial.html).