DOCS / CONFIGURATION
Configuration reference
The Crucible agent reads /etc/glassmkr/crucible.yaml (legacy installs may have it at /etc/glassmkr/collector.yaml; the agent reads either, preferring the new name). This page documents every option the current agent accepts; the authoritative schema lives in the agent source at src/config.ts.
After editing the configuration, restart the service:
sudo systemctl restart glassmkr-crucible Configuration is validated at startup. An out-of-range value (for example an interval below the one-minute minimum) is rejected with a message naming the field; see validation behavior for how the agent treats typos and detection-disabling values.
#Full example
A complete file with every option at its default value (except dashboard, shown enabled with a key, which is what init writes). You only need to include the fields you want to change.
server_name: "my-server"
collection:
interval_seconds: 300
ipmi: true
enforce_ipmitool_min_version: false
smart: true
thermal: true
dmi: true
dashboard:
enabled: true
url: "https://app.glassmkr.com"
api_key: "gmk_cru_live_your_key_here"
tls_pin: ""
allow_insecure_endpoint: false
allowed_origins: []
thresholds:
ram_percent: 90
swap_alert: true
disk_percent: 85
iowait_percent: 20
nvme_wear_percent: 85
disk_latency_nvme_ms: 50
disk_latency_hdd_ms: 200
cpu_temp_warning_c: 80
cpu_temp_critical_c: 90
interface_utilization_percent: 90
acknowledge_disabled_detection: false
channels:
telegram:
enabled: false
bot_token: ""
chat_id: ""
email:
enabled: false
to: ""
slack:
enabled: false
webhook_url: ""
prometheus:
enabled: false
address: "127.0.0.1"
port: 9101#Validation behavior
Three behaviors are worth knowing before you edit:
- Out-of-range values fail at startup with a message naming the field, so a bad edit cannot run silently.
- Unknown keys under
collection:produce a startup warning naming the key instead of an error. A typo likeenforce_ipmitool_min_versions(plural) would otherwise silently leave the real setting at its default; the warning names the near-miss, and the agent keeps running, because an agent that refuses to start takes monitoring down with it. - Thresholds pushed to their limits count as disabled detection. A percent threshold at 100, or a latency threshold above 10,000 ms, effectively turns that detection off. The agent warns and flags the snapshot unless you set
thresholds.acknowledge_disabled_detection: trueto state that this is intentional.
#server_name
| Key | Type | Default | Description |
|---|---|---|---|
server_name | string | unnamed-server | Display name for this server in the Dashboard. init writes the system hostname here. |
#collection
What is collected and how often. Collectors not listed here (RAID, ZFS, GPU, network, security posture, and the rest) run automatically and skip themselves on hosts where their subsystem is absent; they have no config switches.
| Key | Type | Default | Description |
|---|---|---|---|
interval_seconds | int | 300 | Snapshot interval in seconds. Minimum 60, maximum 3600; a value outside the bounds is rejected at startup. |
ipmi | bool | true | Collect IPMI sensors, SEL events, and PSU state. Requires ipmitool and a BMC; skipped cleanly where absent. |
enforce_ipmitool_min_version | bool | false | Refuse IPMI collection when ipmitool -V reads below 1.8.19 (CVE-2020-5208). Off by default because the version check cannot see distro backports, so on stock Ubuntu 20.04/22.04 and RHEL-family 9 it fires on suspicion and silently disables BMC monitoring. Turn it on if you model BMC compromise. |
smart | bool | true | Collect SMART health from disks. Requires smartmontools; skipped cleanly where absent. |
thermal | bool | true | Collect temperature readings (hwmon, with IPMI as an additional source). |
dmi | bool | true | Collect DMI hardware identity (vendor, board, BIOS) for the server detail page. |
#dashboard
Connection settings for the Dashboard API, hosted or self-hosted.
| Key | Type | Default | Description |
|---|---|---|---|
enabled | boolean | false | Enable pushing snapshots to the Dashboard. init writes true. |
url | string | https://app.glassmkr.com | Dashboard base URL. Self-hosted instances point this at their own origin. Validated at startup: HTTPS is required unless the endpoint qualifies under allow_insecure_endpoint or allowed_origins. |
api_key | string | required | Per-server collector key (gmk_cru_live_xxx; older agents may still have col_xxx). Issued once when the server is enrolled; rotate via POST /api/v1/servers/{id}/rotate-key or the dashboard. |
tls_pin | string | "" | Optional SPKI pin for the dashboard endpoint's certificate. When set, connections to an endpoint whose key does not match are refused. |
allow_insecure_endpoint | bool | false | Permit a plain-HTTP dashboard URL. Meant for self-hosted lab setups; never use it across a network you do not control. |
allowed_origins | list | [] | Additional origins accepted by the endpoint validator beyond the default rules, for self-hosted deployments with unusual addressing. |
#thresholds
Agent-side detection thresholds. Percent thresholds accept 1 to 100. Rule behavior beyond these knobs (severities, evidence, remediation) is documented per rule in the alert rules catalog; rules can also be muted per server from the Dashboard.
| Key | Type | Default | Description |
|---|---|---|---|
ram_percent | number | 90 | RAM usage percent above which memory pressure is flagged. |
swap_alert | bool | true | Flag active swapping. |
disk_percent | number | 85 | Filesystem usage percent above which disk space is flagged. |
iowait_percent | number | 20 | CPU iowait percent above which I/O wait is flagged. |
nvme_wear_percent | number | 85 | NVMe percentage-used above which wear is flagged. |
disk_latency_nvme_ms | number | 50 | NVMe latency in milliseconds above which latency is flagged. |
disk_latency_hdd_ms | number | 200 | HDD/SATA latency in milliseconds above which latency is flagged. |
cpu_temp_warning_c | number | 80 | CPU temperature warning threshold, Celsius. Must be below the critical threshold. |
cpu_temp_critical_c | number | 90 | CPU temperature critical threshold, Celsius. |
interface_utilization_percent | number | 90 | Interface utilization percent above which saturation is flagged. |
acknowledge_disabled_detection | bool | false | Acknowledge that thresholds set to their limits intentionally disable detection; silences the startup warning and the snapshot flag. |
#channels
Agent-side notification channels for standalone operation. When the agent reports to a Dashboard, notification routing normally lives there (six channel types, per-priority routing); these agent-side channels exist so a standalone agent can still page someone.
channels.telegram
| Key | Type | Default | Description |
|---|---|---|---|
enabled | bool | false | Send agent-side alerts to Telegram. |
bot_token | string | "" | Bot token from @BotFather. |
chat_id | string | "" | Target chat id. |
channels.email
| Key | Type | Default | Description |
|---|---|---|---|
enabled | bool | false | Send agent-side alerts by email (requires a local MTA). |
to | string | "" | Recipient address. |
channels.slack
| Key | Type | Default | Description |
|---|---|---|---|
enabled | bool | false | Send agent-side alerts to a Slack webhook. |
webhook_url | string | "" | Incoming webhook URL. |
#prometheus
An optional local metrics listener. Off by default: with it off, the agent opens no inbound ports at all.
| Key | Type | Default | Description |
|---|---|---|---|
enabled | bool | false | Serve Prometheus metrics from the agent. |
address | string | 127.0.0.1 | Listen address. Loopback by default; widen deliberately. |
port | int | 9101 | Listen port, 1 to 65535. |
#Environment variables
The running agent is configured by crucible.yaml only; it does not read configuration overrides from the environment. Two variables exist around the edges of the install flow:
GLASSMKR_API_KEY: read by the install script as an alternative to passing--api-key(curl -sf https://glassmkr.com/install.sh | sudo GLASSMKR_API_KEY=... bash). The script hands it toglassmkr-crucible init, which writes it intocrucible.yaml; the agent then reads the file.GLASSMKR_UBUNTU_PRO_TOKEN: optional; read by the agent's CVE collector to query the Ubuntu Pro security feed.
Last verified: 2026-08-29 against the Crucible v1.1.0 config schema (src/config.ts).