fix: correct telemetry identifier and visibility when containerized

Three related fixes for running Monitor inside a container with
/:/host:ro bind-mounted and network_mode: host.

* config: when HF_MONITER_ROOTFS is set, read the default identifier
  from <rootFS>/etc/hostname instead of os.Hostname(). Under
  network_mode: host the UTS namespace is not shared, so os.Hostname()
  returns a random docker-assigned string that changes across
  recreations, causing the backend to treat each restart as a new
  server.

* telemetry: log gopsutil errors from BuildPayload instead of silently
  swallowing them. Previously a missing /host mount would send a
  payload full of zeroed fields with no indication of failure.

* docker-compose: drop the 'ports:' block. It is silently ignored
  under network_mode: host (the bridge server binds directly on the
  host's 127.0.0.1:MONITOR_PORT).
This commit is contained in:
zhi
2026-04-15 23:02:44 +00:00
parent 758d3d1c59
commit e136f1b290
3 changed files with 56 additions and 22 deletions

View File

@@ -15,8 +15,8 @@ services:
- MONITOR_PORT=${MONITOR_PORT:-0}
volumes:
- /:/host:ro
ports:
# Expose MONITOR_PORT on 127.0.0.1 only for plugin communication.
# Only active when MONITOR_PORT > 0.
- "127.0.0.1:${MONITOR_PORT:-9100}:${MONITOR_PORT:-9100}"
# network_mode: host shares the host network namespace, so the bridge
# server (if MONITOR_PORT > 0) listens directly on the host's
# 127.0.0.1:<MONITOR_PORT>. `ports:` is ignored under network_mode:
# host, so it is intentionally omitted.
network_mode: host