add metrics endpoint adn external config

main
alexandrev-tibco 2025-08-30 09:05:45 +02:00
parent 4c4a188cbb
commit ad5ef9085c
1 changed files with 115 additions and 2 deletions

View File

@ -18,7 +18,7 @@ update_notes() {
case "$os" in
alpine)
update_cmd="apk update && apk upgrade --no-cache"
install_base_pkgs="apk add --no-cache docker openssh"
install_base_pkgs="apk add --no-cache docker openssh jq"
# Comprobar si tailscale está instalado
check_tailscale_installed=$(pct exec "$vmid" -- sh -c "which tailscale 2>/dev/null || echo notfound")
@ -35,7 +35,7 @@ update_notes() {
;;
ubuntu)
update_cmd="apt-get update && DEBIAN_FRONTEND=noninteractive apt-get upgrade -y"
install_base_pkgs="apt-get install -y docker.io openssh-server"
install_base_pkgs="apt-get install -y docker.io openssh-server jq"
check_tailscale_installed=$(pct exec "$vmid" -- sh -c "which tailscale 2>/dev/null || echo notfound")
if [[ "$check_tailscale_installed" == "notfound" ]]; then
@ -63,6 +63,119 @@ update_notes() {
pct exec "$vmid" -- sh -c "$enable_ssh"
pct exec "$vmid" -- sh -c "$enable_tailscale_check"
echo "[INFO] Verificando configuración del Docker API y métricas en $type $vmid..."
pct exec "$vmid" -- sh -c '
set -e
mkdir -p /etc/docker
DAEMON_JSON="/etc/docker/daemon.json"
TMP_JSON="/etc/docker/daemon.json.tmp"
ensure_json() {
if [ -f "$DAEMON_JSON" ]; then
echo "[INFO] daemon.json existente encontrado. Verificando llaves requeridas..."
if ! command -v jq >/dev/null 2>&1; then
echo "[ERROR] jq no está instalado; no se puede actualizar JSON de Docker." >&2
exit 1
fi
jq \
'\n (.hosts = ((.hosts // []) + ["unix:///var/run/docker.sock","tcp://0.0.0.0:2375"]) | .hosts |= unique)\n | .["metrics-addr"] = "0.0.0.0:9023"\n | .experimental = true\n ' "$DAEMON_JSON" > "$TMP_JSON"
else
echo "[INFO] Creando daemon.json con configuración por defecto (API TCP + métricas)."
cat > "$TMP_JSON" <<'JSON'
{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"],
"metrics-addr": "0.0.0.0:9023",
"experimental": true
}
JSON
fi
if [ ! -f "$DAEMON_JSON" ] || ! cmp -s "$DAEMON_JSON" "$TMP_JSON"; then
echo "[INFO] Aplicando cambios a daemon.json"
cp "$TMP_JSON" "$DAEMON_JSON"
JSON_CHANGED=1
else
echo "[INFO] daemon.json ya contiene la configuración requerida."
JSON_CHANGED=0
fi
rm -f "$TMP_JSON"
}
apply_systemd_override_if_needed() {
# Sólo para sistemas con systemd (Ubuntu)
if command -v systemctl >/dev/null 2>&1; then
echo "[INFO] Detectado systemd. Verificando override de servicio Docker..."
mkdir -p /etc/systemd/system/docker.service.d
OVERRIDE="/etc/systemd/system/docker.service.d/override.conf"
NEED_OVERRIDE=0
if systemctl cat docker 2>/dev/null | grep -qE "ExecStart=.*-H fd://"; then
NEED_OVERRIDE=1
fi
if [ $NEED_OVERRIDE -eq 1 ]; then
echo "[INFO] Creando override de systemd para remover -H fd:// y permitir hosts desde daemon.json"
cat > "$OVERRIDE" <<'OVR'
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
OVR
systemctl daemon-reload
OVERRIDE_APPLIED=1
else
echo "[INFO] No se requiere override de systemd."
OVERRIDE_APPLIED=0
fi
else
OVERRIDE_APPLIED=0
fi
}
restart_docker() {
if command -v systemctl >/dev/null 2>&1; then
systemctl restart docker || true
if systemctl is-active --quiet docker; then
echo "[INFO] Docker reiniciado (systemd)."
else
echo "[WARN] Docker no está activo tras reinicio (systemd)."
fi
elif command -v rc-service >/dev/null 2>&1; then
rc-service docker restart || true
rc-service docker status || true
echo "[INFO] Docker reiniciado (OpenRC)."
else
echo "[WARN] No se pudo detectar gestor de servicios para reiniciar Docker."
fi
}
check_listeners() {
echo "[INFO] Comprobando puertos en escucha para Docker..."
if command -v ss >/dev/null 2>&1; then
ss -lnt | awk "{print}"
elif command -v netstat >/dev/null 2>&1; then
netstat -lnt || true
fi
if ss -lnt 2>/dev/null | grep -q ":2375 "; then
echo "[INFO] API Docker TCP escuchando en 0.0.0.0:2375"
else
echo "[WARN] API Docker TCP NO detectada en 0.0.0.0:2375"
fi
if ss -lnt 2>/dev/null | grep -q ":9023 "; then
echo "[INFO] Métricas Docker escuchando en 0.0.0.0:9023"
else
echo "[WARN] Métricas Docker NO detectadas en 0.0.0.0:9023"
fi
}
ensure_json
apply_systemd_override_if_needed
if [ ${JSON_CHANGED:-0} -eq 1 ] || [ ${OVERRIDE_APPLIED:-0} -eq 1 ]; then
restart_docker
else
echo "[INFO] Configuración de Docker ya presente; no se requiere reinicio."
fi
check_listeners
'
# Estado tailscale
tailscale_status=$(pct exec "$vmid" -- sh -c "$check_tailscale_status" 2>&1)
if echo "$tailscale_status" | grep -q "running"; then