모니터링 시스템을 구축해 보자 (2) (CloudWatch + SNS + Grafana Cloud)

2025.08.14 - [Infra] - 모니터링 시스템을 구축해 보자 (1) (CloudWatch + SNS + Grafana Cloud)

 

모니터링 시스템을 구축해 보자 (1) (CloudWatch + SNS + Grafana Cloud)

필자의 상황은 프리티어로 Spring & Python (AI) 서버를 모두 돌리고 있다. 여기서 Blue/Green 무중단 배포를 적용했다가 CPU 사용량 급증과 OOM(Out Of Memory) 이슈가 물밀듯이 떠밀려 온 상황이라 급하게 단

caminobelllo.tistory.com

위 글에서 이어지는 내용입니다. CloudWatch + SNS 부분은 위 글에 작성되어 있습니다.

 

 

그럼 앞에서 설정한 내용들을 대시보드에서 시각화해서 확인해 보자.

 

📊 Grafana Cloud 설정

1. 먼저 계정이 없다면 가입을 한다.

Deployment region에 한국이 없기 때문에 가장 가까운 Japan으로 선택을 해준다.

 

 

2. 새로운 connection을 생성한다. 

Platform과 Architecture은 다음과 같이 설정했다. (인스턴스는 Ubuntu 22.04 버전을 사용 중이다.)

그리고 Run Grafana Alloy를 누르고 나오는 순서대로 했다.

 

3. IAM Role 생성

Grafana에 접속할 수 있는 IAM User가 필요하다.

 

1. IAM 정책 생성

먼저 IAM 정책을 생성해야 하는데, JSON으로 생성을 해서 공식 문서에서 제공하는 Metrics and Logs permissions에 해당하는 권한을 붙여 넣어준다.

https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/

 

Amazon CloudWatch data source | Grafana documentation

Grafana Cloud Enterprise Open source Amazon CloudWatch data source Grafana ships with built-in support for Amazon CloudWatch. This topic describes queries, templates, variables, and other configuration specific to the CloudWatch data source. For instructio

grafana.com

 

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowReadingMetricsFromCloudWatch",
      "Effect": "Allow",
      "Action": [
        "cloudwatch:DescribeAlarmsForMetric",
        "cloudwatch:DescribeAlarmHistory",
        "cloudwatch:DescribeAlarms",
        "cloudwatch:ListMetrics",
        "cloudwatch:GetMetricData",
        "cloudwatch:GetInsightRuleReport"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowReadingLogsFromCloudWatch",
      "Effect": "Allow",
      "Action": [
        "logs:DescribeLogGroups",
        "logs:GetLogGroupFields",
        "logs:StartQuery",
        "logs:StopQuery",
        "logs:GetQueryResults",
        "logs:GetLogEvents"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowReadingTagsInstancesRegionsFromEC2",
      "Effect": "Allow",
      "Action": ["ec2:DescribeTags", "ec2:DescribeInstances", "ec2:DescribeRegions"],
      "Resource": "*"
    },
    {
      "Sid": "AllowReadingResourcesForTags",
      "Effect": "Allow",
      "Action": "tag:GetResources",
      "Resource": "*"
    }
  ]
}

 

 

이 정책에서 정의된 권한은 CloudWatch, CloudWatchLogs, EC2, Resource Group Tagging 서비스에 한정된다.

정책 이름은 grafana-permissions로 지정하여 정책을 생성했다.

 

 

2. IAM User 생성 및 설정

IAM → 사용자 → 사용자 생성에 들어간다.

2단계 권한 설정 부분에서 '그룹에 사용자 추가'를 클릭하고 이 그룹에 3-1에서 생성한 정책을 추가해 해당 그룹으로 IAM User를 생성합니다.

 

이렇게 생성된 IAM User에 들어가서 '액세스 키 만들기'를 눌러 서드 파티 서비스를 선택하여 액세스 키를 생성합니다. 이때 이 비밀 액세스키는 다시 확인할 수 없기 때문에 따로 복사를 하거나 기억해 둬야 합니다.

 

4. DataSource 추가

다시 Grafana Cloud로 돌아와서 

Home → Conncetions → Data sources에서 Add new data source를 클릭하고 CloudWatch를 선택합니다.

 

이때 Connection Details에서 Access Key & Secret Access Key는 앞에서 IAM User에서 생성한 액세스 키와 비밀 액세스 키 값을 입력해 줍니다. 그리고 하단에 Sava & Test를 누르면 연동 후 테스트 성공 여부가 화면에 나타납니다.

 

5. Dashboard 설정

Add query 후 서비스, 확인할 매트릭 등을 선택한 후 → Run quries를 하면 대시보드에 시각화되어 나타납니다.

해당 프로젝트에서는 Spring Boot와 Python 서버 각각에 해당하는 EC2의 CPU 사용률, RDS CPU 사용률 매트릭을 시각화하였습니다.

Python EC2 CPU utilization
Spring Boot EC2 CPU utilization

 

RDS CPU utilization

 

물론 이렇게 한 번에도 확인 가능합니다.

 

 


공부하는 학생입니다. 지적이나 피드백은 언제든지 환영합니다 🙇‍♀️