Forum Programmation.shell Surveiller l'usage des inodes

Posté par  . Licence CC By‑SA.
Étiquettes :
1
5
mar.
2013

La problématique : Certains serveurs font tourner certaines applications qui chient du fichier (par exemple snort sans un -K None), il faut avoir un œil dessus.

Une solution serait de profiter du fonctionnement de cron qui envoie un mail si et seulement si la commande lancée produit quelque chose sur stdout avec un truc comme ça :

df -iPh | tail -n +2 | sed -e 's/  */;/g' | cut -d';' -f 1,5 | awk -F';' '{print $2,"\t",$1}' | grep '^[5-9][0-9]'

Je prends la sortie de df, je vire l'entête, je vire les espaces redondants et je garde le champ 1 et le champ 2, j'inverse les champs et je n'affiche que les lignes où la valeur (%Iutil) est supérieur ou égale à 50 %.

Avez-vous une manière plus élégante à me proposer ?

  • # Supervision

    Posté par  (site web personnel) . Évalué à 2. Dernière modification le 05 mars 2013 à 20:18.

    Je suggère une solution de supervision, qui te permettra de surveiller ça et plein d'autres choses, faire de la corrélation, des alertes plus poussées, etc. Surtout que tu parles de serveurs au pluriel…

    Par exemple avec Zabbix, la surveillance des inodes est supportée nativement…
    Ça te permettra d'avoir facilement un graphique de l'évolution de cette donnée, etc.

    • [^] # Re: Supervision

      Posté par  . Évalué à 2.

      Oui merci. Tu as tout à fait raison.

      Je postais plus pour améliorer ma maîtrise du shell que pour une réelle solution.

      Mais il faut reconnaître que mettre en place un bête script à déployer, qui envoi des mails, est parfois faisable alors que la mise en place d'une architecture complète pour une vrai supervision est juste infaisable en l'état ;) Et il faut quand même surveiller ces putains d'inodes…

  • # compléter la commande sed ?

    Posté par  . Évalué à 1.

    je suis pas un gourou sed, mais on devrait pouvoir éviter tout les pipes avec un

    df -iPh | sed -e '1d;/[5-9][0-9]\%/!d'

    d'autres confirmeront l'exactitude de ma syntaxe, que je n'ai honteusement pas testée.

    • [^] # Re: compléter la commande sed ?

      Posté par  . Évalué à 1.

      $ df -iPh | sed -e '1d;/[0-9][0-9]\%/!d'
      /dev/mapper/agneska-root    131K     14K    117K   11% /
      /dev/mapper/agneska-usr    537K    100K    437K   19% /usr
      
      

      Bien joué. Tu peux expliciter la commande sed ?

    • [^] # Re: compléter la commande sed ?

      Posté par  . Évalué à 3. Dernière modification le 05 mars 2013 à 20:50.

      Tant qu'à faire, pourquoi effacer des lignes sauf celles qui matchent, et ne pas raisonner en affichant seulement celles qui matchent ?

      df -iPh | sed -ne '/[5-9][0-9]\%/p'
      
      

      Explications :

      • -ndesactive l'affichage auto,
      • celles qui matchent se font afficher.

      Wait… en fait c'est un grep !

      D'ailleurs moi quand je parse une sortie d'une commande, je n'aime pas être géné par une éventuelle localisation qui viendrait perturber mon résultat, j'ai donc toujours un LANG=C.

      Mais sinon sur la question intiale, j'approuve le premier commentaire, une solution de suppervision (même si moi je pense à munin) me parrait vraiment plus adaptée pour ce genre de choses.

    • [^] # Re: compléter la commande sed ?

      Posté par  . Évalué à 1.

      Le champ %IUti est le seul à avoir le caractère %, bien vu.

      C'est vraiment ce que je voulais faire, merci à tous !

      • [^] # Re: compléter la commande sed ?

        Posté par  . Évalué à 1.

        a noter que les regexp, ca marche aussi avec grep, hein:

        grep -e '[5-9][0-9]\%'
        
        
        • [^] # Re: compléter la commande sed ?

          Posté par  . Évalué à 1.

          Ça donne pas exactement la même sortie que ta commande initiale(i.e tu as toute la ligne et pas seulement le champ IUti%), mais si ça convient, pourquoi ne pas s'être contenté du grep de base, comme tu l'a bien mis dans ton exemple? (vraie question)

          timing de m****** pour l'édition d'un commentaire, ma réflexion au dessus est bien évidemment a oublier si on relis la commande du post initial

  • # Avec awk ?

    Posté par  . Évalué à 1.

    Salut,

    $ df -iPh | awk '$1 ~ /dev/ && $5 > 15 { printf "%s\t%s\n",$2,$1 }'
    1,8M    /dev/sda8
    
    

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.