Monitorización del sistema Proxmox

De Wiket
Salta a la navegació Salta a la cerca

Monitorización mediante Prometheus

Vamos a utilizar prometheus para la monitorización de proxmox, esta es una aplicación de software gratuita utilizada para la supervisión y alerta de eventos y nos permite registrar métricas en tiempo real y es gratuita.

Agentes prometheus

Primero vamos a instalar el agente que se encargará de exportar los datos del clúster, prometheus-exporter

Para ello tenemos que instalar el entorno de python3, ya que la herramienta se instala mediante el pip.

captura1pr

Creamos la carpeta con el entorno.

captura2pr

Instalamos el agente mediante /opt/prometheus-pve-exporter/bin/pip install prometheus-pve-exporter

captura3pr

Ya tenemos la herramienta instalada, y podemos ver con el flag --help los parámetros, para que funcione le tenemos que pasar un archivo pve.yml en el que pondremos el usuario y la contraseña del administrador del nodo.

captura4pr

Creamos un directorio y añadimos el pve.yml.

captura5pr

Utilizando la sentencia, pve_exporter /etc/prometheus/pve.yml, ya ponemos en funcionamiento el agente. Este se queda escuchando por el puerto :9221

captura7pr

Para que sea mas eficiente creamos un servicio, en el que se este siempre ejecutando en segundo plano. Este ejecuta la sentencia pve_exporter /etc/prometheus/pve.yml

captura8pr

Reiniciamos el daemon, arrancamos el servicio y vemos que esta activo y funcionando correctamente.

captura9pr

Y ahora activamos el servicio para que se inicie siempre.

prome1

Repetimos el mismo proceso en el otro nodo por si se cae un nodo, tener el otro exportando datos y que no se caiga el servicio.

Una vez tenemos los agentes instalados tenemos que crear la maquina de monitorización, esta la creamos dentro de un nodo para beneficiar-nos del HA y si se cayese de un nodo, se pasase al otro.

Prometheus

Para la maquina de monitorización instalaremos un ubuntu 20.04 Desktop.

La cargamos como iso image de manera local.

prome2

La vamos a instalar en el CEPH-VMS para que tenga una alta disponibilidad.

prome3

Creamos la máquina y le ponemos un nombre, esta coge un ID de máquina por defecto.

prome4

En storage elegimos el CEPH-VMS y le ponemos uno espacio de 124GB

prome5

Ya la tenemos creada ahora iniciamos la maquina.

prome6

Nos salta el instalador de ubuntu típico y hay que instalar el ubuntu como lo haríamos normalmente.

prome7

Le ponemos un usuario y una contraseña para la maquina.

prome8

Vamos a utilizar prometheus como sistema de monitorización ya que es 100% gratuito y muy eficiente. Por ello vamos a la página oficial y descargamos el paquete.

prome9

Creamos una carpeta en /etc que es donde lo tendremos almacenado.

prome10

Descomprimimos el .tar en el que viene y lo movemos todo a /etc/prometheus

prome11

Creamos una copia del archivo de configuración por si nuestra configuración petase y no sepamos como arreglar-lo, solo seria restablecer la configuración y volver a configurar.

prome12

Este es el archivo de configuración de prometheus.yml ya configurado, lo que hemos añadido es un job que lo hemos llamado pve y le estamos indicando las ip de los dos agentes y el puerto desde el cual están enviando metricas que son los dos nodos.

# 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]

Para comprobar que los agentes llegan al ubuntu, con un nc podemos hacer una prueba al puerto del agente y si nos sale succeded, es que esta abierto y llegamos entonces esta todo correcto.

prome14

Creamos prometheus como servicio para que este siempre arrancado.

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=root
ExecStart=/opt/prometheus-pve-exporter/bin/pve_exporter /etc/prometheus/pve.yml

[Install]
WantedBy=multi-user.target
EOF
Y lo arrancamos mediante estos dos comandos 
systemctl daemon-reload
systemctl start prometheus-pve-exporter

Abrimos el navegador y entramos en localhost:9090 nos saldrá la pantalla principal.

prome16

Vamos al apartado de status y podemos ver el job que hemos añadido anteriormente en el archivo de configuración y nos da información del estado si esta UP o DOWN. En el caso de que diese error nos saldría información del error.

prome17

Grafana

Ahora vamos a instalar Grafana que es un software para la visualización de datos métricos, y con este podremos visualizar los datos que tenemos en el prometheus y crear gráficos en tiempo real. Lo hemos utilizado ya que tiene licencia gratuita y tiene muchos usuarios activos, por ende hay foros con errores y soporte.

Vamos a la página oficial y nos descargamos la version gratuita OSS, para windows.

prome18

Lo descargamos mediante wget.

prome19

Creamos el directorio /etc/grafana y lo movemos todo a esa carpeta.

prome20

Tenemos que crear también el servicio.

[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
Y lo arrancamos mediante estos dos comandos 
systemctl daemon-reload
systemctl start grafana-server

Y vemos que esta arrancado.

prome22

Entramos a localhost:3000 , nos entra a la página de login y ponemos el usuario admin y contraseña admin que vienen por defecto.

prome23

Tenemos que sincronizar-lo con el prometheus por ello vamos a Datasources y le damos a Add data source.

prome24

Elegimos data source Prometheus.

prome25

Le ponemos un nombre y el url del prometheus con el data source localhost:9090

prome26

Le damos a Save & test y nos devuelve feedback si se ha conectado bien o no.

prome27

Una vez tenemos el prometheus conectado con el grafana, tenemos que importar un gráfico de la comunidad que nos guste. Para ello vamos a la pagina oficial de grafana y copiamos el numero de arriba a la derecha. En este caso el 10347.

prome28

Le damos a import, ponemos el numero y nos salen diferentes opciones, le ponemos un nombre, le indicamos donde queremos guardar, y le ponemos que use nuestra database prometheus.

Extra

Y ya tenemos los gráficos, donde podemos ver las maquinas del proxmox con sus % de cpu % de ram, la carga de cpu y ram de los nodos, el espacio de cada disco, y diferentes gráficos bastante útiles.

prome29

prome30

Alertmanager

Instalamos alertmanager que es un complemento del prometheus que sirve para configurar un correo electrónico y que mande alertas cuando se cumplen ciertos requisitos.

Vamos a la pagina oficial y lo descagamos.

prome31

Creamos su directorio y lo movemos todo.

prome32

Creamos una copia del archivo de configuración.

prome33

Y configuramos alertmanager.yml, hemos de configurar los correos a los que va a avisar, desde que correo, poner el smtp de gmail y el usuario, con su contraseña.

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'

Y creamos el servicio.

[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
Y lo arrancamos mediante estos dos comandos 
systemctl daemon-reload
systemctl start alertmanager

prome36

Vamos al archivo de configuración prometheus.yml y descomentamos la linea first_rules.yml

prome37

Una vez esta arrancado vamos a localhost:9093 y vemos que esta funcionando.

prome38

Editamos el archivo first_rules.yml dentro de /etc/prometheus, y aquí tenemos que crear todas las reglas que queremos que salten. Para crear una regla tenemos que ponerle un nombre y una condición para que salte, la metrica pve_up devuelve 1 cuando esta activo el nodo, por ello hacemos una expresión pve_up{id="node/proyectovr5"} filtrando el nodo elejido y lo igualamos a 0 por ello cuando el servidor se caiga la metrica pve_up mandara 0 por ende cuando se cumpla pve_up del proyectovr5 == 0 se cumplira la condición ya que se ha caido el nodo y nos mandará una alerta al correo, con severidad crítica y como información Nodo 5 caido.

prome40

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

En la pagina principal de prometheus localhost:9090 podemos ver las alertas y su estado.

prome41

Hemos apagado una maquina para comprobar que las alertas saltan, y podemos ver que nos las envia al correo, tal y como se han configurado.

prome42

Una vez tenemos todo funcionando activamos los servicios al arrancar la maquina mediante un enable.

prome39





Volver a IETI Cloud Grupo 2