上一篇文章介绍了Prometheus通过Nginx反向代理进行登陆认证,那么如果换成node_exporter呢?当然也是可以的。
node_exporter是Prometheus的一个扩展程序,也是通过go语言编写,同样是开箱即食,主要用来采集服务器上的数据(CPU、内存等等)。
我这里介绍一下需求,node_exporter部署在了线上远程服务器上,Prometheus部署在了公司内网中(无公网IP),这样就产生了一个问题,node_exporter如果在远程服务器上运行,势必会打开防火墙,这样node_exporter就暴露在了公网环境下,这么做势必是不安全的,相信没有人愿意把数据暴露出去。
有了上一篇文章的经验,部署起来就容易的多,为了更加容易理解,我这里画了一张图,线上远程服务器node_exporter启动默认端口9100,Nginx暴露端口19100。
远程服务器配置
下载node_exporter
cd /usr/local/src wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz tar xf node_exporter-0.17.0.linux-amd64.tar.gz -C /usr/local/ mv /usr/local/node_exporter-0.17.0.linux-amd64/ /usr/local/node_exporter
|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 | cd /usr/local/src wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz tar xf node_exporter-0.17.0.linux-amd64.tar.gz -C /usr/local/ mv /usr/local/node_exporter-0.17.0.linux-amd64/ /usr/local/node_exporter |
启动node_exporter
cd /usr/local/node_exporter ./node_exporter &
|-----|------------------------------------------------| | 1 2 | cd /usr/local/node_exporter ./node_exporter & |
Nginx配置如下:
server { listen 19100; server_name 你的远程主机IP; location / { proxy_pass http://localhost:9100/; auth_basic "Prometheus"; auth_basic_user_file /usr/local/nginx/conf/401htpasswd; } }
|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 10 | server { listen 19100; server_name 你的远程主机IP; location / { proxy_pass http://localhost:9100/; auth_basic "Prometheus"; auth_basic_user_file /usr/local/nginx/conf/401htpasswd; } } |
401密钥的生成参考上一篇文章:https://blog.whsir.com/post-4241.html
至此远程服务器配置完成,此时暴露在外的端口为19100,访问http://IP:19100出现401登陆认证!
公司内网Prometheus配置
vi /usr/local/prometheus/prometheus.yml
|---|-----------------------------------------| | 1 | vi /usr/local/prometheus/prometheus.yml |
在Prometheus配置文件下面添加以下内容,username是远程服务器认证账号,password为加密密码,此处IP为远程服务器的IP地址,不需要加http。
- job_name: server static_configs: - targets: ['IP:19100'] labels: instance: name basic_auth: username: whsir password: blog.whsir.com
|-----------------|------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 | - job_name: server static_configs: - targets: ['IP:19100'] labels: instance: name basic_auth: username: whsir password: blog.whsir.com |
配置完成后记得重启Prometheus,访问内网Prometheus地址,在Targets中可以看到State显示UP成功,如果你账号密码配置错误,则Error会显示401认证失败(server returned HTTP status 401 Unauthorized)。