मैंने लॉग फ़ाइल देखने के लिए क्लाउडवॉच मीट्रिक स्थापित किया है:


resource "aws_cloudwatch_log_metric_filter" "log_errors" {
  name = "${local.fullname}-log-errors"
  log_group_name = "/aws/lambda/${local.fullname}"
  pattern = "{ $._logLevel = \"error\" }"
  metric_transformation {
    name = "${local.fullname}-error-count"
    namespace = "MyApp"
    value     = "1"
  }
}

मैं देख सकता हूं कि मीट्रिक काम कर रहा है - नीचे 13:15 पर बिंदु नोट करें (मैं मैन्युअल रूप से परीक्षण करने के लिए लॉग प्रविष्टि बना रहा हूं):

enter image description here

और अगर मीट्रिक एक मिनट के भीतर 1 या अधिक घटनाओं की रिपोर्ट करता है तो सक्रिय होने वाला अलार्म:


resource "aws_cloudwatch_metric_alarm" "log_errors_alarm" {
  alarm_name        = "${local.fullname}-log-errors"
  alarm_description = "log.error() count for MyApp lambda ${local.fullname}"
  metric_name         = "${local.fullname}-error-count"
  threshold           = "0"
  statistic           = "Sum"
  unit                = "Count"
  comparison_operator = "GreaterThanThreshold"
  datapoints_to_alarm = "1"
  evaluation_periods  = "1"
  period    = "60"
  namespace = "MyApp"
  treat_missing_data = "notBreaching"
  alarm_actions      = [data.aws_ssm_parameter.sns_topic_arn.value]
  ok_actions         = [data.aws_ssm_parameter.sns_topic_arn.value]
}

लेकिन मीट्रिक में एक घटना (प्रति ऊपर) होने के बावजूद अलार्म कभी नहीं चलाया जाता है:

enter image description here

enter image description here

मैं अनिश्चित हूं कि इसे कैसे डिबग किया जाए, क्योंकि सभी एडब्ल्यूएस संसाधन सफलतापूर्वक बनाए गए हैं, जो त्रुटियां मैं मैन्युअल रूप से बनाता हूं उन्हें मीट्रिक में पास कर दिया जाता है, और मैं अन्य लैम्ब्डा में सफलतापूर्वक एक समान अलार्म कॉन्फ़िगरेशन का उपयोग कर रहा हूं, जहां यह अलार्म फेंकता है।

मेरा मीट्रिक क्यों काम कर रहा है लेकिन मेरा अलार्म खतरनाक नहीं है?

0
mikemaccana 20 अगस्त 2021, 16:41

2 जवाब

सबसे बढ़िया उत्तर

metric_alarm और metric_filter के बीच असंगत होने के कारण मैं अपना पैसा यूनिट पर लगाऊंगा।

आप इकाई को metric_alarm पर गणना के रूप में सेट कर रहे हैं, लेकिन आप इकाई पर सेट नहीं कर रहे हैं metric_filter का metric_transformation, इसलिए metric_transformation डिफ़ॉल्ट रूप से कोई नहीं हो जाएगा।

अलार्म में unit को None पर सेट करने या unit को पूरी तरह से हटाने का प्रयास करें।

1
mikemaccana 31 अगस्त 2021, 10:11

मेरे पास कुछ ऐसा ही सेट अप है जो काम कर रहा है और इसे आजमाएगा। अपडेट: इसे और करीब से देखने पर, मेरा मानना ​​है कि आपको comparison_operator = "GreaterThanOrEqualToThreshold" का उपयोग करना चाहिए न कि comparison_operator = "GreaterThanThreshold" का

metric_transformation {
    name = "${local.fullname}-error-count"
    namespace = "MyApp"
    value     = "1"
    default_value = "0"
  }

तथा

resource "aws_cloudwatch_metric_alarm" "log_errors_alarm" {
  alarm_name        = "${local.fullname}-log-errors"
  alarm_description = "log.error() count for MyApp lambda ${local.fullname}"
  metric_name         = "${local.fullname}-error-count"
  threshold           = "1"
  statistic           = "Sum"
  #unit                = "Count"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  #datapoints_to_alarm = "1"
  evaluation_periods  = "1"
  period    = "60"
  namespace = "MyApp"
  treat_missing_data = "notBreaching"
  alarm_actions      = [data.aws_ssm_parameter.sns_topic_arn.value]
  ok_actions         = [data.aws_ssm_parameter.sns_topic_arn.value]
}

unit और datapoint_to_alarm दोनों वैकल्पिक पैरामीटर हैं। उनको छोड़कर प्रयास करें। मुझे लगता है कि दोनों संसाधन cloudwatch_log_metric_filter और aws_cloudwatch_metric_alarm समान स्थानीय चर का उपयोग कर रहे हैं। चूंकि आपने अपने सभी cloudwatch_log_metric_filter पैरामीटर पोस्ट नहीं किए, मुझे लगता है कि आपका pattern = "" वही होना चाहिए जो इसे होना चाहिए।

0
paulg 31 अगस्त 2021, 14:44