Introduction
The Huntertech Probe is a lightweight Windows agent that runs HTTP checks from your network: office, home lab, customer site, or any host where you need the same vantage as users and apps. Results roll up to Huntertech Monitoring so you can chart latency, compare monitors, and backfill from edge storage when cloud gaps appear.
Policy lives in the cloud. The agent enrolls once, syncs which monitors it should run, executes checks locally, and uploads observations and health. It does not embed alert rules beyond the schedule intervals supplied in policy.
Requirements
- Plan: Pro, Enterprise, or VIP (probe agent access). Free and Standard do not include agents.
- Agent limits: Pro includes up to 2 active agents; Enterprise and VIP include up to 10. Revoked agents free a slot.
- Platform: Windows for production installs (per-user or all-users). Linux is supported for development via
npm run probe:run. - Network: Outbound HTTPS to Huntertech for enroll, policy sync, observations, health, logs, and updates.
Quick start
- Download
huntertech-probe-<version>-windows.zipfrom the probe overview or Account → Probes. - Extract the archive on the Windows host and run the installer (see Installation).
- In Account → Probes, click Generate pairing code and enter it on the host before it expires.
- Assign one or more HTTP monitors to that agent (Manage on the agent card).
- Open Account → Monitoring to confirm rollups and probe-assigned checks.
Installation
The default install matches common SaaS agents (Slack, Teams, VS Code user setup): binaries and updates under the user profile, started by a logon scheduled task, with no Administrator prompt.
# Per-user (default): no Administrator required
.\install.ps1
# All users / Program Files: elevated PowerShell
.\install.ps1 -AllUsers| Location / pattern | Purpose |
|---|---|
| %LOCALAPPDATA%\Huntertech\Probe | Binaries, updates, config.json (per-user default) |
| Logon scheduled task | Starts when the signed-in user logs on (no admin) |
| Program Files (install.ps1 -AllUsers) | IT / golden-image deployments from elevated PowerShell |
Secrets on disk
After enrollment, the agent stores its token in config.json beside the binary with restrictive permissions (mode 0600). Treat the install folder like any endpoint credential store.
Enrollment
Pairing codes are short-lived (about 15 minutes). Create them only while signed in to your Huntertech account. Each code is shown once; the server stores a hash. Successful enrollment returns an agent token (htp_live_*) used on all subsequent agent API calls.
# After install, enroll with a pairing code from Account → Probes
huntertech-probe enroll --code XXXX-XXXXMonitors and policy
Only monitors explicitly assigned to an agent appear in that agent's policy document. Enable or disable checks in Monitoring; assignment is per agent under Account → Probes → Manage.
HTTP check types
Probes run the same HTTP request adapter as cloud checks: method, URL, headers, body, success criteria, and timeout from the monitor definition.
Connection profiles (Cold / Warm)
- Cold (
standard): Measures a typical one-shot request (connection setup included in timing). - Warm (
steady): Reuses a connection pool where possible for warm-path latency on repeat intervals.
Use compare in Monitoring to overlay multiple HTTP monitors, including probes at different sites, on one chart with a shareable URL.
Telemetry and retention
Observations from the probe are tagged with source agent on the server. Rollups feed the same monitor detail charts as cloud-origin checks, with an indicator of which probe last ran the check.
| Tier | Retention | In the UI |
|---|---|---|
| Cloud hot | ~72 hours of ~5 second rollup windows | Performance chart, recent history on monitor detail |
| Cloud daily | Aggregates after hot data ages out | Prepended on charts for older days |
| Probe edge | ~30 days in local telemetry.db | Sync history from probe for backfill |
When cloud hot data has a gap, use Sync history from probe on monitor detail to backfill from local telemetry.db (edge retention about 30 days).
Storage planning
Local telemetry.db holds rollup history for about 30 days on the probe PC. Growth is driven by how many HTTP monitors are assigned to the agent and how often each monitor runs (check interval). More monitors or shorter intervals mean more checks, more rollup rows, and faster disk use.
After a rollup uploads successfully, the agent strips per-check samples and keeps compact aggregates on disk for backfill. Planning numbers below use that steady-state edge encoding (~5s rollup flush windows). Pending upload backlog during ingest outages can temporarily inflate telemetry.db until the queue drains.
- Monitor count: each assigned monitor contributes its own rollup stream.
- Polling interval: 1s monitors fill every flush window; 60s monitors write about one rollup row per check.
- HTTP path context (cold/warm RTT, edge headers) adds a small amount per row when enabled.
- Health replay snapshots (when ingest is down) are capped separately from rollup history.
- Account → Probes shows telemetry.db size with linear per-minute, hour, day, month, and year estimates from recent heartbeats on enrolled agents.
Estimated telemetry.db growth (steady state)
Linear growth if monitor count and intervals stay constant. The ~30d cap column is the approximate disk footprint after edge retention fills (~30 days of rollup rows at the same rate; older windows are purged).
| Scenario | Checks / hr | Per minute | Per hour | Per day | Per month | Per year | ~30d cap |
|---|---|---|---|---|---|---|---|
| 1 monitor, 60s interval | 60 | 451 B | 26 KB | 634 KB | 19 MB | 226 MB | 19 MB |
| 5 monitors, 60s interval | 300 | 2.2 KB | 132 KB | 3.1 MB | 93 MB | 1.1 GB | 93 MB |
| 10 monitors, 60s interval | 600 | 4.4 KB | 264 KB | 6.2 MB | 186 MB | 2.2 GB | 186 MB |
| 1 monitor, 10s interval | 360 | 2.6 KB | 159 KB | 3.7 MB | 111 MB | 1.3 GB | 111 MB |
| 5 monitors, 10s interval | 1800 | 13 KB | 793 KB | 19 MB | 557 MB | 6.6 GB | 557 MB |
| 1 monitor, 1s interval | 3600 | 5.4 KB | 322 KB | 7.5 MB | 226 MB | 2.7 GB | 226 MB |
| 10 monitors, 1s interval | 36000 | 54 KB | 3.1 MB | 75 MB | 2.2 GB | 26.9 GB | 2.2 GB |
Auto-update and recovery
Enrolled agents poll the release endpoint about every 10 seconds, compare version and SHA-256, and download artifacts through the probe API (not static CDN paths that may be blocked). With immediate apply mode, the agent stages under the local updates folder, applies, and relaunches.
Rollback (1.0.19+)
- Before apply, the current install is copied to a rollback backup folder.
- The new build must stay up for about 60 seconds or post a successful health before the backup is deleted.
- If startup fails,
run.cmdinvokes recovery and retries once. Failed semver builds are blocked from reinstall until a newer release ships.
Account → Probes surfaces update state: available, downloading, applying, or staged. Full semver notes live on Release notes.
Health and alerts
About every 30 seconds the agent POSTs health: uptime, check success/failure counts, sync and upload timestamps, queue depth, assigned monitor backlog, and resource samples (memory, CPU, disk).
- Offline: No heartbeat for roughly 3 minutes triggers an offline alert path.
- Degraded: Heartbeat errors, sustained upload catch-up or backlog pressure, or clock skew of 300 seconds or more.
- Stale ingest: Monitor assigned to an online probe but no observation accepted for about 15 minutes.
Failed health posts while Huntertech is unreachable are buffered locally and replayed on the next success so playback charts preserve timestamps.
Performance and resources
The probe is a single long-running Node process on the host. It is designed for always-on office and lab PCs: modest baseline CPU, predictable memory, and health telemetry so you can see impact in Account → Probes without installing a separate APM agent.
What we report
About every 30 seconds the agent samples process metrics and POSTs them on /agents/me/health. The server stores throttled samples (~30 minutes) for sparklines and playback on each agent card.
| Metric | Meaning |
|---|---|
| Memory (RSS) | Resident set size of the probe Node process. Includes the runtime, in-memory policy, connection pools, and upload queues. |
| Heap used | V8 heap portion of RSS (shown as a hint on the agent card). Useful when diagnosing memory growth over days. |
| CPU % | Share of total host CPU capacity across all logical processors, measured between heartbeats (~30 seconds). Not per-core. |
| Local telemetry (telemetry.db) | On-disk edge store for observations and replayed health (~30 days). Grows with monitor count, interval, and uptime. |
| Data volume free | Free bytes on the volume that holds probe data (install/data folder). Low disk can block writes and updates. |
Measured benchmarks (agent 1.0.60)
Recorded 2026-10-22 on Linux x64, 20 logical CPUs, 64 GB RAM. Production HTTP check adapter, loopback targets, 120s measure window (20s warmup) for policy-realistic rows. CPU avg is the mean over the full run; p95 uses ~1s samples (same normalization as health). Enrolled agents add telemetry.db and upload work; RSS on Windows is typically higher than this Linux harness.
| Scenario | Monitors | Interval | Checks | RSS p50 (MB) | RSS p95 (MB) | CPU avg (%) | CPU p95 (%) |
|---|---|---|---|---|---|---|---|
| Idle (HTTP modules loaded, no monitors) | 0 | - | 0 | 60 | 61 | 0 | 0 |
| 5 loopback HTTP monitors | 5 | 60 | 10 | 63 | 63 | 0 | 0 |
| 20 loopback HTTP monitors | 20 | 30 | 80 | 69 | 69 | 0 | 0.1 |
| 50 loopback HTTP monitors | 50 | 15 | 400 | 82 | 83 | 0 | 0.1 |
| Synthetic ceiling (50 checks every 250ms, 60s) | 50 | tight loop | 148750 | 199 | 199 | 5.1 | - |
Raw JSON and methodology: docs/performance/probe-resource-benchmark.json. Re-run locally with npm run benchmark:probe-resources.
Other load factors
| Situation | CPU impact | Memory impact |
|---|---|---|
| Upload catch-up after offline or api-probe outage | Temporary increase while coalesced observation batches drain (executor may run many bulk POSTs per tick). | Pending queue depth shows in health; drops after successful upload. |
| Auto-update download or apply | Higher while verifying SHA-256 and staging files; returns to baseline after relaunch. | Staging copies under the updates folder until apply completes. |
| Enrolled Windows agent (not in harness) | Same check adapter; heartbeats, telemetry.db, and upload queues add a small steady overhead. | Plan for higher RSS than the Linux harness table (often +20 to 40 MB vs idle row). |
Planning monitors on the host
- Interval: Shorter
checkIntervalSecincreases checks per minute linearly. Prefer 60s or higher for many URLs unless you need sub-minute LAN visibility. - Warm vs cold: Warm profiles reuse TLS/TCP where safe; slightly higher steady RSS, lower per-check setup cost. Cold profiles suit one-shot latency that includes connection setup.
- Concurrency: The scheduler runs due monitors from policy; large assignments on one agent share one process. Split heavy sites across multiple agents if you need isolation.
- Disk: Edge telemetry retains about 30 days locally. High-frequency monitors on a small system drive are the main disk growth lever besides update staging.
When numbers look wrong
| Symptom | Guidance |
|---|---|
| Sustained high CPU with few monitors | Check agent.log for tight check intervals, upload failures, or repeated update apply. Confirm only expected monitors are assigned. |
| RSS climbing over weeks without monitor changes | Compare heap hint on the agent card. Restart the agent from Account → Probes if RSS is abnormally high; file Docs feedback with playback charts. |
| telemetry.db or disk free trending wrong | Reduce monitor count or lengthen intervals if edge retention is larger than needed. Ensure the data volume has several GB free for updates and DB growth. |
Host CPU topology (packages, physical cores, logical processors, model name) is included on health for context on the agent system card. Use playback charts to correlate spikes with update state, upload backlog fields, or check failure counts on the same timeline.
Standard user capabilities
The default per-user install uses normal HTTP/TLS, local disk, and scheduled tasks. No raw sockets are required for the capabilities below.
| Capability | Notes |
|---|---|
| Enrollment, policy sync, observations | Core agent loop |
| HTTP/HTTPS API checks | Methods and URLs you assign on this agent |
| Cold vs warm connection profile | Cold path (one-shot) vs warm keep-alive pool on the probe |
| Local telemetry and backfill | ~30 days on disk; sync from probe in the UI |
| Health, remote logs, auto-update | Heartbeats about every 30s; staged updates locally |
| Process metrics | RSS, CPU, free disk reported on health |
| Egress IP and ISP | Cloud enriches health POST peer IP (same backend as IP lookup). No admin on the probe |
| Cold vs warm HTTP timing | Setup tax vs warm RTT on idempotent checks. HTTP only |
| Edge headers and DNS | Allowlisted CDN/proxy headers and local DNS answers. Not a hop list |
| Path fingerprint alerts | HTTP monitors can alert after consecutive edge/DNS fingerprint changes (Account monitoring delivery settings) |
Path trace and elevation
Forward traceroute-style measurements require sending probes with increasing TTL and reading ICMP errors. A normal HTTP client cannot perform that work.
What elevated means
- Running install.ps1 -AllUsers from an Administrator PowerShell session, or
- Installing a future optional trace helper (Windows service or companion) for raw-socket work only.
| Method | Default user probe | Elevated / helper |
|---|---|---|
| ICMP echo (ping-style) | Possible without admin via a user-mode helper. Many networks allow it; some block ICMP | Same helper; elevation not required for basic ICMP |
| UDP traceroute | Not in the default user agent (raw socket) | Optional elevated trace helper or CAP_NET_RAW on Linux |
| TCP traceroute | Not in the default user agent (raw socket) | Optional elevated trace helper or CAP_NET_RAW on Linux |
| ICMP, UDP, then TCP failover | Degrades to ICMP-only or trace disabled without a helper | Helper picks the method that penetrates the firewall |
- Standard install: slow ICMP-only path snapshots. If ICMP is blocked, rely on HTTP path context and egress.
- With elevated helper: ICMP, UDP, and TCP traces; hop list uploaded as forward path from this probe (not reverse path).
- Program Files (-AllUsers) does not by itself grant raw sockets. Privilege comes from how the trace process runs.
Feature matrix
| Feature | Minimum privilege |
|---|---|
| LAN HTTP monitoring | Standard user |
| Charts, compare, sync from probe | Standard user |
| Egress ASN (cloud enrichment) | Standard user |
| HTTP setup tax and warm RTT | Standard user |
| ICMP forward trace (planned) | Standard user if ICMP helper is installed |
| Full forward trace (ICMP + UDP + TCP) | Elevated trace helper (opt-in, IT-installed) |
| Reverse trace to the probe | Not supported |
When path trace ships, release notes and Account → Probes will label the active mode: user-icmp, helper-full, or disabled.
Troubleshooting
| Symptom | What to try |
|---|---|
| Agent shows offline in Account → Probes | Confirm the host is on, the logon task ran, and outbound HTTPS to Huntertech works. Check agent.log under the install folder. |
| Pairing code expired | Generate a new code in Account → Probes. Codes expire after about 15 minutes. |
| Monitor assigned but no recent data | Verify the monitor is enabled, assigned to this agent, and the URL is reachable from that network. Watch for stale ingest alerts. |
| Update failed or agent will not start after update | On 1.0.19+, run run.cmd to restore the pre-update backup. See Release notes for rollback behavior. |
| Health status degraded (clock skew) | Skew under ~60s is common. Health degrades at 300s or more. Enable Windows Time (NTP) on the probe PC. |
| Need logs for support | Account → Probes exposes a rolling remote log tail per agent. Local agent.log remains on the host. |
| CPU or memory looks high on the agent card | Open health playback on the agent, note assigned monitor count and intervals, and see Performance & resources in probe docs. Restart agent after updates or upload catch-up if usage stays elevated. |