edge-logger
Unified Telemetry & Log Forwarder (Fluent Bit + gRPC)
arm64amd64
LoggingTelemetryObservability
Overview
Primary hardware
Generic Edge (arm64/amd64)
What it does
Collects ROS 2 logs, system metrics (CPU/GPU temp, disk, network), ships to central logging via gRPC/HTTP.
Why it saves time
Debugging fleets is a nightmare without centralized telemetry — this container makes it turn-key.
Get access
Use StreamDeploy to manage OTA updates, versioned configs, and rollbacks across fleets.
Request accessDockerfile
ARG BASE_IMAGE
FROM ${BASE_IMAGE:-"fluent/fluent-bit:2.2"}
USER root
RUN apk add --no-cache bash ca-certificates lm_sensors coreutils util-linux curl
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENV FB_OUT_FORMAT=json \
SINK_URL="" \
HOSTNAME=edge-node \
EXTRA_LABELS=""
EXPOSE 2020
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s \
CMD nc -z localhost 2020 || exit 0
ENTRYPOINT ["/entrypoint.sh"]
entrypoint.sh
#!/usr/bin/env bash
set -euo pipefail
: "${SINK_URL:=}"
: "${HOSTNAME:=edge-node}"
: "${FB_OUT_FORMAT:=json}"
: "${EXTRA_LABELS:=}"
cat > /fluent-bit/etc/fluent-bit.conf <<'CONF'
[SERVICE]
Daemon Off
HTTP_Server On
HTTP_Listen 0.0.0.0
HTTP_Port 2020
[INPUT]
Name tail
Path /var/log/*.log,/var/log/syslog
Tag sys.*
Parser docker
[INPUT]
Name cpu
Tag metrics.cpu
[INPUT]
Name mem
Tag metrics.mem
[INPUT]
Name disk
Tag metrics.disk
[INPUT]
Name netif
Tag metrics.net
[INPUT]
Name systemd
Tag ros.*
Systemd_Filter _COMM=ros2
DB /var/log/ros_systemd.sqlite
CONF
if [[ -n "${SINK_URL}" ]]; then
cat >> /fluent-bit/etc/fluent-bit.conf <<CONF
[OUTPUT]
Name http
Match *
Host $(echo "${SINK_URL}" | sed -E 's#https?://([^/:]+).*#\1#')
URI /$(echo "${SINK_URL}" | sed -E 's#https?://[^/]+/?##')
Format ${FB_OUT_FORMAT}
Header X-Edge-Host ${HOSTNAME}
Header X-Labels ${EXTRA_LABELS}
CONF
fi
exec /fluent-bit/bin/fluent-bit -c /fluent-bit/etc/fluent-bit.conf