View as Markdown

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 like enforce_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: true to state that this is intentional.

#server_name

KeyTypeDefaultDescription
server_namestringunnamed-serverDisplay 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.

KeyTypeDefaultDescription
interval_secondsint300Snapshot interval in seconds. Minimum 60, maximum 3600; a value outside the bounds is rejected at startup.
ipmibooltrueCollect IPMI sensors, SEL events, and PSU state. Requires ipmitool and a BMC; skipped cleanly where absent.
enforce_ipmitool_min_versionboolfalseRefuse 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.
smartbooltrueCollect SMART health from disks. Requires smartmontools; skipped cleanly where absent.
thermalbooltrueCollect temperature readings (hwmon, with IPMI as an additional source).
dmibooltrueCollect DMI hardware identity (vendor, board, BIOS) for the server detail page.

#dashboard

Connection settings for the Dashboard API, hosted or self-hosted.

KeyTypeDefaultDescription
enabledbooleanfalseEnable pushing snapshots to the Dashboard. init writes true.
urlstringhttps://app.glassmkr.comDashboard 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_keystringrequiredPer-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_pinstring""Optional SPKI pin for the dashboard endpoint's certificate. When set, connections to an endpoint whose key does not match are refused.
allow_insecure_endpointboolfalsePermit a plain-HTTP dashboard URL. Meant for self-hosted lab setups; never use it across a network you do not control.
allowed_originslist[]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.

KeyTypeDefaultDescription
ram_percentnumber90RAM usage percent above which memory pressure is flagged.
swap_alertbooltrueFlag active swapping.
disk_percentnumber85Filesystem usage percent above which disk space is flagged.
iowait_percentnumber20CPU iowait percent above which I/O wait is flagged.
nvme_wear_percentnumber85NVMe percentage-used above which wear is flagged.
disk_latency_nvme_msnumber50NVMe latency in milliseconds above which latency is flagged.
disk_latency_hdd_msnumber200HDD/SATA latency in milliseconds above which latency is flagged.
cpu_temp_warning_cnumber80CPU temperature warning threshold, Celsius. Must be below the critical threshold.
cpu_temp_critical_cnumber90CPU temperature critical threshold, Celsius.
interface_utilization_percentnumber90Interface utilization percent above which saturation is flagged.
acknowledge_disabled_detectionboolfalseAcknowledge 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

KeyTypeDefaultDescription
enabledboolfalseSend agent-side alerts to Telegram.
bot_tokenstring""Bot token from @BotFather.
chat_idstring""Target chat id.

channels.email

KeyTypeDefaultDescription
enabledboolfalseSend agent-side alerts by email (requires a local MTA).
tostring""Recipient address.

channels.slack

KeyTypeDefaultDescription
enabledboolfalseSend agent-side alerts to a Slack webhook.
webhook_urlstring""Incoming webhook URL.

#prometheus

An optional local metrics listener. Off by default: with it off, the agent opens no inbound ports at all.

KeyTypeDefaultDescription
enabledboolfalseServe Prometheus metrics from the agent.
addressstring127.0.0.1Listen address. Loopback by default; widen deliberately.
portint9101Listen 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 to glassmkr-crucible init, which writes it into crucible.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).