-- Leo's gemini proxy

-- Connecting to sl1200.dystopic.world:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini;lang=es-ES

Construcción de un monitor remoto del sistema para mi VPS

2022-12-09

#bash #linux #vps

Objetivo: Construir mi propio monitor de sistema remoto, con comandos muy sencillos de bash, que me permita acceder desde cualquier navegador web, con un usuario y contraseña, para comprobar si el VPS está funcionando correctamente y las visitas a mi cápsula gemini.


Planteamiento de la solución:

Parto de la creación de una web privada con acceso por contraseña, tal y como hice en mi tutorial:

Tus marcadores accesibles desde cualquier lugar y navegador, en una web privada con acceso por contraseña

Pero en lugar de alojar un archivo con mis marcadores alojaré mi monitor de sistema, que será un simple archivo de texto plano que se irá actualizando cada minuto mostrándome las salidas de una serie de comandos de bash ejecutados en mi VPS.


Necesito también acceso a journalctl para filtrar las visitas mi cápsula, contar el número de visitas y ver cuales son los artículos más visitados. Esto está explicado en los tutoriales:

Publicar el número de visitas en tu cápsula

Cómo publicar un listado con los artículos más visitados de tu cápsula


También haré uso de estos comandos básicos de bash:

uptime, para obtener el tiempo en funcionamiento desde el último reinicio

last reboot, para obtener listado de últimos reinicios

free, para el consumo de memoria RAM

df, para uso del disco duro


Este sería el script que genera mi "monitor de sistema remoto". No se puede copiar y ya está, es sólo una orientación y un recordatorio para mi de cómo lo he construido. Seguro que hay muchísimas otras soluciones mejores, os agradecería que me comentaráis cualquier posible mejora o error que veáis, gracias:


	#!/bin/bash

MONITOR=/home/usuario/bin/visitas/monitor.txt
LOGVISITAS=/home/usuario/bin/visitas/logvisitas
AUXILIAR=/home/usuario/bin/visitas/auxiliar
LISTADO1=/home/usuario/bin/visitas/listado1
LISTADO2=/home/usuario/bin/visitas/listado2
LISTADO3=/home/usuario/bin/visitas/listado3
TOPVISITAS=/home/usuario/gemini/content/top_visitas
TOPVISITASGMI=/home/usuario/gemini/content/top_visitas.gmi

rm $LISTADO1 $LISTADO2 $LISTADO3 $AUXILIAR

# Últimas 30 visitas listado1
journalctl | grep 'agate-server' | sed '/feed.gmi/d' | sed '/atom.xml/d' | sed '/error/d' | sed '/robots/d' | sed '/top_visitas/d' | sed '/index.gmi/d' | cut -d " " -f 1,2,3,12 | sed 's/\"//g' | cut -b 1-16,47- | awk 'NF' | tail -n 30 > $LISTADO1

# Listado de las 30 entradas más visitadas listado2
sort $LOGVISITAS  | uniq -c > $AUXILIAR
sort -nr $AUXILIAR | head -n 30 > $LISTADO2

# Uno listado1 y listado2
paste $LISTADO1 $LISTADO2 > $LISTADO3
less $LISTADO3 | column -t > $MONITOR

sed -i '1i\===== Ultimas visitas y TOP-30 de entradas mas visitadas============================================\' $MONITOR
sed -i '1i\\' $MONITOR
sed -i '1i\##### MONITOR DEL SISTEMA #####\' $MONITOR

# Publico nº de visitas
read nv < /home/usuario/bin/visitas/v
echo -e "\n===== NUMERO DE VISITAS: $nv " >> $MONITOR

# Tiempo desde el último reinicio del servidor:
echo -e "\n===== TIEMPO DESDE ULTIMO REINICIO ================================================================= " >> $MONITOR
uptime -p >> $MONITOR

# Últimos reinicios
echo -e "\n===== ULTIMOS REINICIOS ============================================================================ " >> $MONITOR
last reboot -F | head -4 >> $MONITOR

# Publico estado de memoria
echo -e "\n===== USO DE MEMORIA RAM ===========================================================================" >> $MONITOR
free -h >> $MONITOR

# Publico estado disco duro
echo -e "\n===== USO DE DISCO DURO ============================================================================" >> $MONITOR
df -ha | grep -E 'sda2|sda3|Filesystem' >> $MONITOR

# Procesos que más cpu y memoria consumen
echo -e "\n===== PROCESOS QUE MAS MEMORIA Y CPU CONSUMEN ======================================================" >> $MONITOR
ps aux --sort -rss | tr -s ' ' | cut -d " " -f 2,3,4,11 | head | column -t -s " " >> $MONITOR

# Publico en la cápsula gemini el listado de las 20 entradas más visitadas
less $LISTADO2 | tail -n +2 | head -n 20 > $TOPVISITAS
less $TOPVISITAS | sed -r 's/(.*)( )//g' | sed 's/^/=>/' > $TOPVISITASGMI

Después programas el script con "crontab -e" para que se vaya ejecutando cada minuto o el tiempo que tú decidas.

Como ves he generado un archivo "monitor.txt" pero está dentro de mi carpeta de usuario, no donde está alojado mi espacio web privado, en el directorio /admin de mi web, para ello tendremos que usar un enlace simbólico, en mi caso es este:


	sudo ln -s /home/usuario/bin/visitas/monitor.txt /var/www/html/admin/monitor.txt

Y el resultado visual desde un navegador web es este:

../images/monitor_sistema.jpg


This work by SL1200 is licensed under CC BY 4.0


◄ BACK

🏠 Home







-- Response ended

-- Page fetched on Fri May 17 01:41:47 2024