容器部署和非容器部署(直接在物理机或虚拟机上安装)Prometheus 和 Grafana 各有优缺点,主要区别如下:
docker run
或 docker-compose
文件即可部署,且不依赖底层系统的配置,便于快速部署和迁移。特性 | 容器部署 | 非容器部署 |
---|---|---|
部署便利性 | 快速、自动化 | 手动配置和管理 |
隔离性 | 强(独立容器) | 弱 |
升级与回滚 | 简单切换镜像 | 手动备份和重装 |
资源利用率 | 高(轻量级虚拟化) | 较低(与系统环境共享资源) |
故障恢复 | 高,可移植性强 | 低,恢复复杂 |
调试和监控 | 容易整合到容器监控方案 | 需单独配置 |
安全性 | 高,支持隔离和权限配置 | 较低,直接暴露在宿主机 |
总体来说,如果您的环境支持容器化,且希望有更好的资源隔离、易于管理和迁移,建议使用容器部署 Prometheus 和 Grafana。如果因为网络限制无法使用容器镜像,可以选择非容器方式部署。
从图片中可以看到你尝试访问 http://192.168.3.128:9090
,但遇到了“连接被拒绝”的问题。这里的端口 9090
通常是 Prometheus 的默认端口,因此问题很可能与 Prometheus 服务的配置或防火墙有关。以下是一些排查方法来解决这个问题:
首先需要确认 Prometheus 服务是否正常启动:
sudo systemctl status prometheus
如果显示为 active (running)
,说明服务正常运行。
如果没有运行,可以尝试重新启动:
sudo systemctl start prometheus
如果服务未能启动或有错误,请查看日志获取更多信息:
sudo journalctl -u prometheus -xe
确认 Prometheus 是否在 9090
端口监听:
sudo netstat -tuln | grep 9090
0.0.0.0:9090
或 ::9090
,说明 Prometheus 正在监听该端口。确保 9090
端口未被防火墙阻挡。如果防火墙阻挡了该端口,那么外部设备将无法访问。
检查防火墙状态:
sudo firewall-cmd --state
打开端口 9090
:
sudo firewall-cmd --add-port=9090/tcp --permanent
sudo firewall-cmd --reload
这些命令将确保 9090
端口对外开放,并且在防火墙重启后仍然有效。
Prometheus 的配置文件通常位于 /etc/prometheus/prometheus.yml
,确保配置文件中没有错误,特别是关注监听地址的配置项:
默认情况下,Prometheus 应该监听所有网络接口,如下所示:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
确保监听的地址配置正确,比如如果需要 Prometheus 可以被远程访问,可以在启动参数中添加 --web.listen-address=0.0.0.0:9090
来监听所有网络接口:
prometheus --config.file=/etc/prometheus/prometheus.yml --web.listen-address=0.0.0.0:9090
确保您访问的地址 192.168.3.128
是运行 Prometheus 服务的主机 IP 地址。
确保客户端和 Prometheus 服务器之间的网络连接正常,可以通过 ping
命令来验证网络连通性。
ping 192.168.3.128
在服务器上,也可以使用 curl
命令检查本地是否可以访问:
curl http://localhost:9090
如果本地可以访问,但外部不行,则很可能是防火墙或监听地址配置有问题。
如果对配置文件做了修改,或者发现服务没有启动,可以重新启动 Prometheus:
sudo systemctl restart prometheus
查看 Prometheus 的日志,寻找可能导致无法访问的问题:
sudo journalctl -u prometheus -f
查看日志可以帮助你找到可能的错误,比如配置文件语法错误、端口冲突、权限问题等。
如果您的 AlmaLinux 上启用了 SELinux,有可能也会阻止外部连接。你可以暂时禁用 SELinux 来测试是否是这个原因:
sudo setenforce 0
如果问题解决,可以进一步考虑修改 SELinux 的策略,使其允许对 9090
端口的访问,而不是直接禁用。
http://192.168.3.128:9090
或者 http://localhost:9090
,并检查 Grafana 是否能连接到 Prometheus。根据你提供的情况,连接被拒绝的问题可能是由于以下原因:
9090
端口。0.0.0.0
上监听,导致外部无法访问。请按上述步骤逐一排查,确保 Prometheus 服务正常运行、端口开放,并且网络设置正确,应该可以解决连接问题。
从你提供的日志信息来看,Prometheus 服务未能成功启动,错误提示为 /usr/local/bin/prometheus
无法被执行,并返回了状态码 203
,这通常表明存在路径或权限问题。以下是一些可能的原因和相应的解决方法:
二进制文件不存在或路径错误:
/usr/local/bin/prometheus
无法执行,这通常表明 Prometheus 的二进制文件要么不存在,要么路径不正确。文件权限问题:
二进制文件不兼容:
首先,确认 Prometheus 二进制文件是否存在于 /usr/local/bin
路径下:
ls -l /usr/local/bin/prometheus
确保 Prometheus 二进制文件具有可执行权限:
sudo chmod +x /usr/local/bin/prometheus
chmod +x
赋予文件可执行权限。确认 Prometheus 的正确安装路径。如果 Prometheus 不在 /usr/local/bin
下,你需要修改服务的配置文件。
通常 Prometheus 的安装路径为 /opt/prometheus
或用户指定的位置。你可以通过以下步骤来解决这个问题:
找到 Prometheus 的二进制文件位置,如果你下载后放置到了 /opt/prometheus
,你可以使用以下命令来查找文件:
sudo find / -name prometheus
更新 Systemd 服务文件:
如果二进制文件的位置与 /usr/local/bin
不一致,你需要修改 prometheus.service
文件。通常这个文件在 /etc/systemd/system/prometheus.service
或 /usr/lib/systemd/system/prometheus.service
中。
修改 ExecStart
字段,使其指向正确的 Prometheus 可执行文件路径。例如,如果你的文件位于 /opt/prometheus/prometheus
,则服务文件可以改为:
[Unit]
Description=Prometheus Server
[Service]
ExecStart=/opt/prometheus/prometheus --config.file=/etc/prometheus/prometheus.yml
Restart=always
User=prometheus
Group=prometheus
[Install]
WantedBy=multi-user.target
保存文件后重新加载服务配置:
sudo systemctl daemon-reload
sudo systemctl restart prometheus
Prometheus 启动时需要加载配置文件 /etc/prometheus/prometheus.yml
,如果该文件不存在或者格式错误,也会导致启动失败。
确保文件存在,并且可以读取:
ls -l /etc/prometheus/prometheus.yml
如果文件不存在或者格式有误,可以根据 Prometheus 文档找到标准的配置模板来修复。
确认你下载的 Prometheus 二进制文件与系统架构兼容:
下载 Prometheus:
wget https://github.com/prometheus/prometheus/releases/download/v2.32.1/prometheus-2.32.1.linux-amd64.tar.gz
tar xvfz prometheus-2.32.1.linux-amd64.tar.gz
cd prometheus-2.32.1.linux-amd64
sudo cp prometheus /usr/local/bin/
如果你的系统启用了 SELinux,它也可能阻止 Prometheus 的运行。可以临时禁用 SELinux 来验证是否是该问题:
sudo setenforce 0
如果成功运行,则可以进一步配置 SELinux 策略,允许 Prometheus 正常运行,而不需要完全禁用 SELinux。
按上述步骤逐一排查,应该可以解决 Prometheus 启动失败的问题。
您无法访问 Grafana,可能是由于插件问题或 Grafana 服务未正确启动。请检查以下步骤:
检查 Grafana 服务状态
运行以下命令查看服务状态:
systemctl status grafana-server
确保服务正在运行,且没有错误日志。如果有错误日志,请分享日志内容。
查看 Grafana 日志
如果服务状态提示运行正常,但仍无法访问,请查看 Grafana 日志。日志通常位于 /var/log/grafana/grafana.log
,可以用以下命令查看最近的日志信息:
tail -f /var/log/grafana/grafana.log
查找是否有报错提示,比如权限问题、网络问题或配置错误。
检查防火墙设置
如果 Grafana 启动正常,但在浏览器中仍然无法访问,请检查服务器防火墙设置是否允许 Grafana 默认端口(3000):
firewall-cmd --list-all
如果需要开放端口,请运行以下命令:
firewall-cmd --add-port=3000/tcp --permanent
firewall-cmd --reload
确认插件已被删除
如果问题与插件有关,您可以确保插件已成功删除,再重启 Grafana。删除插件后再次运行:
rm -rf /var/lib/grafana/plugins/xychart
systemctl restart grafana-server