# AWS Observability
EventEngine : https://dashboard.eventengine.run/login?hash=e803-1f7b05e284-34
## Workshop : https://catalog.workshops.aws/observability/ko-KR/
## Opentelemetry : https://opentelemetry.io/
## AWS DoT : https://aws-otel.github.io
### AWS Dot ec2 : https://aws-otel.github.io/docs/setup/ec2(eng)
Amazon Elastic Computer Cloud에서 OpenTelemetry Collector용 AWS Distro 설정
이 자습서에서는 Amazon Elastic Computer Cloud(EC2)에서 AWS Distro for OpenTelemetry Collector(ADOT Collector)를 설정하여 애플리케이션 메트릭을 수집하는 방법을 보여줍니다.
Note : 이 자습서에서는 제공된 CloudFormation 템플릿을 사용하여 us-west-2의 Amazon EC2 인스턴스에 ADOT 수집기를 설정합니다. 다른 AWS 리전에서 예제를 실행하려면 우리가 제공한 CloudFormation 템플릿에서 AMI ID를 교체하십시오.
#### IAM 정책 생성
1. IAM 콘솔을 엽니다.
1. 탐색 창에서 **Policies**을 선택합니다.
1. **Create policy**을 선택한 다음 **JSON**을 선택합니다.
1. 다음 정책을 입력합니다.
```json=
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:PutLogEvents",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:DescribeLogStreams",
"logs:DescribeLogGroups",
"xray:PutTraceSegments",
"xray:PutTelemetryRecords",
"xray:GetSamplingRules",
"xray:GetSamplingTargets",
"xray:GetSamplingStatisticSummaries",
"ssm:GetParameters"
],
"Resource": "*"
}
]
}
```
1. **Review policy**를 선택합니다.
1. 정책 검토 페이지에서 이름에 `AWSDistroOpenTelemetryPolicy`를 입력한 다음 **Create policy**을 선택합니다.
#### IAM 정책 연결
1. IAM 콘솔을 엽니다.
1. 탐색 창에서 역할을 선택한 다음 **Create role**을 선택합니다.
1. 신뢰할 수 있는 엔터티 유형 선택 섹션에서 **AWS service**를 선택합니다.
1. 사용 사례 선택에서 **EC2**를 선택한 후 **Next: Permission**을 선택합니다.
1. 권한 정책 연결에서 **AWSDistroOpenTelemetryPolicy** 정책을 선택한 후 **Next: Tags**를 선택합니다.
1. **Next: Review**를 선택합니다.
1. 검토 페이지에서 이름에 **AWSDistroOpenTelemetryRole**을 입력한 다음 역할 생성을 선택합니다.
#### CloudFormation을 사용하여 EC2 인스턴스에 OpenTelemetry Collector용 AWS Distro 설치
1. Amazon EC2에 ADOT 수집기를 설치하기 위한 CloudFormation 템플릿 파일 aws-otel-ec2-deployment-cfn.yaml을 다운로드합니다.
```bash=
curl -O https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/deployment-template/ec2/aws-otel-ec2-deployment-cfn.yaml
```
1. 아래 파라미터를 교체한 후 AWS CloudFormation CLI 명령을 실행합니다. ADOT Collector가 설치된 EC2 인스턴스 하나를 시작합니다.
`ec2-ssh-key-name` - EC2 인스턴스에 로그인하기 위한 키 페어 이름
`template_path` - 1단계에서 CloudFormation 템플릿 파일을 다운로드한 로컬 위치
```yaml=
Region=us-west-2
IAMRole=AWSDistroOpenTelemetryRole
EC2Key=<*ec2**-**ssh**-**key**-**name*>
aws cloudformation create-stack --stack-name AOCEC2-Test \
--template-body file://<*template_path*>/aws-otel-ec2-deployment-cfn.yaml \
--parameters ParameterKey=IAMRole,ParameterValue=${IAMRole} \
ParameterKey=KeyName,ParameterValue=${EC2Key} \
--capabilities CAPABILITY_NAMED_IAM \
--region ${Region}
```
1. AWS EC2 콘솔로 이동하여 시작된 새 EC2 인스턴스가 있는지 확인합니다.
1. 인스턴스를 선택한 다음 연결을 선택합니다. 아래 예제 명령을 사용하여 EC2 호스트에 로그인할 수 있습니다.
```bash=
ssh -i "<ec2-ssh-key-name>.pem" ec2-user@ec2-<instance_id>.us-west-2.compute.amazonaws.com (mailto:ec2-user@ec2-34-221-1-180.us-west-2.compute.amazonaws.com)
```
1. 새 EC2 인스턴스에서 ADOT Collector가 설정되어 실행 중인지 확인합니다. 그렇다면 다음과 같은 상태가 표시됩니다.
```bash=
sudo /opt/aws/aws-otel-collector/bin/aws-otel-collector-ctl -a status
```

#### AWS Systems Manager Distributor를 사용하여 EC2 인스턴스에 OpenTelemetry Collector용 AWS Distro 설치
AWS Systems Manager Distributor는 AWS Distro for OpenTelemetry Collector와 같은 소프트웨어 패키지의 배포, 설치 및 업데이트 프로세스를 단순화하고 확장할 수 있습니다. Distributor를 사용하면 중앙 위치에서 소프트웨어 패키지를 관리할 수 있습니다. 소프트웨어 패키지는 Systems Manager에 안전하게 저장되어 중앙 집중식 리포지토리에 버전 제어를 제공합니다. Run Command를 사용하여 요청 시 OpenTelemetry Collector용 AWS Distro를 설치하거나 State Manager를 사용하여 대상 인스턴스에서 자동으로 또는 일정에 따라 OpenTelemetry Collector용 AWS Distro를 업데이트할 수 있습니다.
**AWS Systems Manager Distributor**를 사용하여 EC2 인스턴스에 ADOT Collector를 설치하려면 대상 EC2 인스턴스가 다음 요구 사항을 충족해야 합니다.
- SSM 에이전트 버전 **2.3.1550.0** 이상 설치됨
- EC2 인스턴스의 IAM 역할에 연결된 권한 정책 `AmazonSSMManagedInstanceCore`
##### AWS Systems Manager Distributor를 사용하여 AWSDistroOTel-Collector 패키지를 설치하려면.
1. 기본 설정에 따라 ADOT Collector 구성에 따라 OpenTelemetry Collector YAML 구성 파일용 AWS Distro를 준비합니다.
1. SSM 매개변수는 여러 줄 텍스트를 문자열 유형으로 지원하지 않습니다. 따라서 AWS Distro for OpenTelemetry Collector YAML 구성 파일을 Base64로 인코딩하고 Base64 문자열을 SSM Parameter Store의 새 SSM 파라미터에 복사합니다. 다음은 Base64 인코딩을 수행하는 예입니다.
Linux: `base64 -w0 config.yaml > aoc-config-base64.txt`
Windows: `certutil.exe -f -encodehex config.yaml aoc-config-base64.txt 0x40000001`
MacOSX: `base64 -i config.yaml -o aoc-config-base64.txt`

1. SSM 배포자 콘솔로 이동하여 Amazon 소유 탭을 엽니다. AWSDistroOTel-Collector를 선택하고 한 번 설치를 선택합니다.

1. 추가 인수를 다음으로 대체하여 첫 번째 단계에서 생성한 SSM 매개변수를 업데이트합니다(예: SSM 매개변수 이름은 "aoc-config-base64").
```bash=
{"SSM_CONFIG": "{{ssm:aoc-config-base64}}"}
```

1. EC2 인스턴스 태그, EC2 인스턴스 ID 또는 대상의 리소스 그룹별로 EC2 인스턴스를 계속 선택하고 실행 버튼을 클릭하여 설치를 시작합니다. 추가 설치 옵션을 보려면 패키지 설치 또는 업데이트를 방문하십시오.

##### Auto Scaling 그룹의 EC2 인스턴스에 AWSDistroOTel-Collector 패키지를 설치하려면.
1. SSM 배포자 콘솔로 이동하여 Amazon 소유 탭을 엽니다. AWSDistroOTel-Collector를 선택하고 일정에 따라 설치를 선택합니다.

1. 추가 인수를 다음으로 대체하여 이전 단계에서 생성한 SSM 매개변수를 업데이트합니다(예: SSM 매개변수 이름은 "aoc-config-base64").
```bash=
{"SSM_CONFIG": "{{ssm:aoc-config-base64}}"}
```

1. 대상에서 인스턴스 태그 지정을 선택합니다. aws:autoscaling:groupName을 Tag 키로 추가하고 Auto Scaling 그룹의 이름을 Tag 값으로 추가합니다. 이 예에서 Auto Scaling 그룹의 이름은 my-first-asg입니다.

1. 일정 지정에서 일정을 설정하고 기본값은 30분입니다. 따라서 Systems Manager는 Auto Scaling 그룹의 태그를 스캔하고 30분마다 새 EC2 인스턴스에 AWSDistroOTel-Collector 패키지를 설치합니다.

### Note
SSM 배포자는 /opt/aws/aws-otel-collector/etc/.env 에 환경 파일을 생성합니다. 개방형 원격 분석 구성에 사용할 모든 환경 변수를 이 파일에 추가해야 합니다.
자습서를 마친 후에는 추가 비용을 피하기 위해 자습서에서 생성한 새 EC2 인스턴스를 종료해야 합니다.