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
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.
Recargamos el demonio de systemd y ya lo tendremos disponible.
systemctldaemon-reload
Lo agregamos al arranque y lo arrancamos
systemctlenableprometheussystemctlstartprometheus
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.
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-repositoryppa:certbot/certbotaptupdate
aptinstallcertbotpython3-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 [::]:443ssl ipv6only=on; # managed by Certbot listen 443ssl; # 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 Certbotinclude/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) {return301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name tu-dominio.com;return404; # 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
aptinstallapache2-utils
Creamos un fichero de contraseñas con el usuario admin y ponemos la contraseña que queramos
htpasswd-c/etc/nginx/.htpasswdadmin
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
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
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;
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.
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
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.
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.