카테고리 없음

aws grafana, prometheus 구성_1

plli 2025. 5. 22. 12:01

grafana, prometheus, docker 를 이용해 다중 계정 ec2 , rds, elasticache 모니터링을 하려한다.

서버에 exporter 를 구성하는 방식이 아닌 cloudwatch 를 읽어오는 방식이다.

다른 계정의 cloudwatch 도 가져올 수 있어 한눈에 모든 서버를 모니터링 할 수 있다.

 

cloudwatch exporter

 

모니터링 서버 설정

sudo yum install -y git

git clone https://github.com/prometheus/cloudwatch_exporter.git

sudo yum install -y java-17-amazon-corretto.x86_64
sudo yum install -y java-17-amazon-corretto-devel.x86_64

which java
readlink -f /usr/bin/java (위 which java 의 경로 입력)

sudo vi /etc/profile // profile 파일 맨 아래에 3줄 추가

export JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto.x86_64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

source /etc/profile

exit 후 다시 접속

echo $JAVA_HOME // 로 확인

(버전 변경 가능)
wget https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz

tar -xvzf apache-maven-3.9.9-bin.tar.gz

mkdir maven

mv apache* maven/

vi ~/.bash_profile // bash_profile 아래에 3줄 추가

MAVEN_HOME=/home/ec2-user/maven/apache-maven-3.9.9
PATH=$PATH:$MAVEN_HOME/bin
export MAVEN_HOME

exit 후 다시 접속

mvn --version

cd cloudwatch_exporter

mvn package

cp -r cloudwatch_exporter/ a_account_ec2/

cd a_account_ec2/

cp examples/EC2.yml ./config.yml

region 수정과 role_arn 추가


role 생성 방법

 

 

생성 후 ARN 복사

 

vi /home/ec2-user/a_account_ec2

region: us-west-2
# 이전에 생성한 role 
role_arn: arn:aws:iam::account_id:role/cloudwatch_exporter_role

# 수집 항목
metrics:
- aws_dimensions:
  - InstanceId
  
  # CPU 수집
  aws_metric_name: CPUUtilization
  
  # AWS 자체에서 수집하는 namespace
  aws_namespace: AWS/EC2
  
  # 평균값 / max/min 가능
  aws_statistics:
  - Average
  
  aws_tag_select:
    resource_type_selection: ec2:instance
    resource_id_dimension: InstanceId
    tag_selections:
    # 해당 name 과 동일한 tag 를 가진 ec2 의 정보 수집
      Name: ["test-1"]

# memory 나 disk 의 namespace 는 CWAgent 로 해야된다.
  ##### mem #####
- aws_dimensions:
  - InstanceId
  aws_metric_name: mem_used_percent
  aws_namespace: CWAgent
  aws_statistics:
  - Average
  aws_tag_select:
    resource_type_selection: ec2:instance
    resource_id_dimension: InstanceId
    tag_selections:
      Name: ["test-1"]

 ##### disk #####
- aws_dimensions: [InstanceId,path,device,fstype]
  aws_dimension_select:
    path: ['/']
  aws_metric_name: disk_used_percent
  aws_namespace: CWAgent
  aws_statistics:
  - Average
  aws_tag_select:
    resource_type_selection: ec2:instance
    resource_id_dimension: InstanceId
    tag_selections:
      Name: ["test-1"]

 

 

수집 대상 서버

이제 수집할 대상 (test-1) 에서 cloudwatch-agent 를 설치해야된다.

$ sudo yum install amazon-cloudwatch-agent -y

$ sudo vim /opt/aws/amazon-cloudwatch-agent/bin/config.json

{
        "agent": {
                "metrics_collection_interval": 10,
                "run_as_user": "root"
        },
        "logs": {
                "logs_collected": {
                        "files": {
                                "collect_list": [
                                        {
                                                "file_path": "/var/log/secure",
                                                "log_group_name": "test-1/var/log/secure",
                                                "log_stream_name": "{instance_id}",
                                                "retention_in_days": -1
                                        }
                                ]
                        }
                }
        },
        "metrics": {
                "append_dimensions": {
                        "InstanceId": "${aws:InstanceId}"
                },
                "metrics_collected": {
                        "collectd": {
                                "metrics_aggregation_interval": 60
                        },
                        "disk": {
                                "measurement": [
                                        "used_percent"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "/"
                                ]
                        },
                        "mem": {
                                "measurement": [
                                        "mem_used_percent"
                                ],
                                "metrics_collection_interval": 60
                        },
                        "statsd": {
                                "metrics_aggregation_interval": 60,
                                "metrics_collection_interval": 10,
                                "service_address": ":8125"
                        }
                }
        }
}

 

저장 후

sudo mkdir -p /usr/share/collectd
sudo touch /usr/share/collectd/types.db
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s

 

cloudwatch 로그 확인

 

tail -20f /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log

 

이런 오류가 발생하는데 이유는 ec2 에 role 이 없기 때문.

2025-05-22T01:45:58Z W! cloudwatch: 10 retries, going to sleep 42200 ms before retrying.
2025-05-22T01:46:40Z E! cloudwatch: WriteToCloudWatch failure, err:  NoCredentialProviders: no valid providers in chain
caused by: EnvAccessKeyNotFound: failed to find credentials in the environment.
SharedCredsLoad: failed to load profile, .
EC2RoleRequestError: no EC2 instance role found
caused by: EC2MetadataError: failed to make EC2Metadata request
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <title>404 - Not Found</title>
 </head>
 <body>
  <h1>404 - Not Found</h1>
 </body>
</html>

 

test-1 ec2에 role 적용 (cloudwatch)

 

role 생성

 

 

콘솔 - 수집 대상 서버(test-1) - 우클릭 - 보안 - IAM 역할 수정

 

 

IAM 적용 후 다시 수집 대상 서버(test-1)

 

cloudwatch agent 재시작

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s

 

잠시 기다린 후

콘솔 - Cloudwatch - 지표 - 모든 지표 에서 수집 대상 서버(test-1) 의 instance id 입력

이미지처럼 CWAgent 가 나와야 memory 와 disk 상태 수집

 

여기까지 설정 후 2페이지