59 lines
3.4 KiB
Bash
Executable File
59 lines
3.4 KiB
Bash
Executable File
#!/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'
|