Con df -h cómo crear condiciones de alerta personalizadas [closed]

3 minutos de lectura

avatar de usuario
juan rodolfo

Con df -h, awk, tail, trcómo crear una columna de “alerta” personalizada que debería mostrar una de las siguientes indicaciones para /mnt/hgfs :

  • Advertencia: Si el grado de ocupación está entre el 75% y el 80%
  • Crítico: Si la tasa de ocupación está entre el 81% y el 95%
  • Alarma: Si la tasa es superior al 96%

  • Bienvenido a Stackoverflow. ¿Qué has intentado hasta ahora? ¿Por qué mencionas awk, tail, tr? ¿Son necesarios?

    – cronoik

    19 mayo 2019 a las 15:58

  • Gracias, quiero usar uno de esos comandos. Intenté crear una columna df – h | awk v observación =´´$observación) ”

    – Juan Rodolfo

    19 mayo 2019 a las 16:03

  • ¡Bienvenido a Stack Overflow! Lo siento, esta no es la forma en que funciona StackOverflow. Las preguntas del tipo “Quiero hacer X, por favor dame consejos y/o código de muestra” se consideran fuera de tema. Visite el centro de ayuda y lea Cómo preguntar, y especialmente lea ¿Por qué es “¿Alguien puede ayudarme?” no es una pregunta real?

    – kvantour

    19 mayo 2019 a las 16:26

  • Sugiero empezar con df -hP y no df -h.

    – Ciro

    19 mayo 2019 a las 16:48


  • Quiero una columna de “alerta” personalizada que debería mostrar una de las siguientes indicaciones para /mnt/hgfs: Advertencia: si la tasa de ocupación está entre el 75 % y el 80 % Crítica: si la tasa de ocupación está entre el 81 % y el 95 % Alarma: Si la tasa es superior a 96

    – Juan Rodolfo

    19 mayo 2019 a las 17:45

avatar de usuario
vinos

editar: Se está quedando despierto.

df |awk -v threshold="75 81 96" -v message="Warning Critical Alarm" -v mnt="/mnt/hgfs" '
  BEGIN {n=split(threshold, T); split(message, M)}
  $NF == mnt {
    for(i=n; i>0; i--)
      if(int($5) > T[i]) {print M[i] ":", mnt, "usage:", $5; exit}
    print mnt, "usage normal"                                                                                                                                               
  }'
  1. Importe sus valores arbitrarios como cadenas separadas por espacios.
  2. split listas en arreglos; obtener el número de elementos con n=split()
  3. En cualquier línea cuya última columna sea “/mnt/hgfs”, iterate hacia atrás sobre la matriz T (umbral), comparando la quinta columna (% de uso) con cada valor. Si es mayor, imprima un mensaje de advertencia usando el mismo valor para la matriz M (mensaje), luego salga antes de que se realicen otras comparaciones.

Solución para nuevos requerimientos:

df |awk '
  NR == 1      {alert="Alert"}
  int($5) < 75 {alert=""}
  int($5) > 75 {alert="Warning"}
  int($5) > 81 {alert="Critical"}
  int($5) > 96 {alert="Alarm"}
               {printf("%-10s%s\n", alert, $0)}'

  • Quiero agregar esto a una séptima columna llamada ” Observación ”

    – Juan Rodolfo

    19 mayo 2019 a las 19:08

  • @JohnRudolph Trabajaré con usted en requisitos adicionales si acepta esta respuesta a sus requisitos originales.

    – vinos

    19 mayo 2019 a las 19:33

  • para crear y agregar una columna personalizada titulada “Alerta”, ¿no debería comenzar con df – h | awk -v alerta =”($alerta)” ?

    – Juan Rodolfo

    19 mayo 2019 a las 19:37

  • @JohnRudolph, agregaría una línea: {printf("%-10s%s\n", foobar, $0)} para imprimir siempre una cadena rellenada a la izquierda de la salida original. Luego, simplemente podría cambiar el valor de foobar en función del % de uso.

    – vinos

    19 mayo 2019 a las 20:18


  • @JohnRudolph Agregué un filtro simple que verifica el valor de $ 5 repetidamente

    – vinos

    19 mayo 2019 a las 20:32

¿Ha sido útil esta solución?