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