728x90
반응형
본 문서는 Amazon Linux 에서 custom metric 을 활성화 하는 방법에 대해 기술한다.

기본적인 메커니즘은 아래와 같다.
1. IAM 계정을 Programmatic access 계정 생성
2. AWS에서 제작한 mon-put-instance-data.pl 파일과 Linux crontab 을 통해 리소스의 값을 CloudWatch 로 전송한다.
3. 기록된 CloudWatch metric을 확인한다.



[root@ip-10-100-0-98 ~]#  sudo yum install perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https  <-- Amazon Linux 2014.03 이상 버전을 사용 중인 경우 perl 모듈을 추가로 설치하여야 한다.
=========================================================================================================================================================================
 Package                                               Arch                         Version                                        Repository                       Size
=========================================================================================================================================================================
Installing:
 perl-DateTime                                         x86_64                       2:1.04-5.9.amzn1                               amzn-main                       117 k
 perl-LWP-Protocol-https                               noarch                       6.04-2.7.amzn1                                 amzn-main                        11 k
 perl-Switch                                           noarch                       2.16-7.5.amzn1                                 amzn-main                        23 k
 perl-Sys-Syslog                                       x86_64                       0.33-3.6.amzn1                                 amzn-main                        43 k
Installing for dependencies:
 perl-Business-ISBN                                    noarch                       2.06-2.7.amzn1                                 amzn-main                        25 k
 perl-Business-ISBN-Data                               noarch                       20120719.001-2.7.amzn1                         amzn-main                        26 k
 perl-Class-Load                                       noarch                       0.20-3.6.amzn1                                 amzn-main                        27 k
 perl-Class-Singleton                                  noarch                       1.4-14.7.amzn1                                 amzn-main                        18 k
 perl-Compress-Raw-Bzip2                               x86_64                       2.061-3.11.amzn1                               amzn-main                        33 k
 perl-Compress-Raw-Zlib                                x86_64                       1:2.061-4.1.amzn1                              amzn-main                        61 k
 perl-Data-Dumper                                      x86_64                       2.145-3.5.amzn1                                amzn-main                        49 k
 perl-Data-OptList                                     noarch                       0.107-9.7.amzn1                                amzn-main                        23 k
 perl-DateTime-Locale                                  noarch                       0.45-6.5.amzn1                                 amzn-main                       1.9 M
 perl-DateTime-TimeZone                                noarch                       1.63-2.9.amzn1                                 amzn-main                       892 k
 perl-Encode-Locale                                    noarch                       1.03-5.8.amzn1                                 amzn-main                        16 k
 perl-File-Listing                                     noarch                       6.04-7.11.amzn1                                amzn-main                        13 k
 perl-HTML-Parser                                      x86_64                       3.71-4.7.amzn1                                 amzn-main                       119 k
 perl-HTML-Tagset                                      noarch                       3.20-15.7.amzn1                                amzn-main                        18 k
 perl-HTTP-Cookies                                     noarch                       6.01-5.12.amzn1                                amzn-main                        27 k
 perl-HTTP-Daemon                                      noarch                       6.01-5.11.amzn1                                amzn-main                        21 k
 perl-HTTP-Date                                        noarch                       6.02-8.8.amzn1                                 amzn-main                        14 k
 perl-HTTP-Message                                     noarch                       6.06-6.10.amzn1                                amzn-main                        84 k
 perl-HTTP-Negotiate                                   noarch                       6.01-5.12.amzn1                                amzn-main                        17 k
 perl-IO-Compress                                      noarch                       2.061-2.12.amzn1                               amzn-main                       298 k
 perl-IO-HTML                                          noarch                       1.00-2.5.amzn1                                 amzn-main                        24 k
 perl-IO-Socket-IP                                     noarch                       0.21-4.5.amzn1                                 amzn-main                        38 k
 perl-IO-Socket-SSL                                    noarch                       1.94-3.13.amzn1                                amzn-main                       118 k
 perl-LWP-MediaTypes                                   noarch                       6.02-2.9.amzn1                                 amzn-main                        25 k
 perl-List-MoreUtils                                   x86_64                       0.33-9.9.amzn1                                 amzn-main                        66 k
 perl-Module-Implementation                            noarch                       0.06-6.6.amzn1                                 amzn-main                        17 k
 perl-Module-Runtime                                   noarch                       0.013-4.5.amzn1                                amzn-main                        19 k
 perl-Mozilla-CA                                       noarch                       20110914-2.6.amzn1                             amzn-main                       9.0 k
 perl-Net-HTTP                                         noarch                       6.06-2.11.amzn1                                amzn-main                        29 k
 perl-Net-LibIDN                                       x86_64                       0.12-15.6.amzn1                                amzn-main                        29 k
 perl-Net-SSLeay                                       x86_64                       1.65-2.10.amzn1                                amzn-main                       361 k
 perl-Package-DeprecationManager                       noarch                       0.13-7.6.amzn1                                 amzn-main                        19 k
 perl-Package-Stash                                    noarch                       0.34-2.6.amzn1                                 amzn-main                        35 k
 perl-Package-Stash-XS                                 x86_64                       0.26-3.7.amzn1                                 amzn-main                        32 k
 perl-Params-Util                                      x86_64                       1.07-6.8.amzn1                                 amzn-main                        38 k
 perl-Params-Validate                                  x86_64                       1.08-4.10.amzn1                                amzn-main                        72 k
 perl-Sub-Install                                      noarch                       0.926-6.8.amzn1                                amzn-main                        22 k
 perl-TimeDate                                         noarch                       1:2.30-2.7.amzn1                               amzn-main                        53 k
 perl-Try-Tiny                                         noarch                       0.12-2.5.amzn1                                 amzn-main                        24 k
 perl-URI                                              noarch                       1.60-9.8.amzn1                                 amzn-main                       109 k
 perl-WWW-RobotRules                                   noarch                       6.02-5.12.amzn1                                amzn-main                        18 k
 perl-libwww-perl                                      noarch                       6.05-2.17.amzn1                                amzn-main                       215 k

Transaction Summary
=========================================================================================================================================================================
Install  4 Packages (+42 Dependent packages)

Total download size: 5.2 M
Installed size: 18 M
Is this ok [y/d/N]: y
Downloading packages:

Complete!


참고 CentOS 7버전의 경우 설치하는 파일이 틀리다.
# sudo yum install perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA -y


[root@ip-10-100-0-98 ~]# cd /usr/local/src/  <-- CloudWatch Monitoring script 를 저장할 위치에 이동한다.

[root@ip-10-100-0-98 src]# curl http://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.1.zip -O   <-- 모니터링 스크립트 설치
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0 100 24089  100 24089    0     0  40845      0 --:--:-- --:--:-- --:--:-- 40898

[root@ip-10-100-0-98 src]# ls -al
....
-rw-r--r--  1 root root 24089 Jul  4 08:39 CloudWatchMonitoringScripts-1.2.1.zip
...


[root@ip-10-100-0-98 src]# unzip CloudWatchMonitoringScripts-1.2.1.zip  <-- 압축 해제
Archive:  CloudWatchMonitoringScripts-1.2.1.zip
 extracting: aws-scripts-mon/awscreds.template 
  inflating: aws-scripts-mon/AwsSignatureV4.pm 
  inflating: aws-scripts-mon/CloudWatchClient.pm 
  inflating: aws-scripts-mon/LICENSE.txt 
  inflating: aws-scripts-mon/mon-get-instance-stats.pl 
  inflating: aws-scripts-mon/mon-put-instance-data.pl 
  inflating: aws-scripts-mon/NOTICE.txt 

[root@ip-10-100-0-98 src]# rm ./CloudWatchMonitoringScripts-1.2.1.zip   <-- .zip 삭제, /usr/loca/src 에 남겨두려면 삭제 하지 않아도 무방함
rm: remove regular file ‘./CloudWatchMonitoringScripts-1.2.1.zip’? y

[root@ip-10-100-0-98 src]# mv ./aws-scripts-mon/ /root/  <-- 압축해제한 디렉터리를 /root 디렉터리 하위로 이동
[root@ip-10-100-0-98 src]# cd /root/aws-scripts-mon/

스크립트 파일 구성
- CloudWatchClient.pm – 다른 스크립트에서 Amazon CloudWatch 호출을 간소화하는 공유 Perl 모듈입니다.
- mon-put-instance-data.pl – Amazon EC2 인스턴스에 대한 시스템 메트릭(메모리, 스왑, 디스크 사용률)에 대한 시스템 측정치를 수집하여 Amazon CloudWatch에 전송합니다.
- mon-get-instance-stats.pl – Queries Amazon CloudWatch에 쿼리하여 이 스크립트가 실행된 EC2 인스턴스에 대한 최신 사용률 통계를 표시합니다.
- awscreds.template – 액세스 키 ID 및 보안 액세스 키를 저장하는 AWS 자격 증명의 파일 템플릿입니다.
- LICENSE.txt – Apache 2.0 라이선스가 들어 있는 텍스트 파일입니다.
- NOTICE.txt – 저작권 통지입니다.

[root@ip-10-100-0-98 aws-scripts-mo]# cp awscreds.template awscreds.conf  <-- AccessKeyID, SecretKy 적용을 위해 템플릿 복사


[root@ip-10-100-0-98 aws-scripts-mo]# vi ./awscreds.conf  <-- 키를 정의
AWSAccessKeyId=.....
AWSSecretKey=......

위 AccessKeyID 와 Secretket 의 경우 AWS CloudWatchFullAccess 권한이 있는 계정의 키 값을 입력해 준다.

* 사실 권한을 더 작게 줄 수도 있는데.....ㅠㅠ


[root@ip-172-31-31-177 aws-scripts-mon]# ./mon-put-instance-data.pl --mem-util --verify --verbose  <-- Cloudwatch에 데이터를 넣지 않고, 간단한 테스트를 수행
MemoryUtilization: 8.62159133358237 (Percent)
Using AWS credentials file <./awscreds.conf>
Endpoint: https://monitoring.ap-northeast-1.amazonaws.com
Payload: {"MetricData":[{"Timestamp":1499065590,"Dimensions":[{"Value":"i-005d4065b54f21a5d","Name":"InstanceId"}],"Value":8.62159133358237,"Unit":"Percent","MetricName":"MemoryUtilization"}],"Namespace":"System/Linux","__type":"com.amazonaws.cloudwatch.v2010_08_01#PutMetricDataInput"}
Verification completed successfully. No actual metrics sent to CloudWatch.
[root@ip-172-31-31-177 aws-scripts-mon]#


[root@ip-172-31-31-177 aws-scripts-mon]# ./mon-put-instance-data.pl --mem-util --mem-used-incl-cache-buff --mem-used --mem-avail  <-- 사용 가능한 ㅁ든 메모리 측정치를 수집한 다음 CloudWatch에 전송
Successfully reported metrics to CloudWatch. Reference Id: 2f8c7b6a-5fbe-11e7-9db5-55cf07411f21
[root@ip-172-31-31-177 aws-scripts-mon]#



[root@ip-172-31-31-177 src]# crontab -e   <-- crontab 에 지정하여 5분 단위로 메모리와 디스크 데이터를 Cloudwatch로 전송
*/5 * * * * ~/aws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --mem-used --mem-avail --disk-space-util --disk-path=/ --from-cron

만약 / 디바이스 외에 다른 디바이스까지 수집하려면 --disk-path=[PATH] 옵션을 추가해주면 된다.


mon-put-instance-data.pl 의 여러 옵션값을 통해 각종 데이터를 CloudWatch에 전송할 수 있다.
기타 Custom metric의 옵션은 아래의 AWS 공식 manual 에서 확인할 수 있다.

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/mon-scripts.html


Custome metric, Linux memory, Linux Disk, 커스텀 메트릭, AWS, AWS EC2

728x90
반응형

+ Recent posts