Monitoring kontenerów Dockera

Monitoring kontenerów Dockera

Sposób, w jaki jesteśmy w stanie uruchamiać aplikacje przy pomocy Dockera można nazwać przełomowym. Otóż dzięki niemu nie ma potrzeby instalacji aplikacji i jej konfiguracji na każdej z dystrybucji z osobna. Wystarczy, że wszystko wykonamy raz w pliku Dockerfile, dzięki któremu stworzymy obraz i możemy korzystać z niego wszędzie tam, gdzie jest zainstalowany Docker. Czyli pakujemy wszystkie zależności, biblioteki i całą konfigurację w kontener, który uruchamiamy na dowolnym komputerze. Dzięki temu ułatwiamy czynności, jakie musimy wykonywać na co dzień. Ale trzeba przeprowadzać wtedy monitoring kontenerów Dockera.

Jak wiadomo, istnieją aplikacje, które działają w trybie ciągłym, jak i takie, które uruchamiamy raz dziennie lub raz na jakiś czas, by wykonać na przykład jakiegoś rodzaju skanowania. W przypadku tych działających cały czas istnieje duża szansa, że po jakimś czasie zaczną znacznie zużywać zasoby sprzętowe takie jak procesor, pamięć RAM czy też przestrzeń dyskowa. Oczywiście możemy ustawić im limity oraz zarezerwować odpowiednią ich ilość jednak aby dojść do tego, ile potrzebują na daną chwilę, określamy to przy pomocy monitoringu.

Monitoring kontenerów Dockera i nie tylko, w obecnych czasach nie jest jakąś nowością. Stosuje się go od wielu lat. Mogłeś się już spotkać z jednym lub kilkoma systemami do tego przeznaczonymi. Jednym z takich dobrze znanych jest Zabbix, którego szkolenie prowadzimy na naszej platformie pod adresem https://grupadm.pl/product/zabbix-monitorowanie-sieci-i-serwerow/. Dlatego, jeżeli potrzebujesz zaawansowanego narzędzia, z ogromną ilością możliwości zapraszamy do poznania go razem z nami.

W związku z tym, że nie każdy kontener posiada takie samo zapotrzebowanie w zasoby, aby zapewnić efektywne wykorzystanie możliwości serwera, jak i również sprawić by nasza aplikacja działała należycie, powinniśmy monitorować kontenery. Dlatego w tym materiale chciałbym pokazać wam, w jaki sposób działają dwa narzędzia. Jednym z nich jest wbudowane polecenie stats, drugim cAdvisor.

 

Ostatni webinar w tym roku!

Zapraszamy na bezpłatny webinar poświęcony roli sztucznej inteligencji w zarządzaniu infrastrukturą IT, zarówno w dużych serwerowniach, jak i w środowiskach homelab.

W trakcie wydarzenia dowiesz się, jak AI może wspierać codzienną pracę administratora, pomagając w automatyzacji procesów, monitorowaniu zasobów, analizie danych oraz zwiększaniu efektywności operacyjnej.

Zapisy na: https://asdevops.pl/warsztaty/

 

Znaczenie monitorowania i alokacji zasobów w Dockerze

Wraz ze wzrostem liczby kontenerów w środowisku Docker coraz ważniejsze staje się monitorowanie ich wydajności i wykorzystania przez nich zasobów. Tak jak w środowiskach bez kontenerów, tak i w nich monitorowanie zapewnia krytyczny wgląd w ich stan, umożliwiając szybkie identyfikowanie i rozwiązywanie wszelkich problemów, które pojawiają lub mogą się pojawić.

Alokacja zasobów jest również ważną funkcją podczas pracy z kontenerami Dockera. W przypadku niewłaściwego zarządzania kontenery mogą blokować zasoby, powodując problemy z wydajnością i przestojami. Właściwa alokacja zasobów może pomóc w zapewnieniu wydajnego działania kontenerów i sprawiedliwego przydzielania ich pomiędzy nimi.

Efektywne monitorowanie w połączeniu z alokacją zasobów są niezbędne do zapewnienia dostępności, wydajności i skalowalności hostów z kontenerami Dockera. Monitorując wydajność kontenera, możemy szybko identyfikować i rozwiązywać problemy, zanim rozrosną się do czegoś poważnego. Ponadto, odpowiednio przydzielając zasoby, sprawiamy, że kontenery działają wydajnie, a zasoby są wykorzystywane w najbardziej efektywny sposób.

Monitoring kontenerów Dockera – kluczowe wskaźniki

Wiesz już, że monitorowanie kontenerów jest bardzo istotny w codziennym ich funkcjonowaniu. Teraz chciałbym zająć się kluczowymi wskaźnikami do monitorowania w kontenerach Docker, o które powinieneś zadbać.

Do kluczowych metryk, jakie należy poddać monitoringowi, należą:

  1. Zużycie procesora: ta metryka mierzy procent zużycia procesora przez kontener.
  2. Zużycie pamięci: ta metryka mierzy ilość pamięci RAM zużywanej przez kontener.
  3. Zużycie przestrzeni dyskowej: ta metryka mierzy ilość miejsca na dysku zużywanego przez kontener.
  4. Ruch sieciowy: Ta metryka mierzy zużycie ruchu sieciowego przez kontener.
  5. Czas pracy kontenera: ta metryka mierzy czas działania kontenera.
  6. Ponowne uruchamianie kontenera: ta metryka mierzy, ile razy kontener został ponownie uruchomiony.
  7. Stan kontenera: Ta metryka mierzy stan kontenera, na przykład uruchomiony lub zatrzymany.

Powyższa lista prezentuje moim zdaniem najważniejsze metryki, które należy monitorować w prawie każdym kontenerze, który działa w trybie tak zwanym ciągłym.

Narzędzia do monitorowania kontenerów Dockera

Chciałbym, abyś poznał listę oprogramowania najczęściej do tego wykorzystywanego. Dlatego bez dalszego rozpisywania się poniżej prezentuję 5 najważniejszych aplikacji:

Docker stats: to narzędzie wiersza polecenia udostępnia metryki w czasie rzeczywistym dotyczące wykorzystania zasobów kontenera.

cAdvisor: to narzędzie typu open source zapewnia szczegółowe statystyki wykorzystania zasobów kontenera, w tym użycie procesora, pamięci i sieci.

Prometheus: to narzędzie typu open source zapewnia zaawansowaną platformę do zbierania, przechowywania i wykonywania zapytań dotyczących metryk kontenerów.

Grafana: to narzędzie typu open source zapewnia pulpit nawigacyjny do wizualizacji metryk kontenerów.

Zabbix: to jedno z najbardziej rozbudowanych narzędzi open source służącego do monitoringu. Za jego pomocą jesteś w stanie monitorować całe zbiory kontenerów a wyniki przeglądać przy pomocy graficznych wykresów.

Docker stats

Polecenie docker stats umożliwia monitorowanie w czasie rzeczywistym wykorzystania zasobów kontenerów Docker. Wyświetla zużycie procesora, pamięci RAM, sieciowe wejścia/wyjścia i blokowe wejścia/wyjścia każdego kontenera, wraz z jego nazwą, identyfikatorem i obrazem.

W celu wyświetlenia powyższych informacji wystarczy, że wprowadzimy polecenie w następujący sposób:

docker stats
CONTAINER ID   NAME  	CPU % 	MEM USAGE / LIMIT 	MEM % 	NET I/O   	BLOCK I/O     	PIDS
eaee6a76f68c   mysql 	0.21% 	392.4MiB / 31.28GiB   1.22% 	6.63kB / 0B   80.9MB / 16.8MB   39

Polecenie wyświetli aktualny stan zużycia zasobów, tak jak to prezentuje na powyższym przykładzie. W moim systemie posiadam uruchomiony tylko jeden kontener z bazą MySQL. Program stale aktualizuje tabelę wykorzystania zasobów dla każdego z kontenerów na liście. W moim przypadku tylko dla jednego. Natomiast możesz jeszcze chcieć wyświetlić informacje dotyczące konkretnego kontenera. W ramach przykładu stworzę jeszcze jeden kontener z apache2:

docker run -d --name httpd -p 80:80 httpd

Dlatego teraz, jeżeli wpiszemy ponownie polecenie, na liście pojawią się dwa kontenery:

docker stats

CONTAINER ID   NAME  CPU % MEM USAGE / LIMIT     MEM % NET I/O       BLOCK I/O     PIDS

8d5cf44d3f86   httpd 0.00% 26.3MiB / 31.28GiB    0.08% 2.66kB / 0B   0B / 0B       82

eaee6a76f68c   mysql 0.19% 414.4MiB / 31.28GiB   1.29% 8.05kB / 0B   80.9MB / 17.2MB   38

Możesz też określić nazwę lub identyfikator kontenera, aby wyświetlić wykorzystanie zasobów dla niego. Na przykład, aby wyświetlić zużycie zasobów dla kontenera, któremu nadaliśmy nazwę mysql, używamy następującej konstrukcji polecenia:

docker stats mysql
CONTAINER ID   NAME  	CPU % 	MEM USAGE / LIMIT 	MEM % 	NET I/O   	BLOCK I/O     	PIDS
eaee6a76f68c   mysql 	0.22% 	414.4MiB / 31.28GiB   1.29% 	8.33kB / 0B   80.9MB / 17.2MB   38

Pomimo tego, że tym narzędziem do monitoringu posługujesz się za pomocą poleceń w terminalu, masz jeszcze możliwość ustawienia wyświetlania tylko interesujących nas metryk. W tym celu wykorzystujemy opcję –format w następujący sposób:

docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}”

Polecenie wyświetli tabelę z nazwą kontenera, zużyciem procesora, pamięci, a także wyjściem sieciowym dla każdego kontenera.

Możesz jeszcze chcieć na szybko wyświetlić listę kontenerów z ich metrykami, ale bez ich aktualizacji. Do tego celu skorzystać możesz z polecenia:

docker stats --no-stream

Wyświetli się lista z wykorzystaniem na moment uruchomienia polecenia.

Wszystkie wymienione polecenia możemy z sobą łączyć:

docker stats httpd --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"
NAME  	CPU % 	MEM USAGE / LIMIT	NET I/O
httpd 	0.00% 	26.3MiB / 31.28GiB   3.93kB / 0B

Prezentowane narzędzie nie należy do skomplikowanych. Jednak jak zapewne się domyślasz, dość ciężka byłaby analiza statystyk na przykład z kilku dni. Dlatego docker stats najczęściej jest wykorzystywany, gdy chcemy zobaczyć na szybko, jak wygląda tablica naszych kontenerów i mniej więcej spojrzeć, w jaki sposób wygląda aktualne zużycie zasobów.

Narzędzie cAdvisor

Jeżeli uważacie, że skorzystanie z narzędzia, które będzie wyświetlało w bardziej graficzny sposób metryki, jest czymś bardzo skomplikowanym, to jesteście w błędzie. Aby uruchomić cAdvisor, wystarczy uruchomić kontener z nim. Robimy to w następujący sposób:

sudo docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:ro --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --volume=/dev/disk/:/dev/disk:ro --publish=8080:8080 --detach=true --name=cadvisor gcr.io/cadvisor/cadvisor

Dokładne informacje o projekcie odnajdziesz pod adresem https://github.com/google/cadvisor . Natomiast po wprowadzeniu powyższego polecenia zostanie pobrany oraz uruchomiony kontener z aplikacją. Wystarczy, że w swojej przeglądarce internetowej wpiszesz adres localhost:8080 a powinieneś otrzymać panel:

Monitoring kontenerów Dockera

Dzięki niemu jesteśmy w stanie sprawdzić, jakie jest wykorzystanie zasobów:

Monitoring kontenerów Dockera

Dostęp do powyższych informacji uzyskujemy ze strony głównej panela. W razie problemów jest to adres http://localhost:8080/containers/. Natomiast możemy również sprawdzić wykorzystanie co do każdego z kontenerów. W tym celu w górnej części strony wchodzimy w link Docker Containers (http://localhost:8080/docker/):

Monitoring kontenerów Dockera

W ten sposób uzyskasz listę kontenerów i dla każdego z nich możesz sprawdzić metryki poprzez kliknięcie odpowiedniego linku z listy na powyższym rysunku.

Monitoring kontenerów Dockera

Powyższy rysunek przedstawia zużycie procesora dla kontenera z bazą MySQL.

Podsumowanie

Monitoring kontenerów Dockera jest dość istotnym elementem tego środowiska. Zawsze warto zainwestować w system, dzięki któremu uzyskamy informacje o tym, co dzieje się na naszych serwerach, jak i również kontenerach.

 

 

Ostatni webinar w tym roku!

Zapraszamy na bezpłatny webinar poświęcony roli sztucznej inteligencji w zarządzaniu infrastrukturą IT, zarówno w dużych serwerowniach, jak i w środowiskach homelab.

W trakcie wydarzenia dowiesz się, jak AI może wspierać codzienną pracę administratora, pomagając w automatyzacji procesów, monitorowaniu zasobów, analizie danych oraz zwiększaniu efektywności operacyjnej.

Zapisy na: https://asdevops.pl/warsztaty/

 

 

 

 

Warsztaty "Użycie AI w Serwerowni i Homelab"!

X