Skip to content

Latest commit

 

History

History
122 lines (99 loc) · 3.7 KB

10. securing-prometheus-api.md

File metadata and controls

122 lines (99 loc) · 3.7 KB

Securing prometheus API and UI endpoints using basic auth

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.

Cấu hình ban đầu

Tạo password cho admin

mkdir -p /etc/nginx
htpasswd -c /etc/nginx/.htpasswd admin

Nhập password cho user admin

Cấu hình Nginx

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

Cấu hình Prometheus

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