更改Prometheus节点导出器在systemd插入单元中侦听的地址

时间:2018-07-28 08:11:04

标签: debian systemd prometheus

我有一个此嵌入式单元:

# /etc/systemd/system/prometheus-node-exporter.service.d/override.conf
[Service]
Environment=ARGS=--web.listen-address=localhost:9101

相对于Debian软件包prometheus-node-exporterstretch-backports版本)中的该单元:

# /lib/systemd/system/prometheus-node-exporter.service
[Unit]
Description=Prometheus exporter for machine metrics
Documentation=https://github.com/prometheus/node_exporter

[Service]
Restart=always
User=prometheus
EnvironmentFile=/etc/default/prometheus-node-exporter
ExecStart=/usr/bin/prometheus-node-exporter $ARGS
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

/etc/default/prometheus-node-exporter设置ARGS="",即应用节点导出器的默认端口9100。该插件旨在将其更改为9101,并让服务仅在localhost上侦听。

systemctl start prometheus-node-exporter之后,服务在:::9100tcp6)上侦听。但是,如果我在单元文件中将EnvironmentFile注释掉,它会按照我的意愿在127.0.0.1:9101tcp)上侦听。因此,似乎该单元中的EnvironmentFile在插入单元中的优先级高于Environment

在选择ARGS的值时,为什么插入项不会覆盖单位?我缺少什么,可以使用自定义插入单元更改默认的监听地址吗?

1 个答案:

答案 0 :(得分:2)

来自man systemd.exec

  

EnvironmentFile = ...              这些文件中的设置将覆盖使用Environment =进行的设置。如果从这些文件中两次设置了相同的变量,则   文件将是              按指定顺序读取,以后的设置将覆盖以前的设置。

因此,您需要指定一个EnvironmentFile来覆盖单位文件中的设置:

# /etc/systemd/system/prometheus-node-exporter.service.d/override.conf
[Service]
EnvironmentFile=/etc/prometheus.conf

和实际配置:

# cat /etc/prometheus.conf
ARGS=--web.listen-address=localhost:9101