This shows you the differences between two versions of the page.
idp:laboratoare:07 [2022/04/19 11:55] radu.ciobanu |
idp:laboratoare:07 [2023/02/22 11:13] (current) radu.ciobanu |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Laboratorul 07 - Monitorizare, logare, cozi de mesaje ===== | + | ===== Laboratorul 07 - Monitorizare, logare, vizualizare, cozi de mesaje ===== |
- | ==== Introducere ==== | ||
- | Pentru acest laborator, vom lucra cu fișierele care se găsesc în subgrupul [[https://gitlab.com/mobylab-idp/laborator-7|Laborator 7]] din grupul oficial de GitLab al materiei. Directoarele **Testapp** și **Worker** conțin fișierele sursă și Dockerfile pentru cele două aplicații pe care le vom rula, directorul **Docker** conține fișierele Docker Compose cu care vom face deployment, iar directorul **Configs** conține configurările pentru diversele servicii pe care le vom adăuga în deployment. | ||
- | |||
- | ==== Monitorizare ==== | ||
- | |||
- | === Monitorizare din linia de comandă === | ||
- | |||
- | În acest laborator, se abordează problema monitorizării. Într-o aplicație Docker, se pot monitoriza în primul rând metrici despre mașinile (fizice sau virtuale) pe care rulează serviciile noastre, apoi metrici care țin de containerele care rulează în swarm, și, nu în ultimul rând, metrici care țin de aplicația propriu-zisă și pe care le putem defini. | ||
- | |||
- | Cea mai simplă metodă de a monitoriza unul sau mai multe containere este prin intermediul interfeței în linie de comandă din Docker, folosind comanda //docker container stats// în felul următor: | ||
- | |||
- | <code bash> | ||
- | $ docker container run --name myalpine -it -d alpine | ||
- | </code> | ||
- | |||
- | <code bash> | ||
- | $ docker container stats myalpine | ||
- | |||
- | CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS | ||
- | 5d002ad9bba1 myalpine 0.00% 484KiB / 7.774GiB 0.01% 806B / 0B 135kB / 0B 1 | ||
- | </code> | ||
- | |||
- | În exemplul de mai sus, s-a pornit un container de Linux Alpine, care apoi se monitorizează continuu. Informațiile afișate includ ID-ul și numele containerului, consumul de CPU și memorie, cantitatea de date schimbate pe interfețele de rețea, activitatea pe disc, etc. Dacă se dorește monitorizarea mai multor containere simultan, se poate utiliza comanda //docker stats//: | ||
- | |||
- | <code bash> | ||
- | $ docker container run --name myalpine2 -it -d alpine | ||
- | </code> | ||
- | |||
- | <code bash> | ||
- | $ docker stats | ||
- | |||
- | CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS | ||
- | 97ab4376c5b7 myalpine2 0.01% 352KiB / 7.774GiB 0.00% 586B / 0B 0B / 0B 1 | ||
- | 5d002ad9bba1 myalpine 0.02% 484KiB / 7.774GiB 0.01% 1.02kB / 0B 135kB / 0B 1 | ||
- | </code> | ||
- | |||
- | În exemplul de mai sus, s-a mai pornit un container adițional. Prin comanda //docker stats//, se afișează informații statistice despre toate containerele care rulează pe mașină. | ||
- | |||
- | Comanda de mai sus poate fi customizată prin formatarea output-ului în funcție de câmpurile care se doresc a fi afișate, precum și modul în care acest lucru este făcut: | ||
- | |||
- | <code bash> | ||
- | $ docker stats --format "{{.Container}}: {{.CPUPerc}}" | ||
- | |||
- | 97ab4376c5b7: 0.02% | ||
- | 5d002ad9bba1: 0.01% | ||
- | </code> | ||
- | |||
- | <code bash> | ||
- | $ docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" | ||
- | |||
- | NAME CPU % MEM USAGE / LIMIT | ||
- | myalpine2 0.01% 352KiB / 7.774GiB | ||
- | myalpine 0.03% 484KiB / 7.774GiB | ||
- | </code> | ||
- | |||
- | Dacă se dorește doar afișarea primului rezultat de monitorizare (în loc de o afișare continuă), se poate folosi comanda //docker container stats --no-stream//. | ||
- | |||
- | === Monitorizare prin Docker Remote API === | ||
- | |||
- | Pe lângă comenzile din CLI, Docker oferă și un set de endpoint-uri HTTP remote sub forma unui API, prin care se pot trimite comenzi către daemon-ul de Docker. Printre endpoint-urile din API-ul de Docker, există și câteva care oferă informații mai detaliate de monitorizare: | ||
- | |||
- | <code bash> | ||
- | $ curl --unix-socket /var/run/docker.sock http://localhost/containers/97ab4376c5b7/stats | ||
- | |||
- | { | ||
- | "read": "2022-04-19T08:52:27.9008855Z", | ||
- | "preread": "0001-01-01T00:00:00Z", | ||
- | "pids_stats": { | ||
- | "current": 1, | ||
- | "limit": 18446744073709551615 | ||
- | }, | ||
- | [...] | ||
- | "cpu_stats": { | ||
- | "cpu_usage": { | ||
- | "total_usage": 51201000, | ||
- | "usage_in_kernelmode": 14821000, | ||
- | "usage_in_usermode": 36379000 | ||
- | }, | ||
- | "system_cpu_usage": 18947870000000, | ||
- | "online_cpus": 4, | ||
- | "throttling_data": { | ||
- | "periods": 0, | ||
- | "throttled_periods": 0, | ||
- | "throttled_time": 0 | ||
- | } | ||
- | }, | ||
- | [...] | ||
- | "memory_stats": { | ||
- | "usage": 360448, | ||
- | "stats": { | ||
- | [...] | ||
- | }, | ||
- | "limit": 8346984448 | ||
- | }, | ||
- | "name": "/myalpine2", | ||
- | "id": "97ab4376c5b7e0411abd33277d3ea6ec7e902bdc9af9826d3afe6ff8f9325249", | ||
- | "networks": { | ||
- | "eth0": { | ||
- | "rx_bytes": 936, | ||
- | "rx_packets": 12, | ||
- | [...] | ||
- | } | ||
- | } | ||
- | } | ||
- | </code> | ||
- | |||
- | Datele sunt generate o dată la o secundă și sunt în format JSON, așa cum se poate observa mai sus (unde s-a formatat JSON-ul pentru a fi urmărit mai ușor, și s-au păstrat doar părți din output, pentru claritate). La rularea comenzii, este necesar ID-ul containerului care se dorește a fi monitorizat. |