Настройка компонентов мониторинга Grafana + Prometheus

apt update && \
apt install -y prometheus-node-exporter smartmontools prometheus-node-exporter-collectors && \
mkdir -p /var/lib/prometheus/node-exporter && \
cat >/etc/default/prometheus-node-exporter <<'EOF'
ARGS="--collector.textfile.directory=/var/lib/prometheus/node-exporter"
EOF

pveum user add prometheus@pve --password 'Сюдапишемпарольотпользователя' 2>/dev/null || true
pveum acl modify / -user prometheus@pve -role PVEAuditor

pveum user token add prometheus@pve prometheus --privsep 0 --output-format json | \
jq -r '"API Token:\n\(.value)"'

hostname -f



#В конце вывода будет текст вида 
#API Token:
7а766667-5кe2-111d-лc3f-a1111еe0000ы
#Токен нужно сохранить 
#Проверяем

systemctl enable smartmontools && \
systemctl start smartmontools && \
systemctl enable prometheus-node-exporter-smartmon.timer && \
systemctl start prometheus-node-exporter-smartmon.timer && \
echo && \
echo "==== prometheus-node-exporter ====" && \
systemctl --no-pager --lines=3 status prometheus-node-exporter && \
echo && \
echo "==== smartmon timer ====" && \
systemctl --no-pager --lines=3 status prometheus-node-exporter-smartmon.timer && \
echo && \
echo "==== Node Exporter ====" && \
curl -s http://127.0.0.1:9100/metrics | head && \
echo && \
echo "==== SMART ====" && \
curl -s http://127.0.0.1:9100/metrics | grep smartmon | head -20 && \
echo && \
echo "==== ZFS ====" && \
curl -s http://127.0.0.1:9100/metrics | grep node_zfs_ | head -20
#на сервере 
#далее запускаем 
#/usr/local/bin/add_proxmox_node.sh
# или создаём скрипт, а потом запускаем.  
#systemctl restart prometheus-pve-exporter prometheus


cat > /usr/local/bin/add_proxmox_node.sh <<'EOF'
#!/bin/bash
set -e

PVE_YML="/opt/prometheus-pve-exporter/pve.yml"
PROM_YML="/etc/prometheus/prometheus.yml"

read -rp "Короткое имя ноды/module (например node1): " MODULE
read -rp "FQDN или IP ноды: " TARGET
read -rp "API user [prometheus@pve]: " API_USER
API_USER="${API_USER:-prometheus@pve}"

read -rp "Token name [prometheus]: " TOKEN_NAME
TOKEN_NAME="${TOKEN_NAME:-prometheus}"

read -rsp "Token value: " TOKEN
echo

if [ -z "$MODULE" ] || [ -z "$TARGET" ] || [ -z "$TOKEN" ]; then
  echo "Ошибка: module, target и token value обязательны."
  exit 1
fi

echo "== Добавляем модуль ${MODULE} в pve.yml =="

if grep -q "^${MODULE}:" "$PVE_YML"; then
  echo "Модуль ${MODULE} уже есть"
else
cat >> "$PVE_YML" <<EOM

${MODULE}:
    user: ${API_USER}
    token_name: ${TOKEN_NAME}
    token_value: "${TOKEN}"
    verify_ssl: false
EOM
fi

echo "== Добавляем node_exporter ${TARGET}:9100 =="

if grep -q "${TARGET}:9100" "$PROM_YML"; then
  echo "Node target уже есть"
else
  sed -i "/- localhost:9100/a\          - ${TARGET}:9100" "$PROM_YML"
fi

echo "== Добавляем Proxmox API job ${MODULE} =="

if grep -q "job_name: '${MODULE}'" "$PROM_YML"; then
  echo "Job ${MODULE} уже есть"
else
cat >> "$PROM_YML" <<EOM

  - job_name: '${MODULE}'
    metrics_path: /pve
    params:
      module: [${MODULE}]
    static_configs:
      - targets:
          - ${TARGET}
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 127.0.0.1:9221
EOM
fi

echo "== Проверяем Prometheus config =="
promtool check config "$PROM_YML"

echo "== Перезапускаем сервисы =="
systemctl restart prometheus-pve-exporter
systemctl restart prometheus

echo "== Проверка targets =="
sleep 3

curl -s http://127.0.0.1:9090/api/v1/targets | \
jq '.data.activeTargets[] | {job:.labels.job,instance:.labels.instance,health:.health}' | \
grep -A2 -E "\"${MODULE}\"|\"${TARGET}:9100\"|\"${TARGET}\"" || true

echo
echo "Готово."
echo "Добавлено:"
echo "  module: ${MODULE}"
echo "  target: ${TARGET}"
echo "  api_user: ${API_USER}"
echo "  token_name: ${TOKEN_NAME}"
echo "  node_exporter: ${TARGET}:9100"
EOF

chmod +x /usr/local/bin/add_proxmox_node.sh


#после применения скрипта на всякий случай еще разок 
#systemctl restart prometheus-pve-exporter prometheus

#grafana #Prometheus #linux