PROMETHEUS z mitologii greckiej jeden z wielu tytanów potrafiący tworzyć i niszczyć, leczyć i zabijać. Choć jego otoczenie negowało czułość lecz wymagało być strasznym wybrał dla siebie drogę przez mękę. Zrobił to w imię nadziei na lepsze jutro nie dla siebie lecz dla innych. Jak się okazało zarówno najbliżsi (Epimeteusz - brat), jak i jego władcy (Zeus) nie wykazali się tą samą mądrością, czy odwagą co on.
Oprogramowanie Open Source PROMETHEUS zbiera informacje o usługach, kontenerach i klastrach Kubernetes. I tak ja tytan Prometusz potrafił wiedzę przechowywać, przetworzyć oraz przekazać, tak i to narzędzie monitoringu działa analogicznie. Wysyła również powiadomienia oferując deduplikację, grupowanie i przekierowywanie e-mail-y, PagerDuty, Slack itd.
Samo instalowanie na tą chwilę PROMETHEUS-a jest dziecinnie proste. Ponieważ jest wspierane natywnie przez wieksząść dystrybucji co na marginesie jest samo w sobie wyznacznikiem jego jakości i funkcjonalności. Nie mniej jednak bywają w życiu, jak w polskiej ortografi wyjątki by nie być bardziej dosadnym same wyjątki według mnie wynikające z przerostu formy nad treścią lub jak kto woli dobrze pojetego interesu mafii urzędniczej. Dlatego na początku przedstawię kilka zrzutów ekranowych z PROMETHEUS-a działającego pod UBUNTU w wersji 25, a w drugiej części, a właściwie kilku następnych artykułach będę opisywał to co stało się przy wykorzystaniu pakietów dostępnych już na poziomie tworzenia samego środowiska systemu operacyjnego. Samo uruchomienie tworzenia systemu monitoringu proponuję od przemyślenia wielkości partycji nie tylko ze względów bezpieczeństwa co oczywiste, ale również możliwości przerostu danych, logów itd. ponad wielkość dostępnej pamięci masowej. Dlatego proponuję utworzyć dodatkowo dwie partycje:
- /var/log - dla logów systemowych
- /var/lib - dla baz danych

Gdy się z tym uporamy proszę też przy wyborze instalcji UBUNTU wybrać wersję minimalny serwer oraz by nie skusiło nas pojście po zupełnie najprosterzej linii oporu i wybranie na tym etapie (krzyżyka) oprogramowania PROMETHEUS (patrz zrzut ekranu poniżej).

Wiąże się to z tym, że w tym momencie nie bedziemy korzystać z wywodzącego się z Debiana narzędzia do obsługi pakietów tzw. APT (Advanced Package Tool), a aplikacji dostępnej od wersji 16 UBUNTU zwanej SNAP STORE. Według mnie jest ono odpowiednikiem Sklepu PLAY występującego w systemie Android. O implikacjach takiego podejścia nie będę się rozwodził bo zaraz znów wejdę w politykę. ;-( Po szczęśliwym ominieciu kolejnej pułapki i zalogowaniu do systemu proponuje jedynie wykonanie następującej komendy (patrz zrzut ekranu poniżej):
- sudo apt-get install prometheus

Po restarcie systemu na przykład komendą:
- shutdown now -r
uzyskamy w pełni funkcjonalny system moniturujący samego siebie (patrz zrzuty ekranowe poniżej):
- działające demony związane bezpośrednio z PROMETHEUS-em

- główny plik konfiguracyjny prometheus.yml

- cele (węzły) podłączone do bazy danych TSDB

- Prometheus Node Exporter UBUNTU (węzeł- localhost:9100)

- zapytanie w PromQL o wielkość partycji systemu operacyjnego

- zapytanie w PromQL o ilość wolnego miejsca na partycjach systemu operacyjnego

- wielkość pamięci RAM zajęta przez PROMETHEUSA

- zapytanie w PromQL o wagę pamięci WAL

- zapytanie w PromQL o średnią liczbę próbek pobranych na minutę w ciągu ostatniej minuty

Czy jest on jednak zrozumiały dla nas i bardziej bezpieczniejszy niż byśmy mieli przejść tą drogę wykorzystująć moje poniższe wypociny?
- PROMETHEUS (prometheus.yml) - http://bit.sos.pl/blog/historia-sukcesu-2/prometheus-prometheus-yml-63
- PROMETHEUS (node export) - http://bit.sos.pl/blog/historia-sukcesu-2/prometheus-node-export-65
Odpowiedż pozostawiam czytelnikowi. By nie było, że nie znam oraz nie przychylam się do niej. :-)
- aktualizacja pakietu przy aktualizacji dystrybucji (wiem nie do najnowszej, samo życie coś za coś, patrz też link poniżej)
- "HOME: Ziemia S.O.S HD lektor PL"
Drugi sposób nazwany przeze mnie "ręcznym" instalacji zaczynamy od przygotowania systemu dla rodziny RedHat-a:
- sudo dnf update -y
lub Ubuntu:
- sudo apt-get update; sudo apt-get upgrade -y; sudo apt autoremove; sudo autoclean
idąc na całość (backup całego systemu zalecam)
- sudo apt full-upgrade; sudo apt dist-upgrade; sudo do-release-upgrade
Tworzymy dedykowanego użytkownika:
- sudo groupadd --system prometheus
- sudo useradd --no-create-home --shell /bin/false -g prometheus --system prometheus
Tworzymy katalogi (według standardowej konwencji) i nadajemy im właściciela :
- sudo mkdir /etc/prometheus
- sudo mkdir /etc/prometheus/console
- sudo mkdir /etc/prometheus/console_libraries
- sudo mkdir /var/lib/prometheus
- sudo mkdir /var/log/prometheus
- sudo chown -R prometheus:prometheus /etc/prometheus
- sudo chown prometheus:prometheus /var/lib/prometheus
- sudo chown prometheus:prometheus /var/log/prometheus
Ściągamy źródła PROMETHEUS:
- cd /tmp
- curl -LO https://github.com/prometheus/prometheus/releases/download/v3.10.0/prometheus-3.10.0.linux-amd64.tar.gz
- tar xvf prometheus*.linux-amd64.tar.gz
- cd prometheus*.linux-amd64.tar.gz
Kopiujemy rozpakowany binarny plik systemowy do folderu /usr/local/bin i nadajemy mu właściciela:
- sudo cp prometheus promtool /usr/local/bin/
- sudo chown prometheus:prometheus /usr/local/bin/prometheus
- sudo chown prometheus:prometheus /usr/local/bin/promtool
Analogicznie czynimy z plikiem konfiguracyjnym Prometusza, który kopiujemy do /etc/prometheus:
- sudo cp prometheus.yml /etc/prometheus/prometheus.yml
- sudo chown -R prometheus:prometheus /etc/prometheus
Praktycznie już w tym momencie możemy testowo uruchomić PROMETHEUS-a komendą:
- /usr/local/bin/prometheus --config.file=/etc/prometheus/prometheus.yml
i sprawdzić choćby pod adresem:
Powinna nam otworzyć się strona zbliżona do poniższej:

Idąc za tym sukcesem sprawdźmy samy siebie, czy Prometheush zarejestrował nasze zapytanie protokołem http wpisując w górnym wierszu, w miejsce tekstu ">_ Enter expression (press Shift+Enter for newlines)" następujący tekst:
- promhttp_metric_handler_requests_total
i zatwierdziwszy go, np. klawiszem "ENTER" ukarze się naszym oczom następujący widok:

oraz wybierając drugą zakładkę "Graph" uzyskamy ten sam wynik, ale w postaci, jak się nie trudno domysleć graficznej:

Tym małym przerywnikiem chciałem połączyć przyjemne z pożytecznym, czyli nie tylko zamknąć pewien etap instalacji, ale zamiast we wstępie rozwodzić się tysiącami słów nad senesem istnienia takiego narzędzia, jal Prometheus to te trzy zrzuty ekranowe wyręczyły mnie w tej ciezkiej pracy. :-) W następnej kolejności należy usankcjonować na stałe uruchamianie aplikacji wraz z systemem operacyjnym. Czynimy to tworząc usługę prometheus w Systemd poprzez wygenerowanie pliku:
- sudo touch /etc/systemd/system/prometheus.service
i otwierając go w dowolnym edytorze ( nano /etc/systemd/system/prometheus.service ) wypełniamy następującym tekstem:
- [Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus/data \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--storage.tsdb.retention.time=30d
[Install]
WantedBy=multi-user.target
oraz restarujemy, aktywujemy, uruchamiamy i sprawdzamy samą usługę poniższymi komendami:
- sudo systemctl daemon-reload
- sudo systemctl enable prometheus
- sudo systemctl start prometheus
- sudo systemctl status prometheus
Jeśli gdzieś nie daliśmy ciała to powiniśmy ujrzeć w konsoli coś podobnego do poniższego zrzutu ekranowego, jeśli nie to będzie napisany komunikat błędu i w zależności ..:

Na sam koniec musimy wykonać lukę w zaporze ogoniowej (standardowo port 9090 i protikół TCP) komendą dla RedHat-a:
- sudo firewall-cmd --permanent --add-port=9090/tcp
- sudo firewall-cmd --reload
oraz dla klonów Debian-a:
- sudo ufw allow 9090/tcp
By postawić kropkę nad i proponuję zrestarrtować system i odświeżyć stronę Prometheusa. Ujrzymy na wykresie nie tylko restart usługi:

Jeśli zechcemy się wysilić i wykonamy powyższe zapytanie delikatnie zmodyfikowane:
- rate(promhttp_metric_handler_requests_total[1m])
to ujrzymy przetworzone dane w postaci trendu:

Oracowane na podstawie:
- Monitoring Prometheus: Pełne ustawienie i najlepsze praktyki - https://www.glukhov.org/pl/observability/monitoring-with-prometheus/#co-to-jest-prometheus
- How to Install Prometheus on Ubuntu 22.04 - https://www.cherryservers.com/blog/install-prometheus-ubuntu
- First steps with Prometheus - https://prometheus.io/docs/introduction/first_steps/
- Installing and Configuring Prometheus on AlmaLinux 9 - https://reintech.io/blog/installing-configuring-prometheus-almalinux-9
- Install and Configure Firewalld on Ubuntu 24.04 / 22.04 - https://computingforgeeks.com/install-and-use-firewalld-on-ubuntu/