Diferència entre revisions de la pàgina «Grup 4 - 7. Monitorització del sistema Proxmox. Notificació d’events (via email, SMS, IM, trucada telèfon, segons grau d’alarma).»
Línia 1: | Línia 1: | ||
<h2>Prometheus</h2> | <h2>Prometheus</h2> | ||
− | Primero instalamos los paquete que necesitamos para la | + | Primero instalamos en los nodos los paquete que necesitamos para la exportación a Prometheus. |
<pre>sudo apt install python3-venv</pre> | <pre>sudo apt install python3-venv</pre> | ||
Línia 24: | Línia 24: | ||
Ahora creamos la carpeta de Prometheus y con "cat" añadimos el pve.yml, con los datos de inicio de sesión del cluster. | Ahora creamos la carpeta de Prometheus y con "cat" añadimos el pve.yml, con los datos de inicio de sesión del cluster. | ||
+ | |||
+ | <pre>mkdir -p /etc/prometheus | ||
+ | cat <<EOF> /etc/promethes/pve.yml | ||
+ | default: | ||
+ | user: root@pam | ||
+ | password: P@ssw0rd | ||
+ | verify_ssl: false | ||
+ | EOF</pre> | ||
[[File:Captura5pr.PNG|captura5pr|border|600px]] | [[File:Captura5pr.PNG|captura5pr|border|600px]] | ||
Línia 33: | Línia 41: | ||
Una vez vemos que funciona correctamente, creamos el servició, para habilitarlo en el arranque. | Una vez vemos que funciona correctamente, creamos el servició, para habilitarlo en el arranque. | ||
− | <pre> cat <<EOF> /etc/systemd/system/prometheus-pve-exporter.service | + | <pre>cat <<EOF> /etc/systemd/system/prometheus-pve-exporter.service |
[Unit] | [Unit] | ||
Description=Prometheus exporter for Proxmox VE | Description=Prometheus exporter for Proxmox VE | ||
Línia 48: | Línia 56: | ||
[[File:Practica8pr.PNG|captura8pr|border|600px]] | [[File:Practica8pr.PNG|captura8pr|border|600px]] | ||
+ | |||
+ | Reiniciamos los servicio y comprobamos que arranca sin problema. | ||
[[File:Practica9pr.PNG|captura9pr|border|600px]] | [[File:Practica9pr.PNG|captura9pr|border|600px]] | ||
+ | |||
+ | Por ultimo lo habilitamos para que cada vez que el servidor se encienda, arranque el pve-exporter. | ||
+ | |||
+ | <pre>systemctl enable prometheus-pve-exporter.service</pre> | ||
[[File:Prome1.png|prome1|border|600px]] | [[File:Prome1.png|prome1|border|600px]] | ||
+ | |||
+ | Añadimos la iso de un Ubuntu en el almacenamiento local donde vamos a instalar el Prometheus. | ||
[[File:Prome2.png|prome2|border|600px]] | [[File:Prome2.png|prome2|border|600px]] | ||
+ | |||
+ | Creamos la maquina en el CEPH-VMS, para la instalación. | ||
[[File:Prome3.png|prome3|border|600px]] | [[File:Prome3.png|prome3|border|600px]] | ||
+ | |||
+ | Le ponemos un nombre y un ID al VM | ||
[[File:Prome4.png|prome4|border|600px]] | [[File:Prome4.png|prome4|border|600px]] | ||
+ | |||
+ | En "Hard Disk" ponemos la pool del CEPH-VMS y en "Disk space" el espació de disco que queremos. | ||
[[File:Prome5.png|prome5|border|600px]] | [[File:Prome5.png|prome5|border|600px]] | ||
+ | |||
+ | Arrancamos la maquina creada. | ||
[[File:Prome6.png|prome6|border|600px]] | [[File:Prome6.png|prome6|border|600px]] | ||
+ | |||
+ | Al tener la iso del ubuntu en la maquina, arrancara directamente desde el disco. | ||
[[File:Prome7.png|prome7|border|600px]] | [[File:Prome7.png|prome7|border|600px]] | ||
+ | |||
+ | Configuración del usuario y contraseña de la maquina Ubuntu. | ||
[[File:Prome8.png|prome8|border|600px]] | [[File:Prome8.png|prome8|border|600px]] | ||
+ | |||
+ | Una vez arrancada la accedemos a la pagina de descarga de Prometheus oficial y descargamos el "*linux-amd64.tar.gz" | ||
[[File:Prome9.png|prome9|border|600px]] | [[File:Prome9.png|prome9|border|600px]] | ||
+ | |||
+ | Descomprimimos el tar y creamos la carpeta para el Prometheus. | ||
+ | |||
+ | <pre>mkdir -p /etc/prometheus</pre> | ||
[[File:Prome10.png|prome10|border|600px]] | [[File:Prome10.png|prome10|border|600px]] | ||
+ | |||
+ | Movemos todos los archivos descomprimimos a la raíz de "/etc/prometheus". | ||
[[File:Prome11.png|prome11|border|600px]] | [[File:Prome11.png|prome11|border|600px]] | ||
+ | |||
+ | Realizamos una copia del "prometheus.yml". | ||
[[File:Prome12.png|prome12|border|600px]] | [[File:Prome12.png|prome12|border|600px]] | ||
+ | |||
+ | Añadimos nuestra configuración. | ||
+ | |||
+ | <pre># 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]</pre> | ||
[[File:Prome13.png|prome13|border|600px]] | [[File:Prome13.png|prome13|border|600px]] | ||
+ | |||
+ | Realizamos un "nc" para comprobar que hay conexión con los nodos. | ||
+ | |||
+ | <pre>nc -v ip-nodo 9221</pre> | ||
[[File:Prome14.png|prome14|border|600px]] | [[File:Prome14.png|prome14|border|600px]] | ||
+ | |||
+ | Cuando todo esta funcionando creamos el servició de prometheus. | ||
+ | |||
+ | <pre>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</pre> | ||
[[File:Prome15.png|prome15|border|600px]] | [[File:Prome15.png|prome15|border|600px]] | ||
+ | |||
+ | 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. | ||
[[File:Prome16.png|prome16|border|600px]] | [[File:Prome16.png|prome16|border|600px]] | ||
+ | |||
+ | Comprobamos en "Targets", que están los 2 nodos conectados. | ||
[[File:Prome17.png|prome17|border|600px]] | [[File:Prome17.png|prome17|border|600px]] | ||
<h2>Grafana</h2> | <h2>Grafana</h2> | ||
+ | |||
+ | Accedemos a la pagina oficial de descarga de Grafana, y seleccionamos la versión OSS, que es la comunitaria y la gratuita. | ||
[[File:Prome18.png|prome18|border|600px]] | [[File:Prome18.png|prome18|border|600px]] | ||
+ | |||
+ | Nos dará este comando, para descargar la versión desde terminal. | ||
+ | |||
+ | <pre>wget https://dl.grafana.com/oss/release/grafana-8.4.5.linux-amd64.tar.gz</pre> | ||
[[File:Prome19.png|prome19|border|600px]] | [[File:Prome19.png|prome19|border|600px]] | ||
+ | |||
+ | Creamos la carpeta de Grafana y añadimos todos los archivos descargados. | ||
+ | |||
+ | <pre>mkdir -p /etc/grafana</pre> | ||
[[File:Prome20.png|prome20|border|600px]] | [[File:Prome20.png|prome20|border|600px]] | ||
+ | |||
+ | Realizamos este comando para arrancar Grafana y comprobar de que funciona correctamente. | ||
+ | |||
+ | <pre>./etc/grafana/bin/grafana-server</pre> | ||
[[File:Prome21.png|prome21|border|600px]] | [[File:Prome21.png|prome21|border|600px]] | ||
+ | |||
+ | Ahora creamos el servicio de Grafana, para habilitarlo y lo iniciamos. | ||
+ | |||
+ | <pre>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</pre> | ||
[[File:Prome22.png|prome22|border|600px]] | [[File:Prome22.png|prome22|border|600px]] | ||
+ | |||
+ | Accedemos a la dirección de Grafana por ip:3000 y comprobamos si nos carga la pagina web de Grafana. | ||
+ | |||
+ | Login: Admin | ||
+ | Password: Admin | ||
[[File:Prome23.png|prome23|border|600px]] | [[File:Prome23.png|prome23|border|600px]] | ||
+ | |||
+ | Dentro de grafana nos vamos a la configuración de base de datos para añadir una nueva, dando ha "Add data source". | ||
[[File:Prome24.png|prome24|border|600px]] | [[File:Prome24.png|prome24|border|600px]] | ||
+ | |||
+ | Seleccionamos la opción de Prometheus, que es la primera que nos sale. | ||
[[File:Prome25.png|prome25|border|600px]] | [[File:Prome25.png|prome25|border|600px]] | ||
+ | |||
+ | Le ponemos un nombre, después en "URL", ponemos la dirección del Prometheus "http://localhost:9090" y no tocamos nada mas. | ||
[[File:Prome26.png|prome26|border|600px]] | [[File:Prome26.png|prome26|border|600px]] | ||
+ | |||
+ | Bajamos y le damos al botón de "Save and Test" y comprobamos de que nos salga la notificación en verde. | ||
[[File:Prome27.png|prome27|border|600px]] | [[File:Prome27.png|prome27|border|600px]] | ||
+ | |||
+ | Ahora buscamos la plantilla de Proxmox, que vamos a utilizar en la pagina de Dashboards de Grafana. | ||
+ | |||
+ | <pre>10347</pre> | ||
[[File:Prome28.png|prome28|border|600px]] | [[File:Prome28.png|prome28|border|600px]] | ||
+ | |||
+ | Añadimos el template de la dashboord en el Grafana. | ||
+ | |||
+ | [[File:Extra.png|prome28|border|600px]] | ||
+ | |||
+ | Comprobamos que recibimos los datos en los propios gráficos del Grafana y que todos funcionan correctamente. | ||
[[File:Prome29.png|prome29|border|600px]] | [[File:Prome29.png|prome29|border|600px]] | ||
Línia 114: | Línia 312: | ||
<h2>Alertmanager (Prometheus)</h2> | <h2>Alertmanager (Prometheus)</h2> | ||
+ | |||
+ | Vamos a la pagina de prometheus, y buscamos el complemento de alertmanager y lo descargamos "*linux-amd64.tar.gz". | ||
[[File:Prome31.png|prome31|border|600px]] | [[File:Prome31.png|prome31|border|600px]] | ||
+ | |||
+ | Creamos la carpeta para el Alertmanager y movemos todos los archivos descomprimidos del "tar.gz". | ||
+ | |||
+ | <pre>mkdir -p /etc/alertmanager</pre> | ||
[[File:Prome32.png|prome32|border|600px]] | [[File:Prome32.png|prome32|border|600px]] | ||
+ | |||
+ | Realizamos una copia del "alertmanager.yml". | ||
[[File:Prome33.png|prome33|border|600px]] | [[File:Prome33.png|prome33|border|600px]] | ||
+ | |||
+ | Creamos nuestro "alertmanager.yml" en "/etc/alertmanager". | ||
+ | |||
+ | <pre>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'</pre> | ||
[[File:Prome34.png|prome34|border|600px]] | [[File:Prome34.png|prome34|border|600px]] | ||
+ | |||
+ | Creamos el servició del Alertmanager, para hacer lo mismo que con los otros 2, habilitarlo e iniciarlo. | ||
+ | |||
+ | <pre>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</pre> | ||
[[File:Prome35.png|prome35|border|600px]] | [[File:Prome35.png|prome35|border|600px]] | ||
+ | |||
+ | Iniciamos el servicio del alertmanager. | ||
[[File:Prome36.png|prome36|border|600px]] | [[File:Prome36.png|prome36|border|600px]] | ||
+ | |||
+ | Nos faltaría si no lo hemos hecho previamente acceder al "prometheus.yml" y añadir estas líneas si no las tenemos. | ||
[[File:Prome37.png|prome37|border|600px]] | [[File:Prome37.png|prome37|border|600px]] | ||
+ | |||
+ | Accedemos a la pagina del alertmanager "http://ip:9093" y comprobamos si nos funciona. | ||
[[File:Prome38.png|prome38|border|600px]] | [[File:Prome38.png|prome38|border|600px]] | ||
+ | |||
+ | Realizamos los "enable", para que se inicien los servicios, cada vez que la maquina de apague. | ||
[[File:Prome39.png|prome39|border|600px]] | [[File:Prome39.png|prome39|border|600px]] | ||
+ | |||
+ | Ahora creamos las reglas para generar las alertas, dejo aquí las reglas que creamos. | ||
+ | |||
+ | <pre>#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</pre> | ||
[[File:Prome40.png|prome40|border|600px]] | [[File:Prome40.png|prome40|border|600px]] | ||
+ | |||
+ | Comprobación de las alertas en Alertmanager. | ||
[[File:Prome41.png|prome41|border|600px]] | [[File:Prome41.png|prome41|border|600px]] | ||
+ | |||
+ | Comprobación de las alertas en Gmail. | ||
[[File:Prome42.png|prome42|border|600px]] | [[File:Prome42.png|prome42|border|600px]] |
Revisió de 01:21, 7 abr 2022
Prometheus
Primero instalamos en los nodos los paquete que necesitamos para la exportación a Prometheus.
sudo apt install python3-venv
Creamos un entorno virtual de python3, con esta línea.
python3 -venv /opt/prometheus-pve-exporter
Ejecutamos esta línea para empezar la instalación de prometheus
/opt/prometheus-pve-exporter/bin/pip install prometheus-pve-exporter
Comprobamos con un help de que esta funcionando correctamente.
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
Por ultimo ejecutamos el prometheus-pve-exporter, para comprobar de que no nos da ningún fallo al conectarse.
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
Reiniciamos los servicio y comprobamos que arranca sin problema.
Por ultimo lo habilitamos para que cada vez que el servidor se encienda, arranque el pve-exporter.
systemctl enable prometheus-pve-exporter.service
Añadimos la iso de un Ubuntu en el almacenamiento local donde vamos a instalar el Prometheus.
Creamos la maquina en el CEPH-VMS, para la instalación.
Le ponemos un nombre y un ID al VM
En "Hard Disk" ponemos la pool del CEPH-VMS y en "Disk space" el espació de disco que queremos.
Arrancamos la maquina creada.
Al tener la iso del ubuntu en la maquina, arrancara directamente desde el disco.
Configuración del usuario y contraseña de la maquina Ubuntu.
Una vez arrancada la accedemos a la pagina de descarga de Prometheus oficial y descargamos el "*linux-amd64.tar.gz"
Descomprimimos el tar y creamos la carpeta para el Prometheus.
mkdir -p /etc/prometheus
Movemos todos los archivos descomprimimos a la raíz de "/etc/prometheus".
Realizamos una copia del "prometheus.yml".
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]
Realizamos un "nc" para comprobar que hay conexión con los nodos.
nc -v ip-nodo 9221
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
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.
Comprobamos en "Targets", que están los 2 nodos conectados.
Grafana
Accedemos a la pagina oficial de descarga de Grafana, y seleccionamos la versión OSS, que es la comunitaria y la gratuita.
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
Creamos la carpeta de Grafana y añadimos todos los archivos descargados.
mkdir -p /etc/grafana
Realizamos este comando para arrancar Grafana y comprobar de que funciona correctamente.
./etc/grafana/bin/grafana-server
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
Accedemos a la dirección de Grafana por ip:3000 y comprobamos si nos carga la pagina web de Grafana.
Login: Admin Password: Admin
Dentro de grafana nos vamos a la configuración de base de datos para añadir una nueva, dando ha "Add data source".
Seleccionamos la opción de Prometheus, que es la primera que nos sale.
Le ponemos un nombre, después en "URL", ponemos la dirección del Prometheus "http://localhost:9090" y no tocamos nada mas.
Bajamos y le damos al botón de "Save and Test" y comprobamos de que nos salga la notificación en verde.
Ahora buscamos la plantilla de Proxmox, que vamos a utilizar en la pagina de Dashboards de Grafana.
10347
Añadimos el template de la dashboord en el Grafana.
Comprobamos que recibimos los datos en los propios gráficos del Grafana y que todos funcionan correctamente.
Alertmanager (Prometheus)
Vamos a la pagina de prometheus, y buscamos el complemento de alertmanager y lo descargamos "*linux-amd64.tar.gz".
Creamos la carpeta para el Alertmanager y movemos todos los archivos descomprimidos del "tar.gz".
mkdir -p /etc/alertmanager
Realizamos una copia del "alertmanager.yml".
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'
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
Iniciamos el servicio del alertmanager.
Nos faltaría si no lo hemos hecho previamente acceder al "prometheus.yml" y añadir estas líneas si no las tenemos.
Accedemos a la pagina del alertmanager "http://ip:9093" y comprobamos si nos funciona.
Realizamos los "enable", para que se inicien los servicios, cada vez que la maquina de apague.
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
Comprobación de las alertas en Alertmanager.
Comprobación de las alertas en Gmail.