Prometheus không trực tiếp hỗ trợ basic authentication
(basic auth) cho các kết nối giữ Prometheus expession browser và HTTP API. Nếu bạn muốn bắt buộc phải cos basic auth khi kết nối, thì có thể sử dụng Prometheus conjunction với một reverse proxy và áp dụng authentication cho proxy layer. Có rất nhiều reverse proxy, bạn có thể chọn bất cứ cái nào, ở đây tôi sẽ ví dụ sử dụng nginx.
Tạo password cho admin
mkdir -p /etc/nginx
htpasswd -c /etc/nginx/.htpasswd admin
Nhập password cho user admin
Chỉnh sửa file cấu hình nginx tương tự như sau:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 12321;
location /prometheus {
auth_basic "Prometheus";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://192.168.70.71:9090;
}
}
}
Khởi động nginx sử dụng file cấu hình trên bằng câu lệnh:
nginx -c /etc/nginx/nginx.conf
Sửa file /etc/systemd/system/prometheus.service
như sau:
[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/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.external-url=http://192.168.70.71:12321/prometheus \
--web.enable-admin-api
[Install]
WantedBy=multi-user.target
Kiểm tra lại xem đã cấu hình nginx thành công chưa:
[root@trang-70-71 ~]# curl --head http://localhost:12321/prometheus/graph
HTTP/1.1 401 Unauthorized
Server: nginx/1.12.2
Date: Mon, 22 Jul 2019 07:12:57 GMT
Content-Type: text/html
Content-Length: 195
Connection: keep-alive
WWW-Authenticate: Basic realm="Prometheus"
Web yêu cầu xác thực, thực hiện lại với câu lệnh sau và nhập pass đã tạo phía trên:
[root@trang-70-71 ~]# curl -u admin http://localhost:12321/prometheus/metrics
Enter host password for user 'admin':
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 1.7799e-05
go_gc_duration_seconds{quantile="0.25"} 3.3246e-05
go_gc_duration_seconds{quantile="0.5"} 3.6149e-05
go_gc_duration_seconds{quantile="0.75"} 8.1012e-05
go_gc_duration_seconds{quantile="1"} 0.001722892
go_gc_duration_seconds_sum 0.002459284
go_gc_duration_seconds_count 16
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 58