背景描述
Node Exporter v1.0.0之前的版本不支持TLS和认证,所以默认情况下是通过http暴露的/metrics,默认没有任何访问限制。对于有些环境硬性要求不允许使用http提供访问,和对安全性要求较高必须有认证的情况下,原来只能通过额外增加一层反向代理(如nginx)来解决。但给每个node_export配1个nginx,这显然这太复杂太重了。
从 v1.0.0版本开始实验性的支持https和基本认证。 从 Node Exporter 开始到后续其他的组件,都将支持 TLS 和 basic auth, 同时也列出了最新的安全基准(默认情况下都支持 TLS v1.2 及以上)。下面让我们来看看具体配置。
- 本文主要讲解如何基于 nginx 让 node-exporter 支持基本认证。
配置用户认证
安装httpd工具,用于生成用户认证密码文件
yum install -y httpd
创建认证用户信息
# 进入nginx配置目录,用于存放生成的密码文件 cd /usr/local/nginx/conf # 生成 admin 账号、密码的 passwd.db 文件 htpasswd -c -m passwd.db admin
- 回车后会要求输入对应密码,最终会在执行命令的目录下生成 passwd.db 文件。
本地照常启动 node-exporter
创建 nginx 代理配置
server { listen 12345; server_name node-exporter.nestealin.com; auth_basic "login"; auth_basic_user_file /usr/local/nginx/conf/passwd.db; location / { # 本地 node-exporter 端口 proxy_pass http://127.0.0.1:12301; } }
Prometheus 新增 job 配置
创建动态发现主机配置 ( 用于多主机动态发现,无需每次重启Prometheus )
vim /usr/local/prometheus/targets/vps_hosts.json
[ { "targets": [ "node-exporter.nestealin.com:12345" ], "labels": { "__idc__": "aliyun", "__hostname__": "ali-dev-node01" } } ]
服务配置
- job_name: "vps_node_exporter" scrape_interval: 60s scrape_timeout: 50s # 填入刚才创建的认证用户及密码 basic_auth: username: admin password: admin-password file_sd_configs: - refresh_interval: 1m files: - /usr/local/prometheus/targets/vps_hosts.json relabel_configs: - source_labels: - __address__ target_label: ip - source_labels: - "__idc__" regex: "(.*)" target_label: "idc" action: replace replacement: "$1" - source_labels: - "__hostname__" regex: "(.*)" target_label: "hostname" action: replace replacement: "$1"
重新加载Prometheus配置,即可实现远端主机认证拉取。 (以下两种方式任选其一)
- 重启 Prometheus 服务:
service prometheus restart
- Reload 配置:
curl -X POST http://localhost:9090/-/reload
(启动参数需要带上--web.enable-lifecycle
才支持该功能 )
- 重启 Prometheus 服务: