본문 바로가기
AWS(Amazon Web Service)/CloudWatch

[AWS] CloudWatch, EC2 Network Monitoring

by Haengsin 2021. 11. 8.

CloudWatch EC2 Network Monitoring

네트워크 사용률을 모니터링하여 EC2 또는 RDS의 병목 현상을 방지한다.

 

아래 인스턴스 EC2 네트워크 성능 치트 시트를 참고하여 모니터링을 위한 임계 값을 설정할 수 있다. 

https://cloudonaut.io/ec2-network-performance-cheat-sheet/

 

각 EC2 인스턴스는 CloudWatch에 다양한 지표를 보고한다. 이중에 인스턴스가 모든 네트워크 인터페이스에서 수신한 바이트 수를 측정하기 위해 Metric 2개 NetworkInNetworkOut 을 수집하여 계산해야 한다.

 

1. CloudWatch 지표

- [CloudWatch] > [경보] > [모든 경보] > [경보 생성]

 

- EC2 지표 중 NetworkInNetworkOut 을 선택 후, [View graphed metrics] 클릭

- [Add metrics]

- m1 = NetworkOut metric

- m2 = NetworkIn metric

- 표현식 = (m1+m2)/300/1000/1000/1000*8

  • 5분을 1초로 계산 : /300
  • Gbit -> Byte : 1000/1000/1000*8 

 

2. CloudWatch 지표를 바탕으로 알림을 생성

  • 임계값은 위의 네트워크 성능 치트 기준 네트워크 성능의 80%로 설정한다.
  • 짧은 네트워크 사용률 급증으로 인한 경보를 방지하기 위하여 8 out of 12 datapoints 를 설정

 

 

for CloudFormation 

Parameters:
  Topic:
    Type: String
  AutoScalingGroupName:
    Type: String
Resources:
  NetworkUtilizationTooHighAlarm:
    Type: 'AWS::CloudWatch::Alarm'
    Properties:
      AlarmDescription: 'EC2 High Network Utilization'
      Metrics:
      - Id: summary
        Label: EC2 Utilization
        Expression: IF(cpu > 80, 1, 0) OR IF(memory > 80, 1, 0) OR IF(network > 80, 1, 0)
        ReturnData: true
      - Id: cpu
        MetricStat:
          Metric:
            Namespace: AWS/EC2
            MetricName: CPUUtilization
            Dimensions:
            - Name: AutoScalingGroupName
              Value: !Ref AutoScalingGroupName
          Stat: Maximum
          Period: 300
        ReturnData: false
      - Id: memory
        MetricStat:
          Metric:
            Namespace: CWAgent
            MetricName: mem_used_percent
            Dimensions:
            - Name: AutoScalingGroupName
              Value: !Ref AutoScalingGroupName
          Stat: Maximum
          Period: 300
        ReturnData: false
      - Id: network
        Label: Network Utilization
        Expression: "((network_in+network_out)/300/1000/1000/1000*8)/0.75*100"
        ReturnData: false
      - Id: network_in
        MetricStat:
          Metric:
            Namespace: AWS/EC2
            MetricName: NetworkIn
            Dimensions:
            - Name: AutoScalingGroupName
              Value: !Ref AutoScalingGroupName
          Stat: Sum
          Period: 300
        ReturnData: false
      - Id: network_out
        MetricStat:
          Metric:
            Namespace: AWS/EC2
            MetricName: NetworkOut
            Dimensions:
            - Name: AutoScalingGroupName
              Value: !Ref AutoScalingGroupName
          Stat: Sum
          Period: 300
        ReturnData: false
      ComparisonOperator: GreaterThanOrEqualsThreshold
      EvaluationPeriods: 1
      DatapointsToAlarm: 1
      Threshold: '1'