• 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

+ Recent posts