#!/usr/bin/env bash # Despliega unibus_exporter en un nodo (por defecto magnus, el hub) como servicio # systemd. El exporter sondea el /healthz de los 3 nodos del cluster unibus por # IP pública y empuja métricas de estado/posture a la VictoriaMetrics local. # # Uso: ./deploy_unibus_exporter.sh [node_name] [ssh_host] # node_name : nombre lógico del host donde corre el exporter (default magnus) # ssh_host : alias SSH de ese host (default om) # # Requisitos: # - Go instalado localmente (compila el binario amd64). # - La CA del cluster unibus en projects/message_bus/apps/unibus/deploy/tls/ca.crt # (o cluster/out//ca.crt — son idénticas). # - sudo -n (sin password) en el host remoto. set -euo pipefail NODE="${1:-magnus}" HOST="${2:-om}" ROOT="$(cd "$(dirname "$0")/.." && pwd)" # projects/fleet_monitoring APP="$ROOT/apps/unibus_exporter" CA="$ROOT/../message_bus/apps/unibus/deploy/tls/ca.crt" HUB="http://127.0.0.1:8428/api/v1/import/prometheus" # VM local en el hub (sin auth) [ -f "$CA" ] || { echo "ERROR: falta la CA del cluster en $CA"; exit 1; } echo ">> compilando unibus_exporter (linux/amd64)" mkdir -p "$APP/dist" ( cd "$APP" && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o dist/unibus_exporter_amd64 . ) BIN="$APP/dist/unibus_exporter_amd64" echo ">> subiendo binario + CA a $HOST" scp -q -o BatchMode=yes "$BIN" "$HOST:/tmp/unibus_exporter" scp -q -o BatchMode=yes "$CA" "$HOST:/tmp/unibus_ca.crt" echo ">> instalando servicio en $NODE ($HOST)" ssh -o BatchMode=yes "$HOST" "NODE='$NODE' HUB='$HUB' bash -s" <<'OUTER' set -e sudo -n mkdir -p /opt/unibus-exporter /etc/unibus-exporter sudo -n mv /tmp/unibus_exporter /opt/unibus-exporter/unibus_exporter sudo -n chmod 755 /opt/unibus-exporter/unibus_exporter sudo -n mv /tmp/unibus_ca.crt /etc/unibus-exporter/ca.crt sudo -n chmod 644 /etc/unibus-exporter/ca.crt sudo -n tee /etc/unibus-exporter/unibus.json >/dev/null </dev/null <<'UNIT' [Unit] Description=unibus cluster exporter (fleet_monitoring) After=network-online.target Wants=network-online.target [Service] Type=simple ExecStart=/opt/unibus-exporter/unibus_exporter -config /etc/unibus-exporter/unibus.json Restart=always RestartSec=10 NoNewPrivileges=true [Install] WantedBy=multi-user.target UNIT sudo -n systemctl daemon-reload sudo -n systemctl enable unibus-exporter >/dev/null 2>&1 sudo -n systemctl restart unibus-exporter sleep 3 echo -n "status: "; systemctl is-active unibus-exporter OUTER echo ">> $NODE: unibus_exporter desplegado"