DB와의 커넥션을 위해 일정 시간마다 log를 남기는 작업을 진행하게 되었다. 해당 데이터들은 로그 파일로만 남기면 추후에 ElasticSearch 및 Kibana 와 같은 추가 작업을 진행해야하는데 Cloudwatch를 사용하게되면 평소 보던 곳에서 한번에 볼 수 있고(무엇보다 큰 장점), 알아서 시각화 까지 해 준다고하니 한번에 두마리의 토끼를 잡을 수 있을 것 같아서 찾아보았고, 방법이 존재했다.
목차는 아래와 같다.
- DB와의 커넥션 카운트를 계산하는 쉘 스크립트 구현
- AWS Cloudwatch로 데이터 보내기
- EC2의 메타데이터 얻기
- 최종 쉘 코드 예시
DB와의 커넥션 카운트
기본 설정으로는 DB서버와 WAS서버의 Connection 이후 TIME_WAIT는 60초로 유지가 되어 60초 마다 connection을 Count해주면 되는 쉘 스크립트 코드를 작성 해 주면 된다.
netstat를 이용하여 DB와의 커넥션을 가지고 왔고, grep을 이용하여 DB서버의 아이피로 연결이 이루어진 데이터를 가지고와 wc -l 을 이용해 Count를 한 간단한 코드이다.
Cloudwatch로 데이터를 보내기
Cloudwatch로 데이터를 보내는 명령어는 다음과 같다.
각각의 옵션들은 다음과 같다.
--namespace
"네임스페이스 이름" 제일 처음 Cloudwatch의 지표에 들어가면 나오는 이름입니다.
저는 CustomData라고 명명했습니다.
--dimensions Name="서버 이름",InstanceID=$INSTANCEID
cloudwatch에서 namespace를 입력 하고 나서 나오는 분류 값들입니다.
추후 검색으로 사용이 가능한 인자 값들입니다. $INSTANCEID는 아래의 메타데이터 얻기에서 설명하겠습니다.
--metric-name "메트릭 이름"
지표의 이름입니다.
저는 JDBC TIME_WAIT의 갯수를 보았기 때문에 "JDBC TIME_WAIT"로 하였습니다.
--value $result
실질적인 데이터 값 입니다.
--unit Count
위의 value가 어떤 유형인지 선언입니다.
unit으로 들어갈 수 있는 타입은 아래와 같습니다.
"Unit":"Seconds"|"Microseconds"|"Milliseconds"|"Bytes"|"Kilobytes"|"Megabytes"|"Gigabytes"|"Terabytes"|"Bits"|"Kilobits"|"Megabits"|"Gigabits"|"Terabits"|"Percent"|"Count"|"Bytes/Second"|"Kilobytes/Second"|"Megabytes/Second"|"Gigabytes/Second"|"Terabytes/Second"|"Bits/Second"|"Kilobits/Second"|"Megabits/Second"|"Gigabits/Second"|"Terabits/Second"|"Count/Second"|"None"
저는 카운트를 했기 때문에 Count라고하였습니다.
--timestamp $TIMESTAMP
입력이 된 시간입니다.
--profile AmazonCloudWatchAgent
--profile은 put-metric-data의 옵션값이 아니라 aws의 옵션값입니다.
지난번 Cloudwatch agent를 설치 했을 때 설정했던 aws의 권한을 저장 해 둔 것을 명시적으로 불러왔습니다.
EC2의 메타데이터 얻기
--dimensions옵션에서 $INSTANCEID를 인자값으로 넣었는데, 해당 값은 인스턴스의 메타데이터를 얻기 위해 선언한 변수 명으로 사용 방법은 간단하다 aws 인스턴스 내에서 아래와 같이 입력하면 된다.
필자는 인스턴스의 id값을 INSTANCE변수 안에 저장하기 위해 아래와 같이 선언했다.
INSTANCEID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
더 찾아보고 싶은 인자값이 있다면 아래의 링크를 참조 해 주세요
인스턴스 메타데이터 카테고리 - Amazon Elastic Compute Cloud
다음 표의 범주 이름 중 일부는 해당 인스턴스에만 있는 데이터 자리 표시자입니다. 예를 들어, mac은 네트워크 인터페이스의 MAC 주소를 나타냅니다. 이 자리 표시자를 실제 값으로 바꿔야 합니��
docs.aws.amazon.com
최종 쉘 코드 예시
최종적으로 로그 파일로도 남기기 위해서 아래와 같이 최종 코드를 구현 하였다.
참고 사이트
https://aws.amazon.com/ko/blogs/korea/amazon-cloudwatch-custom-metrics/
https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/publishingMetrics.html
https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/put-metric-data.html
'Devops' 카테고리의 다른 글
$'\r': command not found 문제 해결 (0) | 2020.05.16 |
---|
댓글