上下文:我已经在空的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
...
答案 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