A Kubernetes operator that creates UptimeRobot monitors for your ingresses

Overview

uptimerobot-operator

This operator automatically creates uptime monitors at UptimeRobot for your Kubernetes Ingress resources. This allows you to easily integrate uptime monitoring of your services into your Kubernetes deployments.

⚠️ This project is still in an early phase. Use it on your own risk but make sure to create issues for issues you encounter.

❤️ to UptimeRobot for providing a pro account to be able to test the pro plan features!

Usage

After installing the uptimerobot-operator it'll watch for Ingress resources in your Kubernetes cluster. For example after creating the following Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    uroperator.brennerm.github.io/monitor.type: HTTPS
    uroperator.brennerm.github.io/monitor.interval: "600"
spec:
  rules:
  - host: brennerm.github.io
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: service1
            port:
              number: 80

a new monitor for the URL https://brennerm.github.io is automatically being created in your UptimeRobot account.

The same monitor can also be created using the UptimeRobotMonitor resource like so:

apiVersion: uroperator.brennerm.github.io/v1beta1
kind: UptimeRobotMonitor
metadata:
  name: my-custom-monitor
spec:
  url: "https://brennerm.github.io"
  type: HTTPS
  interval: 600

The operator also supports creating public status pages. See below for details.

Installation

Create an UptimeRobot API key

  1. Create an or login to your UptimeRobot account (no credit card required and they provide up to 50 monitors for free)
  2. Go to "My Settings"
  3. Generate and save "Main API Key" (the other API keys do not provide sufficient permissions to create, update and delete monitors)

Deploying to Kubernetes using Helm

  1. Add the uptimerobot-operator chart repo helm repo add uptimerobot-operator https://brennerm.github.io/uptimerobot-operator/helm
  2. Deploy the Helm chart helm upgrade --install uptimerobot-operator uptimerobot-operator --set uptimeRobotApiKey=$MY_UPTIMEROBOT_API_KEY

Have a look at the values file if you want to customize the deployment.

Running local

ℹ️ The following commands will make the operator work with your currently selected Kubernetes cluster (kubectl config current-context).

  1. Install all dependencies pipenv install
  2. Set UptimeRobot API key export UPTIMEROBOT_API_KEY=$MY_UPTIMEROBOT_API_KEY
  3. Start operator kopf run --standalone ur_operator/handlers.py

Running in self-built Docker

  1. Build Docker image docker build -t uptimerobot-operator .
  2. Start container docker run -e UPTIMEROBOT_API_KEY=$MY_UPTIMEROBOT_API_KEY -v ~/.kube:/home/ur_operator/.kube uptimerobot-operator

Running in pre-built Docker

  1. Start container docker run -e UPTIMEROBOT_API_KEY=$MY_UPTIMEROBOT_API_KEY -v ~/.kube:/home/ur_operator/.kube ghcr.io/brennerm/uptimerobot-operator:latest

Documentation

UptimeRobotMonitor

The UptimeRobotMonitor resource supports all current parameters for monitors that UptimeRobot offers. Below you can find a list that contains all of them.

key type description
url (required) string URL that will be monitored
type (required) string Type of monitor, one of: HTTP,HTTPS,KEYWORD,PING,PORT,HEARTBEAT
friendlyName string Friendly name of monitor, defaults to name of UptimeRobotMonitor object
subType string Subtype of monitor, one of: HTTP,HTTPS,KEYWORD,PING,PORT,HEARTBEAT
port integer Port to monitor when using monitor sub type PORT
keywordType string Keyword type when using monitor type KEYWORD, one of: EXISTS,NOT_EXISTS
keywordValue string Keyword value when using monitor type KEYWORD
interval integer The interval for the monitoring check (300 seconds by default)
httpUsername string Used for password protected pages when using monitor type HTTP,HTTP or KEYWORD, deprecated: use httpAuthSecret
httpPassword string Used for password protected pages when using monitor type HTTP,HTTP or KEYWORD, deprecated: use httpAuthSecret
httpAuthSecret string reference to a Kubernetes secret in the same namespace containing user and password for password protected pages when using monitor type HTTP,HTTPS or KEYWORD
httpAuthType string Used for password protected pages when using monitor type HTTP,HTTPS or KEYWORD, one of: BASIC_AUTH,DIGEST
httpMethod string The HTTP method to be used, one of: HEAD,GET,POST,PUT,PATCH,DELETE,OPTIONS
postType string The format of data to be sent with POST, PUT, PATCH, DELETE, OPTIONS requests
postContentType string The Content-Type header to be sent with POST, PUT, PATCH, DELETE, OPTIONS requests, one of: TEXT_HTML,APPLICATION_JSON
postValue object The data to be sent with POST, PUT, PATCH, DELETE, OPTIONS requests
customHttpHeaders object Custom HTTP headers to be sent along monitor request, formatted as JSON
customHttpStatuses string Allows to define HTTP status codes that will be handled as up or down, e.g. 404:0_200:1 to accept 404 as down and 200 as up
ignoreSslErrors boolean Flag to ignore SSL certificate related issues
alertContacts string Alert contacts to be notified when monitor goes up or down. For syntax check https://uptimerobot.com/api/#newMonitorWrap
mwindows string Maintenance window IDs for this monitor

Ingress

For Ingress resources the same parameters are supported. You pass them through annotations attached to your Ingress with the prefix uroperator.brennerm.github.io/monitor.. See below for an example.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    uroperator.brennerm.github.io/monitor.type: HTTPS
    uroperator.brennerm.github.io/monitor.interval: "600"
spec:
  rules:
...

To disable ingress handling completely pass the environment variable URO_DISABLE_INGRESS_HANDLING=1 to the operator.

Public Status Pages

The PublicStatusPage resource supports all current parameters for status pages that UptimeRobot offers. Below you can find a list that contains all of them.

key type description
monitors (required) string the list of monitor IDs to be displayed in status page (the values are seperated with "-" or 0 for all monitors)
friendlyName string Friendly name of public status page, defaults to name of PublicStatusPage object
customDomain string the domain or subdomain that the status page will run on
password string the password for the status page, deprecated: use passwordSecret
passwordSecret string reference to a Kubernetes secret in the same namespace containing the password for the status page
sort string the sorting of the monitors on the status page, one of: FRIENDLY_NAME_A_Z,FRIENDLY_NAME_Z_A,STATUS_UP_DOWN_PAUSED,STATUS_DOWN_UP_PAUSED
status string the status of the status page, one of: PAUSED,ACTIVE
hideUrlLinks boolean Flag to remove the UptimeRobot link from the status page (pro plan feature)
apiVersion: uroperator.brennerm.github.io/v1beta1
kind: PublicStatusPage
metadata:
  name: my-public-status-page
spec:
  monitors: "0" # will include all monitors

Maintenance Windows

The MaintenanceWindow resource supports all current parameters for maintenance windows that UptimeRobot offers. Below you can find a list that contains all of them.

key type description
type (required) string the type of maintenance window, one of: ONCE,DAILY,WEEKLY,MONTHLY
startTime (required) string the start time of the maintenance window, in seconds since epoch for type MaintenanceWindowType.ONCE, in HH:mm format for the other types
duration (required) number the number of seconds the maintenance window will be active
friendlyName string friendly name of the maintenance window, defaults to name of the MaintenanceWindow object
value string allows to specify the maintenance window selection, e.g. 2-4-5 for Tuesday-Thursday-Friday or 10-17-26 for the days of the month, only valid and required for MaintenanceWindowType.WEEKLY and MaintenanceWindowType.MONTHLY
apiVersion: uroperator.brennerm.github.io/v1beta1
kind: MaintenanceWindow
metadata:
  name: my-maintenance-window
spec:
  type: DAILY
  startTime: "10:00"
  duration: 30

Alert Contacts

The AlertContact resource supports all current parameters for alert contacts that UptimeRobot offers. Below you can find a list that contains all of them.

key type description
type (required) string the type of alert contact, one of: SMS,EMAIL,TWITTER_DM,BOXCAR,WEB_HOOK,PUSHBULLET,ZAPIER,PUSHOVER,HIPCHAT,SLACK
value (required) string the alert contact's mail address / phone number / URL / connection string
friendlyName string friendly name of the alert contact, defaults to name of the AlertContact object
apiVersion: uroperator.brennerm.github.io/v1beta1
kind: AlertContact
metadata:
  name: my-alert-contact
spec:
  type: EMAIL
  value: [email protected]

Planned features

  • provide a Helm chart to ease deployment ✔️
  • support all configuration parameters for Monitors that UptimeRobot offers ✔️
  • add support for creating Uptime Robot ✔️
    • alert contacts, ✔️
    • maintenance windows ✔️
    • public status pages using Kubernetes resources ✔️
  • implement automatic detection of HTTP path of Ingress resources
  • add an integration for external-dns to support creating monitors for Service resources
Owner
Max
Automate all the things!
Max
Rundeck / Grafana / Prometheus / Rundeck Exporter integration demo

Rundeck / Prometheus / Grafana integration demo via Rundeck Exporter This is a demo environment that shows how to monitor a Rundeck instance using Run

Reiner 4 Oct 14, 2022
Iris is a highly configurable and flexible service for paging and messaging.

Iris Iris core, API, UI and sender service. For third-party integration support, see iris-relay, a stateless proxy designed to sit at the edge of a pr

LinkedIn 715 Dec 28, 2022
ServerStatus 云探针、多服务器探针、云监控、多服务器云监控

ServerStatus 云探针、多服务器探针、云监控、多服务器云监控 基于ServerStatus-Hotaru膜改版的套娃膜改版(实际上本README也是抄它的)。 主要将client改为通过http提交数据,以及将服务端换成了php以便减小部署成本(PHP is the best!) 默认图片

shirakun 16 Apr 14, 2022
Let's learn how to build, release and operate your containerized applications to Amazon ECS and AWS Fargate using AWS Copilot.

🚀 Welcome to AWS Copilot Workshop In this workshop, you'll learn how to build, release and operate your containerised applications to Amazon ECS and

Donnie Prakoso 15 Jul 14, 2022
Tools and Docker images to make a fast Ruby on Rails development environment

Tools and Docker images to make a fast Ruby on Rails development environment. With the production templates, moving from development to production will be seamless.

1 Nov 13, 2022
Emissary - open source Kubernetes-native API gateway for microservices built on the Envoy Proxy

Emissary-ingress Emissary-Ingress is an open-source Kubernetes-native API Gateway + Layer 7 load balancer + Kubernetes Ingress built on Envoy Proxy. E

Emissary Ingress 4k Dec 31, 2022
Nagios status monitor for your desktop.

Nagstamon Nagstamon is a status monitor for the desktop. It connects to multiple Nagios, Icinga, Opsview, Centreon, Op5 Monitor/Ninja, Checkmk Multisi

Henri Wahl 361 Jan 05, 2023
Docker Container wallstreetbets-sentiment-analysis

Docker Container wallstreetbets-sentiment-analysis A docker container using restful endpoints exposed on port 5000 "/analyze" to gather sentiment anal

145 Nov 22, 2022
Dynamic DNS service

About nsupdate.info https://nsupdate.info is a free dynamic DNS service. nsupdate.info is also the name of the software used to implement it. If you l

nsupdate.info development 880 Jan 04, 2023
Manage your azure VM easily!

Azure-manager Manage your VM in Azure using cookies.

Team 1injex 129 Dec 17, 2022
Kube kombu - Running kombu consumers with support of liveness probe for kubernetes

Setup and Running Kombu consumers Steps: Install python 3.9 or greater on your s

Anmol Porwal 5 Dec 10, 2022
Kubediff: a tool for Kubernetes to show differences between running state and version controlled configuration.

Kubediff: a tool for Kubernetes to show differences between running state and version controlled configuration.

Weaveworks 1.1k Dec 30, 2022
Let's Git - Version Control & Open Source Homework

Let's Git - Version Control & Open Source Homework Welcome to this homework for our MOOC: Let's Git! We hope you will learn a lot and have fun working

1 Dec 05, 2021
Software to automate the management and configuration of any infrastructure or application at scale. Get access to the Salt software package repository here:

Latest Salt Documentation Open an issue (bug report, feature request, etc.) Salt is the world’s fastest, most intelligent and scalable automation engi

SaltStack 12.9k Jan 04, 2023
Containerize a python web application

containerize a python web application introduction this document is part of GDSC at the university of bahrain you don't need to follow along, fell fre

abdullah mosibah 1 Oct 19, 2021
A colony of interacting processes

NColony Infrastructure for running "colonies" of processes. Hacking $ tox Should DTRT -- if it passes, it means unit tests are passing, and 100% cover

23 Apr 04, 2022
A system for managing CI data for Mozilla projects

Treeherder Description Treeherder is a reporting dashboard for Mozilla checkins. It allows users to see the results of automatic builds and their resp

Mozilla 235 Dec 22, 2022
A curated list of awesome DataOps tools

Awesome DataOps A curated list of awesome DataOps tools. Awesome DataOps Data Catalog Data Exploration Data Ingestion Data Lake Data Processing Data Q

Kelvin S. do Prado 40 Dec 23, 2022
Convenient tool to manage multiple VMs at once using libvirt

Convenient tool to manage multiple VMs at once using libvirt Installing To install the tool and its dependencies: pip install -e . Getting completion

Cedric Bosdonnat 13 Nov 11, 2022
Cobbler is a versatile Linux deployment server

Cobbler Cobbler is a Linux installation server that allows for rapid setup of network installation environments. It glues together and automates many

Cobbler 2.4k Dec 24, 2022