Terraform 0.11

circonus_rule_set




terraform

circonus_rule_set

circonus_rule_set संसाधन बनाता है और एक Circonus नियम सेट का प्रबंधन करता है।

प्रयोग

variable "myapp-tags" {
  type    = "list"
  default = [ "app:myapp", "owner:myteam" ]
}

resource "circonus_rule_set" "myapp-cert-ttl-alert" {
  check       = "${circonus_check.myapp-https.checks[0]}"
  metric_name = "cert_end_in"
  link        = "https://wiki.example.org/playbook/how-to-renew-cert"

  if {
    value {
      min_value = "${2 * 24 * 3600}"
    }

    then {
      notify = [ "${circonus_contact_group.myapp-owners.id}" ]
      severity = 1
    }
  }

  if {
    value {
      min_value = "${7 * 24 * 3600}"
    }

    then {
      notify = [ "${circonus_contact_group.myapp-owners.id}" ]
      severity = 2
    }
  }

  if {
    value {
      min_value = "${21 * 24 * 3600}"
    }

    then {
      notify = [ "${circonus_contact_group.myapp-owners.id}" ]
      severity = 3
    }
  }

  if {
    value {
      absent = "24h"
    }

    then {
      notify = [ "${circonus_contact_group.myapp-owners.id}" ]
      severity = 1
    }
  }

  tags = [ "${var.myapp-tags}" ]
}

resource "circonus_rule_set" "myapp-healthy-alert" {
  check = "${circonus_check.myapp-https.checks[0]}"
  metric_name = "duration"
  link = "https://wiki.example.org/playbook/debug-down-app"

  if {
    value {
      # SEV1 if it takes more than 9.5s for us to complete an HTTP request
      max_value = "${9.5 * 1000}"
    }

    then {
      notify = [ "${circonus_contact_group.myapp-owners.id}" ]
      severity = 1
    }
  }

  if {
    value {
      # SEV2 if it takes more than 5s for us to complete an HTTP request
      max_value = "${5 * 1000}"
    }

    then {
      notify = [ "${circonus_contact_group.myapp-owners.id}" ]
      severity = 2
    }
  }

  if {
    value {
      # SEV3 if the average response time is more than 500ms using a moving
      # average over the last 10min.  Any transient problems should have
      # resolved themselves by now.  Something's wrong, need to page someone.
      over {
        last  = "10m"
        using = "average"
      }
      max_value = "500"
    }

    then {
      notify = [ "${circonus_contact_group.myapp-owners.id}" ]
      severity = 3
    }
  }

  if {
    value {
      # SEV4 if it takes more than 500ms for us to complete an HTTP request.  We
      # want to record that things were slow, but not wake anyone up if it
      # momentarily pops above 500ms.
      min_value = "500"
    }

    then {
      notify   = [ "${circonus_contact_group.myapp-owners.id}" ]
      severity = 3
    }
  }

  if {
    value {
      # If for whatever reason we're not recording any values for the last
      # 24hrs, fire off a SEV1.
      absent = "24h"
    }

    then {
      notify = [ "${circonus_contact_group.myapp-owners.id}" ]
      severity = 1
    }
  }

  tags = [ "${var.myapp-tags}" ]
}

resource "circonus_contact_group" "myapp-owners" {
  name = "My App Owners"
  tags = [ "${var.myapp-tags}" ]
}

resource "circonus_check" "myapp-https" {
  name = "My App's HTTPS Check"

  notes = <<-EOF
A check to create metric streams for Time to First Byte, HTTP transaction
duration, and the TTL of a TLS cert.
EOF

  collector {
    id = "/broker/1"
  }

  http {
    code = "^200$"
    headers = {
      X-Request-Type = "health-check",
    }
    url = "https://www.example.com/myapp/healthz"
  }

  metric {
    name = "${circonus_metric.myapp-cert-ttl.name}"
    tags = "${circonus_metric.myapp-cert-ttl.tags}"
    type = "${circonus_metric.myapp-cert-ttl.type}"
    unit = "${circonus_metric.myapp-cert-ttl.unit}"
  }

  metric {
    name = "${circonus_metric.myapp-duration.name}"
    tags = "${circonus_metric.myapp-duration.tags}"
    type = "${circonus_metric.myapp-duration.type}"
    unit = "${circonus_metric.myapp-duration.unit}"
  }

  period       = 60
  tags         = ["source:circonus", "author:terraform"]
  timeout      = 10
}

resource "circonus_metric" "myapp-cert-ttl" {
  name = "cert_end_in"
  type = "numeric"
  unit = "seconds"
  tags = [ "${var.myapp-tags}", "resource:tls" ]
}

resource "circonus_metric" "myapp-duration" {
  name = "duration"
  type = "numeric"
  unit = "miliseconds"
  tags = [ "${var.myapp-tags}" ]
}

तर्क संदर्भ

  • check - (आवश्यक) Circonus ID कि यह नियम सेट एक मीट्रिक स्ट्रीम को सर्च करने के लिए अलर्ट पर प्रयोग करेगा।

  • if - (आवश्यक) एक या अधिक आदेशित विधेय उपबंध हैं जो वर्णन करते हैं कि जब Circonus को एक सूचना उत्पन्न करनी चाहिए एक विन्यास विन्यास की संरचना पर विवरण के लिए नीचे देखें।

  • link - (वैकल्पिक) जब कोई अधिसूचना भेजी जाती है तो बाहरी प्रलेखन (या आपके द्वारा महसूस की गई कोई अन्य चीज) का लिंक। यह मान ईमेल अलर्ट और Circonus UI में दिखाई देगा।

  • metric_type - (वैकल्पिक) इस नियम सेट के मीट्रिक का प्रकार चालू होगा। मान्य मान numeric (डिफ़ॉल्ट) और text

  • notes - (वैकल्पिक) इस नियम सेट के बारे में नोट्स।

  • parent - (वैकल्पिक) एक Circonus Metric ID कि, यदि निर्दिष्ट और एक गंभीरता 1 चेतावनी के साथ सक्रिय है, तो इस नियम को तब तक मौन रखेगा जब तक कि सभी गंभीरता 1 जनक पर सचेत नहीं हो जाती। यह मान ${check_id}_${metric_name} प्रारूप से मेल खाना चाहिए।

  • metric_name - (आवश्यक) किसी दिए गए चेक के भीतर मीट्रिक स्ट्रीम का नाम जो इस नियम सेट पर सक्रिय है।

  • tags - (वैकल्पिक) इस नियम के अनुसार सौंपे गए टैग की एक सूची।

if विन्यास

if कॉन्फ़िगरेशन ब्लॉक नियमों का एक क्रमबद्ध सूची है जिसका मूल्यांकन पहले क्रम में किया जाता है। इस नियम के खंडों में ब्लॉक होने पर अन्य सभी के लिए सही शॉर्टक्रिटक का मूल्यांकन करने की पहली शर्त। if ब्लॉक को "नियम" भी कहा जाता है। यह सलाह दी जाती है कि सभी उच्च-गंभीरता नियमों को कम-गंभीरता वाले नियमों से पहले आदेश दिया जाए अन्यथा कम-गंभीरता वाले नियम उन सूचनाओं को मुखौटा कर देंगे जिन्हें उच्च-गंभीरता के साथ वितरित किया जाना चाहिए।

if ब्लॉक दो कॉन्फ़िगरेशन ब्लॉक से बने होते हैं: value और thenvalue कॉन्फ़िगरेशन ब्लॉक मानदंड निर्दिष्ट करता है जो मीट्रिक धाराओं का मूल्यांकन किया जाता है। वैकल्पिक कॉन्फ़िगरेशन ब्लॉक, then निर्दिष्ट करता है कि क्या कार्रवाई करनी है।

value विन्यास

एक value खंड में कई "विधेय" विशेषताओं में से केवल एक हो सकता है क्योंकि वे एक दूसरे के साथ संघर्ष करते हैं। पारस्परिक रूप से अनन्य विधेय की सूची metric_type पर निर्भर है। कई विधेय का मूल्यांकन करने के लिए, if उचित क्रम में कॉन्फ़िगरेशन ब्लॉक करें if कई बनाएँ।

numeric भविष्यवाणी

निम्न प्रकार के मीट्रिक numeric प्रकार निम्नलिखित समर्थन करते हैं। निम्नलिखित में से केवल एक विधेय को एक समय में निर्दिष्ट किया जा सकता है।

  • absent - (वैकल्पिक) यदि इस अवधि में एक मीट्रिक नहीं देखी गई है, तो नियम में आग लग जाएगी। वर्तमान में, इस अवधि का मूल्यांकन सेकंड के संदर्भ में किया जाता है।

  • changed - (वैकल्पिक) इस नियम को इंगित करने वाला एक बूलियन को आग लगनी चाहिए जब मूल्य में परिवर्तन होता है (जैसे n != n<sub>1</sub> )।

  • min_value - (वैकल्पिक) जब मान इस मान से कम होता है, तो यह नियम आग लगा देगा (उदा n < ${min_value} )।

  • max_value - (वैकल्पिक) जब मान इस मान से अधिक होता है, तो यह नियम आग लगा देगा (उदा n > ${max_value} )।

इसके अतिरिक्त, एक numeric जांच मीट्रिक स्ट्रीम में अंतिम मापा मान बनाम विंडोिंग फ़ंक्शन के आधार पर डेटा का मूल्यांकन भी कर सकती है। खिड़की से व्युत्पन्न मूल्य पर एक नियम का मूल्यांकन करने के लिए, value विन्यास ब्लॉक के अंदर विशेषता over एक नेस्टेड शामिल करें। एक विशेषता over दो विशेषताओं की आवश्यकता होती है:

  • last - (वैकल्पिक) स्लाइडिंग विंडो के लिए एक अवधि। डिफ़ॉल्ट 300s

  • using - (वैकल्पिक) last अंतराल पर उपयोग करने के लिए विंडो फ़ंक्शन। मान्य विंडो फ़ंक्शंस में शामिल हैं: average (डिफ़ॉल्ट), stddev , derive , derive_stddev , counter , derive_2 , derive_2_stddev , derive_2 , derive_2_stddev और derive_2_stddev

text भविष्यवाणी करता है

निम्न प्रकार के मैट्रिक प्रकार के text निम्नलिखित विधेयकों का समर्थन करते हैं:

  • absent - (वैकल्पिक) यदि इस अवधि में एक मीट्रिक नहीं देखी गई है, तो नियम में आग लग जाएगी। वर्तमान में, इस अवधि का मूल्यांकन सेकंड के संदर्भ में किया जाता है।

  • changed - (वैकल्पिक) इस नियम को इंगित करते हुए एक बूलियन को तब फायर करना चाहिए जब मीट्रिक स्ट्रीम में अंतिम मान उसके पिछले मान (जैसे n != n-1 ) से बदल गया हो।

  • contains - (वैकल्पिक) जब मीट्रिक स्ट्रीम में अंतिम मान इस मान से कम होता है, तो यह नियम आग लगा देगा (उदाहरण के लिए strstr(n, ${contains}) != NULL )।

  • match - (वैकल्पिक) जब मीट्रिक स्ट्रीम मान में अंतिम मान इस कॉन्फ़िगर किए गए मान से बिल्कुल मेल खाता है, तो यह नियम आग लगा देगा (उदाहरण के लिए strcmp(n, ${match}) == 0 )।

  • not_contain - (वैकल्पिक) जब मीट्रिक स्ट्रीम में अंतिम मान इस कॉन्फ़िगर किए गए मान से मेल नहीं खाता है, तो यह नियम आग लगा देगा (उदाहरण के लिए strstr(n, ${contains}) == NULL )।

  • not_match - (वैकल्पिक) जब मीट्रिक स्ट्रीम में अंतिम मान इस कॉन्फ़िगर किए गए मान से मेल नहीं खाता है, तो यह नियम आग लगा देगा (उदाहरण के लिए strstr(n, ${not_match}) == NULL )।

then कॉन्फ़िगरेशन

then ब्लॉक में निम्नलिखित विशेषताएँ हो सकती हैं:

  • after - (वैकल्पिक) केवल इस सूचना को मिनटों की संख्या के लिए प्रतीक्षा करने के बाद निष्पादित करें। तुरंत चूक, या 0m
  • notify - (वैकल्पिक) यह नियम नोटिफिकेशन भेजने पर सूचित करने के लिए संपर्क समूह आईडी की एक सूची।
  • severity - (वैकल्पिक) अधिसूचना की गंभीरता स्तर। इसे 1 और 5 बीच किसी भी मान पर सेट किया जा सकता है। 1 चूक।

आयात उदाहरण

circonus_rule_set संसाधन आयात करने का समर्थन करता है। निम्नलिखित टेराफ़ॉर्म (और संदर्भित circonus_metric और circonus_check को पहले ही आयात किया जा चुका है):

resource "circonus_rule_set" "icmp-latency-alert" {
  check = "${circonus_check.api_latency.checks[0]}"
  metric_name = "maximum"

  if {
    value {
      absent = "600s"
    }

    then {
      notify = [ "${circonus_contact_group.test-trigger.id}" ]
      severity = 1
    }
  }

  if {
    value {
      over {
        last = "120s"
        using = "average"
      }

      max_value = 0.5 # units are in miliseconds
    }

    then {
      notify = [ "${circonus_contact_group.test-trigger.id}" ]
      severity = 2
    }
  }
}

निम्न आदेश के साथ circonus_rule_set संसाधन आयात करना संभव है:

$ terraform import circonus_rule_set.icmp-latency-alert ID

जहाँ ID नियम सेट का _cid या Circonus ID है (उदाहरण के लिए /rule_set/201285_maximum ) और circonus_rule_set.icmp-latency-alert कमांड के परिणाम के रूप में संसाधन का नाम इस राज्य में आबाद होगा।