Prometheus: Pobieranie metryk z Linuxa
Jak pobierać metryki serwera Linux w Prometheus za pomocą Node Exporter
👋 Witamy w dokumentacji Stackhero!
Stackhero oferuje gotowe do użycia rozwiązanie Prometheus cloud, które zapewnia wiele korzyści, w tym:
Alert Managerw zestawie do wysyłania alertów doSlack,Mattermost,PagerDuty, itp.- Dedykowany serwer e-mail do wysyłania nieograniczonych alertów e-mail.
Blackboxdo sondowaniaHTTP,ICMP,TCPi więcej.- Łatwa konfiguracja z edytorem plików konfiguracyjnych online.
- Bezproblemowe aktualizacje za pomocą jednego kliknięcia.
- Optymalna wydajność i solidne bezpieczeństwo dzięki prywatnej i dedykowanej VM.
Oszczędzaj czas i upraszczaj swoje życie: wystarczy 5 minut, aby wypróbować rozwiązanie Prometheus cloud hosting Stackhero!
Czym jest Prometheus Node Exporter
Node Exporter to oprogramowanie, które można zainstalować na jądrach *NIX (Linux, OpenBSD, FreeBSD lub Darwin), aby udostępniać metryki systemowe dla Prometheus. Jest to kluczowy komponent do monitorowania wydajności serwerów i kondycji infrastruktury.
W terminologii Prometheus, Node Exporter działa jako eksporter i jest dodawany jako cel w konfiguracji Prometheus. Prometheus łączy się z Node Exporter za pomocą portu TCP 9100 przez HTTP w regularnych odstępach czasu, aby pobierać metryki.
Podsumowując, Node Exporter pozwala monitorować system oparty na Linuxie. Dla systemów Windows można użyć Windows Exporter.
Ogólny widok Stackhero dla Prometheus
Instalacja Prometheus Node Exporter na serwerze Linux
Można pobrać Node Exporter z jego strony wydań GitHub. Jest on dystrybuowany jako binarka, która działa bezpośrednio na systemie. Ponieważ jest zaprojektowany do ciągłego działania, zaleca się skonfigurowanie go do automatycznego uruchamiania przy starcie serwera.
Domyślnie Node Exporter otwiera port 9100 dla świata bez uwierzytelniania i szyfrowania. Zdecydowanie zaleca się dodanie zarówno uwierzytelniania, jak i szyfrowania TLS (patrz poniżej) oraz skonfigurowanie zapory, aby ograniczyć dostęp do portu 9100, tak aby tylko serwer Prometheus lub inne autoryzowane adresy IP mogły się połączyć.
Jak zainstalować Prometheus Node Exporter na Ubuntu
Można postępować zgodnie z tymi krokami na Ubuntu:
# Przejdź do https://github.com/prometheus/node_exporter/releases, aby uzyskać najnowszy numer wersji.
node_exporter_version="1.2.0"
node_exporter_release="linux-amd64"
# Pobierz i zainstaluj node_exporter
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v${node_exporter_version}/node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
tar xvfa node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
sudo mv node_exporter-${node_exporter_version}.${node_exporter_release}/node_exporter /usr/local/bin/
rm -rf node_exporter-${node_exporter_version}.${node_exporter_release} node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
# Utwórz użytkownika "node_exporter"
sudo useradd -rs /bin/false node_exporter
# Utwórz usługę systemd, aby automatycznie uruchamiać node_exporter przy starcie
sudo bash -c 'cat << EOF > /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter --web.config=/etc/prometheus_node_exporter/configuration.yml
[Install]
WantedBy=multi-user.target
EOF'
# Utwórz katalog i plik konfiguracyjny
sudo mkdir -p /etc/prometheus_node_exporter/
sudo touch /etc/prometheus_node_exporter/configuration.yml
sudo chmod 700 /etc/prometheus_node_exporter
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
# Uruchom demona node_exporter i sprawdź jego status
sudo systemctl start node_exporter
sudo systemctl status node_exporter
W tym momencie binarka node_exporter powinna działać na serwerze. Aby potwierdzić, że działa, można się z nią połączyć i sprawdzić, czy zwraca metryki:
curl http://localhost:9100/metrics
Node Exporter otwiera port 9100 dla sieci publicznej. Oznacza to, że każdy może się połączyć i pobrać metryki serwera! Co najmniej, należy dodać uwierzytelnianie i szyfrowanie TLS (patrz poniżej) i zdecydowanie zaleca się skonfigurowanie zapory, aby blokować żądania do portu 9100 z adresów IP innych niż serwer Prometheus.
Jak zainstalować Prometheus Node Exporter na Debian
Proces instalacji Node Exporter na Debian jest identyczny z metodą Ubuntu opisaną powyżej. Wystarczy postępować zgodnie z tymi samymi instrukcjami.
Jak zainstalować Prometheus Node Exporter na innych systemach
Kroki instalacji Node Exporter zależą od używanego systemu. Chociaż szczegółowa dokumentacja dla każdej platformy nie jest dostarczona, podstawowa procedura polega na pobraniu binarki odpowiadającej systemowi i skonfigurowaniu jej do uruchamiania przy starcie.
Dodaj uwierzytelnianie do Prometheus Node Exporter
Domyślnie Node Exporter nie wykonuje uwierzytelniania, co oznacza, że każdy może pobrać udostępnione metryki. Aby zabezpieczyć dostęp, można dodać podstawowe uwierzytelnianie dla użytkownika.
Generowanie losowego hasła
Wygeneruj hasło za pomocą następujących poleceń:
password=`openssl rand -base64 32`
passwordHashed=`echo ${password} | htpasswd -inBC 10 "" | tr -d ':'`
echo "Hasło do zachowania dla serwera Prometheus: ${password}"
Jeśli nie masz binarki
htpasswd, można ją zainstalować na Debian/Ubuntu za pomocąapt-get install --no-install-recommends apache2-utils.
Przechowuj hasło w bezpiecznym miejscu, ponieważ będzie potrzebne podczas konfigurowania Prometheus.
Dodawanie użytkownika i ponowne uruchamianie Node Exporter
Dodaj następujące linie do pliku konfiguracyjnego, aby dodać użytkownika o nazwie "prometheus" z wygenerowanym hashem hasła:
sudo cat << EOF >> /etc/prometheus_node_exporter/configuration.yml
basic_auth_users:
prometheus: ${passwordHashed}
EOF
# Ponowne uruchomienie Node Exporter
sudo systemctl restart node_exporter
Na koniec, sprawdź, czy uwierzytelnianie działa poprawnie:
- Uruchomienie
curl http://localhost:9100/metricspowinno zwrócić "Unauthorized". - Uruchomienie
curl -u prometheus:${password} http://localhost:9100/metricspowinno zwrócić listę metryk.
Dodaj szyfrowanie TLS do Prometheus Node Exporter
Domyślnie Node Exporter nie szyfruje komunikacji. Oznacza to, że dane uwierzytelniające, w tym wcześniej zdefiniowane hasło, są przesyłane w postaci niezaszyfrowanej. Aby zabezpieczyć komunikację, można włączyć szyfrowanie TLS w następujący sposób.
Tworzenie certyfikatów TLS
Uruchom następujące polecenia, aby utworzyć certyfikat i klucz TLS:
# Utwórz certyfikat TLS
cd /tmp
sudo openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 \
-keyout /etc/prometheus_node_exporter/tlsCertificate.key \
-out /etc/prometheus_node_exporter/tlsCertificate.crt \
-subj "/CN=`hostname`" \
-addext "subjectAltName = DNS:`hostname`"
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter
Aktualizacja konfiguracji
Dodaj następujące linie do pliku konfiguracyjnego, aby dodać ustawienia TLS, a następnie ponownie uruchom Node Exporter:
sudo cat << 'EOF' >> /etc/prometheus_node_exporter/configuration.yml
tls_server_config:
cert_file: /etc/prometheus_node_exporter/tlsCertificate.crt
key_file: /etc/prometheus_node_exporter/tlsCertificate.key
EOF
# Ponowne uruchomienie Prometheus Node Exporter
sudo systemctl restart node_exporter
Można sprawdzić, czy TLS jest aktywny, łącząc się przez HTTPS za pomocą następującego polecenia:
curl -k -u prometheus:${password} https://localhost:9100/metrics
Zauważ, że ta metoda nie używa certyfikatu CA, więc trzeba przekazać opcję "-k" do cURL, aby pominąć weryfikację certyfikatu.
Konfiguracja serwera Prometheus do pobierania danych z Node Exporter
Po zainstalowaniu Node Exporter i jego zabezpieczeniu, skonfiguruj serwer Prometheus do regularnego pobierania metryk.
Na Stackhero, wybierz swoją usługę Prometheus i przejdź do URL "Prometheus configuration". Następnie dodaj następujące elementy do sekcji scrape_configs:
scrape_configs:
- job_name: "My servers pool"
static_configs:
- targets: [ "<yourLinuxServerDomain>:9100" ]
basic_auth:
username: "prometheus"
password: "<password>"
scheme: https
tls_config:
insecure_skip_verify: true
# Relabeling "instance" w celu usunięcia części ":9100"
relabel_configs:
- source_labels: [__address__]
target_label: instance
regex: '([^:]+)(:[0-9]+)?'
replacement: '${1}'
Zapisz plik i sprawdź logi Prometheus, aby potwierdzić, że został pomyślnie załadowany (można zobaczyć logi z poziomu dashboardu Stackhero, wybierając swoją usługę Prometheus i klikając na zakładkę "Logs").
Na koniec, sprawdź, czy Prometheus pobiera metryki, uzyskując dostęp do interfejsu użytkownika Prometheus na dashboardzie Stackhero i przechodząc do Status > Targets. Twój serwer Linux powinien pojawić się na liście celów jako UP.
Cel "myLinuxServer" jest UP
Wyświetlanie danych na Prometheus
Aby zobaczyć metryki pobrane z Node Exporter, zaloguj się do Prometheus przez dashboard Stackhero, używając URL "Prometheus UI" lub bezpośrednio pod adresem https://<prometheusDomain>/.
W polu "Expression" wpisz node_memory_MemTotal_bytes i naciśnij enter. Jeśli wszystko jest poprawnie skonfigurowane, zobaczysz całkowitą pamięć RAM serwera wyświetloną w bajtach.
Całkowita ilość RAM dla tego serwera to 4068794368 bajtów, co odpowiada 3.78GB
Konfiguracja Grafana do wyświetlania danych Prometheus pobranych z Node Exporter
Grafana może łatwo generować dashboardy na podstawie danych Prometheus. Szczegółowe instrukcje dotyczące konfiguracji Grafana do wyświetlania danych Prometheus można znaleźć w dokumentacji Grafana.
Przykład dashboardu wygenerowanego przez Grafana, na podstawie danych Prometheus Node Exporter