[gull] Bash get stat simulteneously on many hosts

felix felix at f-hauri.ch
Sat Jun 1 09:57:05 CEST 2024


Salut Daniel,

Le Sat, Jun 01, 2024 at 12:14:22AM +0200, Daniel Cordey via gull a écrit :
> Oui, intéressant, mais je suis plutôt à utiliser les APIs des différentes
> solutions de monitoring é distance. En général tu installes un "agent"
> localement et tu l'interroges et peux récupérer des données facilement
Oui, entre munin, ocsinventory et consor!

Cet exemple et clairement destiné à faire un peu tout ce qui sort de
l'ordinaire. Il répond à des besoins sporadiques et souvent ponctuels.
(Il s'agit très souvent d'analyse de situation, servent de base pour
de futur chantiers qui rendront tout cela inutile une fois terminé.)

De nombreuse installation dans des petites structures ont été construite
au fil des années et où tous les acteurs (serveurs, routeurs, etc...) ne 
sont pas forcement équipées d'outils évolués...

Le script ``bash2sort'', est créé autour de l'idée que seul ssh et shell,
sont disponibles avec certitude sur tous les targets. Il nécessite
cependant de n'avoir qu'une seule ligne d'output par target pour éviter
les mix de concurrence, mais autant je trouve facile et sympa de

  for target in  alice at foo.net  bob at bar.org  charlie at baz.free; do
      ssh $target sh /dev/stdin $target <<<'
          printf "%-16s %-12s %s\n" "$1" "$(hostname)" "$(uptime)"
      ' &
  done | sort

que je ne vois pas ça souvent!

Alors que ``bash4sh'' a pour vocation d'être plus robuste: En utilisant
un FD différent par target, on peut assurer qu'aucun mélange ne poura
se faire. Après au lieu d'un `exec {oneFD}<> <(:)` qui genère un fifo
qui pourrait devenir bloquant si beaucoup de données sont envoyées et
que le script principal ne les lit pas... Pour éviter cela, deux possibilité
en fonction du volume de données attendu:

   exec {unFd}> /path/to/file
   ssh .... >&$unFd &
   exec {unFd}< /path/to/file
   fds[$!]=$unFd

voire:

   exec {unFd}> >(zstd >/path/to/file)
   ssh .... >&$unFd &
   exec {unFd}< <(zstdcat /path/to/file)
   fds[$!]=$unFd

En pensant à utiliser /dev/shm ou plutôt /run/user/$UID quand c'est possible.

Il m'arrive d'interroger des routeurs wrt, en même temps que des NAS LaCie ou
Synology, des serveurs virtualisés avec une application propriétaire
et l'impossibilité (contractuelle) d'y installer quoi que ce soit...

-- 
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch


More information about the gull mailing list