Ah oui, aucun... j'ai juste les yeux qui piquent...
Version imprimable
Ah oui, aucun... j'ai juste les yeux qui piquent...
Bon du coup, malgré un bon mal de tête et aussi grâce aux diverses remarques et aides que vous m'avez généreusement apporté j'ai réussi à obtenir un petit bout de résultat satisfaisant 8-)8-) :
Code:ps aux | awk '$3>0 {print "cpu_usage"$2" "$3""}' | curl --data-binary @- http://localhost:9091/metrics/job/top/instance/machine
Depuis le terminal je lance le fichier .sh (dans lequel est inscrite la ligne ci dessus), aucun message d'erreur n'est observé. Et ohh! miracle (qui n'en est pas un) je retrouve dans le pushgateway (ouverture d'un navigateur internet à l'adresse http://localhost:9091) la liste des processus et valeurs cpu associées.
Evidemment la liste est basique et demande à être améliorée mais ça fonctionne...
Je poursuis cette discussion afin d'arriver complétement à mon objectif.
Citation:
Code:print "cpu_usage"$2" "$3"";
Code:print "cpu_usage_"$2" "$3;
Le séparateur de sortie (OFS, Output Field Separator) est l'espace. Donc la dernière des 3 syntaxes, ici proposées, semble la plus naturelle.Code:print "cpu_usage_"$2, $3;
Oui ça marche bien avec des "" en moins.
En essayant de transmettre des metrics avec le nom de processus, noms contenant des [ ou / je constate que ces caractères ne sont pas appréciés. Du coup j'ai utilisé la commande "sed" pour remplacer ces caractères, voir la commande :
Code:ps aux | awk '$3>0 {print "cpu_usage_"$11"_"$2, $3}' | sed 's/\[//g' | sed 's/\]//g' | sed 's/\///g' | sed 's/-//g' | curl --data-binary @- http://...
mais comme c'est un peu barbare d'enchainer les "sed" , existe-t'il une astuce pour mettre plusieurs caractères dans une même commande "sed" ? certainement, mais je n'ai pas encore trouvé.
- La commande de substitution globale de awk est gsub(). Pas besoin d'innvoquer sed.
- Tu peux aussi autoriser des caractères, plutôt que d'interdire d'autres. Exemple :
Tous les caractères exotiques sont remplacés par un point.Code:sed 's/[^-a-zA-Z0-9_]/./g'
Bonjour,
J'ai besoin d'une petite explication car j'ai modifié la ligne de code afin de définir des labels pour prometheus. Ces labels me permettent de sélectionner une famille de processus plutôt que d'avoir a chaque fois à sélectionner les processus 1 à 1. C'est beaucoup plus pratique, sauf que je bloque sur la récupération de la valeur $3 (valeur cpu en %).
J'ai fait le test suivant :
qui me renvoie : expected float value, got "%CPU"Code:ps aux| awk '{print "cpu_usage{process=\""$11"\", pid=\""$2"\"}", $3}' | curl --data-binary @- http://localhost:9091/metrics/job/top/instance/machine
et quand je teste de cette manière :
ça marche nickel (tous les processus sont affichés avec une conso CPU de 3%. Ce qui confirme que la ligne fonctionne bien et que ce n'est que la récupération de la valeur $3 qui n'est pas bonne.Code:ps aux| awk '{print "cpu_usage{process=\""$11"\", pid=\""$2"\"}", "3"}' | curl --data-binary @- http://localhost:9091/metrics/job/top/instance/machine
Le problème est que je n'arrive pas à récupérer cette valeur... j'ai essayé pleins de trucs mais rien ne convient..
as-tu besoin de l'en-tête affiché (sur la première ligne) par ps ?
je n'avais pas du tout pensé à cela, mais non je n'en ai pas besoin !
en fait lorsque je rajoute le $3>0 cela m'enleve la ligne d'entete et du coup cela fonctionne.
Par contre si il existe une autre astuce pour ne pas afficher la ligne d'entete je suis preneur .
Merci !
ps h aux pour ne pas afficher l'en-tête, à moins que tu tiennes à ne pas afficher les processus qui ne consomment pas de CPU...
N_BaH a donné la meilleure réponse. Mais ton retraitement, si tu laisses l'entête en sortie de ps, est moins ($3>0){print "cpu_usa... que (NR>1){print "cpu_usa....
Oui et bien c'est cool ! Vous m'avez bien aidé à résoudre mon problème.
Merci. J'espère que cette discussion est suffisamment détaillée pour aider d'autres personnes avec ce genre de problématique !
A++8-)8-)