SAR

«SAR o no SAR» con LinuxDoesMatter y ChatGPT

Prompt 1:

“Tengo en un servidor Linux un directorio que se llama /bk_datos. Quiero que de otro directorio de mi host llamado /datos_2024 se haga una copia de seguridad total los sábados a las 18:30pm y una copia incremental de Lunes a Viernes a las 22:00pm en el directorio /bk_datos Quiero que uses el comando tar y que comprimas con xz”.

Respuesta 1:

#!/bin/bash
# Ruta del directorio de origen
source_directory="/datos_2024"
# Ruta del directorio de destino
backup_directory="/bk_datos"
# Nombre del archivo de copia de seguridad
backup_file="$backup_directory/backup_$(date +\%Y-\%m-\%d_%H-\%M).tar.xz"
# Verificar si es sábado
if [ "$(date +\%u)" -eq 6 ]; then
# Copia de seguridad total los sábados a las 18:30
tar --listed-incremental="$backup_directory/incremental.snar" -cJf "$backup_file" "$source_directory"
echo "Copia de seguridad total realizada el $(date +\%Y-\%m-\%d_%H-\%M)."
else
# Copia de seguridad incremental de Lunes a Viernes a las 22:00
tar --listed-incremental="$backup_directory/incremental.snar" -cJf "$backup_file" "$source_directory"
echo "Copia de seguridad incremental realizada el $(date +\%Y-\%m-\%d_%H-\%M)."
fi
………………………………………
chmod +x backup_script.sh
# Copia total los sábados a las 18:30
30 18 * * 6 /ruta/al/backup_script.sh
# Copia incremental de lunes a viernes a las 22:00
0 22 * * 1-5 /ruta/al/backup_script.sh

Referencia: https://juncotic.com/tar-backups-incrementales-gnu-linux/

Solo me queda añadir la lógica para que el sábado “expulse” el snapshot y haga un backup total puro y duro creando el fichero de snapshot incremental .snar nuevecito para los subsiguientes incrementales de lunes a viernes.

Conclusión: ChatGPT Me ha ayudado mucho no, ¡muchísimo! pero hay veces que el remate lo tiene que hacer el “ser humano”.

Prompt 2:

“Tengo un partición montada en un directorio que se llama /proyecto_seal y tengo tres usuarios user01, user02 y user03. Quiero que los tres usuarios tengan acceso a este directorio. También quiero una política de cuotas con un soft limit de 2G y periodo de gracia de 3 dias y una hard limit de 5G. Otorga al directorio el permiso apropiado para que ningún usuario de esto tres pueda borrar lo que han creado los otros”

Respuesta 2:

# Asegúrate de que el grupo exista, si no, créalo
sudo groupadd proyecto_seal
# Añade usuarios al grupo
sudo usermod -aG proyecto_seal user01
sudo usermod -aG proyecto_seal user02
sudo usermod -aG proyecto_seal user03
# Cambia el propietario y grupo del directorio
sudo chown :proyecto_seal /proyecto_seal
# Establece permisos para el propietario (dueño del directorio)
sudo chmod 1770 /proyecto_seal
# Permite que los miembros del grupo tengan acceso total
sudo chmod g+rwx /proyecto_seal
# Restringe el acceso a otros usuarios (no propietarios ni del grupo)
sudo chmod o-rwx /proyecto_seal
sudo apt-get install quota
vi /etc/fstab
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /proyecto_seal ext4 defaults,usrquota,grpquota 0 2
sudo mount -o remount /proyecto_seal
sudo quotacheck -cug /proyecto_seal
sudo edquota -u user01
sudo edquota -u user02
sudo edquota -u user03

Prompt 3:

Tengo un fichero de texto con paths completos de directorios, algunos caminos empiezan por /usr/bin/local/ y quiero en estos que empiezan por /usr/bin/local/ y solo en estos eliminar /usr/bin/local/ ¿Me creas un script para realizar esta tarea?

Respuesta 3:

#!/bin/bash
# Verificar si se proporcionó un archivo como argumento
if [ -z "$1" ]; then
echo "Uso: $0 archivo"
exit 1
fi
archivo="$1"
# Verificar si el archivo existe
if [ ! -f "$archivo" ]; then
echo "El archivo '$archivo' no existe."
exit 1
fi
# Crear un archivo temporal para almacenar los resultados
archivo_temporal=$(mktemp)
# Procesar el archivo línea por línea
while IFS= read -r linea; do
# Verificar si la línea comienza con /usr/bin/local/
if [[ "$linea" == "/usr/bin/local/"* ]]; then
# Eliminar /usr/bin/local/ de la línea
nueva_linea="${linea#/usr/bin/local/}"
echo "$nueva_linea" >> "$archivo_temporal"
else
# Conservar la línea tal cual si no comienza con /usr/bin/local/
echo "$linea" >> "$archivo_temporal"
fi
done < "$archivo"
# Sobrescribir el archivo original con los resultados
mv "$archivo_temporal" "$archivo"
echo "Proceso completado. Se ha modificado el archivo '$archivo'."

Y vamos con SAR…

sar es una herramienta de monitorización de recursos en sistemas basados en Unix, como Linux. El nombre «sar» proviene de «System Activity Reporter». Esta utilidad permite recopilar, informar y analizar datos sobre la actividad del sistema, incluyendo el uso de CPU, memoria, E/S (entrada/salida) y otros recursos.

El paquete sar generalmente viene incluido en el conjunto de herramientas de sysstat. Para utilizar sar en Linux, debes asegurarte de que sysstat esté instalado.

Con mucha seguridad el paquete systat estará instalado pero si no procedemos como siempre
Para Centos/Redhat sería algo como esto… yum o dnf

yum install sysstat -y
systemctl start sysstat.service
systemctl enable sysstat.service

Pero ya que estamos con ChatGPT usamos este PROMPT para que nos diga cómo ponerlo en marcha. No obstante la instalación y puesta en marcha de sar/sysstat está francamente bien documentado en montones de sitios web que se encuentran con la oportuna búsqueda en google.

“¿Me explicas detalladamente cómo poner en marcha sar en Linux Centos a partir de la instalación de sysstat?”

Respuesta de ChatGPT:

Paso 1: Instalar sysstat
sudo yum install sysstat

Paso 2: Habilitar y configurar sysstat
sudo nano /etc/sysconfig/sysstat
Dentro de este archivo, asegúrate de que la variable ENABLED esté establecida en "true". Si no está configurada, cámbiala a:
ENABLED="true"

Paso 3: Iniciar y activar el servicio sysstat
sudo systemctl start sysstat
sudo systemctl enable sysstat

Paso 4: Configurar la recopilación automática de datos
La recopilación automática de datos se realiza mediante el cron. 
El archivo /etc/cron.d/sysstat configura la programación de las actividades de recopilación.
Abre el archivo /etc/cron.d/sysstat en un editor de texto:
sudo nano /etc/cron.d/sysstat
Asegúrate de que la tarea cron esté descomentada y configurada según tus necesidades. 
Por defecto, la recopilación de datos se programa cada 10 minutos:
*/10 * * * * root /usr/lib64/sa/sa1 1 1
Puedes ajustar el intervalo según tus preferencias.

Genial respuesta una vez puesto en marcha empezamos ejecutar comandos sar para indagar la carga del sistema en diferentes aspectos…

Esta utilidad permite recopilar, informar y analizar datos sobre la actividad del sistema, incluyendo el uso de CPU, memoria, E/S (entrada/salida), swap, disco, paginación, red, etc.

Vamos a crear prompts para que me genere informes sobre cada uno de estos aspectos.

“ChatGPT voy a arrancar un aplicación en Linux y quiero saber el impacto a nivel de consumo de CPU que va a tener. Créame el comando sar para esta prueba y poder observar el consumo de CPU por la ejecuc.ión de esta aplicación”

Respuesta de ChatGPT: Eso es en el presente.

sar -u 1
Este comando recopilará estadísticas de CPU cada segundo (-u 1) y mostrará el uso de CPU, carga promedio y más.
Ejecuta tu aplicación:
Inicia la aplicación que deseas probar. Mientras se ejecuta, sar continuará recopilando y mostrando estadísticas de CPU cada segundo.
Detén la recopilación de datos de sar:
Puedes detener la recopilación de datos presionando Ctrl + C. Después de esto, sar mostrará un resumen del uso de la CPU durante el período de recopilación.
El comando y la salida se verán algo así: Esto en el presente:

En esta salida, %user representa el porcentaje de tiempo de CPU gastado en el espacio de usuario (aplicaciones), y %system representa el porcentaje de tiempo de CPU gastado en el kernel del sistema.

Observa los valores de %user y %system para evaluar el impacto en el consumo de CPU de tu aplicación durante la ejecución. También puedes ajustar el intervalo de recopilación (1 en el comando -u 1) según tus necesidades para obtener más o menos granularidad en los datos recopilados.

ChatGPT dime cómo evolucionó el consumo de CPU entre las 01:00am y 4:00am del 12 de enero de 2024. Dame por favor el comando sar que debo ejecutar.
Salida de ChatGPT: Esto es una pregunta “hacia el pasado”.

Evolución ficticia
Linux 5.4.0-74-generic (hostname) 12/01/2024 _x86_64_ (1 CPU)

01:00:00 AM CPU %user %nice %system %iowait %steal %idle
01:10:00 AM all 10.00 0.50 5.00 0.00 0.00 84.50
01:20:00 AM all 12.00 0.75 6.00 0.10 0.05 81.10
01:30:00 AM all 15.00 1.00 7.50 0.20 0.10 76.20
...
03:50:00 AM all 25.00 2.00 12.50 0.50 0.25 60.75
04:00:00 AM all 22.50 1.75 11.25 0.30 0.15 64.05

Una vez visto cómo se construye el comando sar para ver el consumo de CPU a través del prompt de ChatGPT, os toca a vosotros extrapolarlo los siguientes aspectos del rendimiento del sistema

Listado de comandos básicos de sar para monitorear diferentes aspectos del sistema, con ejemplos sencillos:
1. Uso de CPU:
Comando:
sar -u 1
Ejemplo:
sar -u 1
Descripción: Muestra estadísticas de uso de CPU cada segundo.
2. Uso de Memoria RAM:
Comando:
sar -r 1
Ejemplo:
sar -r 1
Descripción: Muestra estadísticas de uso de memoria RAM cada segundo.
3. Uso de Swap:
Comando:
sar -S 1
Ejemplo:
sar -S 1
Descripción: Muestra estadísticas de uso de swap cada segundo.
4. Uso de Disco:
Comando:
sar -b 1
Ejemplo:
sar -b 1
Descripción: Muestra estadísticas de E/S de bloque (disco) cada segundo.
5. Paginación:
Comando:
sar -B 1
Ejemplo:
sar -B 1
Descripción: Muestra estadísticas de paginación cada segundo.
6. Estadísticas de Red:
Comando:
sar -n DEV 1 nota DEV seria eth0, eth1, enp0s3, etc
Ejemplo:
sar -n DEV 1
Descripción: Muestra estadísticas de red para cada interfaz de red cada segundo.
Estos comandos te proporcionarán información útil sobre el rendimiento del sistema en tiempo real. Puedes ajustar el intervalo (1 en los ejemplos) según tus necesidades. Recuerda que la disponibilidad de ciertas métricas puede variar según tu sistema operativo y configuración específica.

Muy probablemente ya sar estará up & running en vuestro servidor. Yo personalmente tengo ya unos comandos sar preparados que los utilizo cuando hay una “crisis” las respuestas de ChartGPT complementan y refuerzan mi colección de comando sar para momentos en que el servidor esta impactado y quiero saber que pasó a nivel me memoria, cpu, swap, red, etc en el pasado.


Imagen generada con Bing:

https://www.bing.com/images/create/quiero-ver-al-pinguino-de-linux-tux-navegando-por-/1-65b55c0737984be4a5b094094ac4a36c?id=saGy0f4yGyOzg%2bEOWDH0cw%3d%3d&view=detailv2&idpp=genimg&FORM=GCRIDP&mode=overlay


Enlaces a las clases y los talleres:

Clase 1
https://growthhackingcourse.io/clases-chatgpt/
Clase 2
https://growthhackingcourse.io/clase-2-chatgpt-dominando-los-prompts/
Clase 3
https://growthhackingcourse.io/clase-3-chatgpt-automatizando-la-generacion-de-contenidos/
Taller1:
https://directo.growthhackingcourse.io/taller-chat-gpt-en-directo/
Taller2:
https://www.youtube.com/watch?v=-f2xdGwkO3k