0.6.2 — 2026-10-08¶
0.6.2 adds Linux packages and signed package repositories, three ways to
deploy the agent at scale (an Ansible collection, a Helm chart and a Podman
Quadlet unit), probes declared from environment variables, and a manifest
for every release. It also changes the exit codes of the command line,
keeps failed log batches on disk by default, and removes
SENHUB_AZURE_APP from the container image.
Before you upgrade¶
Actions for an installation running 0.6.1. Each one is detailed under Breaking Changes or Changes below.
- Containers that set
SENHUB_AZURE_APP. The image no longer reads it and a first start with it set stops. Declare the probe withSENHUB_PROBE_<NAME>_*variables first. - Scripts that compare an exit code with
1. Failures now exit2. A script that tests for any non-zero code is unaffected. - Zabbix. Re-run
zabbix setupto refresh the templates: counter items become rates, and the host templates gain graphs, dashboards, triggers and discovery. Rewrite the triggers and calculated items you wrote against counter items. - Topology backends. The
unifi,kubernetesandsystemdentities are replaced once under a new identity. - Disk use during a collector outage. The OTLP output now keeps failed log batches on disk by default, up to 128 MiB in the state directory.
- Probes whose connection is a URI with credentials. Upgrade, delete or rotate the old agent log files, and change that account's password (see Security below).
- PRTG bit-rate channels. Delete and recreate the bit-rate channels (or the sensor) created by agents 0.4.0 to 0.6.1.
Security¶
- Credentials in a connection URI are masked in the agent log. A
credential embedded in a probe's connection URI
(
scheme://user:password@host, for example MongoDB, Redis, PostgreSQL or AMQP URIs) was written in clear to the agent log when the probe started and on every configuration reload, in 0.6.1 and earlier. 0.6.2 masks it. If you used such URIs: upgrade, delete or rotate the old agent log files, and change that account's password.
Breaking Changes¶
-
The host's name is now one value everywhere. A host whose
global_tagssethost.namealready carried it on its metrics and logs, but its host entity (the node in the topology graph), the entities of its systemd units and the records the OTLP receiver stamps with the host kept the machine's own name. All of them now use the override, so on such a host the graph node'shost.namechanges once, to the value its logs already carry (a dashedpreprod-...-shopbecomespreprod.sensorfactory.shop). Thehost.idis unchanged, so the node is the same node. A host with no override keeps its name, except thehost.nameon its systemd unit entities, which was the raw OS name and is now the lower-case name the host entity carries. A record about another machine (a syslog sender, a relayed OTLP stream) keeps its own origin name; it is never replaced. -
SENHUB_AZURE_APPis removed from the container image. The image no longer readsSENHUB_AZURE_APPor theSENHUB_AZURE_*variables that went with it, and a container that still setsSENHUB_AZURE_APPon its first start stops with a message naming the replacement, rather than starting a collector that reads no log. A container that already has its configuration on a volume keeps running on the file the old variable wrote, until that file is removed.
Declare the probe with the agent's own SENHUB_PROBE_<NAME>_* variables instead. The probe name is yours (letters and digits only); the application name goes in APP, so a name with a hyphen is a value, not a variable. The credentials, one value each before, are repeated for each probe.
| Before | After |
|---|---|
SENHUB_AZURE_APP=oltp,billing |
one probe per application, SENHUB_PROBE_OLTP_TYPE=azure_container_apps and SENHUB_PROBE_OLTP_APP=oltp, then the same for BILLING |
SENHUB_AZURE_TENANT_ID |
SENHUB_PROBE_<NAME>_TENANT_ID |
SENHUB_AZURE_CLIENT_ID |
SENHUB_PROBE_<NAME>_CLIENT_ID |
SENHUB_AZURE_CLIENT_SECRET |
SENHUB_PROBE_<NAME>_CLIENT_SECRET, or SENHUB_PROBE_<NAME>_CLIENT_SECRET_FILE=/run/secrets/... |
SENHUB_AZURE_SUBSCRIPTION_ID |
SENHUB_PROBE_<NAME>_SUBSCRIPTION_ID |
SENHUB_AZURE_RESOURCE_GROUP |
SENHUB_PROBE_<NAME>_RESOURCE_GROUP |
| bookmark in the state directory, written for you | SENHUB_PROBE_<NAME>_BOOKMARK_PATH=/var/lib/senhub-agent/<app>.bookmark, one distinct file per probe |
List mode, SENHUB_AZURE_APP=oltp,billing becomes:
SENHUB_PROBE_OLTP_TYPE=azure_container_apps
SENHUB_PROBE_OLTP_APP=oltp
SENHUB_PROBE_OLTP_TENANT_ID=...
SENHUB_PROBE_OLTP_CLIENT_ID=...
SENHUB_PROBE_OLTP_CLIENT_SECRET_FILE=/run/secrets/aca_client_secret
SENHUB_PROBE_OLTP_SUBSCRIPTION_ID=...
SENHUB_PROBE_OLTP_RESOURCE_GROUP=rg-squash
SENHUB_PROBE_OLTP_BOOKMARK_PATH=/var/lib/senhub-agent/oltp.bookmark
# and the same eight lines with BILLING, APP=billing and billing.bookmark
Discovery mode, which the old variable could not express (one probe for the whole subscription, no APP and no RESOURCE_GROUP):
SENHUB_PROBE_ACA_TYPE=azure_container_apps
SENHUB_PROBE_ACA_TENANT_ID=...
SENHUB_PROBE_ACA_CLIENT_ID=...
SENHUB_PROBE_ACA_CLIENT_SECRET_FILE=/run/secrets/aca_client_secret
SENHUB_PROBE_ACA_SUBSCRIPTION_ID=...
SENHUB_PROBE_ACA_DISCOVERY__INTERVAL=300
SENHUB_PROBE_ACA_BOOKMARK_PATH=/var/lib/senhub-agent/aca.bookmark
The old variable named the bookmark <application>.bookmark in the state directory: give BOOKMARK_PATH the same file and the probe resumes where it stopped instead of re-reading its recent lines. The old probe was named after the application; a name with a hyphen cannot be written in a variable, so such a probe changes name (squash-tm becomes, say, squashtm) and its series change probe_name with it. SENHUB_PROBES is unchanged.
- Exit codes of the command line are a contract.
0done,1warning,2failure,3unchanged. Failures that exited1now exit2.config checkexits1when it found warnings only (running without a licence is the free tier, reported as information), andstatusexits1when the service is stopped, the agent does not answer, it reports itself unhealthy or a probe is in error. A script that tests for any non-zero code is unaffected; one that compares with1must follow. The container image and the Windows installer are updated to match. See Exit codes. - Three entity identities change once. The
unifi,kubernetesandsystemdprobes no longer key their entities on an address or a hostname. A UniFi controller is identified by the UUID it reports about itself (orunifi@<host.id>when it runs on the agent's host); a controller that is remote and whose UUID the account cannot read has no entity. A Kubernetes cluster is identified by itskube-systemnamespace UID alone, so a cluster whose UID is unreadable has no cluster entity. A systemd unit issystemd://<host.id>/<unit>. The old entities are retired once: a consumer sees one disappearance, then the new identity. - Zabbix counter items become rates. In the generated templates, every item built from a cumulative counter (network bytes and packets, disk I/O, CPU time, request totals) now carries the Change per second preprocessing step and a per-second unit (
Bps,/s,s/s). The items keep their keys, so after you re-runzabbix setupand the templates are updated, the same item switches from a total to a rate: its history from before the upgrade holds totals and the new values are rates, so a graph spanning the upgrade shows a step. Rewrite the triggers and calculated items you wrote against these items to compare a rate.
Features¶
Packages and repositories¶
- Linux packages.
.deband.rpmpackages for amd64 and arm64, in two editions (senhub-agent-ossandsenhub-agent, which replace each other in one install command), install the agent as a systemd service from the distribution's package manager. They are tested on Debian 12, Ubuntu 22.04 and 24.04, Rocky Linux 9 and openSUSE Leap 15.6. See Install from packages. - Signed package repositories. APT and YUM/DNF/Zypper repositories at
packages.senhub.io, with astableand abetachannel. See Install from the package repositories. - A manifest per release, at a stable address.
packages.senhub.io/releases/stable/latest.json(andbeta/latest.json) name the newest release of a channel;releases/<version>/manifest.jsonlists every file with its checksum, size, signature and the container images, so a script finds and verifies the right build without reading the GitHub page. A stable image is now also tagged with its minor line (ghcr.io/senhub-io/senhub-agent:0.6). See Downloading and verifying releases.
Deployment tools¶
- Deploying at scale. A documentation section with one page per tool, each with a runnable example and the same points: version pinning, licence, secrets, validation before apply, upgrade and removal. Pages for Intune, GPO and SCCM, cloud-init, Docker Compose, Helm and Podman, and an overview that maps each estate to a tool. See Deploying at scale.
- Ansible collection.
senhub.agentis an Ansible collection with one role,senhub.agent.agent, that installs the agent from the signed package repositories (Linux) or the release MSI checked against its manifest (Windows), writesprobes.dandstrategies.dfrom variables, and runsconfig check --jsonon the result before it replaces the live files; a second run changes nothing. See Deploying with Ansible. - Helm chart.
charts/senhub-agentruns the agent in a Kubernetes cluster, by default one agent per node (a DaemonSet) with an identity of its own, monitoring the node it runs on and, on request, the cluster through thekubernetesprobe. The chart is published tooci://ghcr.io/senhub-io/charts. See Kubernetes (Helm). - Podman and Quadlet. A Quadlet unit runs the container image as a systemd service under Podman, monitoring the host, with the bearer token and the licence as Podman secrets. It follows the
0.6line tag, so auto-update delivers patch releases. See Running the agent with Podman.
Configuration¶
- Probes from environment variables.
SENHUB_PROBE_<NAME>_TYPE=<type>declares a probe andSENHUB_PROBE_<NAME>_<PARAM>=valuesets its parameters, typed from the probe's schema, with__for nested keys and_FILEto read a secret from a file. The agent reads them itself, so containers, systemd units, Helm and Podman share one rule, and they adjust the probes of a mounted configuration too (the environment wins, key by key). A mistake stops the load and names the variable.config showlists the variables the probes were read from, and never prints a secret read from the environment. See Configuring probes from environment variables. - Agent governance in the console. The Settings page edits the governance of the host (owner, criticality, lifecycle, location, labels) with the same fields as a probe, and writes it to the top-level
governance:block ofagent.yaml; the running agent follows the change without a restart, andconfig checkvalidates the block. A block set from${env:}or${file:}references is shown read-only. See Settings. - Probe SDK: the state directory.
probesdk/stategives a probe the directory where the agent keeps what must survive a restart (state.Dir(),state.Path(name)), so a probe that keeps a bookmark can default it beside the agent's identity.
Command line and status¶
doctordiagnoses an install in one pass. It aggregates the service state, the systemd unit and binary comparison,config check, the secret store, the licence expiry, the HTTP port, the connection test of every output, the probes' last cycle and the disk, prints afixfor each problem, and exits1on a warning and2on a failure. It needs no root and works with the service stopped.--jsonprintssenhub.cli.doctor/v1. See Doctor.--jsonoutput.version,status,config check,config show,config set,config initandsecret statusprint one JSON object with asenhub.cli.<command>/v1schema identifier. Failures are JSON objects too. See JSON output.- Idempotent provisioning commands.
config init,config setandinstallrun again on a machine already in the requested state write nothing and exit3.config init --ok-if-unchangedexits0in that case, for installers that treat any other code as a failure.installalso repairs a drifted unit or a disabled service in place (exit0, no restart) and takes--jsonwith achangedfield. statusworks on every install. The agent answerssenhub-agent statuson a local channel (a Unix socket in its state directory, readable by the service account and root only; a named pipe restricted to administrators on Windows), whether or not the HTTP output is enabled.statusasks the local channel first and falls back to the HTTP output. The channel is read-only. It reports probe health and failed outputs but not the per-probe metric counts, which only the HTTP cache holds.- Two agents on one host no longer describe each other twice. Each agent writes its own
service.instance.idtoinstance.idin its state directory (/var/lib/senhub-agent,C:\ProgramData\SenHub), readable by other accounts only when the agent key is a random UUID, and by its owner alone otherwise. An agent that finds another agent's process listening on the host reuses that id instead of creating a secondservice.instance. When the file cannot be read, the previous behaviour applies.
Probes¶
- Linux disk I/O. The
logicaldiskprobe reports, per whole block device, the bytes and operations read and written and the time spent on I/O (system.disk.io,system.disk.operations,system.disk.io_time), as cumulative counters, until now a Windows-only measurement. Partitions andloop,ram,zram,fdandsrdevices are left out. They reach Prometheus, OTLP and Zabbix, which discovers one set of items per device. - Host clock. The
cpuprobe reports the host's time (senhub.system.time, seconds since the Unix epoch) on Linux and Windows, so a monitoring server can check clock drift:time() - senhub_system_time_secondsin Prometheus, and in Zabbix afuzzytime()trigger whose tolerance is{$SENHUB.CLOCK.DRIFT.MAX}(60 seconds by default). - Linux host security signals in the
processprobe.senhub.system.kernel.open_files(file handles allocated, from/proc/sys/fs/file-nr, to read againstsenhub.system.kernel.max_files),senhub.system.passwd.checksum(CRC32 of/etc/passwd, a number that changes when the file changes) andsenhub.system.passwd.modified_timestamp(its modification time). The generated Zabbix template carries a warning trigger on a checksum change; re-runzabbix setupto refresh it. Other platforms emit nothing new. - filetail reports where each tail stands. For every file followed,
senhub.filetail.read_offsetandsenhub.filetail.file_size(Prometheussenhub_filetail_read_offset_bytesandsenhub_filetail_file_size_bytes, attributelog.file.path) let a rule detect a frozen tail: the file grew and the offset did not move. - Redis. The probe reports the last RDB save, AOF rewrite and AOF write outcomes, the replication backlog (active, size, history), pub/sub channels and patterns, and, on a Sentinel, the status, replica count and sentinel count of each monitored master.
- IPMI. Sensors that share a name (a Dell lists every CPU temperature as
Temp) are no longer merged into one series; they readTemp (CPU 1),Temp (CPU 2). Power (hw.power, watts) and current (senhub.hardware.current, amperes) readings are reported, and a power supply's presence and redundancy ("Presence detected", "Fully Redundant", "Redundancy Lost") give its status. - IBM i: QHST, QSYSOPR and audit events reach the logs backend. The history log, message queue and audit journal collectors send each event as an OpenTelemetry log record (message text as body, the partition's own time as timestamp, IBM i severity 0-99 mapped to
INFO,WARN,ERROR,ERROR3orFATAL, attributes underibmi.*).history_log_min_severityis the volume lever. - Redfish: the whole probe reaches Prometheus and OTLP. 100 of the 139 metrics the probe can emit had no definition and were dropped by those outputs (processors, memory modules, network, power, firmware, event-log counters, vendor storage readings). They are now declared with OTel names, units and types, and a test fails when the probe starts to emit a name that has none. PRTG channel names are unchanged. Memory modules, adapters, ports and cache levels also become separate series on the pull sinks instead of overwriting each other.
Changes¶
- The
eventprobe is free. It was listed with the Pro probes although its code ships in the open core and is registered in every build. It now runs without a licence, likeotlp_receiver. - Failed log batches are kept on disk by default. The OTLP output's on-disk queue for event logs the collector could not take used to run only when
persistence.pathwas set. It is now on for every install (package, MSI, container), in the state directory (otlp-queue/), and replays at boot and when the collector answers again. During an outage the agent can use up to 128 MiB of disk there (logs_queue_max_bytes). Newlogs_queue_max_age(24 hours) drops older batches at boot and every 10 minutes, counted asdropped_by_age.persistence.enabled: falseorSENHUB_LOG_QUEUE=falseturns the queue off;SENHUB_LOG_QUEUE_RETENTIONandSENHUB_LOG_QUEUE_MAX_BYTEStune it. An unwritable state directory logs one warning and the agent runs without the queue. In a container, mount a persistent volume on the state directory for the queue to outlive a restart. An explicitpersistence.pathkeeps working unchanged. See Logs survive an outage. - SNMP: a polled device's routes link to their gateway. Routes read from a device's routing table reach the gateway's address with
next_hop_via, as host routes already do, when the gateway is a public address, so a router's default route resolves to the same address node as a host's. Private (RFC1918, CGNAT, ULA), loopback, link-local and multicast gateways stay unlinked, because unrelated switches behind one private gateway would otherwise merge. - Redfish:
collectionsis validated and says what it turns off. The list still replaces the default set, but an unknown name or an empty list now stops the probe at load with the accepted values, and the start-up log names the default subsystems the list disabled. A configuration that lists the six defaults is unchanged. - Redfish: names keep the BMC's own text.
hw.nameand the other name attributes in OTLP, Prometheus and Zabbix are no longer stripped of, ; ( ) [ ] { } < > | \ " '# & ? =`. PRTG channel names and URL filters keep their cleaned form. - Zabbix links the host probes of each platform by default.
zabbix setuplinked five templates whatever the platform, so a Windows host collecting its services or its event log counter got no item for them. The probes markeduniversalin their definition (on Windows,winservicesandwindows_eventlogjoin the five) are linked per platform,--all-probeslinks every template, and a guard fails the build if a registered probe emits metrics and no template declares them. - Zabbix templates ship graphs and dashboards. The CPU, memory, logical disk and network templates carry graph prototypes (utilization, load, throughput, operations, queue, errors, per instance) declared in the probe definitions under
graphs:, and a dashboard of their own graphs per template, listed under the host's Dashboards menu (7.0 export; the 6.0 export keeps the graphs only). - Windows services are discovered in Zabbix, with an "automatic service not running" trigger. The
winservicesprobe reports each service's start type (windows.service.start_type); the template creates the state, status and start type of every service by discovery and raises a problem when a service set to start automatically has not been running for{$SENHUB.WINSERVICES.GRACE}(5 minutes). Discovery is filtered by{$SENHUB.WINSERVICES.MATCHES}and{$SENHUB.WINSERVICES.NOT_MATCHES}. The probe's own heartbeat is no longer declared once per service. - Zabbix triggers cover more of a host. Processor queue (Windows) and load (Linux), paging, disk queue and busy time, inodes, interface errors and discards, and a restart (new
system.uptimefrom thecpuprobe) join the usage and state triggers, each limit a{$SENHUB.*}macro with a documented default. Triggers are declared in the probe definitions undertriggers:.
Fixes¶
-
Files left by a manual update are removed at the next start, with auto-update off too. The hidden
.<exe>.oldand.<exe>.newfiles thatsenhub-agent updateleaves next to the binary on Windows were cleaned only when auto-update was enabled; the agent now removes them at every start. -
Loopback connections on OS dynamic ports no longer create
depends_onendpoints. A host talking to itself through a port the OS picks per request (for example127.0.0.1:497xxon Windows) produced one one-shot endpoint per connection. A loopback peer whose port is in the OS dynamic range (49152-65535 on Windows and macOS, the kernelip_local_port_rangeon Linux, 32768-60999 by default) is now ignored; loopback services on fixed ports and all non-loopback peers are unchanged. -
A monolithic install gets its administration key on the first start, and a key added while the agent runs is served. The key was minted before the monolithic
storage:list was split intostrategies.d/, so the http output came out without one; and the console routes were registered only at start, so a key added by a reload answered 404 until a restart. The split now runs first, a reload that adds the key rebuilds the routes, andsenhub-agent consoletells you to restart the service once when the running agent does not serve the console. -
OTLP event logs are no longer lost when the collector is down and the agent restarts. The on-disk queue handed a queued batch back to the in-memory log pipeline and deleted its file at once, without waiting for the collector's answer: with the collector down a batch went from disk to memory and back in milliseconds, and what was in memory at shutdown was lost (1575 of 3833 lines in a measured outage with a restart). A queued batch is now sent directly and its file is removed only after the collector acknowledged it; while the collector is down new batches go straight to disk and the agent probes it on a retry clock of 5 seconds doubling to 5 minutes; and a normal stop writes the records still held in memory to the queue. Delivery is at-least-once (a record can arrive twice, and replayed records can arrive after newer ones). See Logs survive an outage.
-
A per-module debug level now writes debug lines. Raising one module (for example
probe.ibmi) todebugthrough the log-level API or the console answered200but wrote nothing, because the production logger kept a globalinfofloor. The module now logs at debug while every other module stays atinfo. The setting is kept in memory: it survives a configuration reload and is lost on an agent restart (see Troubleshooting). - Oracle 23ai: login with a password longer than 30 characters. The
oracleprobe could not log in to Oracle Database 23ai with a password of more than 30 characters: every cycle reportedsenhub.db.up = 0withORA-01017, while SQL*Plus accepted the same credentials. The driver does not announce long password support, which 23ai requires; the probe now does. Passwords of 30 characters or fewer were never affected. - Zabbix links the host probes of each platform by default.
zabbix setuplinked five templates whatever the platform, so a Windows host collecting its services or its event log counter got no item for them. The probes markeduniversalin their definition (on Windows,winservicesandwindows_eventlogjoin the five) are linked per platform,--all-probeslinks every template, and a guard fails the build if a registered probe emits metrics and no template declares them (ent#109). - Zabbix templates ship graphs and dashboards. The CPU, memory, logical disk and network templates carry graph prototypes (utilization, load, throughput, operations, queue, errors, per instance) declared in the probe definitions under
graphs:, and a dashboard of their own graphs per template, listed under the host's Dashboards menu (7.0 export; the 6.0 export keeps the graphs only) (ent#110). - Windows services are discovered in Zabbix, with an "automatic service not running" trigger. The
winservicesprobe now reports each service's start type (windows.service.start_type); the template creates the state, status and start type of every service by discovery and raises a problem when a service set to start automatically has not been running for{$SENHUB.WINSERVICES.GRACE}(5 minutes). Discovery is filtered by{$SENHUB.WINSERVICES.MATCHES}and{$SENHUB.WINSERVICES.NOT_MATCHES}. The probe's own heartbeat is no longer declared once per service (ent#114). - Zabbix triggers cover more of a host. Processor queue (Windows) and load (Linux), paging, disk queue and busy time, inodes, interface errors and discards, and a restart (new
system.uptimefrom thecpuprobe) join the usage and state triggers, each limit a{$SENHUB.*}macro with a documented default. Triggers are declared in the probe definitions undertriggers:(ent#115). - Windows: host identity is no longer re-read on every collection. The host information call, which walks every process on Windows, ran on each host-probe collection and each entity reconcile. It is now cached for 60 seconds, so a hostname change is still picked up within a minute (ent#578).
- A
governancechange on a probe now reaches its entities on reload. Editing only thegovernanceblock of a probe was skipped as "already running", so its entities kept the old owner, criticality and location until an agent restart. The running probe now takes the new block at the next configuration reload and the next entity emission carries it, without restarting the probe (ent#577). - A restart with the OTLP collector down no longer warns about the last metrics. The stop logged a warning, "metric exporter shutdown: context deadline exceeded", for a final export the agent had no chance to deliver. When the last pushes already failed (or none was acknowledged for three intervals) the agent skips that export and logs one information line, "final metrics point not delivered: collector unreachable". A deadline or failure while the collector was healthy is still a warning.
version, the status API and the console show the open-core commit. A build that compiles the open core from another checkout (the commercial edition) reported only its own commit, so the core source behind a binary could not be told. A newCore commitline insenhub-agent version(andcore_commitin its JSON,/info/systemandstatus) and a row in the console Agent card name it (ent#579).filetailkeeps the lines a writer appends to a rotated file, and its self-metrics survive a bad path. After a rename-and-create rotation the probe left the old file at once, so lines the application still wrote to it until logrotate told it to reopen were lost. On Linux and macOS the probe now reads the old file to its end before switching, and keeps reading it for 30 seconds, each line once. On Windows it does not: holding the old file open could make the application's own rotation fail, so the old file is released at once and late writes to it are not read there, as in 0.6.1. A configured path that cannot be read no longer hidessenhub.filetail.records_emittedand the offsets of the healthy files for the whole time the error lasts (ent#537).filetailnotices a file emptied and refilled beyond what it had read. A log truncated and written past the read offset between two checks looked like an append, so its new start was skipped. The probe now compares the fingerprint of the file's first bytes with the one it recorded, and restarts from the first byte when they differ (ent#537).- Windows: an uninstall removes the install folder.
C:\Program Files\SenHub Agentstayed behind when it held a file the agent had written after the installer laid its own, typically the hidden previous executable a self-update sets aside. The uninstall now removes the folder, and the agent deletes that leftover at its next start.%ProgramData%\SenHubfollows its own rule, unchanged. The folder is removed only when it recorded a path containingSenHub, so an install placed by hand in a shared directory does not take that directory with it (ent#125). - PRTG: per-second counts keep their noun. A rate that is neither a byte nor a bit rate (requests, responses, transactions, packets) showed the unit
/s, where 0.1.x showedreq/s,resp/s,tx/sandPkts/s. The label now comes from the OTel annotation when it names the thing counted, else from the display unit of the probe definition, and only then falls back to/s. The native PRTG speed units for byte and bit rates are unchanged (ent#571). doctorandstatusshow the data a probe delivered. Read through the local status channel (the default since 0.6.2), every probe reported zero metrics and no last cycle, sodoctorwarned "enabled but no data collected yet" on probes that were collecting, such asfiletailafter a log rotation. The channel now carries the datapoints and the time of each probe's last delivery.- PRTG: bit rates are shown at the right scale again. Since 0.4.0 the agent sent bit-based rates as
SpeedNetwith aspeedsize, but PRTG ignoresspeedsizeand reads everySpeedNetvalue as bytes per second, so bit rates showed at the wrong scale (1588 Mbit/s displayed as 0.01 Mbit/s). The default is now a custom unit (Gbit/s,Mbit/s,kbit/s,bit/s) carrying the value unchanged, and?speed=nativegives PRTG's native speed unit with the value converted to bytes per second. PRTG freezes a channel's unit when the sensor is created: delete and recreate the bit-rate channels (or the sensor) created by agents 0.4.0 to 0.6.1 to get the correct display. Sensors created by agents 0.1.x to 0.3.x are unaffected. See PRTG speed units. - Linux: the agent no longer reports its own sandbox mounts as filesystems. Under the hardened systemd unit, the mounts the sandbox creates for the agent appeared as separate filesystems beside the real ones. The
logicaldiskprobe now reports one entry per device, so a host reports fewerlogicaldiskseries: the same devices, without the duplicate mount points.
Footprint¶
- Less resident memory at rest. The agent parsed all 85 embedded probe definitions and the seven console pages at start whatever was configured. A definition is now parsed when its probe type first needs it, and a console page when it is first opened. On the default configuration (four host probes, HTTP and Zabbix outputs) the anonymous resident memory fell from 17.5 to 11.8 MiB after half an hour. The rest of the resident size is the executable's own pages, shared with the page cache.
- Five recurring lines moved from
INFOtoDEBUG. Each fired on every cycle of a healthy agent:kubernetes: event cycle complete,Successfully synced eventsandServer confirmed receipt of events(event output),No update requiredandAuto-update skipped: expected version is not newer than current(auto-update). Start, stop, configuration change and error lines are unchanged. Run with--verboseor raise the module level to see them again. - Idle timers. The probe start retry no longer ticks every two minutes while every probe is running; it arms a timer only while one is waiting to be retried. The agent's instance id file is no longer replaced when it already holds the id.
config checkand the loader now agree on a configuration with no storage strategy.config checkreported "No storage strategies configured" as a warning (exit1) while the agent refuses to load such a file ("at least one storage strategy is required"). It is now an error (exit2), as is a storage entry with no name. A script that applies a configuration afterconfig check(Ansible, the MSI) no longer lets one through that the agent then rejects.- A per-module debug level now writes debug lines. Raising one module (for example
probe.ibmi) todebugthrough the log-level API or the console answered200but wrote nothing, because the production logger kept a globalinfofloor. The module now logs at debug while every other module stays atinfo. The setting is kept in memory: it survives a configuration reload and is lost on an agent restart (see Troubleshooting). - Oracle 23ai: login with a password longer than 30 characters. The
oracleprobe could not log in to Oracle Database 23ai with a password of more than 30 characters: every cycle reportedsenhub.db.up = 0withORA-01017, while SQL*Plus accepted the same credentials. The driver does not announce long password support, which 23ai requires; the probe now does. Passwords of 30 characters or fewer were never affected. - IBM i: age gauges no longer read below zero. The scheduled-job and other age gauges stay at zero when the partition clock runs ahead of the reference.
- Measured resource use. On the test bench with an OTLP output, the Linux agent uses about 1.05 s of CPU per hour (0.6.1: 1.28 s), sends about 1.1 MB per hour upstream, and the entity rail about 20 KB per hour. On Windows the CPU is about 3.3 s per hour (0.6.1: 1.7 s); this is under investigation (ent#578).