

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

# AWS IoT Greengrass에서 로깅 및 모니터링
<a name="logging-and-monitoring"></a>

모니터링은 AWS IoT Greengrass와 사용자 AWS 솔루션의 신뢰성, 가용성 및 성능을 유지하는 중요한 역할을 합니다. 발생하는 다중 지점 실패를 보다 쉽게 디버깅할 수 있도록 AWS 솔루션의 모든 부분에서 모니터링 데이터를 수집해야 합니다. AWS IoT Greengrass에 대한 모니터링을 시작하기 전에 다음 질문에 대한 답변을 포함하는 모니터링 계획을 작성해야 합니다
+ 모니터링의 목표
+ 모니터링할 리소스
+ 이러한 리소스를 모니터링하는 빈도
+ 사용할 모니터링 도구
+ 모니터링 작업을 수행할 사람
+ 문제 발생 시 알려야 할 대상

**Topics**
+ [모니터링 도구](#monitoring-tools)
+ [AWS IoT Greengrass 로그 모니터링](monitor-logs.md)
+ [를 사용하여 AWS IoT Greengrass V2 API 호출 로깅 AWS CloudTrail](logging-using-cloudtrail.md)
+ [AWS IoT Greengrass 코어 디바이스에서 시스템 상태 원격 측정 데이터 수집](telemetry.md)
+ [배포 및 구성 요소 상태 알림 받기](deployment-health-notifications.md)
+ [Greengrass 코어 디바이스 상태 확인](device-status.md)

## 모니터링 도구
<a name="monitoring-tools"></a>

AWS는 를 모니터링하는 데 사용할 수 있는 도구를 제공합니다.AWS IoT Greengrass 이러한 도구 중 일부를 구성하여 모니터링을 수행할 수 있습니다. 일부 도구는 수동 개입이 필요합니다. 모니터링 작업은 최대한 자동화하는 것이 좋습니다.

다음과 같은 자동 모니터링 도구를 사용하여 AWS IoT Greengrass를 모니터링하고 문제 발생 시 보고할 수 있습니다.
+ **Amazon CloudWatch Logs** – AWS CloudTrail 또는 기타 소스의 로그 파일을 모니터링, 저장 및 액세스합니다. 자세한 내용은 *Amazon CloudWatch 사용 설명서*의 [로그 파일 모니터링](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/WhatIsCloudWatchLogs.html)을 참조하세요.
+ **AWS CloudTrail 로그 모니터링** - 계정 간에 로그 파일을 공유하고, CloudTrail 로그 파일을 CloudWatch Logs에 전송하여 실시간으로 모니터링하며, Java에서 로그 처리 애플리케이션을 작성하고, CloudTrail에서 전송한 후 로그 파일이 변경되지 않았는지 확인합니다. 자세한 내용은 *AWS CloudTrail 사용 설명서*의 [CloudTrail 로그 파일 작업](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-working-with-log-files.html)을 참조하십시오.
+ **Greengrass 시스템 상태 텔레메트리** — Greengrass 코어에서 전송된 텔레메트리 데이터를 수신하려면 구독하십시오. 자세한 내용은 [AWS IoT Greengrass 코어 디바이스에서 시스템 상태 원격 측정 데이터 수집](telemetry.md) 섹션을 참조하세요.
+ **디바이스 상태 알림** 배포 및 구성 요소에 대한 상태 업데이트를 수신하려면 Amazon EventBridge를 사용하여 이벤트를 생성합니다. 자세한 내용은 [배포 및 구성 요소 상태 알림 받기](deployment-health-notifications.md) 섹션을 참조하세요.
+ **플릿 상태 서비스** - 플릿 상태 API 작업을 사용하여 코어 디바이스 및 해당 Greengrass 구성 요소의 상태를 확인합니다. AWS IoT Greengrass 콘솔에서도 플릿 상태 정보를 볼 수 있습니다. 자세한 내용은 [Greengrass 코어 디바이스 상태 확인](device-status.md) 섹션을 참조하세요.

# AWS IoT Greengrass 로그 모니터링
<a name="monitor-logs"></a>

AWS IoT Greengrass은(는) 클라우드 서비스와 AWS IoT Greengrass 코어 소프트웨어로 구성됩니다. AWS IoT Greengrass 코어 소프트웨어는 Amazon CloudWatch Logs 및 코어 장치의 로컬 파일 시스템에 로그를 기록할 수 있습니다. 코어 디바이스에서 실행되는 Greengrass 구성 요소는 CloudWatch Logs 및 로컬 파일 시스템에 로그를 기록할 수도 있습니다. 로그를 사용하여 이벤트를 모니터링하고 문제를 해결할 수 있습니다. 모든 AWS IoT Greengrass 로그 항목에는 타임스탬프, 로그 수준 및 이벤트에 대한 정보가 포함됩니다.

기본적으로 AWS IoT Greengrass 코어 소프트웨어는 로컬 파일 시스템에만 로그를 기록합니다. 파일 시스템 로그를 실시간으로 볼 수 있으므로 개발 및 배포하는 Greengrass 구성 요소를 디버깅할 수 있습니다. 또한 코어 디바이스가 CloudWatch Logs에 로그를 기록하도록 구성하여 로컬 파일 시스템에 액세스하지 않고도 코어 디바이스의 문제를 해결할 수도 있습니다. 자세한 내용은 [CloudWatch Logs에 로깅 활성화](#enable-cloudwatch-logs) 섹션을 참조하세요.

**Topics**
+ [파일 시스템 로그 액세스](#access-local-logs)
+ [CloudWatch Logs 액세스](#access-cloudwatch-logs)
+ [시스템 서비스 로그 액세스](#access-system-service-logs)
+ [CloudWatch Logs에 로깅 활성화](#enable-cloudwatch-logs)
+ [AWS IoT Greengrass의 로깅 구성](#configure-logging)
+ [AWS CloudTrail 로그](#cloudtrail-integration)

## 파일 시스템 로그 액세스
<a name="access-local-logs"></a>

AWS IoT Greengrass 코어 소프트웨어는 코어 디바이스의 `/greengrass/v2/logs` 폴더에 로그를 저장합니다. 여기서 `/greengrass/v2`는 AWS IoT Greengrass 루트 폴더의 경로입니다. 로그그 폴더의 구조는 다음과 같습니다.

```
/greengrass/v2
└── logs
    ├── greengrass.log
    ├── greengrass_2021_09_14_15_0.log
    ├── ComponentName.log
    ├── ComponentName_2021_09_14_15_0.log
    └── main.log
```
+ `greengrass.log` – AWS IoT Greengrass 코어 소프트웨어 로그 파일입니다. 이 로그 파일을 사용하면 구성 요소 및 배포에 대한 실시간 정보를 볼 수 있습니다. 이 로그 파일에는 AWS IoT Greengrass 코어 소프트웨어의 코어인 Greengrass nucleus에 대한 로그와 [로그 관리자](log-manager-component.md) 및 [보안 암호 관리자](secret-manager-component.md)와 같은 플러그인 구성 요소가 포함됩니다.
+ `ComponentName.log` – Greengrass 구성 요소 로그 파일입니다. 구성 요소 로그 파일을 사용하면 코어 디바이스에서 실행되는 Greengrass 구성 요소에 대한 실시간 정보를 볼 수 있습니다. 일반 구성 요소와 Lambda 구성 요소에서는 이러한 로그 파일에 표준 출력(stdout)과 표준 오류(stderr)를 기록합니다.
+ `main.log` - 구성 요소 수명 주기를 처리하는 `main` 서비스에 대한 로그 파일입니다. 이 로그 파일은 항상 비어 있습니다.

플러그인, 일반 및 Lambda 구성 요소의 차이점에 대한 자세한 내용은 [구성 요소 유형](develop-greengrass-components.md#component-types) 섹션을 참조하세요.

파일 시스템 로그 사용 시 다음 사항을 고려하십시오.
+ **루트 사용자 권한**

  파일 시스템에서 AWS IoT Greengrass 로그를 읽을 수 있는 루트 권한이 있어야 합니다.
+ **로그 파일 교체**

  AWS IoT Greengrass 코어 소프트웨어에서는 매시간 또는 파일 크기 제한이 초과될 때 로그 파일을 교체합니다. 교체된 로그 파일의 파일 이름에는 타임스탬프가 포함됩니다. 예를 들어 교체된 AWS IoT Greengrass 코어 소프트웨어 로그 파일의 이름은 `greengrass_2021_09_14_15_0.log`일 수 있습니다. 기본 파일 크기 제한은 1,024KB(1MB)입니다. [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md)에서 파일 크기 제한을 구성할 수 있습니다.
+ **로그 파일 삭제**

  AWS IoT Greengrass 코어 소프트웨어는 교체된 로그 파일을 포함하여 AWS IoT Greengrass 코어 소프트웨어 로그 파일 또는 Greengrass 구성 요소 로그 파일의 크기가 디스크 공간 제한을 초과하는 경우 이전 로그 파일을 정리합니다. AWS IoT Greengrass 코어 소프트웨어 로그 및 각 구성 요소 로그의 기본 디스크 공간 제한은 10,240KB(10MB)입니다. [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md) 또는 [로그 관리자 구성 요소](log-manager-component.md)에서 AWS IoT Greengrass 코어 소프트웨어 로그 디스크 공간 제한을 구성할 수 있습니다. [로그 관리자 구성 요소](log-manager-component.md)에서는 각 구성 요소의 로그 디스크 공간 제한을 구성할 수 있습니다.

**AWS IoT Greengrass 코어 소프트웨어 로그 파일을 보려면**
+ 로그 파일을 실시간으로 보려면 다음 명령을 실행합니다. `/greengrass/v2`를 AWS IoT Greengrass 루트 폴더의 경로로 바꿉니다.

------
#### [ Linux or Unix ]

  ```
  sudo tail -f /greengrass/v2/logs/greengrass.log
  ```

------
#### [ Windows Command Prompt (CMD) ]

  ```
  type C:\greengrass\v2\logs\com.example.HelloWorld.log
  ```

  <a name="windows-cmd-type-observe-logs"></a>`type` 명령에서는 파일의 내용이 터미널이 기록됩니다. 이 명령을 여러 번 실행하여 파일의 변경 사항을 관찰합니다.

------
#### [ PowerShell ]

  ```
  gc C:\greengrass\v2\logs\greengrass.log -Tail 10 -Wait
  ```

------

**구성 요소의 로그 파일을 보려면**
+ 로그 파일을 실시간으로 보려면 다음 명령을 실행합니다. `/greengrass/v2` 또는 *C:\$1greengrass\$1v2*를 AWS IoT Greengrass 루트 폴더의 경로로 바꾸고 *com.example.HelloWorld*를 구성 요소 이름으로 바꿉니다.

------
#### [ Linux or Unix ]

  ```
  sudo tail -f /greengrass/v2/logs/com.example.HelloWorld.log
  ```

------
#### [ PowerShell ]

  ```
  gc C:\greengrass\v2\logs\com.example.HelloWorld.log -Tail 10 -Wait
  ```

------

[Greengrass CLI](greengrass-cli-component.md)의 `logs` 명령을 사용하여 코어 디바이스에서 Greengrass 로그를 분석할 수도 있습니다. `logs` 명령을 사용하려면 [Greengrass nucleus가](greengrass-nucleus-component.md) JSON 형식 로그 파일을 출력하도록 구성해야 합니다. 자세한 내용은 [Greengrass 명령줄 인터페이스](gg-cli.md) 및 [로그](gg-cli-logs.md)(을)를 참조하세요.

## CloudWatch Logs 액세스
<a name="access-cloudwatch-logs"></a>

[로그 관리자 구성 요소](log-manager-component.md)를 배포하여 CloudWatch Logs에 쓰도록 코어 디바이스를 구성할 수 있습니다. 자세한 내용은 [CloudWatch Logs에 로깅 활성화](#enable-cloudwatch-logs) 섹션을 참조하세요. 그런 다음 Amazon CloudWatch 콘솔의 **로그** 페이지에서나 CloudWatch Logs API를 사용하여 로그를 볼 수 있습니다.<a name="log-manager-log-group-stream-format"></a>

**로그 그룹 이름**  

```
/aws/greengrass/componentType/region/componentName
```
로그 그룹 이름에는 다음 변수를 사용합니다.  
+ `componentType` - 구성 요소의 유형으로, 다음 중 하나일 수 있습니다.
  + `GreengrassSystemComponent` – 이 로그 그룹에는 Greengrass nucleus와 동일한 JVM에서 실행되는 nucleus 및 플러그인 구성 요소에 대한 로그가 포함됩니다. 이 구성 요소는 [Greengrass nucleus](greengrass-nucleus-component.md)의 일부입니다.
  + `UserComponent` - 이 로그 그룹에는 디바이스의 일반 구성 요소, Lambda 구성 요소 및 기타 애플리케이션에 대한 로그가 포함됩니다. 이 구성 요소는 Greengrass nucleus의 일부가 아닙니다.

  자세한 내용은 [구성 요소 유형](develop-greengrass-components.md#component-types) 섹션을 참조하세요.
+ `region` - 코어 디바이스에서 사용하는 AWS 리전입니다.
+ `componentName` - 구성 요소의 이름입니다. 시스템 로그의 경우 이 값은 `System`입니다.

**로그 스트림 이름**  

```
/date/thing/thingName
```
로그 스트림 이름에는 다음 변수를 사용합니다.  
+ `date` - 와 같은 로그 날짜입니다(예: `2020/12/15`). 로그 관리자 구성 요소에서는 `yyyy/MM/dd` 형식을 사용합니다.
+ `thingName` - 코어 디바이스 이름의 이름입니다.
사물 이름에 콜론(`:`)이 포함된 경우 로그 관리자에서는 콜론을 더하기(`+`)로 바꿉니다.

<a name="log-manager-considerations-intro"></a>로그 관리자 구성 요소를 사용하여 CloudWatch Logs에 쓸 때는 다음 사항을 고려하세요.<a name="log-manager-considerations"></a>
+ **로그 지연**
**참고**  
교체된 로그 파일과 활성 로그 파일에 대한 로그 지연을 줄이는 로그 관리자 버전 2.3.0으로 업그레이드하는 것이 좋습니다. 로그 관리자 2.3.0으로 업그레이드할 때는 Greengrass nucleus도 2.9.1로 업그레이드하는 것이 좋습니다.

  로그 관리자 구성 요소 2.2.8 및 이전 버전은 교체된 로그 파일에서만 로그를 처리하고 업로드합니다. 기본적으로 AWS IoT Greengrass 코어 소프트웨어는 로그 파일을 매시간 교체하거나 1,024KB가 넘으면 교체합니다. 따라서 로그 관리자 구성 요소는 AWS IoT Greengrass 코어 소프트웨어 또는 Greengrass 구성 요소에서 1,024KB 이상의 로그를 쓴 후에만 로그를 업로드합니다. 로그 파일 크기 제한을 더 낮게 구성하여 로그 파일이 더 자주 교체되도록 할 수 있습니다. 이렇게 하면 로그 관리자 구성 요소에서 CloudWatch Logs에 로그를 더 자주 업로드합니다.

  로그 관리자 구성 요소 2.3.0 이상 버전은 모든 로그를 처리하고 업로드합니다. 새 로그를 쓸 때 로그 관리자 2.3.0 이상 버전은 해당 활성 로그 파일이 교체될 때까지 기다리지 않고 활성 로그를 처리하고 직접 업로드합니다. 즉, 새 로그를 5분 이내에 볼 수 있습니다.

  로그 관리자 구성 요소에서는 새 로그를 주기적으로 업로드합니다. 기본적으로 로그 관리자 구성 요소는 5분마다 새 로그를 업로드합니다. 업로드 간격을 더 낮게 구성할 수 있으므로 `periodicUploadIntervalSec`을 구성하면 로그 관리자 구성 요소가 CloudWatch Logs에 로그를 더 자주 업로드합니다. 이 주기적 간격을 구성하는 방법에 대한 자세한 내용은 [구성](https://docs.aws.amazon.com/greengrass/v2/developerguide/log-manager-component.html#log-manager-component-configuration)을 참조하세요.

  동일한 Greengrass 파일 시스템에서 로그를 거의 실시간으로 업로드할 수 있습니다. 로그를 실시간으로 관찰해야 하는 경우 [파일 시스템 로그](#access-local-logs)를 사용하는 것이 좋습니다.
**참고**  
다른 파일 시스템을 사용하여 로그를 쓰는 경우 로그 관리자가 로그 관리자 구성 요소 2.2.8 이하 버전의 동작으로 돌아갑니다. 파일 시스템 로그에 액세스하는 방법에 대한 자세한 내용은 [파일 시스템 로그 액세스](https://docs.aws.amazon.com/greengrass/v2/developerguide/monitor-logs.html#access-local-logs)를 참조하세요.
+ **클록 스큐**

  로그 관리자 구성 요소는 표준 Signature 버전 4 서명 프로세스를 사용하여 CloudWatch Logs에 대한 API 요청을 생성합니다. 코어 디바이스에서 시스템 시간이 15분 이상 동기화되지 않을 경우, CloudWatch Logs에서 요청을 거부합니다. 자세한 정보는 *AWS 일반 참조*의 [서명 버전 4 서명 프로세스](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)를 참조하십시오.

## 시스템 서비스 로그 액세스
<a name="access-system-service-logs"></a>

[AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 구성](configure-greengrass-core-v2.md#configure-system-service)하는 경우 시스템 서비스 로그를 확인하여 소프트웨어가 시작되지 않음과 같은 문제를 해결할 수 있습니다.

**시스템 서비스 로그를 보려면(CLI)**

1. 다음 명령을 실행하여 AWS IoT Greengrass 코어 소프트웨어 시스템 서비스 로그를 봅니다.

------
#### [ Linux or Unix (systemd) ]

   ```
   sudo journalctl -u greengrass.service
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   type C:\greengrass\v2\logs\greengrass.wrapper.log
   ```

------
#### [ PowerShell ]

   ```
   gc C:\greengrass\v2\logs\greengrass.wrapper.log
   ```

------

1. Windows 디바이스에서 AWS IoT Greengrass 코어 소프트웨어는 시스템 서비스 오류에 대한 로그 파일을 별도로 생성합니다. 다음 명령을 실행하여 시스템 서비스 오류 로그를 봅니다.

------
#### [ Windows Command Prompt (CMD) ]

   ```
   type C:\greengrass\v2\logs\greengrass.err.log
   ```

------
#### [ PowerShell ]

   ```
   gc C:\greengrass\v2\logs\greengrass.err.log
   ```

------

Windows 디바이스에서는 **이벤트 뷰어** 애플리케이션을 사용하여 시스템 서비스 로그를 볼 수도 있습니다.

**Windows 서비스 로그를 보려면(이벤트 뷰어)**

1. **이벤트 뷰어** 애플리케이션을 엽니다.

1. **Windows 로그**를 선택하여 확장합니다.

1. **애플리케이션**을 선택하여 애플리케이션 서비스 로그를 봅니다.

1. **소스**가 **greengrass**인 이벤트 로그를 찾아 엽니다.

## CloudWatch Logs에 로깅 활성화
<a name="enable-cloudwatch-logs"></a>

[로그 관리자 구성 요소](log-manager-component.md)를 배포하여 CloudWatch Logs에 로그를 쓰도록 코어 디바이스를 구성할 수 있습니다. AWS IoT Greengrass 코어 소프트웨어 로그에 대해 CloudWatch Logs를 활성화하고 특정 Greengrass 구성 요소에 대해 CloudWatch Logs를 활성화할 수 있습니다.

**참고**  
다음 예제 IAM 정책에 표시된 대로 Greengrass 코어 디바이스의 토큰 교환 역할에서 코어 디바이스가 CloudWatch Logs에 쓸 수 있도록 허용해야 합니다. [자동 리소스 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어를 설치](quick-installation.md)한 경우 코어 디바이스에 이러한 권한이 있습니다.  

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:logs:*:*:*"
    }
  ]
}
```

AWS IoT Greengrass 코어 소프트웨어 로그를 CloudWatch Logs에 쓰도록 코어 디바이스를 구성하려면 `aws.greengrass.LogManager` 구성 요소에 대해 `uploadToCloudWatch`을 `true`로 설정하는 구성 업데이트를 지정하는 [배포를 생성합니다](create-deployments.md). AWS IoT Greengrass 코어 소프트웨어 로그에는 [Greengrass nucleus](greengrass-nucleus-component.md) 및 [플러그인 구성 요소 ](develop-greengrass-components.md#component-types)에 대한 로그가 포함됩니다.

```
{
  "logsUploaderConfiguration": {
    "systemLogsConfiguration": {
      "uploadToCloudWatch": "true"
    }
  }
}
```

Greengrass 구성 요소의 로그를 CloudWatch Logs에 쓰도록 코어 디바이스를 구성하려면 구성 요소 로깅 구성 목록에 구성 요소를 추가하는 구성 업데이트를 지정하는 [배포를 생성](create-deployments.md)합니다. 이 목록에 구성 요소를 추가하면 로그 관리자 구성 요소는 그 구성 요소의 로그를 CloudWatch Logs에 씁니다. 구성 요소 로그에는 [일반 구성 요소 및 Lambda 구성 요소](develop-greengrass-components.md#component-types)에 대한 로그가 포함됩니다.

```
{
  "logsUploaderConfiguration": {
    "componentLogsConfigurationMap": {
      "com.example.HelloWorld": {
      
      }
    }
  }
}
```

로그 관리자 구성 요소를 배포할 때 디스크 공간 제한과 코어 디바이스에서 CloudWatch Logs에 로그를 쓴 후 로그 파일을 삭제하는지 여부도 구성할 수 있습니다. 자세한 내용은 [AWS IoT Greengrass의 로깅 구성](#configure-logging) 섹션을 참조하세요.

## AWS IoT Greengrass의 로깅 구성
<a name="configure-logging"></a>

다음 옵션을 구성하여 Greengrass 코어 디바이스에 대한 로깅을 사용자 지정할 수 있습니다. 이러한 옵션을 구성하려면 Greengrass nucleus 또는 로그 관리자 구성 요소에 대한 구성 업데이트를 지정하는 [배포를 생성](create-deployments.md)합니다.
+ **CloudWatch Logs에 로그 쓰기**

  코어 디바이스 문제를 원격으로 해결하려면 AWS IoT Greengrass 코어 소프트웨어 및 구성 요소 로그를 CloudWatch Logs에 쓰도록 코어 디바이스를 구성할 수 있습니다. 이렇게 하려면 [로그 관리자 구성 요소](log-manager-component.md)를 배포하고 구성합니다. 자세한 내용은 [CloudWatch Logs에 로깅 활성화](#enable-cloudwatch-logs) 섹션을 참조하세요.
+ **업로드된 로그 파일 삭제**

  디스크 공간 사용량을 줄이기 위해 CloudWatch Logs에 로그 파일을 쓴 후 로그 파일을 삭제하도록 코어 디바이스를 구성할 수 있습니다. 자세한 내용은 [AWS IoT Greengrass 코어 소프트웨어 로그](log-manager-component.md#log-manager-component-configuration-system-logs-configuration) 및 [구성 요소 로그](log-manager-component.md#log-manager-component-configuration-component-logs-configuration)에 지정할 수 있는 로그 관리자 구성 요소의 `deleteLogFileAfterCloudUpload` 파라미터를 참조하세요.
+ **로그 디스크 공간 제한**

  디스크 공간 사용량을 제한하려면 코어 디바이스에서 교체된 로그 파일을 포함하여 각 로그에 대한 최대 디스크 공간을 구성할 수 있습니다. 예를 들어 `greengrass.log` 및 교체된 `greengrass.log` 파일의 최대 합산 디스크 공간을 구성할 수 있습니다. 자세한 내용은 [AWS IoT Greengrass 코어 소프트웨어 로그](log-manager-component.md#log-manager-component-configuration-system-logs-configuration) 및 [구성 요소 로그](log-manager-component.md#log-manager-component-configuration-component-logs-configuration)에 지정할 수 있는 Greengrass nucleus 구성 요소의 `logging.totalLogsSizeKB` 파라미터 및 로그 관리자 구성 요소의 `diskSpaceLimit` 파라미터를 참조하세요.
+ **로그 파일 크기 제한**

  각 로그 파일의 최대 파일 크기를 구성할 수 있습니다. 로그 파일이 이 파일 크기 제한을 초과하면 AWS IoT Greengrass 코어 소프트웨어에서 새 로그 파일을 생성합니다. [로그 관리자 구성 요소](log-manager-component.md) 2.28 이하 버전에서는 교체된 로그 파일만 CloudWatch Logs에 쓰므로 CloudWatch Logs에 로그를 더 자주 쓰도록 파일 크기 제한을 더 낮게 지정할 수 있습니다. 로그 관리자 구성 요소 2.3.0 이상 버전에서는 로그가 교체될 때까지 기다리지 않고 모든 로그를 처리하고 업로드합니다. 자세한 내용은 Greengrass nucleus 구성 요소의 [로그 파일 크기 제한 파라미터](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-log-file-size)(`logging.fileSizeKB`)를 참조하세요.
+ **최소 로그 수준**

  Greengrass nucleus 구성 요소가 파일 시스템 로그에 쓰는 최소 로그 수준을 구성할 수 있습니다. 예를 들어 문제 해결에 도움이 되는 `DEBUG` 수준 로그를 지정하거나 코어 디바이스가 생성하는 로그의 양을 줄이기 위해 `ERROR` 수준 로그를 지정할 수 있습니다. 자세한 내용은 Greengrass nucleus 구성 요소의 [로그 수준 파라미터](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-log-level)(`logging.level`)를 참조하세요.

  로그 관리자 구성 요소가 CloudWatch Logs에 쓰는 최소 로그 수준을 구성할 수도 있습니다. 예를 들어 [로깅 비용](https://aws.amazon.com/cloudwatch/pricing/)을 줄이기 위해 더 높은 로그 수준을 지정할 수 있습니다. 자세한 내용은 [AWS IoT Greengrass 코어 소프트웨어 로그](log-manager-component.md#log-manager-component-configuration-system-logs-configuration) 및 [구성 요소 로그](log-manager-component.md#log-manager-component-configuration-component-logs-configuration)에 지정할 수 있는 로그 관리자 구성 요소의 `minimumLogLevel` 파라미터를 참조하세요.
+ **CloudWatch Logs에 쓸 로그를 확인하는 간격**

  로그 관리자 구성 요소가 CloudWatch Logs에 로그를 쓰는 빈도를 늘리거나 줄이려면 쓸 새 로그 파일을 확인하는 간격을 구성할 수 있습니다. 예를 들어 CloudWatch Logs에서 로그를 기본 5분 간격보다 더 빨리 보도록 간격을 더 낮게 지정할 수 있습니다. 간격을 더 높게 지정하여 비용을 줄 일 수도 있습니다. 이 경우 로그 관리자 구성 요소에서 로그 파일을 더 적은 요청으로 일괄 처리하기 때문입니다. 자세한 내용은 로그 관리자 구성 요소의 [업로드 간격 파라미터](log-manager-component.md#log-manager-component-configuration-periodic-upload-interval-sec)(`periodicUploadIntervalSec`)를 참조하세요.
+ **로그 형식**

  AWS IoT Greengrass 코어 소프트웨어에서 로그를 텍스트 또는 JSON 형식 중 어떤 형식으로 쓰는지를 선택할 수 있습니다. 로그를 읽는 경우에는 텍스트 형식을 선택하고, 애플리케이션을 사용하여 로그를 읽거나 구문 분석하는 경우에는 JSON 형식을 선택합니다. 자세한 내용은 Greengrass nucleus 구성 요소의 [로그 형식 파라미터](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-logging-format)(`logging.format`)를 참조하세요.
+ **로컬 파일 시스템 로그 폴더**

  로그 폴더를 `/greengrass/v2/logs`에서 코어 디바이스의 다른 폴더로 변경할 수 있습니다. 자세한 내용은 Greengrass nucleus 구성 요소의 [출력 디렉터리 파라미터](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-log-level)(`logging.outputDirectory`)를 참조하세요.

## AWS CloudTrail 로그
<a name="cloudtrail-integration"></a>

AWS IoT Greengrass는 AWS IoT Greengrass에서 사용자, 역할 또는 AWS 서비스가 수행한 작업에 대한 레코드를 제공하는 서비스인 AWS CloudTrail과 통합됩니다. 자세한 내용은 [를 사용하여 AWS IoT Greengrass V2 API 호출 로깅 AWS CloudTrail](logging-using-cloudtrail.md) 섹션을 참조하세요.

# 를 사용하여 AWS IoT Greengrass V2 API 호출 로깅 AWS CloudTrail
<a name="logging-using-cloudtrail"></a>

AWS IoT Greengrass V2 는 사용자 AWS CloudTrail, 역할 또는 서비스가 수행한 작업에 대한 레코드를 제공하는 AWS 서비스와 통합됩니다 AWS IoT Greengrass Version 2. CloudTrail은에 대한 모든 API 호출을 이벤트 AWS IoT Greengrass 로 캡처합니다. 캡처되는 호출에는 AWS IoT Greengrass 콘솔의 호출과 AWS IoT Greengrass API 작업에 대한 코드 호출이 포함됩니다.

추적을 생성하면 이벤트를 포함한 CloudTrail 이벤트를 지속적으로 S3 버킷에 배포할 수 있습니다 AWS IoT Greengrass. 추적을 구성하지 않은 경우에도 **이벤트 기록**에서 CloudTrail 콘솔의 최신 이벤트를 볼 수 있습니다. CloudTrail에서 수집한 정보를 사용하여 수행된 요청, 요청이 수행된 AWS IoT Greengrass IP 주소, 요청을 수행한 사람, 요청이 수행된 시간 및 추가 세부 정보를 확인할 수 있습니다.

CloudTrail에 대한 자세한 내용은 [AWS CloudTrail 사용자 안내서](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)를 참조하세요.

**Topics**
+ [AWS IoT Greengrass V2 CloudTrail의 정보](#service-name-info-in-cloudtrail)
+ [AWS IoT Greengrass CloudTrail의 데이터 이벤트](#greengrass-data-events-cloudtrail)
+ [AWS IoT Greengrass CloudTrail의 관리 이벤트](#greengrass-management-events-cloudtrail)
+ [AWS IoT Greengrass V2 로그 파일 항목 이해](#understanding-service-name-entries)

## AWS IoT Greengrass V2 CloudTrail의 정보
<a name="service-name-info-in-cloudtrail"></a>

CloudTrail은 계정을 생성할 AWS 계정 때에서 활성화됩니다. 에서 활동이 발생하면 AWS IoT Greengrass해당 활동이 **이벤트 기록**의 다른 AWS 서비스 이벤트와 함께 CloudTrail 이벤트에 기록됩니다. AWS 계정에서 최신 이벤트를 확인, 검색 및 다운로드할 수 있습니다. 자세한 내용은 [CloudTrail 이벤트 기록을 사용하여 이벤트 보기](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)를 참조하세요.

에 대한 이벤트를 AWS 계정포함하여에 이벤트를 지속적으로 기록하려면 추적을 AWS IoT Greengrass생성합니다. *추적*은 CloudTrail이 S3 버킷으로 로그 파일을 전송할 수 있도록 합니다. 기본적으로 콘솔에서 추적을 생성하면 추적이 모든 AWS 리전에 적용됩니다. 추적은 AWS 파티션의 모든 리전에서 이벤트를 로깅하고 지정한 S3 버킷으로 로그 파일을 전송합니다. 또한 CloudTrail 로그에서 수집된 이벤트 데이터를 추가로 분석하고 조치를 취하도록 다른 AWS 서비스를 구성할 수 있습니다. 자세한 내용은 다음 자료를 참조하세요.
+ [추적 생성 개요](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [CloudTrail 지원 서비스 및 통합](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html)
+ [CloudTrail에 대한 Amazon SNS 알림 구성](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/configure-sns-notifications-for-cloudtrail.html)
+ [여러 리전에서 CloudTrail 로그 파일 받기](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html) 및 [여러 계정에서 CloudTrail 로그 파일 받기](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-receive-logs-from-multiple-accounts.html)

모든 AWS IoT Greengrass V2 작업은 CloudTrail에서 로깅되며 [AWS IoT Greengrass V2 API 참조](https://docs.aws.amazon.com/greengrass/v2/APIReference/Welcome.html)에 문서화됩니다. 예를 들어 `CreateComponentVersion`, `CreateDeployment`, `CancelDeployment` 작업을 직접 호출하면 CloudTrail 로그 파일에 항목이 생성됩니다.

모든 이벤트 또는 로그 항목에는 요청을 생성했던 사용자에 관한 정보가 포함됩니다. ID 정보를 이용하면 다음을 쉽게 판단할 수 있습니다.
+ 요청이 루트 또는 AWS Identity and Access Management (IAM) 사용자 자격 증명으로 이루어졌는지 여부입니다.
+ 역할 또는 페더레이션 사용자의 임시 자격 증명을 사용하여 요청이 생성되었는지 여부.
+ 요청이 다른 AWS 서비스에 의해 이루어졌는지 여부입니다.

자세한 내용은 [CloudTrail userIdentity 요소](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)를 참조하세요.

## AWS IoT Greengrass CloudTrail의 데이터 이벤트
<a name="greengrass-data-events-cloudtrail"></a>

[데이터 이벤트](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html#logging-data-events)는 리소스에 대해 또는 리소스에서 수행된 리소스 작업에 대한 정보를 제공합니다(예: 구성 요소 버전 또는 배포에 대한 구성 가져오기). 이를 데이터 플레인 작업이라고도 합니다. 데이터 이벤트는 흔히 대량 활동입니다. 기본적으로 CloudTrail은 데이터 이벤트를 로깅하지 않습니다. CloudTrail **이벤트 기록**은 데이터 이벤트를 기록하지 않습니다.

데이터 이벤트에는 추가 요금이 적용됩니다. CloudTrail 요금에 관한 자세한 내용은 [AWS CloudTrail 요금](https://aws.amazon.com/cloudtrail/pricing/)을 참조하세요.

CloudTrail 콘솔 AWS CLI또는 CloudTrail API 작업을 사용하여 AWS IoT Greengrass 리소스 유형에 대한 데이터 이벤트를 로깅할 수 있습니다. 이 섹션의 [표](#data-events-table)에는 사용 가능한 리소스 유형이 나와 있습니다 AWS IoT Greengrass.
+ CloudTrail 콘솔을 사용하여 데이터 이벤트를 로깅하려면 [추적](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-a-trail-using-the-console-first-time.html#creating-a-trail-in-the-console) 또는 [이벤트 데이터 스토어](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/query-event-data-store-cloudtrail.html)를 생성하여 데이터 이벤트를 기록하거나 [기존 추적 또는 이벤트 데이터 스토어를 업데이트](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html#logging-data-events-console)하여 데이터 이벤트를 기록합니다.

  1. 데이터 이벤트를 로깅하려면 **데이터 이벤트**를 선택합니다.

  1. **데이터 이벤트 유형**에서 데이터 이벤트를 로깅할 리소스 유형을 선택합니다.

  1. 사용할 템플릿에서 로그 선택기를 선택합니다. 리소스 유형에 대한 모든 데이터 이벤트를 로그하거나, 모든 `readOnly` 이벤트를 로그하거나, 모든 `writeOnly` 이벤트를 로그하거나, 사용자 지정 로그 선택기 템플릿을 생성하여 `readOnly`, `eventName` 및 `resources.ARN` 필드를 필터링할 수 있습니다.
+ 를 사용하여 데이터 이벤트를 로깅하려면 `eventCategory` 필드를 로 `Data` 설정하고 `resources.type` 필드를 리소스 유형 값과 로 설정하도록 `--advanced-event-selectors` 파라미터를 AWS CLI구성합니다([표](#data-events-table) 참조). 조건을 추가하여 `readOnly`, `eventName` 및 `resources.ARN` 필드의 값을 필터링할 수 있습니다.
  + 데이터 이벤트를 로깅하도록 추적을 구성하려면 [https://docs.aws.amazon.com/cli/latest/reference/cloudtrail/put-event-selectors.html](https://docs.aws.amazon.com/cli/latest/reference/cloudtrail/put-event-selectors.html) 명령을 실행합니다. 자세한 내용은 [AWS CLI로 추적에 대한 데이터 이벤트 로깅](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html#logging-data-events-CLI-trail-examples)을 참조하세요.
  + 데이터 이벤트를 로깅하도록 이벤트 데이터 스토어를 구성하려면 [https://docs.aws.amazon.com/cli/latest/reference/cloudtrail/create-event-data-store.html](https://docs.aws.amazon.com/cli/latest/reference/cloudtrail/create-event-data-store.html) 명령을 실행하여 데이터 이벤트를 로깅할 새 이벤트 데이터 스토어를 생성하거나 [https://docs.aws.amazon.com/cli/latest/reference/cloudtrail/update-event-data-store.html](https://docs.aws.amazon.com/cli/latest/reference/cloudtrail/update-event-data-store.html) 명령을 실행하여 기존 이벤트 데이터 스토어를 업데이트합니다. 자세한 내용은 [AWS CLI로 데이터 이벤트 스토어에 대한 데이터 이벤트 로깅](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html#logging-data-events-CLI-eds-examples)을 참조하세요.

다음 표에는 AWS IoT Greengrass 리소스 유형이 나열되어 있습니다. **데이터 이벤트 유형(콘솔)** 열에는 CloudTrail 콘솔의 **데이터 이벤트 유형** 목록에서 선택할 값이 표시됩니다. **resources.type 값** 열에는 AWS CLI 또는 CloudTrail APIs를 사용하여 고급 이벤트 선택기를 구성할 때 지정하는 `resources.type` 값이 표시됩니다. **CloudTrail에 로깅되는 데이터 API** 열에는 리소스 유형에 대해 CloudTrail에 로깅된 API 직접 호출이 표시됩니다.


| 데이터 이벤트 유형(콘솔) | resources.type 값 | CloudTrail에 로깅되는 데이터 API | 
| --- | --- | --- | 
| IoT 인증서 | AWS::IoT::Certificate |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/logging-using-cloudtrail.html)  | 
| IoT Greengrass 구성 요소 버전 |  AWS::GreengrassV2::ComponentVersion  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/logging-using-cloudtrail.html)  | 
| IoT Greengrass 배포 |  AWS::GreengrassV2::Deployment  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/logging-using-cloudtrail.html)  | 
| IoT 사물 | AWS::IoT::Thing |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/logging-using-cloudtrail.html)  | 

`eventName`, `readOnly` 및 `resources.ARN` 필드를 필터링하여 중요한 이벤트만 로깅하도록 고급 이벤트 선택기를 구성할 수 있습니다.

`eventName`에 필터를 추가하여 특정 데이터 API를 포함하거나 제외합니다.

필드에 대한 자세한 내용은 [https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_AdvancedFieldSelector.html](https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_AdvancedFieldSelector.html) 섹션을 참조하세요.

다음 예제에서는 AWS CLI를 사용하여 고급 선택기를 구성하는 방법을 보여줍니다. *TrailName* 및 *region*을 자신의 정보로 바꿉니다.

**Example - IoT 사물에 대한 데이터 이벤트 로깅**  

```
aws cloudtrail put-event-selectors --trail-name TrailName --region region \
--advanced-event-selectors \
‘[
    {
            “Name”: “Log all thing data events”,
            “FieldSelectors”: [
                { “Field”: “eventCategory”, “Equals”: [“Data”] },
                { “Field”: “resources.type”, “Equals”: [“AWS::IoT::Thing”] }
            ]
        }
]’
```

**Example - 특정 IoT 사물 API 필터링**  

```
aws cloudtrail put-event-selectors --trail-name TrailName --region region \
--advanced-event-selectors \
‘[
    {
            “Name”: “Log IoT Greengrass PutCertificateAuthorities API calls”,
            “FieldSelectors”: [
                { “Field”: “eventCategory”, “Equals”: [“Data”] },
                { “Field”: “resources.type”, “Equals”: [“AWS::IoT::Thing”] },
                { “Field”: “eventName”, “Equals”: [“PutCertificateAuthorities”] }
            ]
    }
]’
```

**Example – 모든 Greengrass 데이터 이벤트 로깅**  

```
aws cloudtrail put-event-selectors --trail-name TrailName --region region \
--advanced-event-selectors \
‘[
    {
        “Name”: “Log all certificate data events”,
        “FieldSelectors”: [
            {
                “Field”: “eventCategory”,
                “Equals”: [
                    “Data”
                ]
            },
            {
                “Field”: “resources.type”,
                “Equals”: [
                    “AWS::IoT::Certificate”
                ]
            }
        ]
    },
    {
        “Name”: “Log all component version data events”,
        “FieldSelectors”: [
            {
                “Field”: “eventCategory”,
                “Equals”: [
                    “Data”
                ]
            },
            {
                “Field”: “resources.type”,
                “Equals”: [
                    “AWS::GreengrassV2::ComponentVersion”
                ]
            }
        ]
    },
    {
        “Name”: “Log all deployment version”,
        “FieldSelectors”: [
            {
                “Field”: “eventCategory”,
                “Equals”: [
                    “Data”
                ]
            },
            {
                “Field”: “resources.type”,
                “Equals”: [
                    “AWS::GreengrassV2::Deployment”
                ]
            }
        ]
    },
    {
        “Name”: “Log all thing data events”,
        “FieldSelectors”: [
            {
                “Field”: “eventCategory”,
                “Equals”: [
                    “Data”
                ]
            },
            {
                “Field”: “resources.type”,
                “Equals”: [
                    “AWS::IoT::Thing”
                ]
            }
        ]
    }
]’
```

## AWS IoT Greengrass CloudTrail의 관리 이벤트
<a name="greengrass-management-events-cloudtrail"></a>

[관리 이벤트](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-management-events-with-cloudtrail.html#logging-management-events)는 AWS 계정의 리소스에 대해 수행되는 관리 작업에 대한 정보를 제공합니다. 이를 컨트롤 플레인 작업이라고도 합니다. 기본적으로 CloudTrail은 관리 이벤트를 로깅합니다.

AWS IoT Greengrass 는 모든 AWS IoT Greengrass 컨트롤 플레인 작업을 관리 이벤트로 기록합니다. CloudTrail에 AWS IoT Greengrass 로깅하는 AWS IoT Greengrass 컨트롤 플레인 작업 목록은 [AWS IoT Greengrass API 참조 버전 2](https://docs.aws.amazon.com/greengrass/v2/APIReference/Welcome.html)를 참조하세요.

## AWS IoT Greengrass V2 로그 파일 항목 이해
<a name="understanding-service-name-entries"></a>

추적이란 지정한 S3 버킷에 이벤트를 로그 파일로 입력할 수 있도록 하는 구성입니다. CloudTrail 로그 파일에는 하나 이상의 로그 항목이 포함될 수 있습니다. 이벤트는 모든 소스로부터 단일 요청을 나타냅니다. 요청된 작업, 모든 파라미터, 작업 날짜와 시간, 요청 파라미터 등에 대한 정보가 들어 있습니다. CloudTrail 로그 파일은 퍼블릭 API 직접 호출의 주문 스택 트레이스가 아니므로 특정 순서로 표시되지 않습니다.

다음은 `CreateDeployment` 작업을 보여주는 CloudTrail 로그 항목이 나타낸 예시입니다.

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "AIDACKCEVSQ6C2EXAMPLE",
        "arn": "arn:aws:iam::123456789012:user/Administrator",
        "accountId": "123456789012",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
        "userName": "Administrator"
    },
    "eventTime": "2021-01-06T02:38:05Z",
    "eventSource": "greengrass.amazonaws.com",
    "eventName": "CreateDeployment",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "203.0.113.0",
    "userAgent": "aws-cli/2.1.9 Python/3.7.9 Windows/10 exe/AMD64 prompt/off command/greengrassv2.create-deployment",
    "requestParameters": {
        "deploymentPolicies": {
            "failureHandlingPolicy": "DO_NOTHING",
            "componentUpdatePolicy": {
                "timeoutInSeconds": 60,
                "action": "NOTIFY_COMPONENTS"
            },
            "configurationValidationPolicy": {
                "timeoutInSeconds": 60
            }
        },
        "deploymentName": "Deployment for MyGreengrassCoreGroup",
        "components": {
            "aws.greengrass.Cli": {
                "componentVersion": "2.0.3"
            }
        },
        "iotJobConfiguration": {},
        "targetArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup"
    },
    "responseElements": {
        "iotJobArn": "arn:aws:iot:us-west-2:123456789012:job/fdfeba1d-ac6d-44ef-ab28-54f684ea578d",
        "iotJobId": "fdfeba1d-ac6d-44ef-ab28-54f684ea578d",
        "deploymentId": "4196dddc-0a21-4c54-a985-66a525f6946e"
    },
    "requestID": "311b9529-4aad-42ac-8408-c06c6fec79a9",
    "eventID": "c0f3aa2c-af22-48c1-8161-bad4a2ab1841",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "eventCategory": "Management",
    "recipientAccountId": "123456789012"
}
```

# AWS IoT Greengrass 코어 디바이스에서 시스템 상태 원격 측정 데이터 수집
<a name="telemetry"></a>

시스템 상태 원격 측정 데이터는 Greengrass 코어 장치의 중요 작업 성능을 모니터링하는 데 도움이 되는 진단 데이터입니다. 엣지 장치에서 원격 측정 데이터를 검색, 분석, 변환 및 보고하는 프로젝트와 애플리케이션을 만들 수 있습니다. 프로세스 엔지니어와 같은 도메인 전문가는 이러한 애플리케이션을 사용하여 플릿 상태에 대한 통찰력을 얻을 수 있습니다.

다음 방법을 사용하여 Greengrass 코어 디바이스에서 원격 측정 데이터를 수집할 수 있습니다.
+ **nucleus 원격 측정 이미터 구성 요소** - Greengrass 코어 디바이스의 [nucleus 원격 측정 이미터 구성 요소](nucleus-emitter-component.md)(`aws.greengrass.telemetry.NucleusEmitter`)는 기본적으로 원격 측정 데이터를 `$local/greengrass/telemetry` 주제에 게시합니다. 이 주제에 게시된 데이터를 사용하여 디바이스의 클라우드 연결이 제한되어 있는 경우에도 코어 디바이스에서 로컬로 작업할 수 있습니다. 선택적으로 선택한 AWS IoT Core MQTT 주제에 원격 측정 데이터를 게시하도록 구성 요소를 구성할 수도 있습니다.

  원격 측정 데이터를 게시하려면 코어 디바이스에 nucleus 이미터 구성 요소를 배포해야 합니다. 원격 측정 데이터를 로컬 주제에 게시하는 데는 비용이 들지 않습니다. 그러나 MQTT 주제를 사용하여에 데이터를 게시하는 데 AWS 클라우드 는 [AWS IoT Core 요금이](https://aws.amazon.com/iot-core/pricing/) 적용됩니다.

  <a name="greengrass-software-catalog-influxdb-telemetry-publisher"></a>AWS IoT Greengrass 는 InfluxDB 및 Grafana를 사용하여 코어 디바이스에서 로컬로 원격 측정 데이터를 분석하고 시각화하는 데 도움이 되는 여러 [커뮤니티 구성 요소를](greengrass-software-catalog.md) 제공합니다. 이러한 구성 요소는 nucleus 이미터 구성 요소의 원격 측정 데이터를 사용합니다. 자세한 내용은 [InfluxDB 게시자 구성 요소](https://github.com/awslabs/aws-greengrass-labs-telemetry-influxdbpublisher)에 대한 README를 참조하세요.
+ **원격 측정 에이전트** - Greengrass 코어 디바이스의 원격 측정 에이전트는 로컬 원격 측정 데이터를 수집하여 고객과 상호 작용할 필요 없이 Amazon EventBridge에 게시합니다. 코어 장치는 최선의 노력으로 EventBridge에 원격 측정 데이터를 게시합니다. 예를 들어, 코어 장치는 오프라인 상태에서 원격 측정 데이터를 제공하지 못할 수 있습니다.

  원격 측정 에이전트 기능은 모든 Greengrass 코어 디바이스에서 기본적으로 활성화되어 있습니다. Greengrass 코어 디바이스를 설정하는 즉시 자동으로 데이터 수신을 시작합니다. 데이터 링크 비용 외에도 코어 디바이스에서 로 데이터를 AWS IoT Core 무료로 전송할 수 있습니다. 이는 에이전트가 AWS 예약된 주제에 게시하기 때문입니다. 하지만 사용 사례에 따라 데이터를 받거나 처리할 때 비용이 발생할 수 있습니다.
**참고**  
Amazon EventBridge는 애플리케이션을 Greengrass 코어 디바이스와 같은 다양한 소스의 데이터와 연결하는 데 사용할 수 있는 이벤트 버스 서비스입니다. 자세한 내용은 *Amazon EventBridge 사용 설명서*의 [Amazon EventBridge란?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) 섹션을 참조하세요.

 AWS IoT Greengrass 코어 소프트웨어가 제대로 작동하는지 확인하기 위해는 개발 및 품질 개선을 위해 데이터를 AWS IoT Greengrass 사용합니다. 또한이 기능은 새롭고 향상된 엣지 기능을 알리는 데 도움이 됩니다.는 최대 7일 동안 원격 측정 데이터를 AWS IoT Greengrass 유지합니다.

이 섹션에서는 원격 측정 에이전트를 구성하고 사용하는 방법에 대해 설명합니다. nucleus 원격 측정 이미터 구성 요소 구성에 대한 자세한 내용은 [nucleus 원격 측정 이미터](nucleus-emitter-component.md) 섹션을 참조하세요.

**Topics**
+ [원격 측정 지표](#telemetry-metrics)
+ [원격 측정 에이전트 설정](#configure-telemetry-agent-settings)
+ [EventBridge에서 원격 측정 데이터 구독](#subscribe-for-telemetry-data)

## 원격 측정 지표
<a name="telemetry-metrics"></a>

다음 표에서는 원격 측정 에이전트에서 게시하는 지표를 설명합니다.


| 이름 | 설명 | 
| --- | --- | 
|  **시스템**  | 
|  `SystemMemUsage`  |  운영 체제를 포함하여 Greengrass 코어 장치의 모든 애플리케이션에서 현재 사용 중인 메모리의 양입니다.  | 
|  `CpuUsage`  |  운영 체제를 포함하여 Greengrass 코어 장치의 모든 애플리케이션에서 현재 사용 중인 CPU의 양입니다.  | 
|  `TotalNumberOfFDs`  |  Greengrass 코어 장치의 운영 체제에 저장된 파일 디스크립터 수입니다. 하나의 파일 디스크립터는 열려 있는 파일 하나를 고유하게 식별합니다.  | 
|  **Greengrass nucleus**  | 
|  `NumberOfComponentsRunning`  |  Greengrass 코어 디바이스에서 실행 중인 구성 요소의 수입니다.  | 
|  `NumberOfComponentsErrored`  |  Greengrass 코어 디바이스에서 오류 상태에 있는 구성 요소의 수입니다.  | 
|  `NumberOfComponentsInstalled`  |  Greengrass 코어 디바이스에 설치된 구성 요소의 수입니다.  | 
|  `NumberOfComponentsStarting`  |  Greengrass 코어 디바이스에서 시작하는 구성 요소의 수입니다.  | 
|  `NumberOfComponentsNew`  |  Greengrass 코어 디바이스의 새로운 구성 요소의 수입니다.  | 
|  `NumberOfComponentsStopping`  |  Greengrass 코어 디바이스에서 중지하는 구성 요소의 수입니다.  | 
|  `NumberOfComponentsFinished`  |  Greengrass 코어 디바이스에서 완료된 구성 요소의 수입니다.  | 
|  `NumberOfComponentsBroken`  |  Greengrass 코어 디바이스에서 손상된 구성 요소의 수입니다.  | 
|  `NumberOfComponentsStateless`  |  Greengrass 코어 디바이스에 있는 상태 비저장 구성 요소의 수입니다.  | 
|  **클라이언트 디바이스 인증** - 이 기능을 사용하려면 클라이언트 디바이스 인증 구성 요소의 v2.4.0 이상이 필요합니다.  | 
|  `VerifyClientDeviceIdentity.Success`  |  클라이언트 디바이스 ID가 성공했는지 확인하는 횟수.  | 
|  `VerifyClientDeviceIdentity.Failure`  |  클라이언트 디바이스 ID가 실패했는지 확인하는 횟수.  | 
|  `AuthorizeClientDeviceActions.Success`  |  클라이언트 디바이스에 요청된 작업을 완료할 수 있는 권한이 부여된 횟수.  | 
|  `AuthorizeClientDeviceActions.Failure`  |  클라이언트 디바이스에 요청된 작업을 완료할 수 있는 권한이 부여되지 않은 횟수.  | 
|  `GetClientDeviceAuthToken.Success`  |  클라이언트 디바이스가 성공적으로 인증된 횟수.  | 
|  `GetClientDeviceAuthToken.Failure`  |  클라이언트 디바이스가 인증되지 못한 횟수.  | 
|  `SubscribeToCertificateUpdates.Success`  |  인증서 업데이트에 대한 성공적인 구독의 수.  | 
|  `SubscribeToCertificateUpdates.Failure`  |  인증서 업데이트를 구독하려다 실패한 시도 횟수.  | 
|  `ServiceError`  |  클라이언트 디바이스 인증에서 처리되지 않은 내부 오류의 수.  | 
|  **스트림 관리자** - 이 기능은 Greengrass nucleus 구성 요소의 v2.7.0 이상에서 사용할 수 있습니다.  | 
|  `BytesAppended`  |  스트림 관리자에 추가된 데이터의 바이트 수입니다.  | 
|  `BytesUploadedToIoTAnalytics`  |  스트림 관리자가 채널로 내보내는 데이터의 바이트 수입니다 AWS IoT Analytics.  | 
|  `BytesUploadedToKinesis`  |  스트림 관리자가 Amazon Kinesis Data Streams의 스트림으로 내보내는 데이터의 바이트 수입니다.  | 
|  `BytesUploadedToIoTSiteWise`  |  스트림 관리자가 자산 속성으로 내보내는 데이터의 바이트 수입니다 AWS IoT SiteWise.  | 
|  `BytesUploadedToS3`  |  스트림 관리자가 Amazon S3의 객체로 내보내는 데이터의 바이트 수입니다.  | 
|  **시스템 지표** – 이 기능은 Greengrass nucleus 구성 요소 버전 2.15.0 이상이 필요합니다.  | 
|  `CPUArchitecture`  |  디바이스 중앙 처리 장치 아키텍처.  | 
|  `Family`  |  디바이스 운영 체제 계열(Windows만 해당).  | 
|  `KernelVersion`  |  디바이스 커널 버전(Unix만 해당).  | 
|  `KnowledgeBaseArticles`  |  디바이스에 설치된 지식 베이스 문서(Windows만 해당).  | 
|  `OSBuildMajor`  |  운영 체제 버전의 메이저 빌드 번호(Windows만 해당).  | 
|  `OSBuildMinor`  |  운영 체제 버전의 마이너 빌드 번호(Windows만 해당).  | 
|  `OSName`  |  디바이스 운영 체제의 이름.  | 
|  `OSVersion`  |  디바이스의 운영 체제의 마케팅 버전.  | 

## 원격 측정 에이전트 설정
<a name="configure-telemetry-agent-settings"></a>

원격 측정 에이전트는 다음 기본 설정을 사용합니다.
+ 원격 측정 에이전트는 1시간마다 원격 측정 데이터를 집계합니다.
+ 원격 측정 에이전트는 24시간마다 원격 측정 메시지를 게시합니다.

원격 측정 에이전트는 서비스 품질(QoS) 수준이 0인 MQTT 프로토콜을 사용하여 데이터를 게시합니다. 이는 전송을 확인하거나 게시 시도를 다시 시도하지 않음을 의미합니다. 원격 측정 메시지는 AWS IoT Core대상으로 하는 구독에 대한 다른 메시지와 MQTT 연결을 공유합니다.

데이터 링크 비용 외에도 코어에서 로 데이터를 AWS IoT Core 무료로 전송할 수 있습니다. 이는 에이전트가 AWS 예약된 주제에 게시하기 때문입니다. 하지만 사용 사례에 따라 데이터를 받거나 처리할 때 비용이 발생할 수 있습니다.

각 Greengrass 코어 디바이스에 대해 원격 측정 에이전트 기능을 활성화하거나 비활성화할 수 있습니다. 코어 디바이스가 데이터를 집계하고 게시하는 간격을 구성할 수도 있습니다. 원격 측정을 구성하려면 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md)를 배포할 때 [원격 측정 구성 파라미터](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-telemetry)를 사용자 지정합니다.

## EventBridge에서 원격 측정 데이터 구독
<a name="subscribe-for-telemetry-data"></a>

Amazon EventBridge에서 Greengrass 코어 디바이스의 원격 측정 에이전트에서 게시된 원격 측정 데이터를 처리하는 방법을 정의하는 규칙을 생성할 수 있습니다. EventBridge는 데이터를 수신하면 규칙에 정의된 대상 작업을 간접적으로 호출합니다. 예를 들어 알림을 보내거나, 이벤트 정보를 저장하거나, 교정 작업을 수행하거나, 기타 이벤트를 간접적으로 호출하는 이벤트 규칙을 생성할 수 있습니다.

### 원격 측정 이벤트
<a name="events-message-format"></a>

원격 측정 이벤트는 다음 형식을 사용합니다.

```
{
  "version": "0",
  "id": "a09d303e-2f6e-3d3c-a693-8e33f4fe3955",
  "detail-type": "Greengrass Telemetry Data",
  "source": "aws.greengrass",
  "account": "123456789012",
  "time": "2020-11-30T20:45:53Z",
  "region": "us-east-1",
  "resources": [],
  "detail": {
    "ThingName": "MyGreengrassCore",
    "Schema": "2020-07-30",
    "ADP": [
      {
        "TS": 1602186483234,
        "NS": "SystemMetrics",
        "M": [
          {
            "N": "TotalNumberOfFDs",
            "Sum": 6447.0,
            "U": "Count"
          },
          {
            "N": "CpuUsage",
            "Sum": 15.458333333333332,
            "U": "Percent"
          },
          {
            "N": "SystemMemUsage",
            "Sum": 10201.0,
            "U": "Megabytes"
          }
        ]
      },
      {
        "TS": 1602186483234,
        "NS": "GreengrassComponents",
        "M": [
          {
            "N": "NumberOfComponentsStopping",
            "Sum": 0.0,
            "U": "Count"
          },
          {
            "N": "NumberOfComponentsStarting",
            "Sum": 0.0,
            "U": "Count"
          },
          {
            "N": "NumberOfComponentsBroken",
            "Sum": 0.0,
            "U": "Count"
          },
          {
            "N": "NumberOfComponentsFinished",
            "Sum": 1.0,
            "U": "Count"
          },
          {
            "N": "NumberOfComponentsInstalled",
            "Sum": 0.0,
            "U": "Count"
          },
          {
            "N": "NumberOfComponentsRunning",
            "Sum": 7.0,
            "U": "Count"
          },
          {
            "N": "NumberOfComponentsNew",
            "Sum": 0.0,
            "U": "Count"
          },
          {
            "N": "NumberOfComponentsErrored",
            "Sum": 0.0,
            "U": "Count"
          },
          {
            "N": "NumberOfComponentsStateless",
            "Sum": 0.0,
            "U": "Count"
          }
        ]
      },
      {
        "TS": 1602186483234,
        "NS": "aws.greengrass.ClientDeviceAuth",
        "M": [
          {
            "N": "VerifyClientDeviceIdentity.Success",
            "Sum": 3.0,
            "U": "Count"
          },
          {
            "N": "VerifyClientDeviceIdentity.Failure",
            "Sum": 1.0,
            "U": "Count"
          },
          {
            "N": "AuthorizeClientDeviceActions.Success",
            "Sum": 20.0,
            "U": "Count"
          },
          {
            "N": "AuthorizeClientDeviceActions.Failure",
            "Sum": 5.0,
            "U": "Count"
          },
          {
            "N": "GetClientDeviceAuthToken.Success",
            "Sum": 5.0,
            "U": "Count"
          },
          {
            "N": "GetClientDeviceAuthToken.Failure",
            "Sum": 2.0,
            "U": "Count"
          },
          {
            "N": "SubscribeToCertificateUpdates.Success",
            "Sum": 10.0,
            "U": "Count"
          },
          {
            "N": "SubscribeToCertificateUpdates.Failure",
            "Sum": 1.0,
            "U": "Count"
          },
          {
            "N": "ServiceError",
            "Sum": 3.0,
            "U": "Count"
          }
        ]
      },
      {
        "TS": 1602186483234,
        "NS": "aws.greengrass.StreamManager",
        "M": [
          {
            "N": "BytesAppended",
            "Sum": 157745524.0,
            "U": "Bytes"
          },
          {
            "N": "BytesUploadedToIoTAnalytics",
            "Sum": 149012.0,
            "U": "Bytes"
          },
          {
            "N": "BytesUploadedToKinesis",
            "Sum": 12192.0,
            "U": "Bytes"
          },
          {
            "N": "BytesUploadedToIoTSiteWise",
            "Sum": 13321.0,
            "U": "Bytes"
          },
          {
            "N": "BytesUploadedToS3",
            "Sum": 12213.0,
            "U": "Bytes"
          }
        ]
      }
      {
        "TS": 1750104449426,
        "NS": "SystemMetrics",
        "M": [
          {
            "N": "KernelVersion",
            "Sum": 1,
            "U": "6.1.140-154.222.amzn2023.x86_64"
          },
          {
            "N": "OSVersion",
            "Sum": 1,
            "U": "2023.7.20250609"
          },
          {
            "N": "OSName",
            "Sum": 1,
            "U": "Amazon Linux"
          },
          {
            "N": "CPUArchitecture",
            "Sum": 1,
            "U": "Broadwell (Server)"
          },
        ]
      }
    ]
  }
}
```<a name="telemetry-agent-adp-array-config"></a>

`ADP` 배열에는 다음 속성을 가진 집계된 데이터 포인트 목록이 포함됩니다.

`TS`  
데이터가 수집된 시기의 타임스탬프입니다.

`NS`  
지표 네임스페이스입니다.

`M`  
지표 목록 이 지표는 다음 속성을 포함하고 있습니다.    
`N`  
지표의 이름.  
`Sum`  
이 원격 측정 이벤트의 지표 값의 합계.  
`U`  
지표 값의 단위.

각 지표에 대한 자세한 내용은 [원격 측정 지표](#telemetry-metrics) 섹션을 참조하세요.

### EventBridge 규칙을 생성하기 위한 사전 조건
<a name="create-events-rule-prerequisites-telemetry"></a>

에 대한 EventBridge 규칙을 생성하기 전에 다음을 수행해야 AWS IoT Greengrass합니다.
+ Eventbridge의 이벤트, 규칙, 대상을 숙지해야 합니다.
+ EventBridge 규칙에 의해 호출되는 [대상](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-targets.html)을 생성하고 구성해야 합니다. 규칙은 Amazon Kinesis 스트림, AWS Lambda 함수, Amazon SNS 주제 및 Amazon SQS 대기열과 같은 다양한 유형의 대상을 호출할 수 있습니다.

  EventBridge 규칙 및 연결된 대상은 Greengrass 리소스를 생성한 AWS 리전 에 있어야 합니다. 자세한 내용은 *AWS 일반 참조*의 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)을 참조하세요.

자세한 내용은 *Amazon EventBridge 사용 설명서*의 [Amazon EventBridge란?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) 및 [Amazon EventBridge 시작하기](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-getting-set-up.html) 섹션을 참조하세요.

### 원격 측정 데이터를 가져오기 위한 이벤트 규칙 생성(콘솔)
<a name="create-telemetry-event-rule-console"></a>

다음 단계를 사용하여 Greengrass 코어 디바이스에서 게시한 원격 측정 데이터를 수신하는 EventBridge 규칙을 AWS Management Console 생성합니다. 이렇게 하면 웹 서버, 이메일 주소 및 기타 주제 구독자가 이벤트에 대응할 수 있습니다. 자세한 내용은 Amazon [ EventBridge 사용 설명서의 AWS 리소스에서 이벤트를 트리거하는 EventBridge 규칙 생성을](https://docs.aws.amazon.com/eventbridge/latest/userguide/create-eventbridge-rule.html) 참조하세요. * EventBridge *

1. [Amazon EventBridge 콘솔](https://console.aws.amazon.com/events/)을 열고 **규칙 생성**을 선택합니다.

1. **이름 및 설명**에 규칙의 이름과 설명을 입력합니다.

1. **패턴 정의**에서 규칙 패턴을 구성합니다.

   1. [**Event pattern**]을 선택합니다.

   1. **Pre-defined pattern by service(서비스별 사전 정의된 패턴)**을 선택하세요.

   1. **서비스 공급자(Service provider)**에 **AWS**를 선택합니다.

   1. **서비스 이름**에서 **Greengrass**를 선택합니다.

   1. **이벤트 유형**에서 **Greengrass 원격 측정 데이터**를 선택합니다.

1. **이벤트 버스 선택**에서 기본 이벤트 버스 옵션을 유지합니다.

1. **대상 선택**에서 대상을 구성합니다. 다음 예제는 Amazon SQS 대기열을 사용하지만 다른 대상 유형을 구성할 수도 있습니다.

   1. **대상**에서 **SQS 대기열**을 선택합니다.

   1. **대기열\$1**에서 대상 대기열을 선택합니다.

1. **태그 - 선택 사항**에서 규칙에 대한 태그를 정의하거나 필드를 비워 둡니다.

1. **생성(Create)**을 선택합니다.

### 원격 측정 데이터(CLI) 를 가져오기 위한 이벤트 규칙 생성
<a name="create-telemetry-event-rule-cli"></a>

다음 단계에 따라 AWS CLI 를 사용하여 Greengrass 코어 디바이스에서 게시한 원격 측정 데이터를 수신하는 EventBridge 규칙을 생성합니다. 이렇게 하면 웹 서버, 이메일 주소 및 기타 주제 구독자가 이벤트에 대응할 수 있습니다.

1. 규칙을 생성합니다.
   + *thing-name*을 코어 디바이스의 사물 이름으로 바꿉니다.

------
#### [ Linux or Unix ]

   ```
   aws events put-rule \
     --name MyGreengrassTelemetryEventRule \
     --event-pattern "{\"source\": [\"aws.greengrass\"], \"detail\": {\"ThingName\": [\"thing-name\"]}}"
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws events put-rule ^
     --name MyGreengrassTelemetryEventRule ^
     --event-pattern "{\"source\": [\"aws.greengrass\"], \"detail\": {\"ThingName\": [\"thing-name\"]}}"
   ```

------
#### [ PowerShell ]

   ```
   aws events put-rule `
     --name MyGreengrassTelemetryEventRule `
     --event-pattern "{\"source\": [\"aws.greengrass\"], \"detail\": {\"ThingName\": [\"thing-name\"]}}"
   ```

------

   패턴에서 생략된 속성은 무시됩니다.

1. 규칙 대상으로 주제를 추가합니다. 다음 예제는 Amazon SQS를 사용하지만 다른 대상 유형을 구성할 수 있습니다.
   + *queue-arn*을 Amazon SQS 대기열의 ARN으로대체하세요.

------
#### [ Linux or Unix ]

   ```
   aws events put-targets \
     --rule MyGreengrassTelemetryEventRule \
     --targets "Id"="1","Arn"="queue-arn"
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws events put-targets ^
     --rule MyGreengrassTelemetryEventRule ^
     --targets "Id"="1","Arn"="queue-arn"
   ```

------
#### [ PowerShell ]

   ```
   aws events put-targets `
     --rule MyGreengrassTelemetryEventRule `
     --targets "Id"="1","Arn"="queue-arn"
   ```

------
**참고**  
Amazon EventBridge가 대상 주제를 간접적으로 호출하도록 허용하려면 대기열에 리소스 기반 정책을 추가해야 합니다. 자세한 내용은 *Amazon EventBridge 사용 설명서*의 [Amazon SQS 권한](https://docs.aws.amazon.com/eventbridge/latest/userguide/resource-based-policies-eventbridge.html#sqs-permissions) 섹션을 참조하세요.

자세한 내용은 *Amazon EventBridge 사용 설명서*에서 [EventBridge의 이벤트 및 이벤트 패턴](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html) 섹션을 참조하세요.

# 배포 및 구성 요소 상태 알림 받기
<a name="deployment-health-notifications"></a>

Amazon EventBridge 이벤트 규칙에서는 디바이스에 수신된 Greengrass 배포 및 디바이스에 설치된 구성 요소의 상태 변경에 대한 알림이 제공됩니다. EventBridge는 AWS 리소스의 변경 사항을 설명하는 시스템 이벤트의 스트림을 거의 실시간으로 제공합니다.는 이러한 이벤트를 *최선을 다*해 EventBridge에 AWS IoT Greengrass 전송합니다. 즉,는 모든 이벤트를 EventBridge로 전송하려고 AWS IoT Greengrass 시도하지만 경우에 따라 이벤트가 전달되지 않을 수 있습니다. 또한 AWS IoT Greengrass 는 지정된 이벤트의 사본을 여러 개 전송할 수 있습니다. 즉, 이벤트 리스너가 이벤트가 발생한 순서대로 이벤트를 수신하지 못할 수 있습니다.

**참고**  
Amazon EventBridge는 애플리케이션을 [Greengrass 코어 디바이스](telemetry.md)와 배포 및 구성 요소 알림과 같은 다양한 소스의 데이터와 연결하는 데 사용할 수 있는 이벤트 버스 서비스입니다. 자세한 내용은 *Amazon EventBridge 사용 설명서*의 [Amazon EventBridge란?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) 섹션을 참조하세요.

**Topics**
+ [배포 상태 변경 이벤트](#deployment.events-message-format)
+ [구성 요소 상태 변경 이벤트](#component.events-message-format)
+ [EventBridge 규칙 생성을 위한 사전 조건](#create-events-rule-prereqs)
+ [디바이스 상태 알림 구성(콘솔)](#create-events-rule-console)
+ [디바이스 상태 알림 구성(CLI)](#create-events-rule-cli)
+ [디바이스 상태 알림 구성(CloudFormation)](#create-events-rule-cloudformation)
+ [다음 사항도 참조하세요.](#deployment-notifications-see-also)

## 배포 상태 변경 이벤트
<a name="deployment.events-message-format"></a>

AWS IoT Greengrass 는 배포가 `FAILED`, , `COMPLETED`, `SUCCEEDED``REJECTED`, 상태가 되면 이벤트를 내보냅니다`CANCELED`. 모든 상태 전환 또는 지정한 상태로의 전환에 대해 실행하는 EventBridge 규칙을 생성할 수 있습니다. 배포가 규칙을 트리거하는 상태로 전환되면 EventBridge는 규칙에 정의된 대상 작업을 간접 호출합니다. 이렇게 하면 알림을 전송하고, 이벤트 정보를 캡처하고, 적절한 조치를 취하거나, 상태 변경에 대응하는 기타 이벤트를 시작할 수 있습니다. 예를 들어 다음 사용 사례에 대한 규칙을 생성할 수 있습니다.
+ 자산 다운로드 및 담당자 알림 전송과 같은 배포 후 작업을 트리거합니다.
+ 배포 성공 또는 실패 시 알림 보내기
+ 배포 이벤트에 대한 사용자 지정 지표 게시

배포 상태 변경에 대한 [이벤트](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html)에서 사용하는 형식은 다음과 같습니다.

```
{
    "version":"0",
    "id":" cd4d811e-ab12-322b-8255-EXAMPLEb1bc8",
    "detail-type":"Greengrass V2 Effective Deployment Status Change",
    "source":"aws.greengrass",
    "account":"123456789012",
    "region":"us-west-2",
    "time":"2018-03-22T00:38:11Z",
    "resources":["arn:aws:greengrass:us-east-1:123456789012:coreDevices:MyGreengrassCore"],
    "detail":{    
        "deploymentId": "4f38f1a7-3dd0-42a1-af48-EXAMPLE09681",
        "coreDeviceExecutionStatus": "FAILED|SUCCEEDED|COMPLETED|REJECTED|CANCELED",
        "statusDetails": {
          "errorStack": ["DEPLOYMENT_FAILURE", "ARTIFACT_DOWNLOAD_ERROR", "S3_ERROR", "S3_ACCESS_DENIED", "S3_HEAD_OBJECT_ACCESS_DENIED"],
          "errorTypes": ["DEPENDENCY_ERROR", "PERMISSION_ERROR"],
        },
        "reason": "S3_HEAD_OBJECT_ACCESS_DENIED: FAILED_NO_STATE_CHANGE: Failed to download artifact name: 's3://pentest27/nucleus/281/aws.greengrass.nucleus.zip' for component aws.greengrass.Nucleus-2.8.1, reason: S3 HeadObject returns 403 Access Denied. Ensure the IAM role associated with the core device has a policy granting s3:GetObject. null (Service: S3, Status Code: 403, Request ID: HR94ZNT2161DAR58, Extended Request ID: wTX4DDI+qigQt3uzwl9rlnQiYlBgwvPm/KJFWeFAn9t1mnGXTms/luLCYANgq08RIH+x2H+hEKc=)"
     }
}
```

배포의 상태에 대한 업데이트가 제공되는 규칙과 이벤트를 생성할 수 있습니다. 배포가`FAILED`, `SUCCEEDED`, `COMPLETED`, `REJECTED` 또는 `CANCELED`로 완료되면 이벤트가 시작됩니다. 코어 디바이스에서 배포에 실패하면 배포 실패 이유가 설명되는 자세한 응답을 수신됩니다. 배포 오류 코드에 대한 자세한 내용은 [세부 배포 오류 코드](troubleshooting-deployment.md) 섹션을 참조하세요.

**배포 상태**  
+ `FAILED`. 배포가 실패했습니다.
+ `SUCCEEDED`. 사물 그룹이 대상인 배포가 완료되었습니다.
+ `COMPLETED`. 사물이 대상인 배포가 완료되었습니다.
+ `REJECTED`. 배포가 거부되었습니다. 자세한 내용은 `statusDetails` 필드를 참조하세요.
+ `CANCELED`. 사용자가 배포를 취소했습니다.

이벤트가 중복되거나 이벤트 순서가 잘못되었을 수 있습니다. 이벤트 순서를 정하려면 `time` 속성을 사용하세요.

`errorStacks` 및 `errorTypes`의 오류 코드 전체 목록은 [세부 배포 오류 코드](troubleshooting-deployment.md) 및 [세부 구성 요소 상태 코드](troubleshooting-component.md) 섹션을 참조하세요.

## 구성 요소 상태 변경 이벤트
<a name="component.events-message-format"></a>

 AWS IoT Greengrass 버전 2.12.2 이하의 경우 구성 요소가 `ERRORED` 및 상태가 되면 Greengrass에서 이벤트를 내보냅니다`BROKEN`. Greengrass nucleus 버전 2.12.3 이상의 경우 구성 요소가 `BROKEN` 및 `ERRORED`, `RUNNING`, `FINISHED` 상태로 전환되면 Greengrass에서 이벤트가 발생합니다. 배포가 완료되어도 Greengrass에서 이벤트가 발생합니다. 모든 상태 전환 또는 지정한 상태로의 전환에 대해 실행하는 EventBridge 규칙을 생성할 수 있습니다. 설치된 구성 요소가 규칙이 시작되는 상태로 전환되면 EventBridge에서는 규칙에 정의된 대상 작업이 간접 호출됩니다. 이렇게 하면 알림을 전송하고, 이벤트 정보를 캡처하고, 적절한 조치를 취하거나, 상태 변경에 대응하는 기타 이벤트를 시작할 수 있습니다.

구성 요소 상태 변경에 대한 [이벤트](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html)에서 사용되는 형식은 다음과 같습니다.

------
#### [ Greengrass nucleus v2.12.2 and earlier ]

구성 요소 상태: `ERRORED` 또는 `BROKEN`  

```
{
    "version":"0",
    "id":" cd4d811e-ab12-322b-8255-EXAMPLEb1bc8",
    "detail-type":"Greengrass V2 Installed Component Status Change",
    "source":"aws.greengrass",
    "account":"123456789012",
    "region":"us-west-2",
    "time":"2018-03-22T00:38:11Z",
    "resources":["arn:aws:greengrass:us-east-1:123456789012:coreDevices:MyGreengrassCore"],
    "detail": {
       "components": [
          {
            "componentName": "MyComponent",
            "componentVersion": "1.0.0",
            "root": true,
            "lifecycleState": "ERRORED|BROKEN",
            "lifecycleStatusCodes": ["STARTUP_ERROR"],
            "lifecycleStateDetails": "An error occurred during startup. The startup script exited with code 1."
          }
        ]
    }
}
```

------
#### [ Greengrass nucleus v2.12.3 and later ]

구성 요소 상태: `ERRORED` 또는 `BROKEN`  

```
{
    "version":"0",
    "id":" cd4d811e-ab12-322b-8255-EXAMPLEb1bc8",
    "detail-type":"Greengrass V2 Installed Component Status Change",
    "source":"aws.greengrass",
    "account":"123456789012",
    "region":"us-west-2",
    "time":"2018-03-22T00:38:11Z",
    "resources":["arn:aws:greengrass:us-east-1:123456789012:coreDevices:MyGreengrassCore"],
    "detail": {
       "components": [
          {
            "componentName": "MyComponent",
            "componentVersion": "1.0.0",
            "root": true,
            "lifecycleState": "ERRORED|BROKEN",
            "lifecycleStatusCodes": ["STARTUP_ERROR"],
            "lifecycleStateDetails": "An error occurred during startup. The startup script exited with code 1."
          }
        ]
    }
}
```

구성 요소 상태: `RUNNING` 또는 `FINISHED`  

```
{
    "version":"0",
    "id":" cd4d811e-ab12-322b-8255-EXAMPLEb1bc8",
    "detail-type":"Greengrass V2 Installed Component Status Change",
    "source":"aws.greengrass",
    "account":"123456789012",
    "region":"us-west-2",
    "time":"2018-03-22T00:38:11Z",
    "resources":["arn:aws:greengrass:us-east-1:123456789012:coreDevices:MyGreengrassCore"],
    "detail": {
       "components": [
          {
            "componentName": "MyComponent",
            "componentVersion": "1.0.0",
            "root": true,
            "lifecycleState": "RUNNING|FINISHED",
            "lifecycleStateDetails": null
          }
        ]
    }
}
```

------

설치된 구성 요소의 상태에 대한 업데이트가 제공되는 규칙과 이벤트를 생성할 수 있습니다. 디바이스에서 구성 요소 상태가 변경되면 이벤트가 시작됩니다. 구성 요소에 오류가 있거나 연결이 끊어진 이유가 설명되는 자세한 응답이 수신됩니다. 실패 사유를 나타내는 상태 코드도 수신됩니다. 구성 요소 상태 코드에 대한 자세한 내용은 [세부 구성 요소 상태 코드](troubleshooting-component.md) 섹션을 참조하세요.

## EventBridge 규칙 생성을 위한 사전 조건
<a name="create-events-rule-prereqs"></a>

에 대한 EventBridge 규칙을 생성하기 전에 다음을 AWS IoT Greengrass수행합니다.
+ Eventbridge의 이벤트, 규칙, 대상을 숙지해야 합니다.
+ EventBridge 규칙에 의해 간접 호출되는 대상을 생성하고 구성해야 합니다. 규칙은 다음을 비롯한 다양한 유형의 대상을 간접 호출할 수 있습니다.
  + Amazon Simple Notification Service(Amazon SNS)
  + AWS Lambda 함수
  + Amazon Kinesis Video Streams
  + Amazon Simple Queue Service(Amazon SQS) 대기열

자세한 내용은 *Amazon EventBridge 사용 설명서*의 [Amazon EventBridge란?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) 및 [Amazon EventBridge 시작하기](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-getting-set-up.html) 섹션을 참조하세요.

## 디바이스 상태 알림 구성(콘솔)
<a name="create-events-rule-console"></a>

다음 단계를 사용하여 그룹의 배포 상태가 변경될 때 Amazon SNS 주제를 게시하는 EventBridge 규칙을 생성합니다. 이렇게 하면 웹 서버, 이메일 주소 및 기타 주제 구독자가 이벤트에 대응할 수 있습니다. 자세한 내용은 Amazon [ EventBridge 사용 설명서의 AWS 리소스에서 이벤트를 트리거하는 EventBridge 규칙 생성을](https://docs.aws.amazon.com/eventbridge/latest/userguide/create-eventbridge-rule.html) 참조하세요. * EventBridge *

1. [Amazon EventBridge 콘솔](https://console.aws.amazon.com/events/)을 엽니다.

1. 탐색 창에서 **규칙**을 선택합니다.

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

1. 규칙에 대해 이름과 설명을 입력하세요.

   규칙은 동일한 리전과 동일한 이벤트 버스의 다른 규칙과 동일한 이름을 가질 수 없습니다.

1. **이벤트 버스**에서 이 규칙과 연결할 이벤트 버스를 선택합니다. 이 규칙이 자신의 계정에서 발생하는 이벤트와 일치하도록 하려면 **AWS 기본 이벤트 버스(default event bus)**를 선택합니다. 계정의 AWS 서비스가 이벤트를 내보내면 항상 계정의 기본 이벤트 버스로 이동합니다.

1. **규칙 유형(Rule type)**에서 **이벤트 패턴이 있는 규칙(Rule with an event pattern)**을 생성합니다.

1. **다음**을 선택합니다.

1. **이벤트 소스**에서 **AWS 이벤트**를 선택합니다.

1. **이벤트 패턴**의 경우, **AWS 서비스**를 선택합니다.

1. **AWS 서비스 이름**에서 Greengrass를 선택합니다.

1. **이벤트 유형**의 경우 다음 중에서 선택합니다.
   + 배포 이벤트의 경우 **Greengrass V2 유효 배포 상태 변경**을 선택합니다.
   + 구성 요소 이벤트의 경우 **Greengrass V2 설치된 구성 요소 상태 변경**을 선택합니다.

1. **다음**을 선택합니다.

1. **대상 유형**에서 **AWS 서비스**를 선택합니다.

1. **대상 선택**에서 대상을 구성합니다. 이 예제에서는 Amazon SNS 주제를 사용하지만 알림을 보내도록 다른 대상 유형을 구성할 수 있습니다.

   1. **대상**에서 **SNS 주제**를 선택합니다.

   1. **주제**에서 대상 주제를 선택합니다.

   1. **다음**을 선택합니다.

1. **다음**을 선택합니다.

1. 규칙의 세부 정보를 검토하고 **규칙 생성**을 선택합니다.

## 디바이스 상태 알림 구성(CLI)
<a name="create-events-rule-cli"></a>

다음 단계를 사용하여 Greengrass 상태 변경 이벤트가 있을 때 Amazon SNS 주제가 게시되는 EventBridge 규칙을 생성합니다. 이렇게 하면 웹 서버, 이메일 주소 및 기타 주제 구독자가 이벤트에 대응할 수 있습니다.

1. 규칙을 생성합니다.
   + 그룹 배포 상태 변경 이벤트의 경우.

     ```
     aws events put-rule \
       --name TestRule \
       --event-pattern "{\"source\": [\"aws.greengrass\"], \"detail-type\": [\"Greengrass V2 Effective Deployment Status Change\"]}"
     ```
   + 구성 요소 상태 변경 이벤트의 경우.

     ```
     aws events put-rule \
       --name TestRule \
       --event-pattern "{\"source\": [\"aws.greengrass\"], \"detail-type\": [\"Greengrass V2 Installed Component Status Change\"]}"
     ```

   패턴에서 생략된 속성은 무시됩니다.

1. 규칙 대상으로 주제를 추가합니다.
   + *topic-arn*을 Amazon SNS 주제의 ARN으로 바꿉니다.

   ```
   aws events put-targets \
     --rule TestRule \
     --targets "Id"="1","Arn"="topic-arn"
   ```
**참고**  
Amazon EventBridge가 대상 주제를 호출하도록 허용하려면 주제에 리소스 기반 정책을 추가해야 합니다. 자세한 내용은 *Amazon EventBridge 사용 설명서*의 [Amazon SNS 권한](https://docs.aws.amazon.com/eventbridge/latest/userguide/resource-based-policies-eventbridge.html#sns-permissions) 섹션을 참조하세요.

자세한 내용은 *Amazon EventBridge 사용 설명서*에서 [EventBridge의 이벤트 및 이벤트 패턴](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html) 섹션을 참조하세요.

## 디바이스 상태 알림 구성(CloudFormation)
<a name="create-events-rule-cloudformation"></a>

 CloudFormation 템플릿을 사용하여 Greengrass 그룹 배포의 상태 변경에 대한 알림을 보내는 EventBridge 규칙을 생성합니다. 자세한 내용은 **AWS CloudFormation 사용 설명서의 [Amazon EventBridge 리소스 유형 참조](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Events.html)를 참조하세요.

## 다음 사항도 참조하세요.
<a name="deployment-notifications-see-also"></a>
+ [디바이스 배포 상태 확인](check-deployment-status.md#check-device-deployment-status)
+ *Amazon EventBridge 사용 설명서*의 [Amazon EventBridge란?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) 섹션을 참조하세요.

# Greengrass 코어 디바이스 상태 확인
<a name="device-status"></a>

Greengrass 코어 디바이스는 소프트웨어 구성 요소의 상태를에 보고합니다 AWS IoT Greengrass. 각 디바이스의 상태 요약을 확인할 수 있으며, 각 디바이스의 각 구성 요소 상태를 확인할 수 있습니다.

코어 디바이스에는 다음 상태가 있습니다.
+ `HEALTHY` - AWS IoT Greengrass 코어 소프트웨어 및 모든 구성 요소는 코어 디바이스에서 문제 없이 실행됩니다.
+ `UNHEALTHY` - AWS IoT Greengrass 코어 소프트웨어 또는 구성 요소가 코어 디바이스에서 오류 상태입니다.

**참고**  
AWS IoT Greengrass 는 개별 디바이스를 사용하여 상태 업데이트를에 전송합니다 AWS 클라우드. AWS IoT Greengrass 코어 소프트웨어가 디바이스에서 실행되지 않거나 디바이스가에 연결되지 않은 경우 해당 디바이스의 AWS 클라우드보고된 상태가 현재 상태를 반영하지 않을 수 있습니다. 상태 타임스탬프는 디바이스 상태가 마지막으로 업데이트된 시점을 나타냅니다.  
코어 디바이스에서는 다음 시점에 상태 업데이트를 보냅니다.  
 AWS IoT Greengrass 코어 소프트웨어가 시작될 때
코어 디바이스가에서 배포를 수신하는 경우 AWS 클라우드
Greengrass nucleus 2.12.2 이하의 경우 구성 요소의 상태가 `ERRORED` 또는 `BROKEN`으로 되면 코어 디바이스에서 상태 업데이트 발송
Greengrass nucleus 2.12.3 이상의 경우 구성 요소의 상태가 `ERRORED`, `BROKEN`, `RUNNING` 또는 `FINISHED`로 되면 코어 디바이스에서 상태 업데이트 발송
[구성할 수 있는 정기적인 간격](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-fss) 시(기본값 24시간)
 AWS IoT Greengrass 코어 v2.7.0 이상의 경우 로컬 배포 및 클라우드 배포가 발생할 때 코어 디바이스가 상태 업데이트를 전송합니다.

**Topics**
+ [코어 디바이스 상태 확인](#check-core-device-health-status)
+ [코어 디바이스 그룹 상태 확인](#check-core-device-group-health-status)
+ [코어 디바이스 구성 요소 상태 확인](#check-core-device-component-status)

## 코어 디바이스 상태 확인
<a name="check-core-device-health-status"></a>

개별 코어 디바이스의 상태를 확인할 수 있습니다.

**코어 디바이스 상태 확인 방법(AWS CLI)**
+ 다음 명령을 실행하여 디바이스의 상태를 검색합니다. 쿼리할 코어 디바이스의 이름으로 *coreDeviceName*을 바꿉니다.

  ```
  aws greengrassv2 get-core-device --core-device-thing-name coreDeviceName
  ```

  상태를 포함한 코어 디바이스에 대한 정보가 응답에 있습니다.

## 코어 디바이스 그룹 상태 확인
<a name="check-core-device-group-health-status"></a>

코어 디바이스 그룹(사물 그룹)의 상태를 확인할 수 있습니다.

**디바이스 그룹 상태 확인 방법(AWS CLI)**
+ 다음 명령을 실행하여 여러 코어 디바이스의 상태를 검색합니다. 쿼리할 사물 그룹의 ARN으로 명령의 ARN을 바꿉니다.

  ```
  aws greengrassv2 list-core-devices --thing-group-arn "arn:aws:iot:region:account-id:thinggroup/thingGroupName"
  ```

  응답에 사물 그룹의 코어 디바이스 목록이 있습니다. 목록의 각 항목에 코어 디바이스의 상태가 있습니다.

## 코어 디바이스 구성 요소 상태 확인
<a name="check-core-device-component-status"></a>

코어 디바이스의 소프트웨어 구성 요소 상태(예: 수명 주기 상태)를 확인할 수 있습니다. 구성 요소 수명 주기 상태에 대한 자세한 내용은 [AWS IoT Greengrass 구성 요소 개발](develop-greengrass-components.md) 섹션을 참조하세요.

**코어 디바이스의 구성 요소 상태 확인 방법(AWS CLI)**
+ 다음 명령을 실행하여 코어 디바이스의 구성 요소 상태를 검색합니다. 쿼리할 코어 디바이스의 이름으로 *coreDeviceName*을 바꿉니다.

  ```
  aws greengrassv2 list-installed-components --core-device-thing-name coreDeviceName
  ```

  응답에 코어 디바이스에서 실행되는 구성 요소 목록이 있습니다. 목록의 각 항목에 데이터의 현재 상태 및 특정 구성 요소가 들어 있는 메시지를 마지막으로 Greengrass 코어 디바이스에서 클라우드로 보낸 시점을 포함한 구성 요소 수명 주기 상태가 있습니다. 구성 요소를 Greengrass 코어 디바이스로 가져온 최종 배포 소스도 응답에 포함되어 있습니다.
**참고**  
이 명령에서는 Greengrass 코어 디바이스에서 실행되는 페이지가 매겨진 구성 요소 목록을 검색합니다. 기본적으로 다른 구성 요소의 종속성으로 배포된 구성 요소는 이 목록에 포함되지 않습니다. `topologyFilter` 파라미터를 `ALL`로 설정하여 종속성을 응답에 포함할 수 있습니다.