#!/usr/bin/env bash set -euo pipefail ROOT=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd) [[ $EUID -eq 0 ]] || { echo 'Run with sudo.' >&2; exit 1; } [[ -f /etc/debian_version ]] || { echo 'This installer targets Debian.' >&2; exit 1; } METRICS_HOST=${METRICS_HOST:-$(hostname -f 2>/dev/null || hostname)} METRICS_ENVIRONMENT=${METRICS_ENVIRONMENT:-lab} METRICS_ROLE=${METRICS_ROLE:-docker-host} KAFKA_BOOTSTRAP=${KAFKA_BOOTSTRAP:-127.0.0.1:9092} TELEGRAF_PACKAGE_VERSION=${TELEGRAF_PACKAGE_VERSION:-1.40.0-1} # These values are interpolated into TOML through a systemd EnvironmentFile. for value in "$METRICS_HOST" "$METRICS_ENVIRONMENT" "$METRICS_ROLE" "$KAFKA_BOOTSTRAP"; do [[ $value =~ ^[a-zA-Z0-9_.:/-]+$ ]] || { echo "Invalid label/endpoint: $value" >&2; exit 1; } done apt-get update apt-get install -y ca-certificates curl gnupg tmp=$(mktemp -d) trap 'rm -rf "$tmp"' EXIT curl --fail --silent --show-error --location --retry 3 \ https://repos.influxdata.com/influxdata-archive.key -o "$tmp/influxdata.key" gpg --batch --show-keys --with-colons "$tmp/influxdata.key" > "$tmp/key-info" awk -F: '$1 == "fpr" {print $10}' "$tmp/key-info" | \ grep -qx '24C975CBA61A024EE1B631787C3D57159FC2F927' install -d -m 0755 /etc/apt/keyrings gpg --batch --yes --dearmor --output "$tmp/influxdata.gpg" "$tmp/influxdata.key" if ! grep -Rqs 'repos.influxdata.com' /etc/apt/sources.list /etc/apt/sources.list.d 2>/dev/null; then install -m 0644 "$tmp/influxdata.gpg" /etc/apt/keyrings/influxdata-host-metrics.gpg printf '%s\n' 'deb [signed-by=/etc/apt/keyrings/influxdata-host-metrics.gpg] https://repos.influxdata.com/debian stable main' \ > /etc/apt/sources.list.d/influxdata-host-metrics.list else echo 'Using the existing InfluxData APT repository and its configured signing key.' fi apt-get update had_package=false if dpkg-query -W -f='${Status}' telegraf 2>/dev/null | grep -qx 'install ok installed'; then had_package=true; fi apt-get install -y "telegraf=$TELEGRAF_PACKAGE_VERSION" # On a fresh install, use our dedicated unit instead of the package default unit. if [[ $had_package == false ]]; then systemctl disable --now telegraf.service || true; fi install -d -m 0755 /etc/telegraf/host-metrics if [[ -f /etc/telegraf/host-metrics/telegraf.conf ]]; then cp -a /etc/telegraf/host-metrics "/etc/telegraf/host-metrics.backup.$(date +%s)" fi install -m 0644 "$ROOT/agent/telegraf.conf" /etc/telegraf/host-metrics/telegraf.conf install -m 0644 "$ROOT/agent/enrich.star" /etc/telegraf/host-metrics/enrich.star printf 'METRICS_HOST=%s\nMETRICS_ENVIRONMENT=%s\nMETRICS_ROLE=%s\nKAFKA_BOOTSTRAP=%s\n' \ "$METRICS_HOST" "$METRICS_ENVIRONMENT" "$METRICS_ROLE" "$KAFKA_BOOTSTRAP" \ > /etc/telegraf/host-metrics/environment chmod 0644 /etc/telegraf/host-metrics/environment install -m 0644 "$ROOT/agent/telegraf-host-metrics.service" /etc/systemd/system/telegraf-host-metrics.service # Validate configuration and gathering as the actual service user. runuser -u telegraf -- env METRICS_HOST="$METRICS_HOST" METRICS_ENVIRONMENT="$METRICS_ENVIRONMENT" \ METRICS_ROLE="$METRICS_ROLE" KAFKA_BOOTSTRAP="$KAFKA_BOOTSTRAP" \ telegraf --config /etc/telegraf/host-metrics/telegraf.conf --test --test-wait 3 systemctl daemon-reload systemctl enable telegraf-host-metrics.service systemctl restart telegraf-host-metrics.service systemctl --no-pager --full status telegraf-host-metrics.service echo 'Agent installed. Check ingestion with: ./scripts/smoke-test.sh'