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 Manager incluido para enviar alertas a Slack, Mattermost, PagerDuty, etc.
  • Servidor de correo electrónico dedicado para enviar alertas de correo electrónico ilimitadas.
  • Blackbox para sondear HTTP, 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!

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 PrometheusVista general de Stackhero para Prometheus

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.

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.

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.

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.

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.

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 usando apt-get install --no-install-recommends apache2-utils.

Mantenga la contraseña clara segura ya que la necesitará al configurar Prometheus.

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/metrics debería devolver "Unauthorized".
  • Ejecutar curl -u prometheus:${password} http://localhost:9100/metrics debería devolver la lista de métricas.

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.

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

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.

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á UPEl objetivo "myLinuxServer" está UP

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.78GBLa cantidad total de RAM para este servidor es de 4068794368 bytes, que son 3.78GB

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 ExporterEjemplo de un panel generado por Grafana, basado en datos de Prometheus Node Exporter