Open source · 0.6.3

OpenTelemetry-native agent for hosts and infrastructure.

Free and Apache-2.0. Collects host, network, container and vendor metrics once, models them on OpenTelemetry semantic conventions, and serves them natively to the platforms you already run. 83 integrations, one static binary, no runtime.

point it at a collector
$ senhub-agent config init --otlp-endpoint otel-collector.internal:4317
then add a probe — one file per probe
# /etc/senhub-agent/probes.d/10-postgresql.yaml
- name: postgresql
  type: postgresql
  params:
    host: db.example.com
    port: 5432
    username: senhub_monitor
    password: ${secret:postgres.password}

PRTG, Nagios and Prometheus need no configuration at all — they are served from the built-in HTTP output. Secrets are stored with senhub-agent secret set, read from standard input, never from the command line.

The SenHub Agent console: seven probes with their state and metric counts, two outputs, and the agent's own version, uptime and licence tier.
Every agent carries its own console — what it collects, where it sends it, and what is failing right now. No server to stand up first.

What it watches

One integration is one thing watched: a service, a device, an endpoint. You enable it in a file, or from the console. Eighty-three in the catalogue — some specific to Windows or to Linux, so a given host offers fewer.

Databases 16

  • Apache Cassandra
  • Apache Solr
  • ClickHouse
  • CouchDB
  • Elasticsearch
  • InfluxDB
  • Memcached
  • Microsoft SQL Server
  • MongoDB
  • MySQL / MariaDB
  • OpenSearch
  • Oracle Database
  • Oracle Enterprise
  • PostgreSQL
  • Redis / Valkey
  • SQL Server AlwaysOn

Host 15

  • CPU
  • Chrony (NTP)
  • IBM i
  • IPMI sensors
  • Logical disk
  • Memory
  • NVIDIA GPU
  • Network interfaces
  • OS updates
  • Process monitor
  • Redfish hardware
  • S.M.A.R.T. disk health
  • Systemd units
  • Wi-Fi signal
  • Windows services

Integrations 10

  • Citrix NetScaler
  • Event receiver
  • HashiCorp Consul
  • Jenkins
  • Load web app
  • OTLP receiver
  • Ping gateway
  • Ping web app
  • Prometheus scrape
  • Veeam Backup & Replication

Web servers 9

  • Apache HTTP Server
  • Apache Tomcat
  • Envoy Proxy
  • HAProxy
  • HTTP check
  • Nginx
  • PHP-FPM
  • Varnish Cache
  • WildFly / JBoss EAP

Network 8

  • DNS latency
  • ICMP check
  • Modbus TCP
  • NTP
  • SNMP poll
  • SNMP trap receiver
  • TCP dial
  • UniFi Controller

Messaging 6

  • Apache ActiveMQ
  • Apache Kafka
  • Apache Pulsar
  • Apache ZooKeeper
  • NATS
  • RabbitMQ

Virtualisation 5

  • Citrix Virtual Apps and Desktops
  • Proxmox VE
  • VMware vSphere HA
  • Windows Hyper-V
  • Windows Hyper-V HA

Logs 4

  • File tail
  • Linux journal
  • Syslog receiver
  • Windows Event Log

Cloud 4

  • Azure AD Connect Health
  • Azure Container App Jobs
  • Azure Container Apps
  • Exchange Online

Containers 3

  • Docker
  • Docker Swarm
  • Kubernetes

Storage 2

  • Ceph
  • Dell PowerStore

Custom 1

  • Exec check
Since 0.6.0

Zabbix support

The agent speaks the Zabbix protocol in both directions, and generates the Zabbix templates from its own probe definitions — the part a third-party agent normally leaves you to model by hand in the front end. Give it the server address at install time and a new host registers and fills in on its own.

Active

The agent connects out, asks the server which items it wants for this host, and pushes values in batches — encrypted with a pre-shared key or a certificate. An unknown host triggers autoregistration, so a whole fleet appears in Zabbix without anyone creating hosts by hand. Proxy groups are followed to the member holding the host.→ server :10051

Passive

The agent listens and answers the server's polls over TLS, with an allow-list of permitted addresses, in both dialects — the raw key before Zabbix 7.0, the framed request from 7.0 on. A plaintext poll, a wrong key or a wrong identity is refused.← agent :10050

Templates you didn't write

One template per probe type and platform, generated from the agent's own metric definitions rather than maintained by hand — with low-level discovery for anything that comes in varying numbers: filesystems, interfaces, instances. Enable a probe, its template is already there.

Inventory that fills itself

Host inventory fields are populated from what the agent already knows about the machine, so the Zabbix side stops drifting from reality the week after someone typed it in.

0clicks in the Zabbix front end

senhub-agent zabbix setup --url <frontend> --token-file <f> imports the templates, creates the host group and the autoregistration action. After that, two lines naming the server in the agent's config are enough: the host registers itself, gets its templates linked, and its items arrive by low-level discovery.

Pushing values into Zabbix is something several agents do. This one also answers the server's own polls, and hands you the templates — generated from its probe definitions and imported for you, so the items are not modelled by hand. PRTG and Nagios are served natively from the same process.

And it holds on a locked-down site. A pre-shared key is the only encryption Zabbix offers for autoregistration — it will not take a certificate for that step — so without PSK a fleet cannot enrol itself where that step is encrypted. SenHub Agent speaks it, which is what keeps the zero-click setup true there too.

Verified end to end against real servers on Zabbix 7.0 and 8.0. Free and Apache-2.0, like every other output.

Resource attributes, declared once

Owner, criticality, site and lifecycle are declared once in the agent's configuration and ride with every metric and log the agent emits. They are OpenTelemetry resource attributes, so they survive the trip into any backend that understands them — and hosts, containers and services carry them into the entity graph, where you can filter on them.

# senhub-agent.yaml
resource:
  entity.owner.team:      platform-core
  entity.owner.contact:   platform@example.com
  service.criticality:    critical
  entity.location.site:   par-dc1
  entity.lifecycle.status: production

Across every output

The same labels ride with the signal whether it leaves over OTLP or answers a Zabbix poll — no mapping table to keep in sync.

On the alert

The owning team, the contact and the criticality travel with the signal, so they are already present when a rule fires.

One process, no runtime

A single static Go binary: no JVM, no Python, no agent framework, nothing extra to keep patched. Linux amd64 and arm64, Windows amd64, signed packages, an MSI installer and an official container image. It runs on bare metal, a virtual machine, a container or a Windows server, collecting locally and serving out from the same process.

It also carries its own console: edit a probe and test it in place, set the listen port, the bind address and the licence, without touching a file.

What's new

Every release ships with a written note: what changed, why, and what breaks.

0.6.3current

The Azure Container Apps collector, finished

Every application of a subscription discovered and followed with its coverage measured, jobs discovered too, one Azure identity shared across probes, senhub-agent check azure to verify permissions, and official Grafana dashboards.

0.6.2

Linux packages and fleet deployment

Signed packages and repositories, an Ansible collection, a Helm chart and a Podman Quadlet unit. Probes can be declared from environment variables. Credentials in a probe's connection URI are no longer written to the log — upgrade, then rotate anything that was exposed.

0.6.1

Metric names and units follow the conventions

Durations in seconds, throughputs in bytes per second, gauges without their .total suffix. Dashboards, alerts and Zabbix templates on the old names need updating.

All releases →

Entities and relations

Collecting a metric means identifying what produced it. So alongside the measurements, the agent can emit the things themselves — hosts, services, containers, network interfaces and the relations between them — as OpenTelemetry entity events.

That output feeds Toise, our map of what runs where and how it changed. It requires an OTLP output; an agent deployed only for Zabbix, PRTG or Nagios collects metrics and stops there.

This is the newest part of the agent. Treat it as groundwork that comes with a collection you were running anyway, not as a finished inventory product.

Open core

The agent, every output and 65 of the 83 integrations are Apache-2.0 — that is the whole product for most people, with nothing to sign and nothing to expire. No output and no protocol is ever behind a licence.

The 18 vendor integrations that took weeks of protocol work each — Citrix, NetScaler, Veeam, VMware HA, Oracle Enterprise, PowerStore, the Azure and Microsoft 365 ones — are the commercial layer. They fund the rest.