Estructura de navegación

Tabla de contenidos

Preparando la base

Partiendo de un SO Debian 12 recién instalado lo primero que haremos será actualizar los repositorios y los paquetes que tengamos con el comando:

apt update && apt upgrade

Instalación de paquetes

Con el SO ya actualizado instalaremos los paquetes necesarios para realizar las instalaciones con el comando:

apt install wget apt-transport-https software-properties-common openssh-server apache2-utils sudo

La función de los paquetes instalados será la siguiente:

  • wget: Descargar archivos de Internet desde la línea de comandos.
  • apt-transport-https: Permite que apt use HTTPS para descargar paquetes de repositorios.
  • software-properties-common: Proporciona herramientas para administrar repositorios de software.
  • sudo: Permite ejecutar comandos con privilegios elevados, mejorando la seguridad y la gestión del sistema.
  • openssh-server: Permite que el servidor reciba conexiones de otros sistemas mediante SSH, este paquete será utilizado para la administración del servidor.
  • apache2-utils: Herramientas de línea de comandos para administrar Apache 2, este paquete será utilizado para la creación de contraseñas de autentificación más adelante.

Creación de usuarios

Debemos asignar un usuario para ejecutar los servicios de Grafana, de Prometheus y de Influxdb, por seguridad crearemos usuarios con el shell /bin/false para que no se pueda iniciar sesión con esos usuarios. Grafana e Influxdb ya lo crean automáticamente en la instalación, sólo será necesario crear el usuario de Prometheus, el comando será el siguiente:

adduser --no-create-home --shell /bin/false prometheus

Instalación de Grafana

Instalaremos Grafana mediante un script que ya he creado, lo descargaremos con el comando:

wget https://raw.githubusercontent.com/IagoLB/iagolb.github.io/main/scripts/grafana.sh && bash grafana.sh

El contenido del script es el siguiente:

#!/bin/bash
#Autor: Iago López Brañas
#Utilidad: Instalación de grafana
if [ $(id -u) -ne 0 ]; then
    error "El script debe ser ejecutado como root."
	exit 1
fi

apt update
apt install -y software-properties-common wget apt-transport-https 

#Verificar si tenemos el repositorio
if ! grep "grafana" /etc/apt/sources.list /etc/apt/sources.list.d/*; then    
    wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
    add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
    apt update && apt install -y grafana 
fi

#Habilitar los servicios si grafana se instalo correctamente
if dpkg -l | grep -q grafana; then
    # Habilitar el servicio Grafana si no está habilitado
    if ! systemctl is-enabled --quiet grafana-server; then
        systemctl enable grafana-server
    fi

    # Iniciar el servicio Grafana si no está iniciado
    if ! systemctl is-active --quiet grafana-server; then
        systemctl start grafana-server
    fi

    # Verificar el estado del servicio Grafana
    systemctl status grafana-server
else
    echo "No se pudo habilitar el servicio Grafana porque Grafana no está instalado."
    exit 1
fi

read -p "Instalación finalizada"
printf "
Gracias por instalar conmigo
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⠀⣠⣄⣼⣿⠻⢿⣷⡄⠀⠀
⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣨⣿⣿⣿⣶⣾⡏⠰⠆⠀
⠀⠀⠀⠀⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠛⠋⡀⠀⠀
⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⢻⣿⣿⣿⣿⣿⠟⠀⠀⠀⠸⠁⠀⠀
⠀⠀⠀⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⢀⣾⡿⠿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢠⣤⡈⠛⢿⣿⣿⣿⣿⣿⣥⣀⡉⠁⠀⠀⠘⢿⣧⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢀⣾⣿⣿⣦⡀⠙⠛⠿⠿⢿⣿⣿⣿⣿⡶⠀⠀⠈⠻⢿⣿⠆⠀⠀⠀⠀⠀
⠀⠀⣼⣿⣿⣿⣿⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢠⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠸⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠙⢿⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠈⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀
"
sleep 5
exit 0

Instalación de Influxdb

Siguiendo la documentación oficial de Influxdb primero descargaremos el servidor y luego la interfaz de la linea de comandos para interactuar con influxdb, los instalaremos con el comando:

#Instalación de la BBDD
 wget https://download.influxdata.com/influxdb/releases/influxdb2_2.7.6-1_amd64.deb
dpkg -i influxdb2_2.7.6-1_amd64.deb
rm influxdb2_2.7.6-1_amd64.deb 

#Instalacion de la herramienta de CLI
wget https://download.influxdata.com/influxdb/releases/influxdb2-client-2.7.5-linux-amd64.tar.gz
tar xvzf influxdb2-client-2.7.5-linux-amd64.tar.gz
mv influx /usr/local/bin/
rm influxdb2-client-2.7.5-linux-amd64.tar.gz

Instalación de Prometheus

Instalaremos Prometheus mediante un script que ya he creado, lo descargaremos con el comando:

wget https://raw.githubusercontent.com/IagoLB/iagolb.github.io/main/scripts/prometheus.sh && bash prometheus.sh

El contenido del script es el siguiente:

#!/bin/bash
#Autor: Iago López Brañas
#Utilidad: Instalación de prometeus
if [ $(id -u) -ne 0 ]; then
    error "El script debe ser ejecutado como root."
	exit 1
fi

if [ ! id -u prometheus > /dev/null 2>&1 ];then
	echo "Creando usuario para prometheus"
	useradd -M -s /bin/false prometheus
	read -p "Presiona intro para continuar"
fi


echo "Descargando versión 2.51.1 de prometheus"
if [ ! $(systemctl is-active --quiet prometheus) ]; then
	cd /tmp
	wget https://github.com/prometheus/prometheus/releases/download/v2.51.1/prometheus-2.51.1.linux-amd64.tar.gz
 	hash_node_prometheus_2_51_1=1f933ea7515e3a6e60374ee0bfdb62bc4701c7b12c1dbafe1865c327c6e0e7d2
  	hash_actual=$(sha256sum prometheus-2.51.1.linux-amd64.tar.gz | awk -F " " '{print $1}' )

	if [ $hash_node_prometheus_2_51_1 == $hash_actual ];then
    		tar -xf prometheus-2.51.1.linux-amd64.tar.gz 	
		read -p "Presiona intro para continuar"
  	else
		rm prometheus-2.51.1.linux-amd64.tar.gz
  		exit 1
   	fi
	
else
	echo "Ya está instalado"
fi


echo "Creando directorios para prometheus, y cambiando propietario a prometheus:prometheus"
read -p "Presiona intro para continuar"

if [ ! -d "/etc/prometheus" ]; then
	mkdir /etc/prometheus
fi

if [ ! -d "/var/lib/prometheus" ]; then
	mkdir /var/lib/prometheus
fi

chown prometheus:prometheus /etc/prometheus
chown prometheus:prometheus /var/lib/prometheus

echo "Instalando prometheus"

if cp prometheus-2.51.1.linux-amd64/prometheus /usr/local/bin/ && cp prometheus-2.51.1.linux-amd64/promtool /usr/local/bin/ && \
    chown prometheus:prometheus /usr/local/bin/prometheus && chown prometheus:prometheus /usr/local/bin/promtool; then
    echo "Prometheus y promtool copiados correctamente y propietario cambiado."
else
    echo "Error al copiar Prometheus y/o promtool o al cambiar el propietario."
fi

# Copia de consoles y console_libraries a /etc/prometheus/ y cambio de propietario
if cp -r prometheus-2.51.1.linux-amd64/consoles /etc/prometheus && cp -r prometheus-2.51.1.linux-amd64/console_libraries /etc/prometheus && \
    chown -R prometheus:prometheus /etc/prometheus/consoles && chown -R prometheus:prometheus /etc/prometheus/console_libraries; then
    echo "Consoles y console_libraries copiados correctamente y propietario cambiado."
else
    echo "Error al copiar consoles y/o console_libraries o al cambiar el propietario."
fi

# Eliminación de archivos temporales
if rm -rf /tmp/prometheus-2.51.1.linux-amd64.tar.gz /tmp/prometheus-2.51.1.linux-amd64; then
    echo "Archivos temporales eliminados correctamente."
else
    echo "Error al eliminar archivos temporales."
fi


if [ ! -f /etc/prometheus/prometheus.yml ];then
	printf "
	global:
	scrape_interval: 15s
	scrape_configs:
	- job_name: 'prometheus'
		scrape_interval: 5s
		static_configs:
		- targets: ['localhost:9090']
	" > /etc/prometheus/prometheus.yml

	chown prometheus:prometheus /etc/prometheus/prometheus.yml
fi


if [ ! -f /etc/systemd/system/prometheus.service ];then
	printf "
	[Unit]
	Description=Prometheus
	Wants=network-online.target
	After=network-online.target

	[Service]
	User=prometheus
	Group=prometheus
	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	

	[Install]
	WantedBy=multi-user.target
	" > /etc/systemd/system/prometheus.service
fi

if [ -f /etc/systemd/system/prometheus.service ];then
	systemctl daemon-reload
	systemctl start prometheus
	systemctl enable prometheus
fi
read -p "Instalación finalizada"
printf "
Gracias por instalar conmigo
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⠀⣠⣄⣼⣿⠻⢿⣷⡄⠀⠀
⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣨⣿⣿⣿⣶⣾⡏⠰⠆⠀
⠀⠀⠀⠀⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠛⠋⡀⠀⠀
⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⢻⣿⣿⣿⣿⣿⠟⠀⠀⠀⠸⠁⠀⠀
⠀⠀⠀⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⢀⣾⡿⠿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢠⣤⡈⠛⢿⣿⣿⣿⣿⣿⣥⣀⡉⠁⠀⠀⠘⢿⣧⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢀⣾⣿⣿⣦⡀⠙⠛⠿⠿⢿⣿⣿⣿⣿⡶⠀⠀⠈⠻⢿⣿⠆⠀⠀⠀⠀⠀
⠀⠀⣼⣿⣿⣿⣿⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢠⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠸⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠙⢿⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠈⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀
"
sleep 5
exit 0