Configuration files (GitOps)
Questi contenuti non sono ancora disponibili nella tua lingua.
Describe your monitors, alert rules, notification channels, maintenance windows and status pages in YAML, keep the files in Git, and let DumbMonit converge to them. Three ways to use the same format:
- the web interface: Settings → System → Configuration files exports the instance, shows the plan of a file and applies it;
dumbmonit-cli:planandapplyfrom a terminal or a CI pipeline;- a watched folder:
DUMBMONIT_CONFIG_DIRis applied at startup and on every change, which suits a Git checkout mounted into the container.
A Terraform provider manages the same objects one by one through the REST API.
The file
Section titled “The file”version: 1
channels: - name: Phone kind: ntfy enabled: true settings: { server: "https://ntfy.sh", topic: homelab-alerts } secrets: { token: "${NTFY_TOKEN}" }
targets: - kind: http address: https://example.org name: Website interval_secs: 60 enabled: true group_name: Web # the folder shown on the Monitors page tags: { env: prod } - kind: snmp address: 10.0.0.2 name: Core switch interval_secs: 60 enabled: true parent: "http|https://example.org" # a reference: kind|address credential: { type: snmp_community, community: "${file:/run/secrets/snmp}" }
rules: - uid: website-slow name: Website is slow kind: threshold query: dumbmonit_probe_duration_seconds operator: ">" threshold: 2 for_secs: 300 severity: warning selector: { kind: refs, refs: ["http|https://example.org"] } channels: [Phone] # by channel name
rule_overrides: - rule_uid: cpu_high # a built-in rule target: "snmp|10.0.0.2" threshold: 95
silences: - name: Night backups schedule: { kind: weekly, days: [6], start_minute: 120, end_minute: 240, timezone: Europe/Paris } enabled: true
status_pages: - slug: home title: Home lab published: true theme: default show_uptime_days: 90 items: - { target: "http|https://example.org", label: Website }The sections are those of the backup bundle, with the
same keys and the same references, so GET /api/config/export shows every
field. Objects are found by their natural key and never by an internal id: a
monitor by kind + address, a rule by uid, a channel by name, a status
page by slug, a maintenance window by name (plus its monitor, if it has
one). The file is therefore portable from one instance to another.
Not covered by files: users and tokens, incidents, agent enrolment, the world
map, packs. Monitors created by Docker labels or found by an
agent are not exported, and a file cannot declare them. Built-in rules are not
declared either: change them with rule_overrides. The password of a private
status page is set in the interface and kept when a file is applied.
Secrets
Section titled “Secrets”A file never holds a secret. Wherever one is needed (credential of a monitor,
secrets of a channel) write a reference:
| Reference | Meaning |
|---|---|
${NAME} | the environment variable NAME |
${file:/path} | the content of a file, trailing newline removed (Docker or Kubernetes secrets); a relative path starts from the folder of the YAML file |
References are resolved where the secret lives: by dumbmonit-cli on your
machine, or by the server for the watched folder. The API itself refuses a
reference that is still there, so an administrator cannot make the server read
its own environment. The export replaces every secret with a reference such as
${DUMBMONIT_CHANNEL_PHONE_TOKEN} and lists the variables to define at the top
of the file.
Managed by file
Section titled “Managed by file”Whatever a file declares is marked Managed by file: a badge in the lists, and the API (and so the interface) refuses to edit or delete it by hand, because the next apply would silently overwrite the change. A monitor can be paused. To take control back:
- change the file and apply it again (the normal way);
- or Settings → System → Configuration files → Release
(
POST /api/config/release): every object becomes editable again, nothing is deleted, and the next apply adopts the declared ones again.
An existing object that a file declares is adopted: it appears in the plan as an
update with managed_by_file.
Plan and apply
Section titled “Plan and apply”POST /api/config/plan returns what would be created, updated or deleted,
naming the fields that differ (never their values) and changing nothing.
POST /api/config/apply does it in one transaction: a reference to a
missing monitor, a value the database refuses, anything, and nothing is
written.
Prune. By default nothing is ever deleted. With prune, objects that a file
manages and that the file no longer declares are deleted. Objects created by
hand are never touched, whatever the option.
dumbmonit-cli login --url https://monit.example.org # asks for an admin API tokendumbmonit-cli plan config/ --check # exit status 2 if anything would changedumbmonit-cli apply config/ --prunedumbmonit-cli export -o current.yamlA directory argument applies every .yaml / .yml file in it as one document.
Both commands accept --json.
The command-line tool
Section titled “The command-line tool”dumbmonit-cli is a single binary with no runtime dependency. Build it from the
repository (cargo build --release -p dumbmonit-cli).
| Command | What it does |
|---|---|
login --url URL [--token T] | checks the connection and stores the address and the token in ~/.config/dumbmonit/cli.json (mode 600). DUMBMONIT_URL and DUMBMONIT_TOKEN work too |
export [-o FILE] | writes the instance as a file |
plan FILE|DIR... [--prune] [--check] | shows the plan |
apply FILE|DIR... [--prune] | applies the files |
targets list | lists the monitors |
silence create --name N --duration 2h [--target-id ID] [--match k=v] [--comment C] | opens a maintenance window starting now |
The token must be an administrator’s, with the write scope (Settings → API
tokens). Every command takes --json for scripts.
Watched folder
Section titled “Watched folder”services: dumbmonit: environment: DUMBMONIT_CONFIG_DIR: /config NTFY_TOKEN_FILE: /run/secrets/ntfy volumes: - ./dumbmonit-config:/config:roEvery .yaml / .yml file of the folder forms one document. It is applied with
prune at startup and every time a file changes (the folder is re-read every
five seconds, so a network volume or a Kubernetes mount works). A folder without
any YAML file applies nothing: a missing mount must not delete what the files
managed. The last result, or the last error, is shown in the settings section.
References in a watched folder use the server’s environment and files.
Reference
Section titled “Reference”| Route | Purpose |
|---|---|
POST /api/config/plan | the plan of { "yaml": "...", "prune": false } (or "config": {...} as JSON) |
POST /api/config/apply | applies it |
GET /api/config/export | the instance as YAML (?format=json for the document and the variables) |
GET /api/config/status | watched folder and managed objects |
POST /api/config/release | hands everything back to manual editing |
Administrators only (session or write token). See the
API reference.