tuto3: telegraf with cgroups v2
This commit is contained in:
parent
a9f149b2e4
commit
8195919d22
2 changed files with 89 additions and 11 deletions
|
|
@ -82,14 +82,17 @@ accessible ici :
|
|||
### Permettre à l'utilisateur de monitorer des processus
|
||||
|
||||
Maintenant, séparons notre script en deux parties afin qu'un utilisateur normal
|
||||
(non-root) puisse utiliser la partie monitoring de notre script.
|
||||
(non-root) puisse utiliser la partie monitoring de notre script. La procédure
|
||||
sera différente suivant la version des *cgroup*s que vous utilisez.
|
||||
|
||||
#### *cgroup*s v1\
|
||||
|
||||
Un premier script doit s'occuper de créer le(s) *cgroup*s et lui attribuer les
|
||||
bons droits (`chown $EUID`), tandis que le deuxième va effectuer le monitoring,
|
||||
sans privilèges particuliers.
|
||||
|
||||
#### Exemple {-}
|
||||
|
||||
##### Exemple {-}
|
||||
\
|
||||
<div lang="en-US">
|
||||
```
|
||||
42sh$ sudo ./telegraf_init.sh my_cgroup_name
|
||||
|
|
@ -97,4 +100,79 @@ sans privilèges particuliers.
|
|||
```
|
||||
</div>
|
||||
|
||||
|
||||
#### *cgroup*s v2\
|
||||
|
||||
On part du principe que `systemd` est le système d'initialisation de votre
|
||||
machine et qu'il gère lui-même l'arborescence.
|
||||
|
||||
Dans cette version des *cgroup*s, on peut toujours déléguer une partie de
|
||||
l'arborescence à un utilisateur, au moyen d'un `chown`, cependant une
|
||||
contrainte supplémentaire entre en jeu. Lorsque l'on veut déplacer un
|
||||
processus, il faut avoir les droits d'écriture à la fois sur la destination,
|
||||
mais également sur la source, et sur tous les nœuds de l'arborescence que l'on
|
||||
peut croiser lors du parcourt de l'arbre.
|
||||
|
||||
Cela signifie, qu'après avoir `mkdir -p virli/child1 virli/child2 && chown -R
|
||||
$EUID:$EUID virli`, il est possible de déplacer un processus de :
|
||||
|
||||
```
|
||||
/virli/child1
|
||||
```
|
||||
|
||||
vers
|
||||
|
||||
```
|
||||
/virli/child2
|
||||
```
|
||||
|
||||
car on dispose bien des droits d'écriture sur l'ancêtre commun le plus proche
|
||||
(à savoir `/virli`).
|
||||
|
||||
Les problèmes surviennent lorsque l'on souhaite déplacer un processus que
|
||||
`systemd` a placé dans :
|
||||
|
||||
```
|
||||
/user.slice/user@$UID.service/app.slice/app-alacritty-0a1b2c3d4e5f6e7d9c
|
||||
```
|
||||
|
||||
Il ne sera alors pas possible de le déplacer vers `/virli/child1`, car
|
||||
l'ancêtre commun le plus proche est la racine des *cgroup*s, sur laquelle
|
||||
l'utilisateur n'a pas les droits d'écriture.\
|
||||
|
||||
Pour faire cet exercice, vous allez donc devoir rechercher l'ancêtre commun le
|
||||
plus proche sur lequel votre utilisateur a les droits d'écritures.
|
||||
|
||||
En utilisant `systemd` :
|
||||
|
||||
```
|
||||
42sh$ systemctl --user show | grep ControlGroup
|
||||
ControlGroup=/user.slice/user-1234.slice/user@1234.service
|
||||
```
|
||||
|
||||
Ou bien en recherchant dans l'arborescence des *cgroup*s votre processus :
|
||||
|
||||
```
|
||||
42sh$ find /sys/fs/cgroup/ -name cgroup.procs -exec grep -l $$ {} \;
|
||||
```
|
||||
|
||||
... puis en remontant tant que l'on dispose des droits d'écritures.\
|
||||
|
||||
|
||||
Le script `telegraf_init.sh` devra retourner le chemin vers le dossier
|
||||
(éventuellement) créé à partir du nom passé en paramètre, depuis la racine des
|
||||
*cgroup*s.
|
||||
|
||||
Ce retour servira de premier argument au script `telegraf.sh`.
|
||||
|
||||
##### Exemple {-}
|
||||
\
|
||||
<div lang="en-US">
|
||||
```
|
||||
42sh$ ./telegraf_init.sh my_cgroup_name
|
||||
/user.slice/user@1234.service/my_cgroup_name
|
||||
42sh$ ./telegraf.sh "/user.slice/user@1234.service/my_cgroup_name" memhog 500
|
||||
```
|
||||
</div>
|
||||
|
||||
:::::
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue