I
APM & Infrastructure

Infrastructure Monitoring

Hosts, containers, serverless, GPU — one heartbeat endpoint.

How it works

Hosts call `POST /v1/hosts/heartbeat` on a schedule (1 min default) with hostname, load, mem/cpu/gpu utilisation, kind (`host` / `container` / `serverless` / `gpu`), and tags. Funnel marks a host healthy if a heartbeat lands in the last 3× the interval; stale hosts auto-flip to `down` and an alert fires.

What this lets you do

  • Unified inventory across VMs, containers, Lambda, GPU pools
  • Auto-detected drift when a host stops checking in
  • Per-host metrics: CPU, mem, disk, network, GPU%, GPU-memory
  • Tags drive filtering — env, region, team, anything you want

Get it running

  1. 1 Cron a curl call to `/v1/hosts/heartbeat` from each box
  2. 2 Or use any OTel host metrics receiver pointed at `/v1/metrics`
  3. 3 Open `Hosts & agents` to see the inventory

Code examples

# /etc/cron.d/funnel-heartbeat — runs every minute
* * * * * root /usr/local/bin/funnel-heartbeat.sh

# /usr/local/bin/funnel-heartbeat.sh
#!/usr/bin/env bash
curl -sS -X POST https://funnel.example.com/v1/hosts/heartbeat \
  -H "Authorization: Bearer st_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"hostname\": \"$(hostname)\",
    \"kind\":     \"host\",
    \"load\":     $(awk '{print $1}' /proc/loadavg),
    \"mem_used_pct\": $(free | awk '/Mem:/{printf \"%.1f\",$3/$2*100}')
  }"
Where to find it
/app/p/:org/:project/hosts
Open in app →