diff options
| author | Paul Buetow <paul@buetow.org> | 2026-01-07 10:26:50 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-01-07 10:26:50 +0200 |
| commit | 3ff6f0a5737a116f977a289c889d2894ec5d9a1a (patch) | |
| tree | c5cb311b247400571611a76d8cc740cfae27cc4f | |
| parent | f1f8162d6f3003553b8c8639d9b7c78ab4dbe235 (diff) | |
Update AGENT.md with gogios monitoring configuration patterns
Document how gogios.json.tpl handles server-specific vs service domain checks:
- Dedicated bare hostname checks for server FQDNs
- Service domain checks with all prefix variants
- Why server hostnames must be skipped in @acme_hosts loop
- Impact of not skipping: 12 false critical alerts
Explains the same skip pattern used across httpd.conf.tpl, relayd.conf.tpl,
and gogios.json.tpl for consistent handling of server-specific hostnames.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
| -rw-r--r-- | frontends/AGENT.md | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/frontends/AGENT.md b/frontends/AGENT.md index 6f133b2..d989eca 100644 --- a/frontends/AGENT.md +++ b/frontends/AGENT.md @@ -189,14 +189,55 @@ Process: ## Monitoring System (Gogios) +### Configuration - Runs as user `_gogios` -- Config: `/etc/gogios.json` +- Config: `/etc/gogios.json` (generated from `etc/gogios.json.tpl`) - Output: `/var/www/htdocs/buetow.org/self/gogios/index.html` +- State: `/var/run/gogios/state.json` - Cron schedule: Every 5 minutes between 08:00-22:00 - Check intervals: Independent from cron (e.g., TLS checks every 3600s) **Important**: Check intervals (`RunInterval`) are independent from cron schedule. A check with 3600s interval won't re-run just because cron triggered, it runs only when interval expires. +### Template Pattern (gogios.json.tpl) + +**Dedicated server checks (lines 29-46)**: Bare hostnames only +```perl +<% for my $host (qw(fishfinger blowfish)) { -%> +"Check TLS Certificate <%= $host %>.buetow.org": { ... } +``` + +Creates checks for: +- `fishfinger.buetow.org` (bare hostname) +- `blowfish.buetow.org` (bare hostname) + +**Service domain checks (lines 47-66)**: All prefix variants +```perl +<% for my $host (@$acme_hosts) { + # Skip server hostnames - they have dedicated checks above without www/standby variants + next if $host eq 'blowfish.buetow.org' or $host eq 'fishfinger.buetow.org'; -%> +<% for my $prefix ('', 'standby.', 'www.') { -%> +``` + +Creates checks for: +- `foo.zone`, `standby.foo.zone`, `www.foo.zone` (all variants) +- **NOT** `www.blowfish.buetow.org`, `standby.blowfish.buetow.org` (no DNS records) + +### Why Skip Server Hostnames + +Server FQDNs like blowfish.buetow.org and fishfinger.buetow.org: +- Don't have DNS records for www/standby prefixes +- Already monitored via dedicated checks without prefixes +- Including them in `@acme_hosts` loop creates false alerts + +Without the skip, gogios generates checks for non-existent: +- `www.blowfish.buetow.org` → DNS failure +- `standby.blowfish.buetow.org` → DNS failure +- `www.fishfinger.buetow.org` → DNS failure +- `standby.fishfinger.buetow.org` → DNS failure + +Result: 12 false CRITICAL alerts (3 checks × 4 hostnames) + ## Configuration Testing Before deploying: |
