Grup 4 - 7. Monitorització del sistema Proxmox. Notificació d’events (via email, SMS, IM, trucada telèfon, segons grau d’alarma).

De Wiket
Salta a la navegació Salta a la cerca

Prometheus

Primero instalamos en los nodos los paquete que necesitamos para la exportación a Prometheus.

sudo apt install python3-venv

captura1pr

Creamos un entorno virtual de python3, con esta línea.

python3 -venv /opt/prometheus-pve-exporter

captura2pr

Ejecutamos esta línea para empezar la instalación de prometheus

/opt/prometheus-pve-exporter/bin/pip install prometheus-pve-exporter

captura3pr

Comprobamos con un help de que esta funcionando correctamente.

captura4pr

Ahora creamos la carpeta de Prometheus y con "cat" añadimos el pve.yml, con los datos de inicio de sesión del cluster.

mkdir -p /etc/prometheus
cat <<EOF> /etc/promethes/pve.yml
default:
    user: root@pam
    password: P@ssw0rd
    verify_ssl: false
EOF

captura5pr

Por ultimo ejecutamos el prometheus-pve-exporter, para comprobar de que no nos da ningún fallo al conectarse.

captura7pr

Una vez vemos que funciona correctamente, creamos el servició, para habilitarlo en el arranque.

cat <<EOF> /etc/systemd/system/prometheus-pve-exporter.service
[Unit]
Description=Prometheus exporter for Proxmox VE
Documentation=https://github.com/znerol/prometheus-pve-exporter

[Service]
Restart=always
User=prometheus
ExecStart=/usr/local/bin/pve_exporter /etc/prometheus/pve.yml

[Install]
WantedBy=multi-user.target
EOF

captura8pr

Reiniciamos los servicio y comprobamos que arranca sin problema.

captura9pr

Por ultimo lo habilitamos para que cada vez que el servidor se encienda, arranque el pve-exporter.

systemctl enable prometheus-pve-exporter.service

prome1

Añadimos la iso de un Ubuntu en el almacenamiento local donde vamos a instalar el Prometheus.

prome2

Creamos la maquina en el CEPH-VMS, para la instalación.

prome3

Le ponemos un nombre y un ID al VM

prome4

En "Hard Disk" ponemos la pool del CEPH-VMS y en "Disk space" el espació de disco que queremos.

prome5

Arrancamos la maquina creada.

prome6

Al tener la iso del ubuntu en la maquina, arrancara directamente desde el disco.

prome7

Configuración del usuario y contraseña de la maquina Ubuntu.

prome8

Una vez arrancada la accedemos a la pagina de descarga de Prometheus oficial y descargamos el "*linux-amd64.tar.gz"

prome9

Descomprimimos el tar y creamos la carpeta para el Prometheus.

mkdir -p /etc/prometheus

prome10

Movemos todos los archivos descomprimimos a la raíz de "/etc/prometheus".

prome11

Realizamos una copia del "prometheus.yml".

prome12

Añadimos nuestra configuración.

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
           - localhost:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
   - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]
  - job_name: 'pve'
    static_configs:
      - targets:
        - 192.168.88.6:9221  # Proxmox VE node with PVE exporter.
        - 192.168.88.7:9221  # Proxmox VE node with PVE exporter.
    metrics_path: /pve
    params:
      module: [default]

prome13

Realizamos un "nc" para comprobar que hay conexión con los nodos.

nc -v ip-nodo 9221

prome14

Cuando todo esta funcionando creamos el servició de prometheus.

nano /etc/systemd/system/prometheus.service

[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
Type=simple
ExecStart=/etc/prometheus/prometheus --storage.tsdb.path=/etc/prometheus/data/ --web.external-url=http://localhost:9090 --config.file=/etc/prometheus/prometheus.yml
[Install]
WantedBy=multi-user.target

prome15

Iniciamos el servició y lo habilitamos como hicimos en los nodos y accedemos a la pagina web de Prometheus para comprobar de que esta funcionando.

prome16

Comprobamos en "Targets", que están los 2 nodos conectados.

prome17

Grafana

Accedemos a la pagina oficial de descarga de Grafana, y seleccionamos la versión OSS, que es la comunitaria y la gratuita.

prome18

Nos dará este comando, para descargar la versión desde terminal.

wget https://dl.grafana.com/oss/release/grafana-8.4.5.linux-amd64.tar.gz

prome19

Creamos la carpeta de Grafana y añadimos todos los archivos descargados.

mkdir -p /etc/grafana

prome20

Realizamos este comando para arrancar Grafana y comprobar de que funciona correctamente.

./etc/grafana/bin/grafana-server

prome21

Ahora creamos el servicio de Grafana, para habilitarlo y lo iniciamos.

nano /lib/systemd/system/grafana-server.service

[Unit]
Description=Grafana instance
Documentation=http://docs.grafana.org
Wants=network-online.target
After=network-online.target
After=postgresql.service mariadb.service mysqld.service

[Service]
EnvironmentFile=/etc/grafana/bin/grafana-server
User=root
Group=root
Type=notify
Restart=on-failure
WorkingDirectory=/usr/share/grafana
RuntimeDirectory=grafana
RuntimeDirectoryMode=0750
ExecStart=/etc/grafana/bin/grafana-server                                                  \
                            --config=${CONF_FILE}                                   \
                            --pidfile=${PID_FILE_DIR}/grafana-server.pid            \
                            --packaging=rpm                                         \
                            cfg:default.paths.logs=${LOG_DIR}                       \
                            cfg:default.paths.data=${DATA_DIR}                      \
                            cfg:default.paths.plugins=${PLUGINS_DIR}                \
                            cfg:default.paths.provisioning=${PROVISIONING_CFG_DIR}  

LimitNOFILE=10000
TimeoutStopSec=20
CapabilityBoundingSet=
DeviceAllow=
LockPersonality=true
MemoryDenyWriteExecute=false
NoNewPrivileges=true
PrivateDevices=true
PrivateTmp=true
ProtectClock=true
ProtectControlGroups=true
ProtectHome=true
ProtectHostname=true
ProtectKernelLogs=true
ProtectKernelModules=true
ProtectKernelTunables=true
ProtectProc=invisible
ProtectSystem=full
RemoveIPC=true
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
RestrictNamespaces=true
RestrictRealtime=true
RestrictSUIDSGID=true
SystemCallArchitectures=native
UMask=0027

[Install]
WantedBy=multi-user.target

prome22

Accedemos a la dirección de Grafana por ip:3000 y comprobamos si nos carga la pagina web de Grafana.

Login: Admin Password: Admin

prome23

Dentro de grafana nos vamos a la configuración de base de datos para añadir una nueva, dando ha "Add data source".

prome24

Seleccionamos la opción de Prometheus, que es la primera que nos sale.

prome25

Le ponemos un nombre, después en "URL", ponemos la dirección del Prometheus "http://localhost:9090" y no tocamos nada mas.

prome26

Bajamos y le damos al botón de "Save and Test" y comprobamos de que nos salga la notificación en verde.

prome27

Ahora buscamos la plantilla de Proxmox, que vamos a utilizar en la pagina de Dashboards de Grafana.

10347

prome28

Añadimos el template de la dashboord en el Grafana.

prome28

Comprobamos que recibimos los datos en los propios gráficos del Grafana y que todos funcionan correctamente.

prome29

prome30

Alertmanager (Prometheus)

Vamos a la pagina de prometheus, y buscamos el complemento de alertmanager y lo descargamos "*linux-amd64.tar.gz".

prome31

Creamos la carpeta para el Alertmanager y movemos todos los archivos descomprimidos del "tar.gz".

mkdir -p /etc/alertmanager

prome32

Realizamos una copia del "alertmanager.yml".

prome33

Creamos nuestro "alertmanager.yml" en "/etc/alertmanager".

global:
  resolve_timeout: 5m

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 24h
  receiver: 'email'
receivers:
- name: 'email'
  email_configs:
  - to: '[email protected], [email protected]'
	from: '[email protected]'
	smarthost: smtp.gmail.com:587
	auth_username: '[email protected]'
	auth_identity: '[email protected]'
	auth_password: 'alertasieti123'

prome34

Creamos el servició del Alertmanager, para hacer lo mismo que con los otros 2, habilitarlo e iniciarlo.

nano /etc/systemd/system/alertmanager.yml

[Unit]
Description=Alertmanager
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
Type=simple
ExecStart=/etc/alertmanager/alertmanager --storage.path=/etc/alertmanager/data/ --config.file=/etc/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target

prome35

Iniciamos el servicio del alertmanager.

prome36

Nos faltaría si no lo hemos hecho previamente acceder al "prometheus.yml" y añadir estas líneas si no las tenemos.

prome37

Accedemos a la pagina del alertmanager "http://ip:9093" y comprobamos si nos funciona.

prome38

Realizamos los "enable", para que se inicien los servicios, cada vez que la maquina de apague.

prome39

Ahora creamos las reglas para generar las alertas, dejo aquí las reglas que creamos.

#Alertas cpu nodos

pve_cpu_usage_ratio{id="node/proyectovr5"} / pve_cpu_usage_limit {id="node/proyectovr5"} > 0.6

pve_cpu_usage_ratio{id="node/proyectovr6"} / pve_cpu_usage_limit {id="node/proyectovr6"} > 0.6

#Alerta RAM nodo

pve_memory_usage_bytes{id="node/proyectovr5"} / pve_memory_size_bytes {id="node/proyectovr5"} > 0.9

pve_memory_usage_bytes{id="node/proyectovr6"} / pve_memory_size_bytes {id="node/proyectovr6"} > 0.9

#Alerta Almacenamiento

pve_disk_usage_bytes {id="storage/proyectovr5/CEPH-VMS"} / pve_disk_size_bytes {id="storage/proyectovr5/CEPH-VMS"} > 0.5

pve_disk_usage_bytes {id="storage/proyectovr5/HDD"} / pve_disk_size_bytes {id="storage/proyectovr5/HDD"} > 0.5

pve_disk_usage_bytes {id="storage/proyectovr6/CEPH-VMS"} / pve_disk_size_bytes {id="storage/proyectovr6/CEPH-VMS"} > 0.5

pve_disk_usage_bytes {id="storage/proyectovr6/HDD"} / pve_disk_size_bytes {id="storage/proyectovr6/HDD"} > 0.5

#Alerta Nodo Caído

pve_up {id="node/proyectovr5"} == 0

pve_up {id="node/proyectovr6"} == 0

#Alerta VM caidas

pve_up {id="qemu/100"} == 0

pve_up {id="qemu/101"} == 0

pve_up {id="qemu/102"} == 0

prome40

Comprobación de las alertas en Alertmanager.

prome41

Comprobación de las alertas en Gmail.

prome42