Prometheus 2.0 centos服务无法启动,因为“打开存储失败”,“权限被拒绝”

时间:2017-11-21 18:03:19

标签: linux service permissions prometheus systemctl

上下文:我已经在空的centos VM中添加了一些脚本来安装一些监控工具,包括prometheus 2.0。

问题:一旦安装在非root sudo用户的主目录中,我将我写的prometheus.service复制到“/ etc / systemd / system”,运行sudo systemctl daemon-reload, sudo systemctl enable prometheus.service, sudo systemctl start prometheus.service但是服务失败。

注意:我可以直接使用相同的命令在终端中运行prometheus二进制文件,没有任何问题,但我无法将其作为服务运行。

这是我的.service文件:

[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network-online.target

[Service]
User=centos
ExecStart=/home/centos/prometheus/prometheus --config.file="/home/centos/prometheus/prometheus.yml" --storage.tsdb.path="/home/centos/prometheus/data"

[Install]
WantedBy=multi-user.target

以下是一些日志:

...
Nov 21 12:41:55 localhost.localdomain prometheus[1554]: level=info ts=2017-11-21T17:41:55.114757834Z caller=main.go:314 msg="Starting TSDB"
Nov 21 12:41:55 localhost.localdomain prometheus[1554]: level=error ts=2017-11-21T17:41:55.114819195Z caller=main.go:323 msg="Opening storage failed" err="mkdir \": permission denied"
Nov 21 12:41:55 localhost.localdomain systemd[1]: prometheus.service: control process exited, code=exited status=1
Nov 21 12:41:55 localhost.localdomain systemd[1]: Failed to start Prometheus Server.
...

我是linux服务管理的新手,我花了很多时间在网上阅读,但我不确定权限如何适用于服务,以及为什么它无法创建它需要创建的目录。

我试过了:

  • 将“SELINUX =强制执行”更改为“SELINUX = permissive”

  • 将prometheus目录的权限更改为777

  • ...

3 个答案:

答案 0 :(得分:2)

您还必须设置--web.console.templates--web.console.libraries。您可以从exctracted archive中复制这些目录。例如:

sudo cp -R ~/prometheus-2.0.0.linux-amd64/consoles /etc/prometheus
sudo cp -R ~/prometheus-2.0.0.linux-amd64/console_libraries /etc/prometheus

工作服务示例(为您改变路径):

[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

[Install]
WantedBy=multi-user.target

P.S。灵感来自建议here

答案 1 :(得分:0)

Prometheus的数据目录应该对Prometheus应用程序用户具有写权限。如果从容器中运行它并从外部安装数据目录,则可以在原始文件夹上设置777权限。

答案 2 :(得分:0)

如果SELinux停止启动,请始终参考journalctl -xe来查看SELinux警报。建议采取一些措施。

我在CentOS 8上使用SELinux设置了普罗米修斯而没有问题。我不同意建议禁用SELinux的人。

供参考Redhat有一个很好的视频供您观看:

https://www.youtube.com/watch?v=_WOKRaM-HI4&t=1464s

这是我的prometheus.service文件。

[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network-online.target

[Service]
User=prometheus
#Restart=on-failure

#Change this line if you download the
#Prometheus on different path user
ExecStart=/home/prometheus/prometheus-2.22.0.linux-amd64/prometheus \
  --config.file=/home/prometheus/prometheus-2.22.0.linux-amd64/prometheus.yml \
  --storage.tsdb.path=/home/prometheus/prometheus-2.22.0.linux-amd64/data \
  --web.listen-address="0.0.0.0:9091"

[Install]
WantedBy=multi-user.target