Prometheus es un sistema de alerta y supervisión de código abierto muy potente adecuado para entornos dinámicos como el espacio en la nube. Es un proyecto independiente mantenido por la comunidad con muchas empresas y organizaciones que contribuyen a su código fuente. La mayoría de los componentes de Prometheus están escritos en Go, lo que los hace fáciles de construir e implementar como archivos binarios estáticos. Rara vez necesitará compilar la aplicación a partir del código.
Prometheus es capaz de registrar cualquier serie de tiempo puramente numérica, tanto para monitoreos centrados en máquinas como sistemas Linux como para el monitoreo de arquitecturas altamente dinámicas orientadas a servicios. Las herramientas de visualización como Grafana admiten la consulta de Prometheus con la fuente de datos de Grafana para Prometheus incluida desde Grafana 2.5.0.
En esta guía, cubriremos cómo instalar Prometheus en el servidor Ubuntu 18.04.
Componentes de Prometeo
El ecosistema de Prometheus consta de varios componentes que, en conjunto, funcionan para proporcionar un sistema completo de monitoreo y alerta. La mayoría de los componentes son opcionales y solo necesita instalarlos a pedido. Los componentes principales son:
- Servidor Prometheus:extrae y almacena datos de series temporales de los sistemas y aplicaciones del cliente.
- Exportadores:se utilizan para exportar métricas existentes de sistemas de terceros como métricas de Prometheus.
- Un administrador de alertas utilizado para manejar alertas
- Las bibliotecas cliente para instrumentar el código de la aplicación
Características de Prometeo
Las características principales de Prometheus son:
- un modelo de datos multidimensional con datos de series temporales identificados por nombre de métrica y pares clave/valor
- Tiene un lenguaje de consulta muy flexible para aprovechar su modelo multidimensional
- Los nodos de servidor único son autónomos y no dependen del almacenamiento distribuido.
- La recopilación de series temporales de Prometheus utiliza un modelo de extracción sobre el protocolo HTTP
- Tiene descubrimiento de servicio automático de objetivos y los archivos de configuración se pueden usar para lo mismo.
- la transmisión de series temporales se admite a través de una puerta de enlace intermediaria
- Prometheus tiene soporte para múltiples modos de gráficos y tableros
Instalación de Prometheus en Ubuntu 18.04
Dado que Prometheus está escrito en Go, sus paquetes se distribuyen como archivos binarios. En el momento de escribir este artículo, la última versión de Prometheus es v2.2.1. . Puede consultar los lanzamientos desde la página de descarga oficial. Los paquetes proporcionados son para los sistemas operativos macOS, Linux y Windows, así que asegúrese de descargar el paquete correcto.
$ sudo su -
$ export RELEASE="2.2.1"
$ wget https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz
Después de descargar el archivo, extráigalo usando tar.
$ tar xvf prometheus-${RELEASE}.linux-amd64.tar.gz
prometheus-2.2.1.linux-amd64/
prometheus-2.2.1.linux-amd64/consoles/
prometheus-2.2.1.linux-amd64/consoles/index.html.example
prometheus-2.2.1.linux-amd64/consoles/node-cpu.html
prometheus-2.2.1.linux-amd64/consoles/node-disk.html
prometheus-2.2.1.linux-amd64/consoles/node-overview.html
prometheus-2.2.1.linux-amd64/consoles/node.html
prometheus-2.2.1.linux-amd64/consoles/prometheus-overview.html
prometheus-2.2.1.linux-amd64/consoles/prometheus.html
prometheus-2.2.1.linux-amd64/console_libraries/
prometheus-2.2.1.linux-amd64/console_libraries/menu.lib
prometheus-2.2.1.linux-amd64/console_libraries/prom.lib
prometheus-2.2.1.linux-amd64/prometheus.yml
prometheus-2.2.1.linux-amd64/LICENSE
prometheus-2.2.1.linux-amd64/NOTICE
prometheus-2.2.1.linux-amd64/prometheus
prometheus-2.2.1.linux-amd64/promtool
Cambie al directorio recién creado desde la extracción de archivos.
# cd prometheus-${RELEASE}.linux-amd64/
Crear grupo de sistemas Prometheus
Prometheus necesita su propio usuario y grupo para ejecutarse.
# groupadd --system prometheus
# grep prometheus /etc/group
prometheus:x:999:
Crear usuario del sistema Prometheus
Ahora que tenemos el grupo Prometheus, vamos a crear un usuario y asignarle el grupo creado.
# useradd -s /sbin/nologin -r -g prometheus prometheus
# id prometheus
uid=999(prometheus) gid=999(prometheus) groups=999(prometheus)
Crear directorios de configuración y datos para Prometheus
Prometheus necesita un directorio para almacenar sus datos y archivos de configuración. Crearemos /var/lib/prometheus para datos y /etc/prometheus para archivos de configuración.
# mkdir -p /etc/prometheus/{rules,rules.d,files_sd} /var/lib/prometheus
Copie los archivos binarios de Prometheus a un directorio en su $PATH
El directorio preferido para poner archivos binarios de terceros en Linux es /usr/local/bin/ ya que está en $PATH por defecto y no interfiere con los binarios del sistema.
# cp prometheus promtool /usr/local/bin/
# ls /usr/local/bin/
prometheus promtool
Copia consolas y console_libraries al directorio de archivos de configuración
Los archivos y las bibliotecas de la consola deben colocarse en /etc/prometheus/ directorio.
# cp -r consoles/ console_libraries/ /etc/prometheus/
Crear archivo de unidad systemd:
Ubuntu 18.04 usa systemd init system de forma predeterminada, necesitamos crear un archivo de unidad de servicio para administrar el servicio Prometheus. Pondremos el archivo en /etc/systemd/system directorio. El nombre del archivo debe terminar en .service
# cat /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus systemd service unit
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.listen-address=0.0.0.0:9090
SyslogIdentifier=prometheus
Restart=always
[Install]
WantedBy=multi-user.target
Tenga en cuenta que:
- Vinculamos el servicio a 0.0.0.0:9090 . Esto será accesible desde todas las interfaces de red en el servidor. Limítelo especificando la dirección IP para la interfaz que desea usar, 127.0.0.1 solo para acceso local.
- El archivo de configuración especificado es /etc/prometheus/prometheus.yml . Crearemos un archivo de configuración básico para usar a continuación.
Crear archivo de configuración de Prometheus
Esto se colocará en /etc/prometheus/ directorio.
# cat /etc/prometheus/prometheus.yml
# Global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds.
evaluation_interval: 15s # Evaluate rules every 15 seconds.
scrape_timeout: 15s # scrape_timeout is set to the global default (10s).
# 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']
Para obtener más opciones de configuración, consulte la guía de configuración oficial de Prometheus.
Cambiar los permisos de directorio al usuario y grupo de Prometheus
La propiedad de los archivos y datos de Prometheus debe ser su usuario y grupo.
# chown -R prometheus:prometheus /etc/prometheus/ /var/lib/prometheus/
# chmod -R 775 /etc/prometheus/ /var/lib/prometheus/
Iniciar y habilitar el servicio Prometheus
Inicie y habilite el servicio Prometheus para que se inicie en el arranque.
# systemctl start prometheus
# systemctl enable prometheus
Created symlink from /etc/systemd/system/multi-user.target.wants/prometheus.service to /etc/systemd/system/prometheus.service.
Comprobar estado:
# systemctl status prometheus
Confirme que el puerto 9090 está escuchando.
# netstat -tunlp | grep 9090
tcp6 0 0 :::9090 :::* LISTEN 2140/prometheus
# telnet 127.0.0.1 9090
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
^]
If you have a firewall like ufw, Open port 9090 to be able to access it from a remote device.
# ufw allow 9090
Rule added
Rule added (v6)
Para permitir una red específica, use:
# ufw allow from 192.168.10.0/24 to any port 9090
Rule added
# ufw status
Status: active
To Action From
-- ------ ----
9090 ALLOW Anywhere
9090 ALLOW 192.168.10.0/24
9090 (v6) ALLOW Anywhere (v6)
Para obtener la interfaz web, abra http://ip:9090
Lo siguiente que puede querer ver es la configuración de varios exportadores para la recopilación y visualización de métricas. El mejor lugar para comenzar es la página de Instrumentación de exportadores.