代码之家  ›  专栏  ›  技术社区  ›  Drux

更改prometheus节点导出程序在systemd drop-in单元中侦听的地址

  •  2
  • Drux  · 技术社区  · 7 年前

    我有一个这个降落单位:

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

    它与Debian软件包中的这个单位相关 prometheus-node-exporter ( stretch-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 服务监听 :::9100 ( tcp6 )但是,如果我发表评论 EnvironmentFile 在它监听的单元文件中 127.0.0.1:9101 ( tcp ,如我所愿。所以看起来好像 环境文件 从单位优先于 Environment 在降落单元。

    为什么在选择 ARGS ?我缺少什么,可以用自定义的插入单元更改默认的侦听地址吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Jürgen Hötzel    7 年前

    man systemd.exec :

    环境文件=… 这些文件中的设置将覆盖使用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