8.0 KiB
Установка Prometheus server и Node exporter
Prometheus server install
wget https://github.com/prometheus/prometheus/releases/download/v2.55.0-rc.0/prometheus-2.55.0-rc.0.linux-amd64.tar.gz
- скачиваем прометеус серверtar xvfz *.tar.gz
cd prometheus-2.55.0-rc.0.linux-amd64.tar.gz
sudo mv prometheus /usr/local/bin/
sudo mv promtool /usr/local/bin
sudo mkdir /etc/prometheus/
sudo mkdir /etc/prometheus/data
sudo mv prometheus.yml /etc/prometheus/
# prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: "archers-paradox-servers"
static_configs:
- targets:
- 89.22.241.241:9100
useradd -rs /bin/false prometheus
- создаём системного пользователя для работы с prometheuschown prometheus:prometheus /usr/local/bin/prometheus
chown -R prometheus:prometheus /etc/prometheus
vi /etc/systemd/system/prometheus.service
- создаём systemd юнит
[Unit]
Description=Prometheus Server
After=network.target
[Service]
User=prometheus
Group=prometheus
Type=simple
Restart=on-failure
RestartSec=4s
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /etc/prometheus/data
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
- обновить systemdsudo systemctl start prometheus
sudo systemctl enable prometheus
Настройка TLS
-
touch web-config.yml
- создать конфигурационный файл для настойки TLS -
Добавить в Unit-файл пусть к конфигу TLS в директиве
ExecStart
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /etc/prometheus/data \
--web.config.file /etc/prometheus/web-config.yml
certbot certonly --nginx -d prometheus.mcarov.pro
- сгенирировать сертификаты, команду не хочу пояснять
!!! tip "Если на сервере нет Nginx"
certbot certonly --standalone -d prometheus.mcarov.pro
- Добавить Серт и Ключ в
web-config.yml
tls_server_config:
cert_file: /home/prometheus/certs/example.com/example.com.crt
key_file: /home/prometheus/certs/example.com/example.com.key
- Добавить строку в
/etc/crontab
для обновления серта
0 0,12 * * * root /opt/certbot/bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && sudo certbot renew -q
- Создать скрипт
/etc/letsencrypt/renewal-hooks/deploy/set-permissions-and-restart-prometheus.sh
#!/bin/bash
# Выдать права пользователю prometheus
setfacl -R -m u:prometheus:rX /etc/letsencrypt/
# Перезагрузить Prometheus
systemctl restart prometheus
-
chmod +x /etc/letsencrypt/renewal-hooks/deploy/set-permissions-and-restart-prometheus.sh
-
certbot renew --dry-run
- для отладки процесса обновления сертификатов -
Создать конфиг nginx в
/etc/nginx/sites-available
server {
server_name prometheus.mcarov.pro;
location / {
client_max_body_size 512M;
proxy_pass https://127.0.0.1:9090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
access_log /var/log/nginx/prometheus.mcarov.pro.access.log;
error_log /var/log/nginx/prometheus.mcarov.pro.error.log;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/prometheus.mcarov.pro/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/prometheus.mcarov.pro/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
if ($host = prometheus.mcarov.pro) {
return 301 https://$host$request_uri;
}
listen 80;
server_name prometheus.mcarov.pro;
return 404;
}
ln -s /etc/nginx/sites-available/prometheus.mcarov.pro /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
Аутентификация для Prometheus Server
-
htpasswd -nBC 10 "" | tr -d ':\n'
- выполнить -
Добавить в
web-config.yml
basic_auth_users:
# user: password (hash)
admin: $2y$10$QzpQ2fO9TpU1Hm4VbB6AMO8ZsdoplfesfAmI8MFB402BVIu5gf.TK
-
systemctl restart prometheus
-
В UI Grafana настроить Basic auth в Data Source
Node exporter install
-
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-arm64.tar.gz
- скачиваем node exporter на удалённый хост -
tar xvfz *.tar.gz
-
sudo mv node_exporter /usr/local/bin/
-
sudo useradd -rs /bin/false node_exporter
-
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
-
sudo vi /etc/systemd/system/node_exporter.service
# node_exporter.service
[Unit]
Description=Prometheus Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
Restart=on-failure
RestartSec=4s
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
Настройка TLS
touch web.yml
- Создать
openssl.cnf
и наполнить содержимым:
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
CN = 150.241.66.94
[v3_ext]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=digitalSignature,keyEncipherment
extendedKeyUsage=serverAuth
subjectAltName=@alt_names
[alt_names]
IP.1 = 150.241.66.94
-
sudo openssl req -x509 -newkey rsa:2048 -keyout node_exporter.key -out node_exporter.pem -days 36500 -nodes -config openssl.cnf -extensions v3_ext
- генирируем серты -
Не забываем выдать права на сертификаты
-
Добавить в
web.yml
tls_server_config:
cert_file: /etc/prometheus/node_exporter/certs/node_exporter.pem
key_file: /etc/prometheus/node_exporter/certs/node_exporter.key
- Добавить в Unit Node Exporter в директиву ExecStart
--web.config.file=/etc/prometheus/node_exporter/web.yml
-
systemctl daemon-reload
-
systemctl restart node_exporter.service
-
На машине с Prometheus Server добавить в
prometheus.yml
в нужную джобу экспортера
scheme: https
tls_config:
ca_file: /etc/prometheus/node_exporter/srv-infra/certs/node_exporter.pem
systemctl restart prometheus
Про PromQL
increase()
возвращает общий прирост за указанный интервал времени.
increase(<метрика>[<интервал>])
rate()
вычисляет скорость изменения за этот же интервал времени, и в результате возвращает количество изменений в секунду.increase(http_requests_total[5m])
— покажет, сколько запросов пришло за последние 5 минут.rate(http_requests_total[5m])
— покажет среднее количество запросов в секунду за последние 5 минут.
Полезности
promtool check config prometheus.yml
- проверка синтаксисаpromtool check rules rules.yml
- проверка синтаксисаpromtool test rules rules_test.yml