본문 바로가기
WIKI 기술 지식 베이스

Terraform으로 Postgres Database Monitoring용 Datadog Agent 프로비저닝하기

원문 보기 위키 갱신

이 페이지는 AWS에서 Terraform으로 Postgres Database Monitoring용 Datadog Agent를 프로비저닝하는 과정을 안내해요. 에이전트가 실행되는 위치에 해당하는 탭을 선택하세요.

출처: 문서

본문

개요 (Overview)

이 페이지에서 사용하는 Terraform 예시는 DataDog/dd-database-monitoring-example에서 볼 수 있어요. 각 조합은 main.tf, variables.tf, outputs.tf, versions.tf, 그리고 복사해서 편집할 수 있는 terraform.tfvars.example이 있는 자체 디렉토리를 가져요. 경로 구조는 다음과 같아요:

terraform/<database>/<cloud>/<agent-runtime>/

디렉토리 트리는 호스팅 유형보다는 클라우드를 기준으로 키가 정해져 있어요 — 하나의 Terraform 모듈이 보통 같은 VPC와 보안 그룹 의미론을 공유하는 클라우드의 모든 데이터베이스 호스팅 옵션을 다뤄요. 예를 들어 AWS 쪽 Postgres에 대한 ECS Fargate Agent는 terraform/postgres/aws/ecs-fargate/에서 사용할 수 있고, RDS, Aurora, EC2의 자체 호스팅(self-hosted) Postgres 전부에서 작동해요.

이 페이지는 설정의 Agent 쪽을 다뤄요. 데이터베이스를 프로비저닝하거나, 데이터베이스 쪽 파라미터를 설정하거나, 데이터베이스 안에 datadog 사용자를 만들지는 않아요. 그런 단계는 Database Monitoring의 데이터베이스별 설정 페이지를 참고하세요.

ECS Fargate

호스팅 참고

이 조합의 Terraform 모듈은 보안 그룹으로 AWS VPC 안에서 도달할 수 있는 모든 Postgres 데이터베이스에서 작동해요. db_endpoint와 db_security_group_id를 다음에 지정하세요:

  • Amazon RDS Postgres: RDS 엔드포인트와 RDS 보안 그룹.
  • Amazon Aurora Postgres: Aurora 클러스터 라이터 엔드포인트와 Aurora 클러스터의 보안 그룹.
  • 같은 VPC의 EC2에서 자체 호스팅된 Postgres: EC2 인스턴스 호스트명/IP와 Postgres EC2 인스턴스에 연결된 보안 그룹.

AWS 외부(온프레미스 또는 다른 클라우드)에서 자체 호스팅된 Postgres에는 이 AWS 쪽 예시가 적용되지 않아요. Database Monitoring의 데이터베이스별 설정 페이지에서 수동 설정을 따르세요.

아키텍처 (Architecture)

하나의 Datadog Agent 작업(task)이 Postgres 데이터베이스와 같은 VPC 안의 AWS ECS Fargate에서 실행돼요. 에이전트는 Autodiscovery를 사용해 데이터베이스 엔드포인트에 연결하고 메트릭, 쿼리 샘플, 실행 계획을 Datadog로 보내요.

사전 요구사항

  • Terraform 1.5 이상, 그리고 대상 리전에서 ECS, IAM, 보안 그룹, CloudWatch 로그 그룹 리소스를 만들 권한이 있는 AWS 자격 증명.

  • 기존 Postgres 인스턴스 (Postgres 10 이상) — RDS, Aurora, 또는 EC2에서 자체 호스팅.

  • 데이터베이스 VPC의 프라이빗 서브넷으로 인터넷에 NAT 이그레스(NAT egress)가 있는 곳 — 에이전트가 *.${DD_SITE}에 도달해야 해요.

  • 대상 조직의 Datadog API 키.

  • DBM 필수 파라미터가 설정된 파라미터 그룹 (RDS/Aurora) 또는 postgresql.conf (자체 호스팅):

파라미터 값 용도
shared_preload_libraries pg_stat_statements 쿼리 메트릭 수집에 필요
track_activity_query_size 4096 캡처되는 SQL 텍스트 크기 증가
pg_stat_statements.track ALL 함수와 프로시저 안의 문장 캡처
pg_stat_statements.max 10000 더 많은 정규화된 쿼리 유지
pg_stat_statements.track_utility off PREPARE 및 EXPLAIN 노이즈 건너뜀

shared_preload_libraries를 변경하려면 데이터베이스 재시작이 필요해요 (RDS/Aurora는 인스턴스 재부팅).

Terraform 적용하기

이 조합의 예시는 dd-database-monitoring-example의 terraform/postgres/aws/ecs-fargate/에서 볼 수 있어요.

git clone https://github.com/DataDog/dd-database-monitoring-example.git
cd dd-database-monitoring-example/terraform/postgres/aws/ecs-fargate

cp terraform.tfvars.example terraform.tfvars
# Fill in: vpc_id, subnet_ids, db_security_group_id, db_endpoint,
# database_name, datadog_user_password, datadog_api_key, datadog_site

terraform init
terraform plan
terraform apply

terraform apply는 다음을 만들어요:

  • ECS 클러스터
  • Fargate 작업 정의
  • ECS 서비스
  • Agent 작업 보안 그룹
  • 포트 5432에 대한 데이터베이스 보안 그룹의 인그레스 규칙
  • 표준 정책이 연결된 IAM 실행 역할
  • CloudWatch 로그 그룹

Agent 서비스를 이미 운영 중인 ECS 클러스터에 연결하려면 예시가 새 클러스터를 만들게 하는 대신 terraform.tfvars에서 existing_ecs_cluster_name을 설정하세요.

필수 입력값

변수 설명
vpc_id 데이터베이스가 포함된 VPC.
subnet_ids NAT 이그레스가 있는 하나 이상의 프라이빗 서브넷.
db_security_group_id 데이터베이스에 연결된 보안 그룹 — 예시는 포트 5432에 인그레스 규칙을 추가해요. RDS는 RDS 인스턴스 SG, Aurora는 클러스터 SG, EC2 자체 호스팅은 EC2 인스턴스 SG.
db_endpoint 데이터베이스 엔드포인트 호스트 (포트 없음). RDS는 RDS 엔드포인트, Aurora는 클러스터 라이터 엔드포인트, EC2 자체 호스팅은 인스턴스 호스트명 또는 IP.
database_name 모니터링할 Postgres 데이터베이스.
datadog_user_password Postgres datadog 사용자의 비밀번호.
datadog_api_key 대상 조직의 API 키.
datadog_site 예: datadoghq.com 또는 datadoghq.eu.
existing_ecs_cluster_name (선택) Agent 서비스를 연결할 기존 ECS 클러스터의 이름. 새 클러스터를 프로비저닝하려면 비워 두세요.

전체 입력 목록과 기본값은 예시 디렉토리의 variables.tf를 참고하세요.

검증 (Verify)

  1. ECS 서비스가 정상인지 확인하려면:
aws ecs describe-services \
  --cluster $(terraform output -raw ecs_cluster_name) \
  --services $(terraform output -raw ecs_service_name) \
  --query 'services[0].{running:runningCount,desired:desiredCount}'
  1. 에이전트의 Postgres 체크가 깨끗하게 실행되는지 확인하려면 에이전트 로그를 tail 하세요:
aws logs tail $(terraform output -raw log_group_name) --follow

Running check postgres을 찾고 pg_stat_statements 오류가 없는지 확인하세요.

  1. Datadog UI에서 다음을 확인하세요:
  • Infrastructure > Containers: datadog-agent 컨테이너가 나타남.
  • Databases > List: 데이터베이스 호스트가 DBM 활성화 상태로 나타남.
  • Databases > Query Metrics: 데이터베이스 트래픽 후 ~2분 내에 행이 렌더링됨.

문제 해결 (Troubleshooting)

증상 예상 원인
에이전트 로그에 데이터베이스에 대한 connection refused 표시 데이터베이스 보안 그룹 인그레스 규칙이 적용되지 않았거나, 작업이 데이터베이스로 가는 경로가 없는 서브넷에 있음.
에이전트 로그에 pg_stat_statements is not loaded 표시 파라미터 그룹 / postgresql.conf에 shared_preload_libraries=pg_stat_statements가 없거나, 변경 후 데이터베이스가 재시작되지 않음.
에이전트 로그에 permission denied for relation pg_stat_activity 표시 pg_monitor 역할이 datadog 사용자에게 부여되지 않음.
Datadog UI에 데이터 없음 API 키가 틀리거나, datadog_site가 일치하지 않거나, 작업이 *.${DD_SITE}에 도달할 수 없음 (NAT 이그레스 누락).
query_samples가 비어 있음 모니터링 데이터베이스에 datadog.explain_statement 함수가 만들어지지 않음.

Amazon EKS (EC2 노드)

호스팅 참고

이 조합의 Terraform 모듈은 보안 그룹으로 AWS VPC 안에서 도달할 수 있는 모든 Postgres 데이터베이스에서 작동해요. db_endpoint와 db_security_group_id를 다음에 지정하세요:

  • Amazon RDS Postgres: RDS 엔드포인트와 RDS 보안 그룹.
  • Amazon Aurora Postgres: Aurora 클러스터 라이터 엔드포인트와 Aurora 클러스터의 보안 그룹.
  • 같은 VPC의 EC2에서 자체 호스팅된 Postgres: EC2 인스턴스 호스트명/IP와 Postgres EC2 인스턴스에 연결된 보안 그룹.

AWS 외부(온프레미스 또는 다른 클라우드)에서 자체 호스팅된 Postgres에는 이 AWS 쪽 예시가 적용되지 않아요. Database Monitoring의 데이터베이스별 설정 페이지에서 수동 설정을 따르세요.

아키텍처 (Architecture)

Datadog Agent는 공식 Helm 차트를 통해 EC2 노드 그룹이 있는 Amazon EKS에 설치돼요. Postgres 체크는 클러스터 체크(cluster check) 로 구성돼요: Cluster Agent가 이를 전용 Cluster Check Runner 파드에 분배하므로 DBM 데이터는 노드별로 중복되지 않고 클러스터 전체에 한 번만 방출돼요. 러너(runner) 파드는 클러스터의 VPC 안에서 Postgres 데이터베이스에 연결해요.

이 예시는 두 가지 모드를 지원해요:

  • 자체 EKS 클러스터 사용 (BYO) — 기존 클러스터에 Datadog Helm 차트를 설치하고 노드 SG에서 데이터베이스 보안 그룹에 인그레스 규칙을 엽니다. 기본 모드.
  • 새 EKS 클러스터 프로비저닝 (greenfield) — EKS 클러스터 + 관리형 노드 그룹 + IAM 역할을 프로비저닝한 다음 Agent를 설치해요. 클러스터가 존재하는 동안 지속되는 AWS 비용이 추가돼요.

사전 요구사항

두 모드 공통

  • aws, helm, kubernetes 프로바이더가 있는 Terraform 1.5 이상.

  • EKS 노드에서 도달할 수 있는 VPC에 있는 기존 Postgres 인스턴스 (Postgres 10 이상) — RDS, Aurora, 또는 EC2에서 자체 호스팅.

  • 대상 조직의 Datadog API 키 (DBM 외의 Cluster Agent 기능을 원한다면 앱 키도).

  • DBM 필수 파라미터가 설정된 파라미터 그룹 (RDS/Aurora) 또는 postgresql.conf (자체 호스팅):

파라미터 값 용도
shared_preload_libraries pg_stat_statements 쿼리 메트릭 수집에 필요
track_activity_query_size 4096 캡처되는 SQL 텍스트 크기 증가
pg_stat_statements.track ALL 함수와 프로시저 안의 문장 캡처
pg_stat_statements.max 10000 더 많은 정규화된 쿼리 유지
pg_stat_statements.track_utility off PREPARE 및 EXPLAIN 노이즈 건너뜀

shared_preload_libraries를 변경하려면 데이터베이스 재시작이 필요해요 (RDS/Aurora는 인스턴스 재부팅).

BYO 모드의 추가 사전 요구사항

  • 보안 그룹 규칙을 만들고 대상 클러스터에 대해 eks:DescribeCluster / eks:GetToken을 호출할 권한이 있는 AWS 자격 증명, 그리고 클러스터 안에서 kubectl에 해당하는 권한 (보통 aws-auth 또는 EKS 액세스 항목으로 매핑된 동일 IAM 프린시펄).
  • EC2 노드 그룹이 있는 기존 EKS 클러스터. 노드 그룹의 보안 그룹 ID가 필요해요.
  • 작업자 노드가 443으로 *.${DD_SITE}에 도달할 수 있게 하는 클러스터 네트워킹 (NAT 게이트웨이 또는 VPC 엔드포인트).

greenfield 모드의 추가 사전 요구사항

  • EKS 클러스터, IAM 역할 + 정책 연결, EKS 관리형 노드 그룹, 보안 그룹 규칙을 만들 권한이 있는 AWS 자격 증명.
  • 데이터베이스 VPC의 서로 다른 AZ에 있는 최소 두 개의 프라이빗 서브넷, 제어 플레인과 작업자 노드가 Datadog와 ECR에 도달할 수 있도록 NAT 이그레스가 있는 곳.
  • 지속 비용 인지 — 새 EKS 클러스터를 프로비저닝하면 클러스터가 존재하는 동안 제어 플레인과 작업자 노드에 대한 지속적인 AWS 요금이 추가돼요.

Terraform 적용하기

이 조합의 예시는 dd-database-monitoring-example의 terraform/postgres/aws/amazon-eks/에서 볼 수 있어요.

git clone https://github.com/DataDog/dd-database-monitoring-example.git
cd dd-database-monitoring-example/terraform/postgres/aws/amazon-eks

cp terraform.tfvars.example terraform.tfvars
# Pick BYO or greenfield in the file header, then fill in the rest:
# db_security_group_id, db_endpoint, database_name,
# datadog_user_password, datadog_api_key, datadog_site

terraform init
terraform plan
terraform apply

모드에 따라 Terraform은 다음을 만들어요:

BYO 모드 (eks_cluster_name이 채워짐):

  • Kubernetes 네임스페이스
  • Datadog Helm 릴리스 (노드 Agent DaemonSet, Cluster Agent, Cluster Check Runner Deployment를 배포)
  • 노드 SG에서 데이터베이스 보안 그룹에 대한 인그레스 규칙

terraform apply는 약 3분 정도 걸려요.

Greenfield 모드 (eks_cluster_name = ""):

  • 모든 BYO 리소스
  • aws_eks_cluster
  • aws_eks_node_group
  • 두 개의 aws_iam_role 인스턴스
  • 다섯 개의 aws_iam_role_policy_attachment 인스턴스

terraform apply는 보통 15-20분이 걸려요.

필수 입력값

BYO 모드

변수 설명
eks_cluster_name 기존 EKS 클러스터의 이름.
eks_node_security_group_id EKS 작업자 노드에 연결된 보안 그룹 — 예시는 이 SG에서 데이터베이스 SG에 인그레스 규칙을 추가해요.
db_security_group_id 데이터베이스에 연결된 보안 그룹 — 예시는 포트 5432에 인그레스 규칙을 추가해요. Aurora는 클러스터 SG, EC2 자체 호스팅은 EC2 인스턴스 SG.
db_endpoint 데이터베이스 엔드포인트 호스트 (포트 없음). Aurora는 클러스터 라이터 엔드포인트, EC2 자체 호스팅은 인스턴스 호스트명 또는 IP.
database_name 모니터링할 Postgres 데이터베이스.
datadog_user_password Postgres datadog 사용자의 비밀번호.
datadog_api_key 대상 조직의 API 키.
datadog_site 예: datadoghq.com 또는 datadoghq.eu.

Greenfield 모드 — eks_cluster_name과 eks_node_security_group_id를 비워 두고 다음을 추가하세요:

변수 설명
private_subnet_ids EKS 제어 플레인 ENI와 관리형 노드 그룹을 위한 서로 다른 AZ의 프라이빗 서브넷 최소 2개.
kubernetes_version (선택) 새 클러스터의 Kubernetes 버전 (기본 1.30).
node_instance_type (선택) 관리형 노드 그룹의 EC2 인스턴스 유형 (기본 t3.small).
node_desired_count, node_min_count, node_max_count (선택) 관리형 노드 그룹 스케일링 구성.

전체 입력 목록과 기본값은 예시 디렉토리의 variables.tf를 참고하세요.

검증 (Verify)

  1. Helm 릴리스가 정상인지 확인하려면:
helm status -n $(terraform output -raw namespace) $(terraform output -raw helm_release_name)
kubectl -n $(terraform output -raw namespace) get pods
  1. Postgres 체크가 클러스터 체크로 분배되는지 확인하세요. Cluster Agent 리더 파드에서:
kubectl -n $(terraform output -raw namespace) exec -it \
  deploy/$(terraform output -raw cluster_agent_deployment) -- \
  agent clusterchecks

Cluster Check Runner 파드 중 하나에 할당된 postgres 항목을 찾으세요.

  1. 에이전트의 Postgres 체크가 깨끗하게 실행되는지 확인하려면 러너 로그를 tail 하세요:
kubectl -n $(terraform output -raw namespace) \
  logs -l app=$(terraform output -raw cluster_check_runner_deployment) -f

Running check postgres을 찾고 pg_stat_statements 오류가 없는지 확인하세요.

  1. Datadog UI에서 다음을 확인하세요:
  • Infrastructure > Kubernetes: EKS 클러스터가 노드 및 파드 메트릭과 함께 나타남.
  • Databases > List: 데이터베이스 호스트가 DBM 활성화 상태로 나타남.
  • Databases > Query Metrics: 데이터베이스 트래픽 후 ~2분 내에 행이 렌더링됨.

문제 해결 (Troubleshooting)

증상 예상 원인
Cluster Check Runner 로그에 데이터베이스에 대한 connection refused 표시 데이터베이스 보안 그룹 인그레스 규칙이 적용되지 않았거나, 러너 파드가 eks_node_security_group_id가 아닌 SG를 가진 노드에 있음.
러너 로그에 pg_stat_statements is not loaded 표시 파라미터 그룹 / postgresql.conf에 shared_preload_libraries=pg_stat_statements가 없거나, 데이터베이스가 재시작되지 않음.
러너 로그에 permission denied for relation pg_stat_activity 표시 pg_monitor 역할이 datadog 사용자에게 부여되지 않음.
Cluster Agent의 agent clusterchecks가 postgres 체크를 미스케줄링으로 표시 clusterChecksRunner.enabled가 비활성화되었거나, 러너 배포에 준비된 파드가 0개임.
Datadog UI에 데이터 없음 API 키가 틀리거나, datadog_site가 일치하지 않거나, 파드가 *.${DD_SITE}에 도달할 수 없음 (NAT 이그레스 / VPC 엔드포인트 누락).
query_samples가 비어 있음 모니터링 데이터베이스에 datadog.explain_statement 함수가 만들어지지 않음.
terraform plan이 EKS 클러스터를 읽지 못함 Terraform을 실행하는 IAM 프린시펄에 eks:DescribeCluster / eks:GetToken이 없거나, 클러스터의 aws-auth / EKS 액세스 항목에 매핑되지 않음.

Amazon EC2

호스팅 참고

이 조합의 Terraform 모듈은 보안 그룹으로 AWS VPC 안에서 도달할 수 있는 모든 Postgres 데이터베이스에서 작동해요. db_endpoint와 db_security_group_id를 다음에 지정하세요:

  • Amazon RDS Postgres: RDS 엔드포인트와 RDS 보안 그룹.
  • Amazon Aurora Postgres: Aurora 클러스터 라이터 엔드포인트와 Aurora 클러스터의 보안 그룹.
  • 같은 VPC의 EC2에서 자체 호스팅된 Postgres: EC2 인스턴스 호스트명/IP와 Postgres EC2 인스턴스에 연결된 보안 그룹.

AWS 외부(온프레미스 또는 다른 클라우드)에서 자체 호스팅된 Postgres에는 이 AWS 쪽 예시가 적용되지 않아요. Database Monitoring의 데이터베이스별 설정 페이지에서 수동 설정을 따르세요.

아키텍처 (Architecture)

하나의 Datadog Agent가 Postgres 데이터베이스와 같은 VPC 안의 전용 Amazon EC2 인스턴스(Amazon Linux 2023)의 Docker 컨테이너에서 실행돼요. cloud-init이 Docker를 설치하고, Postgres 체크 구성을 /etc/datadog-agent/conf.d/postgres.d/conf.yaml에 추가하고, 그 디렉토리를 바인드 마운트한 상태로 Agent 컨테이너를 시작해요.

호스트를 공용 서브넷(제어하는 CIDR의 SSH 인그레스 포함)이나 프라이빗 서브넷(SSM Session Manager 사용 — SSH 키 불필요, 예시가 인스턴스 프로파일에 AmazonSSMManagedInstanceCore 정책을 연결하므로)에서 실행할 수 있어요.

사전 요구사항

  • Terraform 1.5 이상, 그리고 대상 리전에서 EC2, IAM, 보안 그룹 리소스를 만들 권한이 있는 AWS 자격 증명.

  • 기존 Postgres 인스턴스 (Postgres 10 이상) — RDS, Aurora, 또는 EC2에서 자체 호스팅.

  • 인터넷 이그레스가 있는 데이터베이스 VPC의 서브넷 (공용 서브넷은 Internet Gateway, 프라이빗 서브넷은 NAT) — 에이전트가 컨테이너 이미지를 가져오고 *.${DD_SITE}에 도달해야 해요.

  • 대상 조직의 Datadog API 키.

  • DBM 필수 파라미터가 설정된 파라미터 그룹 (RDS/Aurora) 또는 postgresql.conf (자체 호스팅):

파라미터 값 용도
shared_preload_libraries pg_stat_statements 쿼리 메트릭 수집에 필요
track_activity_query_size 4096 캡처되는 SQL 텍스트 크기 증가
pg_stat_statements.track ALL 함수와 프로시저 안의 문장 캡처
pg_stat_statements.max 10000 더 많은 정규화된 쿼리 유지
pg_stat_statements.track_utility off PREPARE 및 EXPLAIN 노이즈 건너뜀

shared_preload_libraries를 변경하려면 데이터베이스 재시작이 필요해요 (RDS/Aurora는 인스턴스 재부팅).

  • 필수 권한이 있는 datadog Postgres 사용자와 각 모니터링 데이터베이스에 설치된 pg_stat_statements 확장. SQL은 RDS에서 Postgres용 Database Monitoring 설정을 참고하세요.

  • (선택) Agent 호스트에 SSH하려는 경우 기존 EC2 키 페어. 그렇지 않으면 key_pair_name = ""으로 두고 SSM Session Manager를 사용하세요.

Terraform 적용하기

이 조합의 예시는 dd-database-monitoring-example의 terraform/postgres/aws/ec2/에서 볼 수 있어요.

git clone https://github.com/DataDog/dd-database-monitoring-example.git
cd dd-database-monitoring-example/terraform/postgres/aws/ec2

cp terraform.tfvars.example terraform.tfvars
# Fill in: vpc_id, subnet_id, db_security_group_id, db_endpoint,
# database_name, datadog_user_password, datadog_api_key, datadog_site

terraform init
terraform plan
terraform apply

terraform apply는 다음을 만들어요:

  • Docker에서 Datadog Agent를 실행하는 EC2 인스턴스
  • Agent 호스트 보안 그룹
  • Agent 호스트 SG에서 포트 5432에 대한 데이터베이스 보안 그룹의 인그레스 규칙
  • AmazonSSMManagedInstanceCore가 연결된 IAM 역할
  • EC2 인스턴스 프로파일

필수 입력값

변수 설명
vpc_id 데이터베이스가 포함된 VPC.
subnet_id 인터넷 이그레스가 있는 해당 VPC의 서브넷 (공용은 IGW, 프라이빗은 NAT).
db_security_group_id 데이터베이스에 연결된 보안 그룹 — 예시는 포트 5432에 인그레스 규칙을 추가해요. RDS는 RDS 인스턴스 SG, Aurora는 클러스터 SG, EC2 자체 호스팅은 EC2 인스턴스 SG.
db_endpoint 데이터베이스 엔드포인트 호스트 (포트 없음). RDS는 RDS 엔드포인트, Aurora는 클러스터 라이터 엔드포인트, EC2 자체 호스팅은 인스턴스 호스트명 또는 IP.
database_name 모니터링할 Postgres 데이터베이스.
datadog_user_password Postgres datadog 사용자의 비밀번호.
datadog_api_key 대상 조직의 API 키.
datadog_site 예: datadoghq.com 또는 datadoghq.eu.
assign_public_ip (선택) SSH가 있는 공용 서브넷 데모에는 true, 프라이빗 서브넷에는 false (SSM 사용). 기본 true.
key_pair_name, ssh_ingress_cidrs (선택) 둘 다 제공하면 SSH 접근을 활성화해요. 둘 다 비워 두면 SSH를 비활성화하고 SSM Session Manager에 의존해요.

전체 입력 목록과 기본값은 예시 디렉토리의 variables.tf를 참고하세요.

검증 (Verify)

  1. 인스턴스가 실행 중인지 확인하려면:
aws ec2 describe-instances --instance-ids $(terraform output -raw ec2_instance_id) \
  --query 'Reservations[0].Instances[0].{state:State.Name,ip:PublicIpAddress}'
  1. Agent 호스트에서 셸을 여세요. 구성과 일치하는 경로를 사용하세요:
# SSH (assign_public_ip = true and key_pair_name set)
$(terraform output -raw ec2_ssh_command)

# SSM (any subnet, no SSH key needed)
aws ssm start-session --target $(terraform output -raw ec2_instance_id)
  1. Agent 컨테이너가 정상인지 확인하려면:
docker ps
docker logs datadog-agent | grep -E '(postgres|dbm)' | tail -50

Running check postgres을 찾고 pg_stat_statements 오류가 없는지 확인하세요.

  1. Datadog UI에서 다음을 확인하세요:
  • Infrastructure > Hosts: EC2 호스트가 나타남.
  • Databases > List: 데이터베이스 호스트가 DBM 활성화 상태로 나타남.
  • Databases > Query Metrics: 데이터베이스 트래픽 후 ~2분 내에 행이 렌더링됨.

문제 해결 (Troubleshooting)

증상 예상 원인
에이전트 로그에 데이터베이스에 대한 connection refused 표시 데이터베이스 보안 그룹 인그레스 규칙이 적용되지 않았거나, EC2 인스턴스가 데이터베이스로 가는 경로가 없는 서브넷에 있음.
에이전트 로그에 pg_stat_statements is not loaded 표시 파라미터 그룹 / postgresql.conf에 shared_preload_libraries=pg_stat_statements가 없거나, 변경 후 데이터베이스가 재시작되지 않음.
에이전트 로그에 permission denied for relation pg_stat_activity 표시 pg_monitor 역할이 datadog 사용자에게 부여되지 않음.
Datadog UI에 데이터 없음 API 키가 틀리거나, datadog_site가 일치하지 않거나, 인스턴스가 *.${DD_SITE}에 도달할 수 없음 (IGW 또는 NAT 이그레스 없음).
query_samples가 비어 있음 모니터링 데이터베이스에 datadog.explain_statement 함수가 만들어지지 않음.
첫 SSH에 docker: command not found 표시 cloud-init이 아직 실행 중. 약 60초 기다린 후 cloud-init status --wait로 다시 확인.

더 알아보기 (Learn more)