카테고리 없음
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페이지