Prometheus: Recuperación de métricas desde Linux
Cómo recuperar métricas de un servidor Linux en Prometheus usando Node Exporter
👋 ¡Bienvenido a la documentación de Stackhero!
Stackhero ofrece una solución nube de Prometheus lista para usar que proporciona una serie de beneficios, incluyendo:
Alert Managerincluido para enviar alertas aSlack,Mattermost,PagerDuty, etc.- Servidor de correo electrónico dedicado para enviar alertas de correo electrónico ilimitadas.
Blackboxpara sondearHTTP,ICMP,TCP, y más.- Configuración fácil con un editor de archivos de configuración en línea.
- Actualizaciones sin esfuerzo con solo un clic.
- Rendimiento óptimo y seguridad robusta gracias a una VM privada y dedicada.
Ahorre tiempo y simplifique su vida: solo toma 5 minutos probar la solución de alojamiento en la nube de Prometheus de Stackhero!
Qué es Prometheus Node Exporter
Node Exporter es un software que puede instalarse en núcleos *NIX (Linux, OpenBSD, FreeBSD o Darwin) para exponer métricas del sistema a Prometheus. Es un componente esencial para monitorear el rendimiento del servidor y la salud de la infraestructura.
En la terminología de Prometheus, Node Exporter actúa como un exportador y se añade como un objetivo en su configuración de Prometheus. Prometheus se conecta a Node Exporter usando el puerto TCP 9100 a través de HTTP a intervalos regulares para recuperar métricas.
En resumen, Node Exporter le permite monitorear un sistema basado en Linux. Para sistemas Windows, puede usar el Windows Exporter.
Vista general de Stackhero para Prometheus
Instalar Prometheus Node Exporter en un servidor Linux
Puede descargar Node Exporter desde su página de lanzamientos en GitHub. Se distribuye como un binario que se ejecuta directamente en su sistema. Como está diseñado para funcionar continuamente, se recomienda configurarlo para que se inicie automáticamente cuando su servidor arranque.
Por defecto, Node Exporter abre el puerto 9100 al mundo sin autenticación ni cifrado. Se recomienda encarecidamente añadir tanto autenticación como cifrado TLS (ver más abajo) y configurar un firewall para restringir el acceso al puerto 9100 de modo que solo su servidor Prometheus u otras direcciones IP autorizadas puedan conectarse.
Cómo instalar Prometheus Node Exporter en Ubuntu
Puede seguir estos pasos en Ubuntu:
# Vaya a https://github.com/prometheus/node_exporter/releases para obtener el último número de versión.
node_exporter_version="1.2.0"
node_exporter_release="linux-amd64"
# Descargar e instalar node_exporter
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v${node_exporter_version}/node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
tar xvfa node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
sudo mv node_exporter-${node_exporter_version}.${node_exporter_release}/node_exporter /usr/local/bin/
rm -rf node_exporter-${node_exporter_version}.${node_exporter_release} node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
# Crear un usuario "node_exporter"
sudo useradd -rs /bin/false node_exporter
# Crear un servicio systemd para iniciar node_exporter automáticamente al arrancar
sudo bash -c 'cat << EOF > /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter --web.config=/etc/prometheus_node_exporter/configuration.yml
[Install]
WantedBy=multi-user.target
EOF'
# Crear un directorio y archivo de configuración
sudo mkdir -p /etc/prometheus_node_exporter/
sudo touch /etc/prometheus_node_exporter/configuration.yml
sudo chmod 700 /etc/prometheus_node_exporter
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
# Iniciar el demonio node_exporter y verificar su estado
sudo systemctl start node_exporter
sudo systemctl status node_exporter
En este punto, el binario node_exporter debería estar ejecutándose en su servidor. Para confirmar que está funcionando, puede conectarse y verificar si devuelve métricas:
curl http://localhost:9100/metrics
Node Exporter abre el puerto 9100 a la red pública. ¡Esto significa que cualquiera puede conectarse y recuperar las métricas de su servidor! Como mínimo, debería añadir autenticación y cifrado TLS (ver más abajo) y se recomienda encarecidamente configurar un firewall para bloquear solicitudes al puerto 9100 desde IPs distintas a su servidor Prometheus.
Cómo instalar Prometheus Node Exporter en Debian
El proceso de instalación de Node Exporter en Debian es idéntico al método de Ubuntu descrito anteriormente. Simplemente siga las mismas instrucciones.
Cómo instalar Prometheus Node Exporter en otros sistemas
Los pasos de instalación de Node Exporter dependen del sistema que utilice. Aunque no se proporciona documentación detallada para cada plataforma, el procedimiento básico implica descargar el binario que coincide con su sistema y configurarlo para que se inicie al arrancar.
Añadir autenticación a Prometheus Node Exporter
Por defecto, Node Exporter no realiza autenticación, lo que significa que cualquiera puede recuperar las métricas expuestas. Para asegurar el acceso, puede añadir autenticación básica para un usuario.
Generar una contraseña aleatoria
Genere una contraseña usando los siguientes comandos:
password=`openssl rand -base64 32`
passwordHashed=`echo ${password} | htpasswd -inBC 10 "" | tr -d ':'`
echo "Contraseña clara para guardar para el servidor Prometheus: ${password}"
Si no tiene el binario
htpasswd, puede instalarlo en Debian/Ubuntu usandoapt-get install --no-install-recommends apache2-utils.
Mantenga la contraseña clara segura ya que la necesitará al configurar Prometheus.
Añadir el usuario y reiniciar Node Exporter
Añada las siguientes líneas al archivo de configuración para añadir un usuario llamado "prometheus" con el hash de la contraseña generada:
sudo cat << EOF >> /etc/prometheus_node_exporter/configuration.yml
basic_auth_users:
prometheus: ${passwordHashed}
EOF
# Reiniciar Node Exporter
sudo systemctl restart node_exporter
Finalmente, verifique que la autenticación esté funcionando correctamente:
- Ejecutar
curl http://localhost:9100/metricsdebería devolver "Unauthorized". - Ejecutar
curl -u prometheus:${password} http://localhost:9100/metricsdebería devolver la lista de métricas.
Añadir cifrado TLS a Prometheus Node Exporter
Por defecto, Node Exporter no cifra las comunicaciones. Esto significa que las credenciales, incluida la contraseña definida anteriormente, se transmiten en texto plano. Para asegurar las comunicaciones, puede habilitar el cifrado TLS de la siguiente manera.
Crear certificados TLS
Ejecute los siguientes comandos para crear un certificado y una clave TLS:
# Crear certificado TLS
cd /tmp
sudo openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 \
-keyout /etc/prometheus_node_exporter/tlsCertificate.key \
-out /etc/prometheus_node_exporter/tlsCertificate.crt \
-subj "/CN=`hostname`" \
-addext "subjectAltName = DNS:`hostname`"
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter
Actualizar la configuración
Añada las siguientes líneas al archivo de configuración para añadir los ajustes TLS y luego reinicie Node Exporter:
sudo cat << 'EOF' >> /etc/prometheus_node_exporter/configuration.yml
tls_server_config:
cert_file: /etc/prometheus_node_exporter/tlsCertificate.crt
key_file: /etc/prometheus_node_exporter/tlsCertificate.key
EOF
# Reiniciar Prometheus Node Exporter
sudo systemctl restart node_exporter
Puede verificar que TLS está activo conectándose vía HTTPS con el siguiente comando:
curl -k -u prometheus:${password} https://localhost:9100/metrics
Tenga en cuenta que este método no utiliza un certificado CA, por lo que necesita pasar la opción "-k" a cURL para omitir la verificación del certificado.
Configurar el servidor Prometheus para recuperar datos de Node Exporter
Después de instalar Node Exporter y asegurarlo, configure su servidor Prometheus para recuperar métricas a intervalos regulares.
En Stackhero, seleccione su servicio Prometheus y vaya a la URL "Prometheus configuration". Luego añada lo siguiente a su sección scrape_configs:
scrape_configs:
- job_name: "My servers pool"
static_configs:
- targets: [ "<yourLinuxServerDomain>:9100" ]
basic_auth:
username: "prometheus"
password: "<password>"
scheme: https
tls_config:
insecure_skip_verify: true
# Relabeling "instance" para eliminar la parte ":9100"
relabel_configs:
- source_labels: [__address__]
target_label: instance
regex: '([^:]+)(:[0-9]+)?'
replacement: '${1}'
Guarde el archivo y verifique los registros de Prometheus para confirmar que se ha recargado correctamente (puede ver los registros desde el panel de Stackhero seleccionando su servicio Prometheus y haciendo clic en la pestaña "Logs").
Finalmente, verifique que Prometheus está recuperando métricas accediendo a la interfaz de usuario de Prometheus en el panel de Stackhero y navegando a Status > Targets. Su servidor Linux debería aparecer en la lista de objetivos como UP.
El objetivo "myLinuxServer" está UP
Mostrar datos en Prometheus
Para ver las métricas recuperadas de Node Exporter, inicie sesión en Prometheus a través del panel de Stackhero usando la URL "Prometheus UI" o directamente en https://<prometheusDomain>/.
En el campo "Expression", escriba node_memory_MemTotal_bytes y presione enter. Si todo está configurado correctamente, verá la RAM total del servidor mostrada en bytes.
La cantidad total de RAM para este servidor es de 4068794368 bytes, que son 3.78GB
Configurar Grafana para mostrar datos de Prometheus recuperados de Node Exporter
Grafana puede generar paneles de control fácilmente basados en datos de Prometheus. Para obtener instrucciones detalladas sobre cómo configurar Grafana para mostrar datos de Prometheus, consulte la documentación de Grafana.
Ejemplo de un panel generado por Grafana, basado en datos de Prometheus Node Exporter