Work on TP2
This commit is contained in:
parent
c11a3b9132
commit
b171ee869d
10 changed files with 295 additions and 141 deletions
BIN
tutorial/2/chronograf.png
Normal file
BIN
tutorial/2/chronograf.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 92 KiB |
BIN
tutorial/2/chronograf_setup.png
Normal file
BIN
tutorial/2/chronograf_setup.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
|
@ -10,21 +10,52 @@ L'intérêt est de permettre à chaque conteneur d'effectuer une tâche
|
||||||
générique, de manière à pouvoir être réutilisé pour d'autres projets
|
générique, de manière à pouvoir être réutilisé pour d'autres projets
|
||||||
dans le futur. Par exemple, notre conteneur InfluxDB pourra être
|
dans le futur. Par exemple, notre conteneur InfluxDB pourra être
|
||||||
utilisé pour stocker des relevés de métriques systèmes ou des logs.
|
utilisé pour stocker des relevés de métriques systèmes ou des logs.
|
||||||
Grafana peut également afficher davantage d'informations ou combiner
|
Chronograf peut être connecté à d'autres serveurs afin de corréler les
|
||||||
les informations de plusieurs bases distinctes.
|
métriques, ...
|
||||||
|
|
||||||
|
|
||||||
## Séparer le `Dockerfile`
|
## Séparer le `Dockerfile`
|
||||||
|
|
||||||
Commençons par séparer notre `Dockerfile` en deux : dans une partie
|
Commençons par séparer notre `Dockerfile` en deux : dans une partie
|
||||||
nous allons garder la partie InfluxDB, de l'autre la partie Grafana.
|
nous allons garder la partie InfluxDB, de l'autre la partie Chronograf.
|
||||||
|
|
||||||
Il va vous falloir créer deux dossiers distincts, il en faut un par
|
Il va vous falloir créer deux dossiers distincts, il en faut un par
|
||||||
`Dockerfile`.
|
`Dockerfile` : réutilisez l'image `influxdb` créée précédemment et créez le
|
||||||
|
dossier pour l'image `chronograf`.
|
||||||
|
|
||||||
Profitez en pour rajouter les Data Volume Container, si vous ne l'avez
|
Profitez en pour rajouter les Data Volume Container, si vous ne l'avez
|
||||||
pas fait dans la partie précédente !
|
pas fait dans la partie précédente !
|
||||||
|
|
||||||
|
\vspace{1em}
|
||||||
|
|
||||||
|
Pour tester la bonne marche de vos conteneurs, vous pouvez le lancer votre
|
||||||
|
conteneur chronograf avec la commande suivante (en considérant que votre
|
||||||
|
conteneur influxdb de la première partie est toujours lancé).
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run --rm --link YOUR_INFLUX_CNTR_NAME:influxdb chronograf
|
||||||
|
```
|
||||||
|
|
||||||
|
Remplacez `YOUR_INFLUX_CNTR_NAME` par le nom du conteneur qui fait tourner
|
||||||
|
votre influxdb. En créant ce lien, `chronograf` sera capable de contacter une
|
||||||
|
machine `influxdb` (la partie après les `:`).
|
||||||
|
|
||||||
|
|
||||||
|
### Visualiser les données dans `chronograf`
|
||||||
|
|
||||||
|
Avant d'arrêter `telegraf` et nos conteneurs pour passer à une nouvelle étape,
|
||||||
|
prenez le temps d'afficher les données que vous avez collecté depuis le début
|
||||||
|
du TP.
|
||||||
|
|
||||||
|
Après avoir ajouté le serveur (en remplaçant `localhost` proposé par défaut par
|
||||||
|
`influxdb` issue du *link*), ajouter deux visualisations avec les requêtes
|
||||||
|
suivantes :
|
||||||
|
|
||||||
|
```
|
||||||
|
SELECT used, available, cached FROM mem WHERE tmpltime()
|
||||||
|
SELECT mean(usage_idle) FROM cpu WHERE tmpltime() GROUP BY time(20s), cpu
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Automatiser la construction et le lancement
|
## Automatiser la construction et le lancement
|
||||||
|
|
||||||
|
@ -37,9 +68,11 @@ conteneurs, définissez à la racine de votre projet un fichier
|
||||||
les paramètres d'exécution.
|
les paramètres d'exécution.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
version: '2'
|
||||||
|
services:
|
||||||
influxdb:
|
influxdb:
|
||||||
...
|
...
|
||||||
grafana:
|
chronograf:
|
||||||
build: grafana/
|
build: grafana/
|
||||||
image: nginx
|
image: nginx
|
||||||
ports:
|
ports:
|
||||||
|
@ -54,16 +87,31 @@ Ce fichier est un condensé des options que vous passez habituellement
|
||||||
au `docker run`.
|
au `docker run`.
|
||||||
|
|
||||||
L'exemple ci-dessus est à adapter largement, consultez
|
L'exemple ci-dessus est à adapter largement, consultez
|
||||||
<http://docs.docker.com/compose/yml/> pour une liste exhaustive des
|
<http://docs.docker.com/compose/compose-file/> pour une liste exhaustive des
|
||||||
options que vous pouvez utiliser.
|
options que vous pouvez utiliser.
|
||||||
|
|
||||||
|
Notez toutefois la présence d'une ligne `version` ; il ne s'agit pas de la
|
||||||
|
version de vos conteneurs, mais de la version du format de fichier
|
||||||
|
docker-compose qui sera utilisé. Sans indication de version, la version
|
||||||
|
originale sera utilisée.
|
||||||
|
|
||||||
|
|
||||||
Une fois que votre `docker-compose.yml` sera prêt, lancez tout d'abord
|
Une fois que votre `docker-compose.yml` sera prêt, lancez tout d'abord
|
||||||
`docker-compose build` pour commencer la phase de build de tous les
|
`docker-compose build` pour commencer la phase de build de tous les
|
||||||
conteneurs listés dans le fichier.
|
conteneurs listés dans le fichier.
|
||||||
|
|
||||||
Une fois le build terminé, vous pouvez lancer la commande suivante pour admirer le résultat :
|
Une fois le build terminé, vous pouvez lancer la commande suivante et admirer
|
||||||
|
le résultat :
|
||||||
|
|
||||||
```
|
```
|
||||||
docker-compose up
|
docker-compose up
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Encore une fois, testez la bonne connexion entre chronograf (accessible sur
|
||||||
|
<http://localhost:10000>) et influxdb.
|
||||||
|
|
||||||
|
|
||||||
|
## Rendu
|
||||||
|
|
||||||
|
Pour cette partie, vous devrez rendre la dernière itération de votre
|
||||||
|
`docker-compose.yml`.
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
# Premiers pas
|
Premières étapes
|
||||||
|
================
|
||||||
|
|
||||||
Dans un premier temps, nous allons créer une image Docker comme si l'on
|
Dans un premier temps, nous allons créer une image Docker comme si l'on
|
||||||
réalisait l'installation sur une machine classique : en suivant les méthodes
|
réalisait une installation sur une machine classique : en suivant une
|
||||||
habituelles, mais tout en écrivant notre recette dans le `Dockerfile`. La
|
recette. La machine (notre première image Docker) contiendra tout le nécessaire
|
||||||
machine (notre première image Docker) contiendra tout le nécessaire pour faire
|
pour faire fonctionner notre service.
|
||||||
fonctionner notre service.
|
|
||||||
|
|
||||||
|
|
||||||
## Les caches
|
## Les caches
|
||||||
|
@ -25,10 +25,9 @@ n'est pas modifiée dans le `Dockerfile`, le cache sera utilisé.
|
||||||
Il est possible de ne pas utiliser le cache et de relancer toutes les étapes du
|
Il est possible de ne pas utiliser le cache et de relancer toutes les étapes du
|
||||||
`Dockerfile` en ajoutant l'option `--no-cache` au moment du `docker build`.
|
`Dockerfile` en ajoutant l'option `--no-cache` au moment du `docker build`.
|
||||||
|
|
||||||
Les couches du cache peuvent être partagées entre plusieurs conteneur, c'est
|
Les couches du cache peuvent être partagées entre plusieurs conteneur,
|
||||||
ainsi que vous pouvez partager facilement une plus grosse partie du système de
|
c'est ainsi que vous pouvez partager facilement une plus grosse partie
|
||||||
fichiers (afin de profiter du cache du système de fichiers au moment de
|
du système de fichiers.
|
||||||
l'exécution du conteneur).
|
|
||||||
|
|
||||||
\vspace{1.5em}
|
\vspace{1.5em}
|
||||||
|
|
||||||
|
@ -36,10 +35,10 @@ Pour profiter du cache, il faut donc placer les étapes les plus génériques (q
|
||||||
seraient susceptibles d'apparaître dans plusieurs conteneur), en haut du
|
seraient susceptibles d'apparaître dans plusieurs conteneur), en haut du
|
||||||
`Dockerfile`.
|
`Dockerfile`.
|
||||||
|
|
||||||
Commençons donc notre `Dockerfile` : choisissez une image de base pour votre
|
Commençons donc notre `Dockerfile` : choisissez une image de base pour
|
||||||
`FROM`, et indiquez votre nom avec l'instruction `MAINTAINER`, pour indiquez
|
votre `FROM`, et indiquez votre nom avec l'instruction `MAINTAINER`,
|
||||||
que c'est vous qui maintenez ce conteneur (si d'autres gens ont besoin qu'il
|
pour indiquez que c'est vous qui maintenez ce conteneur (si d'autres
|
||||||
faut le mettre à jour par exemple).
|
gens ont besoin de vous avertir pour le mettre à jour par exemple).
|
||||||
|
|
||||||
|
|
||||||
## `RUN` ou script ?
|
## `RUN` ou script ?
|
||||||
|
@ -48,20 +47,24 @@ faut le mettre à jour par exemple).
|
||||||
|
|
||||||
Ensuite vient l'installation d'InfluxDB. Le paquet n'est pas disponible dans
|
Ensuite vient l'installation d'InfluxDB. Le paquet n'est pas disponible dans
|
||||||
les dépôts. La
|
les dépôts. La
|
||||||
[procédure décrite sur le site](https://influxdb.com/docs/v0.9/introduction/installation.html)
|
[https://docs.influxdata.com/influxdb/v1.0/introduction/installation/#ubuntu-debian](procédure
|
||||||
incite à télécharger le paquet mis à disposition puis à l'installer via `dpkg
|
décrite sur le site) incite à télécharger le paquet mis à disposition puis à
|
||||||
-i`.
|
l'installer via `dpkg -i`.
|
||||||
|
|
||||||
Deux solutions s'offrent à nous : télécharger le paquet hors du conteneur, le
|
Deux solutions s'offrent à nous :
|
||||||
copier, puis l'installer. Ou faire un `RUN` avec toutes ces opérations (sans
|
|
||||||
oublier l'installation de `wget`/`curl`).
|
* télécharger le paquet hors du conteneur, le copier, puis l'installer.
|
||||||
|
* faire un `RUN` avec toutes ces opérations (sans oublier l'installation
|
||||||
|
préalable de `wget`/`curl`).
|
||||||
|
|
||||||
La copie étant définitive (supprimer le fichier ne le supprimera pas des
|
La copie étant définitive (supprimer le fichier ne le supprimera pas des
|
||||||
couches où il a pu exister), donc la seconde solution semble préférable (mais
|
couches où il a pu exister), on préférera la seconde méthode, malgré que `wget`
|
||||||
`wget` restera en déchet).
|
restera en déchet. La première méthode aura plus sa place dans un dépôt où les
|
||||||
|
binaires auront été préalablement compilés, il ne restera plus qu'à les copier
|
||||||
|
dans le conteneur au bon emplacement.
|
||||||
|
|
||||||
Écrivez une commande `RUN` qui va télécharger la dernière version d'InfluxDB,
|
Écrivons une commande `RUN` qui va télécharger la dernière version
|
||||||
qui va l'installer et supprimer le fichier.
|
d'InfluxDB, qui va l'installer et supprimer le fichier.
|
||||||
|
|
||||||
\vspace{1em}
|
\vspace{1em}
|
||||||
|
|
||||||
|
@ -69,17 +72,46 @@ qui va l'installer et supprimer le fichier.
|
||||||
bien utilisable : `EXPOSE`, `CMD`, ...
|
bien utilisable : `EXPOSE`, `CMD`, ...
|
||||||
|
|
||||||
Il est possible que vous ayez à écraser le fichier de configuration via un
|
Il est possible que vous ayez à écraser le fichier de configuration via un
|
||||||
`COPY` (ou de manière plus maline en utilisant `--volume` au moment du `docker
|
`COPY` (ou de manière plus maligne en utilisant `--volume` au moment du `docker
|
||||||
run`, cela fonctionne pas qu'avec les dossiers). Garder la ligne qui vous
|
run`, cela fonctionne pas qu'avec les dossiers). Ou peut-être ferez-vous un
|
||||||
permet de lancer votre serveur web dans un coin, en attendant la partie
|
`ENTRYPOINT` ?
|
||||||
suivante.
|
|
||||||
|
|
||||||
|
|
||||||
### Grafana
|
### Telegraf
|
||||||
|
|
||||||
Une fois InfluxDB configuré, nous allons avoir la même réflexion avec Grafana.
|
Telegraf est un programme qui permet de collecter des métriques systèmes. Il
|
||||||
|
travaille de paire avec InfluxDB pour stocker les valeurs.
|
||||||
|
|
||||||
De la même manière, téléchargez, installez et supprimez le paquet.
|
Vous pouvez monitorer les métriques de n'importe quelle machine, simplement en
|
||||||
|
installant *Telegraf* et en lui indiquant l'emplacement de son serveur
|
||||||
|
InfluxDB. Nous allons installer *telegraf* sur notre machine à l'aide de la
|
||||||
|
[https://docs.influxdata.com/telegraf/v1.0/introduction/installation/](documentation).
|
||||||
|
|
||||||
Lors de vos tests, sachez que vous pouvez vous connecter sur grafana avec
|
Ces quelques lignes devraient suffir à lancer la collecte, à condition que
|
||||||
l'utilisateur *admin*, mot de passe *admin*.
|
votre InfluxDB écoute sur le port 8086 local :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
TELEGRAF_VERSION=1.0.0
|
||||||
|
wget https://dl.influxdata.com/telegraf/releases/telegraf-${TELEGRAF_VERSION}_linux_amd64.tar.gz
|
||||||
|
tar xf telegraf-${TELEGRAF_VERSION}_linux_amd64.tar.gz
|
||||||
|
TELEGRAF_CONFIG_PATH=./telegraf/etc/telegraf/telegraf.conf ./telegraf/usr/bin/telegraf
|
||||||
|
```
|
||||||
|
|
||||||
|
Rendez-vous ensuite dans [http://localhost:8083/](l'interface d'InfluxDB) pour
|
||||||
|
voir si la collecte se passe bien.
|
||||||
|
|
||||||
|
Dans l'interface sélectionnez la base *telegraf* puis explorez les valeurs :
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SHOW MEASUREMENTS
|
||||||
|
SHOW FIELD KEYS
|
||||||
|
SELECT usage_idle FROM cpu WHERE cpu = 'cpu-total' ORDER BY time DESC LIMIT 5
|
||||||
|
```
|
||||||
|
|
||||||
|
Laissons tourner `telegraf` afin de constituer un petit historique de valeurs.
|
||||||
|
|
||||||
|
|
||||||
|
## Rendu
|
||||||
|
|
||||||
|
Avant de passer à la suite, placez votre `Dockerfile` dans un dossier
|
||||||
|
`influxdb` (pour le moment il ne contient rien d'autre !).
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
# Retour sur les bonnes pratiques
|
Retour sur les bonnes pratiques
|
||||||
|
===============================
|
||||||
|
|
||||||
Pour chacune des bonnes pratiques ci-dessous, vérifiez que vous les respectez
|
Pour chacune des bonnes pratiques ci-dessous, vérifiez que vous les respectez
|
||||||
bien, faites les modifications nécessaires.
|
bien, faites les modifications nécessaires.
|
||||||
|
@ -39,9 +40,7 @@ En plus, cela réduira le temps de build et la taille des images produites !
|
||||||
|
|
||||||
Vous devez trouver l'équilibre idéal entre la lisibilité de votre `Dockerfile`
|
Vous devez trouver l'équilibre idéal entre la lisibilité de votre `Dockerfile`
|
||||||
(qui assure la maintenabilité sur le long-terme) et le nombre de couches
|
(qui assure la maintenabilité sur le long-terme) et le nombre de couches
|
||||||
créées. Le nombre de couches idéal devrait être égal au nombre de branches
|
créées.
|
||||||
distincte partant d'une image de base, afin d'utiliser au mieux le cache du
|
|
||||||
système de fichiers.
|
|
||||||
|
|
||||||
|
|
||||||
## Ordonnez vos lignes de commandes complexes
|
## Ordonnez vos lignes de commandes complexes
|
||||||
|
@ -105,7 +104,7 @@ Il y a un certain nombre de règles à connaître pour bien utiliser ce mécanis
|
||||||
|
|
||||||
## Concevez des conteneur éphémères
|
## Concevez des conteneur éphémères
|
||||||
|
|
||||||
Les conteneurs que vous générez doivent aussi éphémères que possible : ils
|
Les conteneurs que vous générez doivent être aussi éphémères que possible : ils
|
||||||
devraient pouvoir être arrêtés, détruits et recréés sans nécessiter d'étape de
|
devraient pouvoir être arrêtés, détruits et recréés sans nécessiter d'étape de
|
||||||
reconfiguration. La configuration devrait se faire au lancement du conteneur ou
|
reconfiguration. La configuration devrait se faire au lancement du conteneur ou
|
||||||
lors de sa construction.
|
lors de sa construction.
|
||||||
|
|
|
@ -2,17 +2,62 @@
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
|
## Docker
|
||||||
|
|
||||||
|
Ce TP requiert la dernière version de Docker (1.12). Commencez par vérifier que
|
||||||
|
vous avez bien cette version :
|
||||||
|
|
||||||
|
```
|
||||||
|
42sh$ docker version
|
||||||
|
Client:
|
||||||
|
Version: 1.12.1
|
||||||
|
API version: 1.24
|
||||||
|
Go version: go1.7
|
||||||
|
Git commit: 23cf638
|
||||||
|
Built:
|
||||||
|
OS/Arch: linux/amd64
|
||||||
|
|
||||||
|
Server:
|
||||||
|
Version: 1.12.1
|
||||||
|
API version: 1.24
|
||||||
|
Go version: go1.7
|
||||||
|
Git commit: 23cf638
|
||||||
|
Built:
|
||||||
|
OS/Arch: linux/amd64
|
||||||
|
```
|
||||||
|
|
||||||
|
Si vous n'avez pas une version assez récente, consultez le premier TP pour
|
||||||
|
savoir comment installer Docker.
|
||||||
|
|
||||||
|
|
||||||
## `docker-compose`
|
## `docker-compose`
|
||||||
|
|
||||||
L'équipe en charge de Docker compose met à disposition un binaire contenant
|
Nous allons également avoir besoin de `docker-compose`.
|
||||||
|
|
||||||
|
Ce projet ne bénéficie pas d'une intégration au sein du projet Docker et doit
|
||||||
|
être téléchargé séparément, car originellement, le projet était développé par
|
||||||
|
une équipe indépendante. S'étant révélé primordiale, ils ont trouvé une place
|
||||||
|
au sein du projet Docker, mais l'incompatibilité des langages utilisés fait que
|
||||||
|
`docker-compose` n'est toujours pas intégré dans docker.
|
||||||
|
|
||||||
|
### Par le gestionnaire de paquets
|
||||||
|
|
||||||
|
Les distributions à jour vous proposeront un paquet `docker-compose` qui
|
||||||
|
fonctionnera avec la version de Docker qu'ils fournissent.
|
||||||
|
|
||||||
|
### Par la distribution binaire
|
||||||
|
|
||||||
|
L'équipe en charge de Docker compose met à disposition un exécutable contenant
|
||||||
tous les scripts. Nous pouvons l'installer en suivant la procédure suivante :
|
tous les scripts. Nous pouvons l'installer en suivant la procédure suivante :
|
||||||
|
|
||||||
```
|
```
|
||||||
curl -L https://github.com/docker/compose/releases/download/1.3.3/docker-compose-Linux-x86_64 \
|
curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-Linux-x86_64 \
|
||||||
> /usr/bin/docker-compose
|
> /usr/bin/docker-compose
|
||||||
chmod +x /usr/bin/docker-compose
|
chmod +x /usr/bin/docker-compose
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `pip`
|
||||||
|
|
||||||
Le projet étant écrit en Python, il est également disponible via `pip`, si vous
|
Le projet étant écrit en Python, il est également disponible via `pip`, si vous
|
||||||
préférez cette méthode. N'oubliez pas de préciser une version compatible avec
|
préférez cette méthode. N'oubliez pas de préciser une version compatible avec
|
||||||
votre version de Docker.
|
votre version de Docker.
|
||||||
|
@ -25,7 +70,7 @@ Comme avec Docker, nous pouvons vérifier le bon fonctionnement de
|
||||||
|
|
||||||
```
|
```
|
||||||
42sh$ docker-compose --version
|
42sh$ docker-compose --version
|
||||||
docker-compose version: 1.3.3
|
docker-compose version: 1.8.0
|
||||||
```
|
```
|
||||||
|
|
||||||
Si vous obtenez une réponse similaire, c'est que vous êtes prêt à commencer le
|
Si vous obtenez une réponse similaire, c'est que vous êtes prêt à commencer le
|
||||||
|
|
|
@ -1,73 +1,50 @@
|
||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
# Rendu
|
Rendu
|
||||||
|
=====
|
||||||
## Avis
|
|
||||||
|
|
||||||
Dans le courriel que vous enverrez, je serais ravi de connaître votre avis sur
|
|
||||||
ce cours : aussi bien les choses que vous avez apprécié que celles que vous
|
|
||||||
n'avez pas aimés.
|
|
||||||
|
|
||||||
Cela ne rentrera pas en compte dans la notation, mais permettra d'améliorer ce
|
|
||||||
cours.
|
|
||||||
|
|
||||||
|
|
||||||
## TP
|
|
||||||
|
|
||||||
Rendez le contenu de votre dossier à la dernière étape du TP : avec le
|
|
||||||
`docker-compose.yml`, ainsi que vos `Dockerfile` et les éventuels fichiers
|
|
||||||
annexes.
|
|
||||||
|
|
||||||
|
|
||||||
## Projet
|
## Projet
|
||||||
|
|
||||||
De la même manière que nous avons réaliser un groupe de conteneurs utilisant
|
Amusez-vous à la piscine, il n'y a pas de projet en plus des exercices fait en
|
||||||
`grafana` et `InfluxDB`, qui permet d'afficher facilement des métriques sous
|
TP !
|
||||||
forme de graphiques, vous allez réaliser, à l'aide des images Docker présentent
|
|
||||||
sur le hub, une interface web de recherche et de visualisation de logs,
|
|
||||||
utilisant
|
|
||||||
[Kibana](https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-on-ubuntu-14-04).
|
|
||||||
|
|
||||||
Toutes la chaîne d'image Docker est déjà présente sur le hub :
|
En complément de ce TP, vous pouvez jetez un œil à
|
||||||
[logstash](https://hub.docker.com/_/logstash/),
|
[https://docs.docker.com/engine/swarm](Docker Swarm) !
|
||||||
[elasticsearch](https://hub.docker.com/_/kibana/),
|
|
||||||
[kibana](https://hub.docker.com/_/kibana/).
|
|
||||||
|
|
||||||
Le but du projet est donc de réaliser un `docker-compose.yml` permettant
|
|
||||||
d'avoir un système de centralisation de logs fonctionnels. Vous aurez sans
|
|
||||||
doute à faire quelques adaptations au niveau des images Docker, au moins pour
|
|
||||||
des fichiers de configuration, donc il n'y aura sans doute pas que ce fichier à
|
|
||||||
rendre.
|
|
||||||
|
|
||||||
Vous pouvez utiliser comme source de logs les conteneurs du TP, grâce aux
|
## Modalité de rendu
|
||||||
options `log-driver=gelf` et `log-opt=gelf-address=udp://host:port`, passées
|
|
||||||
aux `docker run` (ou dans le `docker-compose`).
|
|
||||||
|
|
||||||
Côté `logstash`, votre configuration devrait ressembler à ça :
|
Un service automatique s'occupe de réceptionner vos rendus, de faire les
|
||||||
|
vérifications nécessaires et de vous envoyer un accusé de réception (ou de
|
||||||
|
rejet).
|
||||||
|
|
||||||
|
Ce service écoute sur l'adresse <virli@nemunai.re>, c'est donc à cette adresse
|
||||||
|
et exclusivement à celle-ci que vous devez envoyer vos rendus. Tout rendu
|
||||||
|
envoyé à une autre adresse et/ou non signé ne sera pas pris en compte.
|
||||||
|
|
||||||
|
|
||||||
|
## Tarball
|
||||||
|
|
||||||
|
Tous les fichiers identifiés comme étant à rendre pour ce TP sont à
|
||||||
|
placer dans une tarball (pas d'archive ZIP, RAR, ...).
|
||||||
|
|
||||||
|
Les réponses aux questions sont à regrouper dans un fichier `questions.txt` à
|
||||||
|
placer à la racine de votre rendu.
|
||||||
|
|
||||||
|
Voici une arborescence type:
|
||||||
|
|
||||||
```
|
```
|
||||||
input {
|
login_x-TP2/questions.txt
|
||||||
tcp {
|
login_x-TP2/docker-compose.yml
|
||||||
port => 4242
|
login_x-TP2/influxdb
|
||||||
}
|
login_x-TP2/influxdb/Dockerfile
|
||||||
udp {
|
login_x-TP2/influxdb/influxdb.conf
|
||||||
port => 4242
|
login_x-TP2/chronograf
|
||||||
}
|
login_x-TP2/chronograf/Dockerfile
|
||||||
}
|
login_x-TP2/chronograf/chronograf.conf
|
||||||
|
login_x-TP2/mymonitoring
|
||||||
output {
|
login_x-TP2/mymonitoring/Dockerfile
|
||||||
elasticsearch { }
|
login_x-TP2/mymonitoring/chronograf.conf
|
||||||
}
|
login_x-TP2/mymonitoring/influxdb.conf
|
||||||
|
login_x-TP2/mymonitoring/supervisor.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Vous pourrez ainsi envoyez les logs de Docker sur le port 4242. Ou directement
|
|
||||||
vos logs syslog :
|
|
||||||
|
|
||||||
```
|
|
||||||
netcat localhost 4242 < /var/log/syslog
|
|
||||||
```
|
|
||||||
|
|
||||||
N'oubliez pas de lire les README associés aux images Docker du hub, ils vous
|
|
||||||
indiqueront comment utiliser les images et comment leur passer des paramètres.
|
|
||||||
|
|
||||||
Bon courage !
|
|
||||||
|
|
|
@ -1,15 +1,56 @@
|
||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
# Plusieurs daemons dans un conteneur
|
Plusieurs daemons dans un conteneur
|
||||||
|
===================================
|
||||||
|
|
||||||
|
Notre système de monitoring commence enfin à ressembler à quelque chose. Mais
|
||||||
|
ce serait tellement plus pratique de voir tous ces tableaux de nombres sous
|
||||||
|
forme de graphiques !
|
||||||
|
|
||||||
|
Nous allons pour cela ajouter `chronograf` dans notre conteneur.
|
||||||
|
|
||||||
|
Avant de modifier votre `Dockerfile`, créez un nouveau dossier de rendu :
|
||||||
|
`mymonitoring`, dans lequel vous recopierez l'état actuel de notre image
|
||||||
|
`influxdb`.
|
||||||
|
|
||||||
|
|
||||||
|
## Chronograf
|
||||||
|
|
||||||
|
Commençons par compléter la commande d'installation existante pour `influxdb`,
|
||||||
|
afin d'installer simultanément `chronograf`.
|
||||||
|
|
||||||
|
La documentation de la procédure est disponible
|
||||||
|
[https://docs.influxdata.com/chronograf/v1.0/introduction/installation/](à
|
||||||
|
cette adresse).
|
||||||
|
|
||||||
|
|
||||||
## Script d'init
|
## Script d'init
|
||||||
|
|
||||||
Lors du dernier TP, nous avons vu que les conteneurs étaient détruits dès que
|
Lors du dernier TP, nous avons vu que les conteneurs étaient détruits dès que
|
||||||
le premier processus du conteneur (celui qui a le PID 1, à la place d'`init`)
|
le premier processus du conteneur (celui qui a le PID 1, à la place d'`init`)
|
||||||
terminer son exécution, quelque soit le statut de ses éventuels fils.
|
terminait son exécution, quelque soit le statut de ses éventuels fils.
|
||||||
|
|
||||||
Pour lancer tous nos daemon, nous allons donc besoin d'écrire un script qui
|
Pour lancer tous nos daemons, nous avons donc besoin d'écrire un script qui
|
||||||
lance puis attend que les deux deamons aient terminés de s'exécuter
|
lance puis attend que les deux deamons aient terminés de s'exécuter.
|
||||||
|
|
||||||
|
Écrivons ce script. Hints : `wait(1)`.
|
||||||
|
|
||||||
|
\vspace{1em}
|
||||||
|
|
||||||
|
Pour vérifier que votre conteneur fonctionne correctement, vous pouvez le
|
||||||
|
lancer :
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run --rm -p 10000:10000 mymonitoring
|
||||||
|
```
|
||||||
|
|
||||||
|
Puis accéder à chronograf : <http://localhost:10000/>. Donnez un nom à votre
|
||||||
|
configuration, puis cliquez sur *Add*. Les paramètres préremplis dans le
|
||||||
|
formulaire sont corrects.
|
||||||
|
|
||||||
|
Vous devriez obtenir l'écran suivant (notez la partie `Status: Online, v1.0.0`) :
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
## Autorestart
|
## Autorestart
|
||||||
|
@ -45,14 +86,16 @@ Première étape : installer `supervisor`, le paquet se trouve dans les dépôts
|
||||||
|
|
||||||
L'étape suivante consiste à remplir puis copier le fichier de configuration
|
L'étape suivante consiste à remplir puis copier le fichier de configuration
|
||||||
dans le conteneur. Vous allez devoir écraser dans votre conteneur le fichier
|
dans le conteneur. Vous allez devoir écraser dans votre conteneur le fichier
|
||||||
`/etc/supervisord.conf` pour démarrer à la fois `grafana` et `influxdb`.
|
`/etc/supervisord.conf` pour démarrer à la fois `chronograf` et `influxdb`.
|
||||||
|
|
||||||
Vous pouvez vous aider de la documentation disponible à :
|
Vous pouvez vous aider de la documentation disponible à :
|
||||||
<http://supervisord.org/configuration.html>
|
<http://supervisord.org/configuration.html>
|
||||||
|
|
||||||
|
|
||||||
## C'est parti !
|
La même procédure de test que précédemment peut être suivie.
|
||||||
|
|
||||||
Votre conteneur doit maintenant être parfaitement fonctionnel : vous devriez
|
|
||||||
pouvoir lancer votre script de monitoring et voir apparaître vos données dans
|
## Rendu
|
||||||
Grafana !
|
|
||||||
|
Nous ne toucherons plus à cette image, placez-la dans un dossier
|
||||||
|
`mymonitoring`.
|
||||||
|
|
|
@ -1,20 +1,25 @@
|
||||||
% Virtualisation légère -- TP n^o^3
|
---
|
||||||
% Pierre-Olivier *Nemunaire* Mercier
|
title: Virtualisation légère -- TP n^o^ 2
|
||||||
% Jeudi 29 octobre 2015
|
subtitle: Aller plus loin avec Docker
|
||||||
|
author: Pierre-Olivier *Nemunaire* Mercier
|
||||||
|
institute: EPITA
|
||||||
|
date: Jeudi 15 septembre 2016
|
||||||
|
...
|
||||||
|
|
||||||
Durant ce troisième TP, nous allons approfondir l'utilisation de Docker !
|
Durant ce deuxième TP, nous allons approfondir l'utilisation de Docker !
|
||||||
|
|
||||||
Tous les éléments de ce TP (exercices et questions) sont à rendre à
|
Tous les éléments de ce TP (exercices et questions) sont à rendre à
|
||||||
<virli@nemunai.re> au plus tard le jeudi 12 novembre 2015 à 23 h 42. Consultez la
|
<virli@nemunai.re> au plus tard le jeudi 6 octobre 2016 à 8 h 42. Consultez la
|
||||||
dernière section de chaque partie pour plus d'information sur les éléments à
|
dernière section de chaque partie pour plus d'information sur les éléments à
|
||||||
rendre. Vous pouvez placer les réponses aux questions dans le corps du courriel
|
rendre.
|
||||||
ou dans un fichier joint.
|
|
||||||
|
|
||||||
En tant que personnes sensibilisées à la sécurité des échanges électroniques,
|
En tant que personnes sensibilisées à la sécurité des échanges électroniques,
|
||||||
vous devriez m'envoyer vos rendus signés avec votre clef PGP. Pensez à
|
vous devrez m'envoyer vos rendus signés avec votre clef PGP. Pensez à
|
||||||
[me](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x842807A84573CC96) faire
|
[me](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x842807A84573CC96) faire
|
||||||
signer votre clef et n'hésitez pas à
|
signer votre clef et n'hésitez pas à
|
||||||
[faire signer votre clef](http://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/).
|
[faire signer votre clef](http://www.meetup.com/fr/Paris-certification-de-cles-PGP-et-CAcert/).
|
||||||
|
Vous pouvez utiliser l'adresse <signcheck@nemunai.re> pour savoir si vous vous
|
||||||
|
y prenez correctement.
|
||||||
|
|
||||||
\hypersetup{linkcolor=black}
|
\hypersetup{linkcolor=black}
|
||||||
\tableofcontents
|
\tableofcontents
|
||||||
|
|
|
@ -1,11 +1,16 @@
|
||||||
# But du TP
|
But du TP
|
||||||
|
=========
|
||||||
|
|
||||||
Aujourd'hui, nous allons terminer notre système de monitoring commencé lors du
|
Aujourd'hui, nous allons réaliser un système de monitoring.
|
||||||
premier TP.
|
|
||||||
|
|
||||||
Le résultat attendu d'ici la fin du TP, est un groupe de conteneurs
|
Le résultat attendu d'ici la fin du TP, est un groupe de conteneurs
|
||||||
indépendants les uns des autres, réutilisables en fonction des besoins.
|
indépendants les uns des autres, réutilisables en fonction des besoins.
|
||||||
|
|
||||||
Les données collectées seront envoyés vers
|
Nous collecterons les données d'utilisation de votre machine avec
|
||||||
[InfluxDB](https://influxdb.com/), puis elles seront affichées sous
|
[https://www.influxdata.com/time-series-platform/telegraf/](Telegraf). Ces
|
||||||
forme de graphique dans [Grafana](http://grafana.org/).
|
données seront envoyés vers
|
||||||
|
[https://www.influxdata.com/time-series-platform/influxdb/](InfluxDB), puis
|
||||||
|
elles seront affichées sous forme de graphique dans
|
||||||
|
[https://www.influxdata.com/time-series-platform/chronograf/](Chronograf).
|
||||||
|
|
||||||
|

|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue