# Glassmkr
> Bare-metal infrastructure monitoring. $3 per node per month, 3 free nodes. Self-hosted AI assistant (Furnace) for alert remediation. MIT-licensed Crucible agent on npm.
For the complete public documentation in a single file optimized for LLM consumption, see /llms-full.txt. Every page on glassmkr.com is also served as clean Markdown by appending .md to its URL (e.g. /vs/datadog.md, /pricing.md, homepage at /index.md); each page's HTML head also carries a . Fetch the .md instead of scraping HTML. The whole site is server-rendered, so it also works without JavaScript.
## Quick reference
- Homepage: https://glassmkr.com
- Documentation: https://glassmkr.com/docs
- Per-rule pages: https://glassmkr.com/docs/rules
- Pricing: https://glassmkr.com/pricing
- Trust + security: https://glassmkr.com/trust
- Verticals: https://glassmkr.com/for-sre, https://glassmkr.com/for-self-hosted, https://glassmkr.com/for-gpu
- Comparison pages: https://glassmkr.com/vs/datadog, /vs/prometheus, /vs/netdata, /vs/checkmk, /vs/zabbix, /vs/librenms, /vs/cloudwatch, /vs/newrelic
- Agent source (MIT): https://github.com/glassmkr/crucible
- npm package: https://www.npmjs.com/package/@glassmkr/crucible
- Current Crucible version: 0.13.24
## Documentation pages (Markdown)
Each guide page is served as clean Markdown at its URL with a .md suffix. Fetch these directly instead of scraping HTML (or get everything in one file via /llms-full.txt):
- https://glassmkr.com/docs/getting-started.md (Getting started)
- https://glassmkr.com/docs/programmatic-api.md (Programmatic API + account API keys)
- https://glassmkr.com/docs/automated-onboarding.md (Automated fleet onboarding)
- https://glassmkr.com/docs/api.md (API reference)
- https://glassmkr.com/docs/api/tier-gating.md (API tier gating)
- https://glassmkr.com/docs/configuration.md (Configuration reference)
- https://glassmkr.com/docs/channels.md (Notification channels)
- https://glassmkr.com/docs/troubleshooting.md (Troubleshooting)
- https://glassmkr.com/docs/troubleshooting/ipmi.md (IPMI troubleshooting)
- https://glassmkr.com/docs/faq.md (Frequently asked questions)
- https://glassmkr.com/docs/changelog.md (Changelog)
## Marketing pages (Markdown)
Every marketing page also has a .md twin (append .md to any URL). The most useful:
- https://glassmkr.com/index.md (homepage)
- https://glassmkr.com/pricing.md
- https://glassmkr.com/trust.md
- https://glassmkr.com/for-sre.md, https://glassmkr.com/for-self-hosted.md, https://glassmkr.com/for-gpu.md
- https://glassmkr.com/vs.md and each comparison, e.g. https://glassmkr.com/vs/datadog.md
- Blog posts: append .md to any /blog/ URL
## Quick Start
Two ways to onboard a server. Both end with the Crucible agent pushing 60s health snapshots. The default snapshot interval is 60 seconds.
### Onboard via API (automation, fleets) - fully programmatic, no dashboard clicks
Requires a write-scoped account key (prefix gmk_acct_live_). The programmatic API is available on every plan, bounded only by the node quota (3 on Free) and rate limits.
```
# 1. Mint a write-scoped account key (one-time; needs a logged-in dashboard
# session cookie + a recent password re-auth for the 5-minute step-up window).
curl -X POST https://app.glassmkr.com/api/v1/account/verify-password -b session.cookie \
-H "Content-Type: application/json" -d '{"password":"your-dashboard-password"}'
curl -X POST https://app.glassmkr.com/api/v1/account/keys -b session.cookie \
-H "Content-Type: application/json" -d '{"name":"automation","scope":"write"}'
# -> response carries the account key under .api_key (prefix gmk_acct_live_, shown once)
ACCT_KEY=""
# 2. Create each server with the account key. The per-server collector key comes
# back under .server.api_key (prefix gmk_cru_live_, shown once). Body optional.
curl -X POST https://app.glassmkr.com/api/v1/servers \
-H "Authorization: Bearer $ACCT_KEY" -H "Content-Type: application/json" \
-H "Idempotency-Key: onboard-web-01" \
-d '{"hostname":"web-01.example.com","tags":["prod"]}'
# -> .server.api_key holds the collector key; .ingest_url holds the push endpoint
# 3. Install the agent on the host with that collector key.
COLLECTOR_KEY=""
curl -sf https://glassmkr.com/install.sh | sudo GLASSMKR_API_KEY="$COLLECTOR_KEY" bash
# or: sudo npm install -g @glassmkr/crucible && sudo glassmkr-crucible init --api-key "$COLLECTOR_KEY"
```
Full guide with a 50-server loop: https://glassmkr.com/docs/programmatic-api
Even simpler for host-run automation (Ansible, cloud-init, post-install): the `glassmkr-crucible enroll --account-key ` subcommand (Crucible 0.13.21+) does steps 2 and 3 in a single command on the host itself. Bake one write-scoped account key into your automation; each host self-registers keyed by a stable machine ID (DMI product UUID, else /etc/machine-id), receives its own collector key, and starts reporting. Re-runs and re-images map back to the same server instead of duplicating it, and the account key is used for the one registration call and never written to disk. Guide with Ansible + cloud-init examples: https://glassmkr.com/docs/automated-onboarding
### Onboard via dashboard (single server)
Sign up at https://app.glassmkr.com/register, click + Add Server to get a collector key, then install the agent as in step 3 above. The key goes in /etc/glassmkr/crucible.yaml under dashboard.api_key (legacy installs: /etc/glassmkr/collector.yaml; the agent reads either).
## API Reference
Base URL: https://app.glassmkr.com/api/v1
Authentication: Bearer token. Account API key gmk_acct_live_xxx (scope read|write|admin; the programmatic API is on every plan, bounded by the node quota + rate limits). Crucible ingest key gmk_cru_live_xxx (per-server, returned by POST /servers, used only against /ingest).
### Server Management
- POST /servers; create a server, returns a fresh per-server collector key in .server.api_key (gmk_cru_live_, shown once) plus ingest_url. Requires an account key with write scope. Accepts an Idempotency-Key header (24h replay). Body (all optional): {hostname, name, tags}
- GET /servers; list all servers for authenticated customer
- GET /servers/:id; server details
- DELETE /servers/:id; remove server
- POST /servers/:id/rotate-key; issue a new collector key for a server (old key is invalidated)
- GET /servers/:id/health; latest snapshot with active alerts
- GET /servers/:id/alerts?status=active|all; alerts (active only or full history)
- GET /servers/:id/metrics?hours=24; time-series data for charts
- GET /servers/:id/history?hours=24; raw snapshot history
### Account + API keys (session auth; minting a key needs a recent password re-auth)
- POST /account/verify-password; step-up re-auth, opens a 5-minute window for key creation/rotation
- POST /account/keys; create an account API key (scope read|write|admin, default write; write is required to create servers)
- GET /account/keys; list account keys (metadata only, never plaintext)
- POST /account/keys/:id/rotate; rotate an account key
- GET /account/audit; append-only audit log, paginated by ts cursor
### Alert Management
- POST /alerts/:id/acknowledge; acknowledge an active alert
- GET /servers/:id/mutes; list muted rules for a server
- POST /servers/:id/mutes; mute a rule
- DELETE /servers/:id/mutes; unmute a rule
### Notification Channels
- GET /channels; list channels
- POST /channels; create channel
- PUT /channels/:id; update channel
- DELETE /channels/:id; delete channel
## Rule library
Glassmkr ships 68 alert rules tuned for bare-metal failure modes. Categories:
- Storage: drive SMART degradation, RAID state, NVMe wear, NVMe Critical Warning, I/O errors, latency
- ZFS: pool health, scrub errors, SLOG faulted
- Filesystem: capacity, projection, inodes, read-only mounts, fd exhaustion, LVM thin metadata
- Memory & CPU: utilisation, swap, OOM kills, load, iowait, PSI pressure
- Network: bonding/LACP, interface errors, saturation, link speed, conntrack, retrans, listen overflow, syn flood, softnet drops
- Hardware (BMC/IPMI): CPU temperature, ECC, MCE, PSU redundancy, SEL events, fan failure
- GPU: XID, ECC, thermal, NVLink, PCIe degradation, driver drift, power cap throttling (NVIDIA, Crucible v0.13.0+)
- Time & Services: clock drift, NTP, systemd service state, service flapping, unexpected reboot
- Security & Patching: SSH root, firewall, pending updates, kernel vulnerabilities, reboot pending, unattended-upgrades, server unreachable
Each rule has a public catalog entry at /docs/rules/ with title, summary, and priority. Per-alert remediation guidance (command, prerequisites, validation, rollback) is rendered inside the dashboard at https://app.glassmkr.com on the alert detail page.