tuto3: telegraf with cgroups v2
This commit is contained in:
parent
a9f149b2e4
commit
8195919d22
@ -82,14 +82,17 @@ accessible ici :
|
|||||||
### Permettre à l'utilisateur de monitorer des processus
|
### Permettre à l'utilisateur de monitorer des processus
|
||||||
|
|
||||||
Maintenant, séparons notre script en deux parties afin qu'un utilisateur normal
|
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
|
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,
|
bons droits (`chown $EUID`), tandis que le deuxième va effectuer le monitoring,
|
||||||
sans privilèges particuliers.
|
sans privilèges particuliers.
|
||||||
|
|
||||||
#### Exemple {-}
|
##### Exemple {-}
|
||||||
|
\
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
```
|
```
|
||||||
42sh$ sudo ./telegraf_init.sh my_cgroup_name
|
42sh$ sudo ./telegraf_init.sh my_cgroup_name
|
||||||
@ -97,4 +100,79 @@ sans privilèges particuliers.
|
|||||||
```
|
```
|
||||||
</div>
|
</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>
|
||||||
|
|
||||||
:::::
|
:::::
|
||||||
|
@ -82,7 +82,7 @@ versions des `cgroup`s à chaque fois.
|
|||||||
|
|
||||||
::::: {.question}
|
::::: {.question}
|
||||||
|
|
||||||
#### Quelles sont différences entre les deux versions des *cgroups* ? {-}
|
#### Quelles sont les différences entre les deux versions des *cgroups* ? {-}
|
||||||
|
|
||||||
La principale différence entre les deux est la fusion des différents
|
La principale différence entre les deux est la fusion des différents
|
||||||
sous-systèmes au sein d'une même arborescence. Dans la première version, chaque
|
sous-systèmes au sein d'une même arborescence. Dans la première version, chaque
|
||||||
@ -135,12 +135,12 @@ version, vous allez devoir activer le ou les contrôleurs dont vous avez besoin
|
|||||||
(tandis que dans la première version, on se rendait dans l'arborescence du
|
(tandis que dans la première version, on se rendait dans l'arborescence du
|
||||||
sous-système que l'on voulait).
|
sous-système que l'on voulait).
|
||||||
|
|
||||||
Pour activer le contrôleur *memory* dans notre groupe `virli`, nous utilisons
|
Pour activer le contrôleur *memory*, nous utilisons la commande suivante à la
|
||||||
la commande suivante :
|
racine :
|
||||||
|
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
```bash
|
```bash
|
||||||
echo "+memory" > virli/cgroup.subtree_control
|
echo "+memory" > cgroup.subtree_control
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -151,11 +151,11 @@ première version, le fait qu'elle soit active empêche l'utilisation de la v2 e
|
|||||||
parallèle.
|
parallèle.
|
||||||
:::::
|
:::::
|
||||||
|
|
||||||
On peut contrôler les contrôleurs actifs en consultant le fichier
|
On peut voir les contrôleurs actifs en consultant le fichier
|
||||||
`virli/cgroup.controllers`.
|
`virli/cgroup.controllers`.
|
||||||
|
|
||||||
Le contrôleur *freezer* est activé par défaut, il n'y a pas besoin de
|
Le contrôleur *freezer* est généralement activé par défaut, il n'y a pas besoin
|
||||||
l'activer.
|
de l'activer.
|
||||||
|
|
||||||
|
|
||||||
### Rattachement de processus
|
### Rattachement de processus
|
||||||
@ -276,7 +276,7 @@ mémoire.
|
|||||||
|
|
||||||
[^memhog]: Ce programme fait partie du paquet `numactl`, mais vous trouverez une
|
[^memhog]: Ce programme fait partie du paquet `numactl`, mais vous trouverez une
|
||||||
version modifiée plus adaptée à nos tests sur
|
version modifiée plus adaptée à nos tests sur
|
||||||
<https://nemunai.re/posts/slow-memhog>.
|
<https://nemunai.re/post/slow-memhog>.
|
||||||
|
|
||||||
:::::
|
:::::
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user