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 Manager w zestawie do wysyłania alertów do Slack, Mattermost, PagerDuty, itp.
  • Dedykowany serwer e-mail do wysyłania nieograniczonych alertów e-mail.
  • Blackbox do sondowania HTTP, ICMP, TCP i 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!

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 PrometheusOgólny widok Stackhero dla Prometheus

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ć.

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.

Proces instalacji Node Exporter na Debian jest identyczny z metodą Ubuntu opisaną powyżej. Wystarczy postępować zgodnie z tymi samymi instrukcjami.

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.

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.

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.

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/metrics powinno zwrócić "Unauthorized".
  • Uruchomienie curl -u prometheus:${password} http://localhost:9100/metrics powinno zwrócić listę metryk.

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.

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

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.

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 UPCel "myLinuxServer" jest UP

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.78GBCałkowita ilość RAM dla tego serwera to 4068794368 bajtów, co odpowiada 3.78GB

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 ExporterPrzykład dashboardu wygenerowanego przez Grafana, na podstawie danych Prometheus Node Exporter