i like kuma. simple, flexibel, selfhosted, and open source. one thing i missed is an API for adding / modifing hosted services.
now, i found a webapi for kuma and gave a try.
pre-condition
- you have some Maschine with Docker
- you have traefik running, which can terminate TLS, handle Loadbalancing
docker-compose.yml
version: '3.3'
networks:
traefik:
external: true
volumes:
uptime-kuma:
api-db:
services:
kuma:
container_name: uptime-kuma
image: louislam/uptime-kuma:1.19.6
restart: always
volumes:
- uptime-kuma:/app/data
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.kuma.rule=Host(`kuma.your.domain`)"
- "traefik.http.routers.kuma.tls=true"
api:
container_name: backend
image: medaziz11/uptimekuma_restapi:latest
restart: always
volumes:
- ./db:/db:rwx
environment:
- KUMA_SERVER=${KUMA_SERVER:-http://kuma:3001}
- KUMA_USERNAME=xxxxxx
- KUMA_PASSWORD=xxxxxx
- ADMIN_PASSWORD=xxxxxx
- SECRET_KEY=${SECRET_KEY:-xxxxxx}
depends_on:
- kuma
networks:
- traefik
Get Token
# API
token=$(http --form POST 127.0.0.1:8001/login/access-token 'username=xxxxxx' 'password=xxxxxx' |jq '.access_token')
List Monitors
$ http -A bearer -a $token 127.0.0.1:8001/monitors
HTTP/1.1 200 OK
content-length: 15
content-type: application/json
date: Mon, 17 Apr 2023 04:48:59 GMT
server: uvicorn
{
"monitors": []
}
Add Service
$ http -A bearer -a $token 127.0.0.1:8001/monitors type=http name=compass url=https://www.compass-security.com
HTTP/1.1 200 OK
content-length: 43
content-type: application/json
date: Mon, 17 Apr 2023 05:07:02 GMT
server: uvicorn
{
"monitorID": 5,
"msg": "Added Successfully."
}
Check Monitoring
$ http -A bearer -a $token 127.0.0.1:8001/monitors |jq '.monitors |map({id, name, url, active, interval})'
[
{
"id": 1,
"name": "https://www.stoege.net",
"url": "https://www.stoege.net",
"active": true,
"interval": 60
},
... snip ...
{
"id": 5,
"name": "compass",
"url": "https://www.compass-security.com",
"active": true,
"interval": 60
}
]
that’s great !