Monitor Examples

Here are some exhaustive examples for monitors

Simple GET Monitor

Below example will call https://www.google.com/webhp. If the status code is 200 then it will be UP else DOWN.

- name: Google Search
  tag: "google-search"
  api:
      method: GET
      url: https://www.google.com/webhp

Simple GET Monitor Without Hyperlink

Below example will call https://www.google.com/webhp. If the status code is 200 then it will be UP else DOWN. It will not show the GET hyperlink in the monitor description.

- name: Google Search
  tag: "google-search"
  api:
      method: GET
      url: https://www.google.com/webhp
    hideURLForGet: true

Monitor with HTML description

Below example will call https://www.google.com/webhp. If the status code is 200 then it will be UP else DOWN. It will show the description in HTML format.

- name: Google Search
  tag: "google-search"
  description: "Hello <b>world</b>"
  api:
      method: GET
      url: https://www.google.com/webhp

Monitor with image

google.png is in the static folder

- name: Google Search
  tag: "google-search"
  image: "/google.png"
  api:
      method: GET
      url: https://www.google.com/webhp

Get Monitor 15 Minute

Below example will call https://www.google.com/webhp every 15 minutes. If the status code is 200 then it will be UP else DOWN.

- name: Google Search
  description: Search the world's information, including webpages, images, videos and more.
  tag: "google-search"
  cron: "*/15 * * * *"
  api:
      method: GET
      url: https://www.google.com/webhp

POST Monitor With Body

Below example will call https://www.google.com/webhp with body. If the status code is 200 then it will be UP else DOWN.

- name: Google Search
  description: Google Search
  tag: "google-search-post"
  api:
      method: POST
      url: https://www.google.com/webhp
      headers:
        Content-Type: application/json
      body: '{"order_amount":22222.1,"order_currency":"INR"}'

Secrets in Header

You can set ENV variables in your machine and use them in your monitors. Example below has GH_TOKEN as an environment variable. It uses process.env.GH_TOKEN.

export GH_TOKEN=some.token.for.github

NOTE: DO NOT forget the $ sign in your monitor secret, otherwise it will not be picked up.

- name: Github Issues
  description: Github Issues Fetch
  tag: "gh-search-issue"
  api:
      method: GET
      url: https://api.github.com/repos/rajnandan1/kener/issues
      headers:
        Authorization: Bearer $GH_TOKEN

Secrets in Body

Assuming ORDER_ID is present in env

- name: Github Issues
  description: Github Issues Fetch
  tag: "gh-search-issue"
  api:
      method: POST
      url: https://api.github.com/repos/rajnandan1/kener/issues
      headers:
        Content-Type: application/json
      body: '{"order_amount":22222.1,"order_currency":"INR", "order_id": "$ORDER_ID"}'

Eval Body

Read more about eval

Below example will call https://api.github.com/repos/rajnandan1/kener/issues. If the status code is 200 then it will be UP else DOWN. It will also check if the response time is greater than 2000ms then it will be DEGRADED.

- name: Github Issues
  description: Github Issues Fetch
  tag: "gh-search-issue"
  api:
      method: GET
      url: https://api.github.com/repos/rajnandan1/kener/issues
      eval: |
        (function(statusCode, responseTime, responseDataBase64){
        const resp = JSON.parse(atob(responseDataBase64));
        let status = 'DOWN'
        if(statusCode == 200) status = 'UP';
        if(Object.keys(resp).length == 0) status = 'DOWN';
        if(statusCode == 200 && responseTime > 2000) status = 'DEGRADED';
        return {
            status: status,
            latency: responseTime,
        }
        })

With defaultStatus UP

Each minute it will set the status as UP

- name: Earth
  description: Our Planet
  tag: "earth"
  defaultStatus: UP

With Category

Add this monitor to the API category instead of the default home category

- name: Earth
  description: Our Planent
  tag: "earth"
  category: API

Ping Monitor

This will ping the hosts. It will be up if the ping is successful for all the hosts present in the list of ip4 and ip6.

- name: Earth
  description: Our Planent
  tag: "earth"
  ping:
      hostsV4:
          - www.frogment.com
          - 52.84.205.24
      hostsV6:
          - ipv6.google.com

If both ping and api monitors are present then API data will overwrite ping data

Custom Thresholds

The below monitor will show DEGRADED if 3 or more degraded status in a day and DOWN if 2 or more down status in a day. It will also include degraded in downtime calculation.

- name: Earth
  description: Our blue planet
  tag: "earth"
  defaultStatus: "UP"
  dayDegradedMinimumCount: 3
  dayDownMinimumCount: 2
  includeDegradedInDowntime: true

Monitor with Alerts

Make sure you have set up triggers in server.yaml. Read more about alerts.

The below example will trigger an alert if the monitor is DOWN for 10 consecutive times. It will also create an incident in Github and send alerts to Webhook, Discord and Slack. It will also trigger an alert if the monitor is DEGRADED for 5 consecutive times. It will not create an incident in Github and send alerts to Webhook, Discord and Slack.

- name: Earth
  description: Our blue planet
  tag: "earth"
  defaultStatus: "UP"
  includeDegradedInDowntime: true
  alerts:
      DOWN:
          failureThreshold: 10
          successThreshold: 5
          createIncident: true
          description: "🚨 So much panic in the world and kener tells you about it"
          triggers:
              - Webhook MyWebhook
              - Discord Test
              - Slack Test
      DEGRADED:
          failureThreshold: 5
          successThreshold: 2
          createIncident: false
          description: "⚠️ To degrade is human, to alert is kener"
          triggers:
              - Webhook MyWebhook
              - Discord Test
              - Slack Test