Monitorización
Para la monitorización de nuestros sistemas vamos a usar el tandem prometheus y grafana
Prometheus
Nos servira para recuperar datos de unos sensores que pondremos en nuestros sistemas y crear alertas por si algo sucede, para empezar vamos a descargamos prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.36.1/prometheus-2.36.1.darwin-amd64.tar.gz
Descomprimimos
tar xfz prometheus-*.tar.gz
Creamos el usuarios para prometehus
useradd --no-create-home --shell /usr/sbin/nologin prometheus
Creamos las carpetas
mkdir /etc/prometheus
mkdir /var/lib/prometheus
Les asignamos el usuario creado anteriormente
chown prometheus:prometheus /etc/prometheus
chown prometheus:prometheus /var/lib/prometheus
Entramos en la carpeta de prometheus y copiamos los binarios
cd prometheus-2.36.0.linux-amd64
cp ./prometheus /usr/local/bin/
cp ./promtool /usr/local/bin/
asignamos usuario prometheus
chown prometheus:prometheus /usr/local/bin/prometheus
chown prometheus:prometheus /usr/local/bin/promtool
Copiamos la consola y las librerías
cp -r ./consoles /etc/prometheus
cp -r ./console_libraries /etc/prometheus
Damos permisos
chown -R prometheus:prometheus /etc/prometheus/consoles
chown -R prometheus:prometheus /etc/prometheus/console_libraries
Ahora que lo tenemos instalado lo vamos a configurar, para ello creamos el siguiente fichero
vim /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
# - "first.rules"
# - "second.rules"
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
Con esto definimos cada cuanto tiene que scrapear los datos de los diferentes nodos que configuraremos más adelante
Asignamos el usuario a la configuración
chown prometheus:prometheus /etc/prometheus/prometheus.yml
Primer arranque de prometehus para ver que esta todo en orden, donde le decimos que configuración tiene que cargar, donde va a guardar los datos (podríamos montarlo en un glusterfs para tener una replica fuera) y la configuración de la versión web.
sudo -u prometheus /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
Para tenerlo en el arranque de manera automática lo vamos a configurar en systemd, para ello creamos el siguiente fichero.
vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Monitoring
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Restart=on-failure
RestartSec=5s
Type=simple
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
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
Recargamos el demonio de systemd y ya lo tendremos disponible.
systemctl daemon-reload
Lo agregamos al arranque y lo arrancamos
systemctl enable prometheus
systemctl start prometheus
Nginx + SSL + Autenticación
Una opción para ayudar a proteger nuestro servidor Prometheus es colocarlo detrás de un proxy inverso para que luego podamos agregar SSL y una capa de autenticación sobre la interfaz web predeterminada sin restricciones de Prometheus.
Instalamos nginx
apt install nginx
Vamos a crear un sitio nuevo
vim /etc/nginx/sites-enabled/prometheus
Agregamos el siguiente contenido
server {
listen 80;
listen [::]:80;
server_name tu-dominio.com;
location / {
proxy_pass http://localhost:9090/;
}
}
comprobamos que las configuraciones sean correcta
nginx -t
Reiniciamos nginx y comprobamos su estado
systemctl start nginx
systemctl status nginx
Ahora ya podemos acceder a http://tu-dominio.com
Si accedemos por la ip veremos la web por defecto de nginx si no queremos que esto suceda podemos eliminar el siguiente fichero
rm /etc/nginx/sites-enabled/default
Ahora vamos a ponerle certificado gracias a Let’s Encrypt para ello instalamos el certbot, agregamos el repositorio.
add-apt-repository ppa:certbot/certbot
apt update
apt install certbot python3-certbot-nginx
ahora solo tenemos que ejecutar e ir respondiendo las preguntas que nos hace
certbot --nginx
Podemos ver los cambios que realizo certbot en el fichero de nuestro dominio
vim /etc/nginx/sites-enabled/prometheus
server {
server_name tu-dominio.com;
location / {
proxy_pass http://localhost:9090/;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/tu-dominio.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/tu-dominio.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = tu-dominio.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name tu-dominio.com;
return 404; # managed by Certbot
}
Como no queremos que todo el mundo tenga acceso a nuestros datos vamos a poner una autentificación y a cerrar el puerto 9090 y 9100 para que no puedan acceder a la información de manera externa y sin autorización
Instalamos apache2-utils
apt install apache2-utils
Creamos un fichero de contraseñas con el usuario admin y ponemos la contraseña que queramos
htpasswd -c /etc/nginx/.htpasswd admin
editamos el fichero de configuración de nuestro prometheus
vim /etc/nginx/sites-enabled/prometheus
Y agregamos lo siguiente para que use el fichero de contraseñas
server {
...
#addition authentication properties
auth_basic "Protected Area";
auth_basic_user_file /etc/nginx/.htpasswd;
location / {
proxy_pass http://localhost:9090/;
}
...
}
comprobamos que las configuraciones sean correcta
nginx -t
Reiniciamos nginx y comprobamos su estado
systemctl restart nginx
systemctl status nginx
Los puertos 9000 y 9100 siguen abiertos por lo que vamos a cerrarlos con iptables
iptables -A INPUT -p tcp -s localhost --dport 9090 -j ACCEPT
iptables -A INPUT -p tcp --dport 9090 -j DROP
iptables -A INPUT -p tcp -s localhost --dport 9100 -j ACCEPT
iptables -A INPUT -p tcp --dport 9100 -j DROP
iptables -L
Como las iptables si se reinicia el equipo se pierden y no queremos estar agregándolas manualmente vamos a instalar el paquete iptables-persistent
apt install iptables-persistent
Las configuraciones se guardan en estos dos ficheros
/etc/iptables/rules.v4
/etc/iptables/rules.v6
Si hacemos algún cambio a las iptables nos tenemos que acordar de guardarlas
iptables-save > /etc/iptables/rules.v4
iptables-save > /etc/iptables/rules.v6
Node exporter
Este exporter nos servira para recopilar la información de uso general de los sistemas como su CPU, memoria, procesos...
Para ello descargamos
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
descomprimimos
tar xvf node_exporter-*.tar.gz
Creamos usuarios
useradd --no-create-home --shell /bin/false node_exporter
Entramos a la carpeta de node_exporter y copiamos el binario
cd node_exporter-1.3.1.linux-amd64
cp ./node_exporter /usr/local/bin
Asignamos permisos
chown node_exporter:node_exporter /usr/local/bin/node_exporter
Igual que con prometheus vamos a añadirlo en el systemd para poderlo arrancar en el arranque del sistema de manera fácil.
vim /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter --collector.systemd --collector.processes
[Install]
WantedBy=multi-user.target
recargamos systemd
systemctl daemon-reload
Arrancamos el node_exporter
systemctl start node_exporter
Comprobamos que funciona
systemctl status node_exporter
Lo activamos para arranque de maquina
systemctl enable node_exporter
Vamos a comunicar el node_exporter con Prometheus para ello vamos a editar la configuración de Prometheus
vim /etc/prometheus/prometheus.yml
Y añadimos lo siguiente en la zona de scrape_configs
- job_name: 'node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9100']
Reiniciamos prometheus
systemctl restart prometheus
Ahora repetimos el proceso con el resto de los nodos y servidores de nuestro HA y ya podemos consultar la información de los diferentes nodos

HAProxy Exporter
Este exporter nos servira para recopilar la información de nuestros HAProxys y saber sus conexiónes, que va a cada nodo...
Para ello descargamos
wget https://github.com/prometheus/haproxy_exporter/releases/download/v0.13.0/haproxy_exporter-0.13.0.linux-amd64.tar.gz
descomprimimos
tar xvf haproxy_exporter-*.tar.gz
Creamos usuarios
useradd --no-create-home --shell /bin/false haproxy_exporter
Entramos a la carpeta de haproxy_exporter y copiamos el binario
cd haproxy_exporter-0.13.0.linux-amd64
cp ./haproxy_exporter /usr/local/bin
Igual que con prometheus vamos a añadirlo en el systemd para poderlo arrancar en el arranque del sistema de manera facil.
vim /etc/systemd/system/haproxy_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=haproxy_exporter
Group=haproxy_exporter
Type=simple
ExecStart=/usr/local/bin/haproxy_exporter --haproxy.scrape-uri=http://127.0.0.1:5000/haproxy?stats\;csv
[Install]
WantedBy=multi-user.target
recargamos systemd
systemctl daemon-reload
Arrancamos el haproxy_exporter
systemctl start haproxy_exporter
Comprobamos que funciona
systemctl status haproxy_exporter
Lo activamos para arranque de maquina
systemctl enable haproxy_exporter
Configuramos el HAProxy para poder recopilar la Información con nuestro haproxy_exporter para ello añadimos el siguiente bloque
vim /etc/haproxy/haproxy.cfg
listen stats
bind 127.0.0.1:5000
stats enable
stats uri /haproxy?stats
Vamos a comunicar el haproxy_exporter con Prometheus para ello vamos a editar la configuración de Prometheus
vim /etc/prometheus/prometheus.yml
Y añadimos lo siguiente en la zona de scrape_configs
- job_name: 'ha1_haproxy_exporter'
scrape_interval: 5s
static_configs:
- targets: ['192.168.10.1:9101']
Reiniciamos prometheus
systemctl restart prometheus
Apache exporter
Para monitorizar apache tenemos que tener el modulo de mod_status
activado y la locacilizacion /server-status
activada en este caso ubuntu lo trate configurado por defecto, por lo que no tendriamos que tocar nada.
Para poder usar el exporter lo primero que tenemos que hacer es instalar Go, lo podemos hacer desde los binarios o desde el repositorio como no vamos a programar en este caso lo instalaremos desde los repositorios.
sudo apt install golang-go
Vamos a crear un usuario para el exporter como en los otros casos
useradd apache_exporter -s /sbin/nologin
Ahora vamos a bajar el codigo de la ultima version y vamos a compilarlo, nos clonamos el repositorio
git clone https://github.com/Lusitaniae/apache_exporter.git
cd apache_exporter
Instalamos las dependencias de Go y compilamos
go get -v github.com/Lusitaniae/apache_exporter
go build
Copiamos el fichero generado
cp apache_exporter /usr/sbin/
Le damos permisos
chown apache_exporter:apache_exporter /usr/sbin/apache_exporter
Lo agregamos a systemd
vim /etc/systemd/system/apache_exporter.service
[Unit]
Description=Apache Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=apache_exporter
Group=apache_exporter
Type=simple
Restart=always
EnvironmentFile=/etc/sysconfig/apache_exporter
ExecStart=/usr/sbin/apache_exporter $OPTIONS
[Install]
WantedBy=multi-user.target
Generamos la configuración, donde escuchamos y donde publicamos la Información para prometheus
vim /etc/apache_exporter
OPTIONS="--scrape_uri='http://127.0.0.1/server-status/?auto' --telemetry.address='192.168.10.4:9117'"
Recargarmos systemd
systemctl daemon-reload
systemctl start apache_exporter
systemctl enable apache_exporter
Agregamos a prometheus el exporter
- job_name: 'node1-apache'
static_configs:
- targets: ['xxx.xxx.xxx.xxx:9117']
Mysql Exporter
Vamos a monitorizar nuestro cluster de galera, para ello lo primera que hacemos en uno de los nodos crear un usuario
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'XXXXXXXX' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, REPLICATION SLAVE, SUPER SELECT ON *.* TO 'exporter'@'localhost
FLUSH PRIVILEGES;
Descargamos el mysql exporter en todos los nodos
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
descomprimimos
tar xvf mysqld_exporter-*.tar.gz
Creamos usuarios
useradd --no-create-home --shell /bin/false mysql_exporter
Entramos a la carpeta de mysql_exporter
y copiamos el binario
cd mysqld_exporter-0.14.0.linux-amd64
cp ./mysqld_exporter /usr/local/bin/
Los datos de conexión los ponemos dentro del systemd dado que usando el parametro config.my-cnf nos falla la conexión
vim /etc/systemd/system/mysql_exporter.service
[Unit]
Description=Prometheus MySQL Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=mysql_exporter
Group=mysql_exporter
Type=simple
Restart=always
Environment='DATA_SOURCE_NAME=exporter:exp789@(192.168.10.3:3306)/'
ExecStart=/usr/local/bin/mysqld_exporter --collect.info_schema.tables --collect.info_schema.tablestats
[Install]
WantedBy=multi-user.target
recargamos systemd
systemctl daemon-reload
Arrancamos el mysql_exporter
systemctl start mysql_exporter
Comprobamos que funciona
systemctl status mysql_exporter
Lo activamos para arranque de maquina
systemctl enable mysql_exporter
Vamos a comunicar el mysql_exporter
con Prometheus para ello vamos a editar la configuración de Prometheus
vim /etc/prometheus/prometheus.yml
Y añadimos lo siguiente en la zona de scrape_configs
- job_name: "node1-mysql"
scrape_interval: "15s"
static_configs:
- targets: ['xxx.xxx.xxx.xxx:9104']
Reiniciamos prometheus
systemctl restart prometheus
Ahora repetimos el proceso con el resto de los nodos de galera pero sin tener que crear el usuario porque ya se replico automáticamente.
Agrupando exporters
Hasta ahora hemos ido agregando los exporter de manera independiente por tipo y servidor lo que lo hace poco mantenible a lo largo del tiempo
scrape_configs:
- job_name: 'node_exporter_prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
- job_name: 'prometheus_node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9100']
- job_name: 'node-1_node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['192.168.10.3:9100']
- job_name: "node1-mysql"
scrape_interval: "15s"
static_configs:
- targets: ['192.168.10.3:9104']
- job_name: 'node1-apache'
static_configs:
- targets: ['192.168.10.3:9117']
- job_name: 'node-2_node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['192.168.10.4:9100']
- job_name: "node2-mysql"
scrape_interval: "15s"
static_configs:
- targets: ['192.168.10.4:9104']
- job_name: 'node2-apache'
static_configs:
- targets: ['192.168.10.4:9117']
- job_name: 'node-3_node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['192.168.10.5:9100']
- job_name: "node3-mysql"
scrape_interval: "15s"
static_configs:
- targets: ['192.168.10.5:9104']
- job_name: 'node3-apache'
static_configs:
- targets: ['192.168.10.5:9117']
- job_name: 'waf-1_node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['192.168.10.6:9100']
- job_name: 'node-2_node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['192.168.10.7:9100']
- job_name: 'HA1_node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['192.168.10.1:9100']
- job_name: 'HA2_node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['192.168.10.2:9100']
- job_name: 'HA1_haproxy_exporter'
scrape_interval: 5s
static_configs:
- targets: ['192.168.10.1:9101']
- job_name: 'HA2_haproxy_exporter'
scrape_interval: 5s
static_configs:
- targets: ['192.168.10.2:9101']
- job_name: 'node1_memcached_exporter'
scrape_interval: 5s
static_configs:
- targets: ['192.168.10.3:9150']
- job_name: 'node2_memcached_exporter'
scrape_interval: 5s
static_configs:
- targets: ['192.168.10.4:9150']
- job_name: 'node3_memcached_exporter'
scrape_interval: 5s
static_configs:
- targets: ['192.168.10.5:9150']
Lo que vamos a hacer ahora es agruparlos por tipos de exporters para que nos sea mas facil de mantener.
scrape_configs:
- job_name: 'prometheus_master'
scrape_interval: 5s
static_configs:
- targets:
- localhost:9090
- job_name: 'node'
scrape_interval: 5s
static_configs:
- targets:
- 192.168.10.6:9100
- 192.168.10.7:9100
labels:
type: 'WaF'
- targets:
- 192.168.1.100:9100
labels:
type: 'monitorig'
- targets:
- 192.168.1.3:9100
- 192.168.1.4:9100
- 192.168.1.5:9100
labels:
type: 'Node'
- targets:
- 192.168.1.1:9100
- 192.168.1.2:9100
labels:
type: 'HAproxy'
- job_name: 'memcached'
scrape_interval: 5s
static_configs:
- targets:
- 192.168.1.3:9150
labels:
node: 'node1'
- targets:
- 192.168.1.4:9150
labels:
node: 'node2'
- targets:
- 192.168.1.5:9150
labels:
node: 'node3'
- job_name: 'apache'
scrape_interval: 5s
static_configs:
- targets:
- 192.168.1.3:9117
labels:
node: 'node1'
- targets:
- 192.168.1.4:9117
labels:
node: 'node2'
- targets:
- 192.168.1.5:9117
labels:
node: 'node3'
- targets:
- 192.168.1.6:9117
labels:
node: 'WaF1'
- targets:
- 192.168.1.7:9117
labels:
node: 'WaF2'
- job_name: 'haproxy'
scrape_interval: 5s
static_configs:
- targets:
- 192.168.1.1:9101
labels:
node: 'HA1'
- targets:
- 192.168.1.2:9101
labels:
node: 'HA2'
- job_name: 'mysql'
scrape_interval: 5s
static_configs:
- targets:
- 192.168.1.3:9104
labels:
node: 'node1'
- targets:
- 192.168.1.4:9104
labels:
node: 'node2'
- targets:
- 192.168.1.5:9104
labels:
node: 'node3'
Alertmanager
Ahora que tenemos la monitorizacion montada tendremos que configurar las alertas para que nos sea util, para ello vamos a usar alertmanager
wget https://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-amd64.tar.gz
Descomprimimos
tar xfz alertmanager-*.tar.gz
Entramos en la carpeta y copiamos los binarios
cd alertmanager-0.24.0.linux-amd64
cp ./alertmanager /usr/local/bin/
cp ./amtool /usr/local/bin/
Creamos la carpeta para la configuracion
mkdir /etc/alertmanager
Creamos el usuario
useradd --no-create-home --shell /usr/sbin/nologin alertmanager
Asignamos permisos
chown alertmanager:alertmanager /etc/alertmanager
chown alertmanager:alertmanager /usr/local/bin/alertmanager
chown alertmanager:alertmanager /usr/local/bin/amtool
Creamos la configuracion para recibir las alertas por email
vim /etc/alertmanager/alertmanager.yml
group_by: [Alertname]
receiver: email-me
receivers:
- name: email-me
email_configs:
- to: [email protected]
from: [email protected]
smarthost: server:port
auth_username: "[email protected]"
auth_identity: "[email protected]"
auth_password: "password"
Lo agregamos a systemd
vim /etc/systemd/system/alertmanager.service
[Unit]
Description=AlertManager Server Service
Wants=network-online.target
After=network-online.target
[Service]
User=alertmanager
Group=alertmanager
Type=simple
Restart=always
ExecStart=/usr/local/bin/alertmanager --config.file /etc/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target
Recargamos el demonio de systemd y ya lo tendremos disponible.
systemctl daemon-reload
Lo agregamos al arranque y lo arrancamos
systemctl enable alertmanager
systemctl start alertmanager
Para crear las alertas vamos a creamos el siguiente fichero, con reglas para saber si los nodos estan levantados, se saturan de memoria o los discos estan llenos.
vim /etc/prometheus/alert_rules.yml
groups:
- name: ExporterDown
rules:
- alert: NodeDown
expr: up{job='node'} == 0
for: 1m
labels:
severity: Error
annotations:
summary: "Node Explorer instance {{ $labels.instance }} down"
description: "NodeExporterDown"
- name: ApacheDown
rules:
- alert: ApacheDown
expr: apache_up{} == 0
for: 1m
labels:
severity: Error
annotations:
summary: "Apache instance {{ $labels.instance }} down"
description: "ApacheExpoterDown"
- name: HADown
rules:
- alert: HAProxyDown
expr: haproxy_up{} == 0
for: 1m
labels:
severity: Error
annotations:
summary: "HAProxy instance {{ $labels.instance }} down"
description: "HAProxyExpoterDown"
- name: Memory
rules:
- alert: FullMemory
expr: (100 - ((node_memory_MemAvailable_bytes{job="node"} * 100) / node_memory_MemTotal_bytes{job="node"})) >= 85
for: 3m
labels:
severity: High
annotations:
summary: "85% Memory more than 3m instance {{ $labels.instance }}"
description: "FullMemory"
- name: HD
rules:
- alert: FullHD
expr: (100 - ((node_filesystem_avail_bytes{job="node",mountpoint="/",fstype!="rootfs"} * 100) / node_filesystem_size_bytes{job="node",mountpoint="/",fstype!="rootfs"})) >= 85
for: 60m
labels:
severity: Critical
annotations:
summary: "85% HD Full more than 1h instance {{ $labels.instance }}"
description: "FullHD"
Ahora vamos a agregar las reglas creadas a prometheus
vim /etc/prometheus/prometheus.yml
rule_files:
- "alert_rules.yml"
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093
Reiniciamos prometheus
systemctl restart prometheus
Grafana
Vamos a instalar ahora Grafana para poder ver de manera sencilla los datos que tiene prometheus, para ello vamos a agregar los repositorios oficiales para tener siempre la ultima version
apt install -y apt-transport-https
apt install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
Acutalizamos los repositorios e instalamos
apt update
apt install grafana
Arrancamos el servico y cargamos en el arranque
systemctl daemon-reload
systemctl start grafana-server
systemctl enable grafana-server
systemctl status grafana-server
Ahora vamos aprovechar el certificado que hemos solicitado para el dominio de prometheus, dado que vamos a usar el mismo nombre de dominio pero por el puerto 3000 que es el por defecto de grafana.
Vamos a crear un pequeño script para el deploy de los certificados para grafana.
mkdir /opt/cerbot
vim /opt/certbot/deployhook.sh
cp /etc/letsencrypt/live/tu-dominio.com/cert.pem /etc/grafana -f
cp /etc/letsencrypt/live/tu-dominio.com/privkey.pem /etc/grafana -f
chown grafana:grafana /etc/grafana/*.pem
chmod 644 /etc/grafana/*.pem
systemctl restart grafana-server
creamos ahora en el crontab la renovacion diciendole que deploy-hook tiene que usar
47 10 * * * /usr/bin/certbot renew --deploy-hook /opt/certbot/deployhook.sh
Ahora solo nos queda configurar grafana para que lo use.
vim /etc/grafana/grafana.ini
#################################### Server ####################################
[server]
# Protocol (http, https, h2, socket)
protocol = https
# The ip address to bind to, empty will bind to all interfaces
;http_addr =
# The http port to use
http_port = 3000
# The public facing domain name used to access grafana from a browser
domain = tu-dominio.com
# Redirect to correct domain if host header does not match domain
# Prevents DNS rebinding attacks
enforce_domain = true
# The full public facing url you use in browser, used for redirects and emails
# If you use reverse proxy and sub path specify full url (with sub path)
# Serve Grafana from subpath specified in `root_url` setting. By default it is set to `false` for compatibility reasons.
;serve_from_sub_path = false
# Log web requests
;router_logging = false
# the path relative working path
;static_root_path = public
# enable gzip
;enable_gzip = false
# https certs & key file
cert_file =/etc/grafana/cert.pem
cert_key =/etc/grafana/privkey.pem
ahora ingresamos en nuestro grafana y ponemos el usuario y contraseña por defecto que es admin:admin nada mas introducirlo nos pedira cambiarlo por la que nosotros queramos.

Una vez dentro vamos a configurar algunos dashboard para ver los datos de prometheus, hay muchos creados que son los que vamos a usar o podriamos crear los nuestros propios.
Antes de empezar a graficar cosas necesitamos decirle a grafana de donde va a sacar los datos para ello vamos Configuration -> Data Sources y agregamos la fuente que queramos en este caso prometheus

Rellenamos nuestra configuracion hay que acordarse de poner la Basic auth para que podamos recoger los datos.

Una vez que tenemos el DataSource configurado buscamos el dashboard que nos interesa y nos copiamos su identificador

Ahora nos dirigimos a Dashbard -> import y pegamos el id del dashboard

Lo cargamos y le decimos que Data Source usuara.


Ahora ya solo nos queda agregar los Dashboard que nosotros queramos.
Última actualización