- Amazon CloudWatch 란?
- https://boto3.amazonaws.com/v1/documentation/api/latest/guide/cw-examples.html
- 0) 컨셉
- AWS의 모든 Resource 및 Application 의 모니터링 및 지표측정 관리.
- AWS의 모든 Service는 자동으로 관리됨.
- 예) 특정 지표를 감시해서, 특정 임계치 조건에~ 특정 처리를 하도록 설정.
- 예) 특정 지표를 쌓아서, 통계검색 및 그래프 활용.
- 1-1) 로그 및 지표필터
- (주로 AWS Lambda 등등을 사용하면,) 해당 '로그그룹' 이 생성되어~ 편하게 사용하면 된다.
- 여기서 관리하고자 할, '로그그룹'의 "지표 필터 생성"을 진행하면 된다.
- 필터 패턴 : 원하는 특정형식의 로그구문을 찾을수있도록, 정의하면 된다.
- Metric Namespace : 지표를 담는 공간. (각각에 네임스페이스는 안전하게 격리)
- Metric Name : 지표이름.
- Metric Value : 패턴 일치시, 지표에 게시하는 숫자 값.
- Default Value : 패턴이 일치하지 않은동안, 지표필터에 보고되는 값. (옵셔널)
- 결과적으로, (AWS Lambda 관리를 위한) 여러가지 지표를 '신규 Namespace'에 정의!
- 1-2) 로그 인사이트 쿼리
- 사용 개념
- Log groups : ...
- Log streams : ...
- Log events : ...
- Metric filters : ...
- Retention settings : ...
- 로그 종류별 지원 단위데이터
- Lambda Log : @timestamp, @logStream, @message, @requestId, @duration, @billedDuration, @type, @maxMemoryUsed, @memorySize 및 @xrayTraceId,@xraySegmentId.
- VPN flow Log : ...
- Route53 Log : ...
- ...
- Query Commands
- display : ...
- fields : ...
- filter : ...
- stats : ...
- sort : ...
- limit : ...
- parse : ...
- 예)
-
filter @message like "project_downloading = " | parse @message "*project_downloading = *,*,*" as msg, token, project_id, credit_id | filter project_id like "1234567890" | display @timestamp, @requestId, msg, token, project_id, credit_id filter @message like "project_downloading_sub = " | parse @message "*project_downloading_sub = *,*" as msg, project_id, paragraph_id | filter project_id like "1234567890" | display @timestamp, @requestId, msg, project_id, paragraph_id fields @timestamp, @message | filter @requestId = "00000-0000-000000-0000-0000000" | sort @timestamp asc | limit 1000
-
- ...
- 사용 개념
- 1-3) 로그 스트림
- // TODO : ...
- 2-1) 지표 및 대시보드
- 지표는 '사용자의 Namespace' 와 'AWS Service의 Namespace' 가 제공된다. (각 리전별로 제공)
- 관리하고자 하는 Namespace의 지표를 '체크박스' 선택하면, "그래프 지표"로 나오게 된다.
- 각 지표에 적당한 '통계' 및 '기간' 지정하고, 'Math Expression'도 적용하는 등, 원하는 그래프를 뽑을수있다.
- 지속적인 모니터링을 위해서, 해당 그래프를 "대시보드에 추가" 하면~ 된다.
- 2-2) 지표 경보
- // TODO : ...
- 3-1) 이벤트
- 패턴 이나 CRON형식으로, AWS의 Event Trigger를 관리 할 수 있다.
- ...
- Amazon CloudWatch Logs 란?
- https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html
- https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/logs.html
-
import os import json from time import time from datetime import datetime, timedelta import logging import boto3 def lambda_handler(event, context): logger = logging.getLogger('test') logger.setLevel(logging.DEBUG) logger.info(f"lambda_handler() : logger = {logger}") logger.info(f"lambda_handler() : handlers = {logger.handlers}") for handler in logger.handlers: logger.info(f"lambda_handler() : handler = {handler}") logger.info(f"lambda_handler() : event = {event}") logger.info(f"lambda_handler() : context = {context}") now = datetime.utcnow() + timedelta(hours=9) now = now.strftime('%Y/%m/%d_%H-%M-%S') logger.info(f"lambda_handler() : now = {now}") logger.info(f"lambda_handler() : os.environ = {os.environ}") logger.info(f"lambda_handler() : AWS_LAMBDA_FUNCTION_NAME = {os.environ['AWS_LAMBDA_FUNCTION_NAME']}") logger.info(f"lambda_handler() : AWS_LAMBDA_LOG_GROUP_NAME = {os.environ['AWS_LAMBDA_LOG_GROUP_NAME']}") logger.info(f"lambda_handler() : AWS_LAMBDA_LOG_STREAM_NAME = {os.environ['AWS_LAMBDA_LOG_STREAM_NAME']}") client = boto3.client('logs') response = client.create_log_stream( logGroupName='/aws/lambda/testLoggingFunc', logStreamName=f"{now}/test" ) logger.info(f"lambda_handler() : create_log_stream response = {response}") response = client.put_log_events( logGroupName='/aws/lambda/testLoggingFunc', logStreamName=f"{now}/test", logEvents=[ {'timestamp': int(time()*1000), 'message': f"테스트 {time()}"}, ], #sequenceToken=uploadSequenceToken ) logger.info(f"lambda_handler() : put_log_events response = {response}") return { 'statusCode': 200, 'body': json.dumps(f"hello world") }
- ...
-끝-
'AWS' 카테고리의 다른 글
AWS Serverless Application Model (0) | 2020.06.28 |
---|---|
Amazon Simple Queue Service (0) | 2020.05.16 |
Amazon EC2 (1) | 2020.03.14 |
AWS CodePipeline (0) | 2020.03.11 |
AWS CodeCommit (0) | 2020.03.10 |