CloudWatch Logs
- AWS에서 로그를 저장하는 최고의 장소
- 로그들은 로그 그룹으로 그룹화되며 로그 그룹의 이름으로는 보통 애플리케이션을 사용
- 각 로그 그룹 내에는 로그 스트림이 존재하며 애플리케이션 내 인스턴스나 다양한 로그 파일명 또는 컨테이너 등을 나타냄
- 로그 만료일도 정의할 수 있으므로 로그가 영원히 만료되지 않게 하거나 일정 기간 후 만료되게 할 수 있음
- CloudWatch Logs는 유료이며 로그를 S3, Kinesis Data Streams, Firehose, Lambda, ElasticSearch로 보낼 수 있음
CloudWatch Logs - Sources
- SDK, CloudWach Logs 에이전트, 통합 CloudWatch 에이전트를 통해 로그를 전송
- Elastic Beanstalk는 애플리케이션의 로그를 CloudWatch에 전송
- ECS는 컨테이너의 로그를 CloudWatch에 전송
- Lambda는 함수 자체에서 로그를 전송
- VPC Flow Logs는 VPC 메타데이터 네트워크 트래픽 로그를 전송
- API Gateway는 받은 모든 요청을 전송
- CloudTrail은 필터링해 로그를 전송
- Route53은 모든 DNS 쿼리를 로그로 전송
CloudWatch Logs Metric Filter & Insights
- CloudWatch Logs에서는 필터 표현식을 쓸 수 있음
예) 로그 내 특정 IP를 찾거나 특정 IP가 찍힌 로그를 찾거나, 특정 문구를 가진 모든 로그를 찾을 수 있음 - 지표 필터를 통해 출현 빈도를 계산해 지표를 만들 수 있으며 이 지표를 CloudWatch 경보로 연동할 수 있음
- CloudWatch Logs Insights 기능을 통해 로그를 쿼리하고 이 쿼리를 대시보드에 바로 추가할 수 있으며
자주 쓰이는 쿼리들도 AWS에 추가할 수 있으므로 사용하기 간편한 쿼리 언어
CloudWatch Logs – S3 Export
- CloudWatch에서 S3로 보낼 때 내보내기가 가능해질 때까지 최대 12시간이 걸릴 수 있음
- API 호출은 CreateExportTask이며 시간이 따로 설정되어 있으므로 실시간이 아님
CloudWatch Logs Subscriptions
- CloudWatch Logs에서 로그를 스트림하고 싶다면 구독 필터를 사용해야 함
- 구독 필터란 CloudWatch Logs 상단에 적용하여 이를 목적지로 내보내는 필터를 말함
예1) Lambda 함수를 사용해 ES에 데이터를 내보낼 때 사용
예2) Kinesis Data Firehose를 사용해 S3에 근 실시간 전송을 할 때 사용 (CloudWatch에서 S3로 내보내기보다 훨씬 빠름)
예3) Kinesis Data Steams에 데이터를 보낼 수 있음
그 외에도 KDF, KDA, EC2, Lambda 등이 있음
CloudWatch Logs Aggregation Multi-Account & Multi Region
- 여러 계정과 리전간 로그를 집계할 수 있음
- 여러 계정을 생성한 후 구독 필터를 가진 리전1에 계정A가 있다면 공통 계정을 통해 Kinesis Data Steams으로 보내짐
계정B와 리전 2, 3도 마찬가지이며 모든 로그를 모아 Kinesis Data Steams, Data Firehose, S3로 보낼 수 있음
<CloudWatch 로그 실습>
- CloudWatch Logs 로그 그룹 살펴보기
특정 서비스에서 생성된 총 8개의 로그 그룹이 존재
/aws/lambda/...는 Lambda에서 만든 것이며, /aws/datasync는 DataSync에서, /aws-glue/crawlers는 Glue에서 만든 것
runCommandOuput은 SSM runCommand를 했을 때 출력값이 이 그룹에 채워지도록 함
여기에는 로그 스트림이 6개 있는데 특정 runCommand를 실행했던 각자 다른 인스턴스를 나타내며
인스턴스 ID는 각각 다르지만 전부 runCommand ID가 동일
또한 stdout과 stderr가 있으며 stdout을 확인하면 이 명령으로 생성된 모든 로그를 확인할 수 있고 로그 라인도 전부 볼 수 있음
그리고 만약 로그에서 http라는 키워드를 검색하면 http라는 키워드가 있는 모든 로그 라인을 보여줌
- CloudWatch Logs의 로그 그룹에 새 지표 필터 생성 및 경보 생성
필터 패턴을 찾을 수 있는 도구인 지표 필터를 만들어서 지표에 사용할 수 있음
runCommandOuput에서 installing 패턴을 찾기 위해 로그 스트림을 선택한 후 패턴을 테스트하면 알맞은 로그를 보여줌
이 후 필터 이름을 DemoFilter라는 지정한 후 새 이름 공간인 DemoMetricFilter를 생성하며
지표 값 추가 부분에서 1로 설정하면 알맞은 패턴 필터이 검색될 때마다 1을 추가해 검색한 단어를 포함한 로그 라인의 갯수를 셈
생성된 지표 필터를 가지고 그 위에 경보를 생성할 수 있어 지표가 특정 값을 넘게 됐을 때 경보가 울리게 됨
지표는 로그 스트림에 걸린 필터에 기반해 계산됨
구독 필터를 만들어서 다른 결과를 내보내는 필터(ES, Kinesis Data Steams, Firehose, Lambda)를 만들 수 있으며
각 로그 그룹 당 구독 필터는 두 개까지 만들 수 있음
로그 그룹은 보존 기간을 수정할 수 있어 로그가 영원히 만료되지 않게 할 수 있고 120개월(10년)까지 보존할 수 있음
그리고 S3로 데이터를 내보내기할 수 있어 데이터의 범위와 스트림 접두부를 선택해 로그 스트림을 내보냄
- CloudWatch Logs 로그 그룹 생성
demo-log-group이라고 이름을 지정한 후 보존 기간을 선택할 수 있고 로그 그룹을 KMS 키로 암호화할 수 있음
- CloudWatch Logs Insights
특정 로그 그룹을 쿼리하기 위한 쿼리 언어를 쓸 수 있게 해주므로 이를 생성해서 쿼리를 실행하면 데이터가 보이게 됨
쿼리 언어는 로그에 대한 정보를 얻을 수 있게 해주고 결과를 내보내어 쿼리를 저장할 수도 있음
이를 통해 Lambda에서 5분 간격으로 대기 시간 통계를 확인하거나
VPC 흐름 로그에서는 바이트 전송 상위 10개를 소스와 도달 IP 주소로 정렬할 수 있음
'Cloud > AWS' 카테고리의 다른 글
[SAA] CloudWatch 경보 (0) | 2022.04.18 |
---|---|
[SAA] CloudWatch 에이전트 및 CloudWatch Logs 에이전트 (0) | 2022.04.18 |
[SAA] CloudWatch 대시보드 (0) | 2022.04.18 |
[SAA] CloudWatch 지표 / 사용자 지정 지표 (0) | 2022.04.18 |
[SAA] AWS 모니터링 섹션 소개 (0) | 2022.04.18 |