本文重在 Grafana + Prometheus 探针 方案的部署流程,介绍和更多使用请到:探针 – 承飞之咎 (vfly2.com)
若无单独说明,按照文章代码块中命令的顺序,一条一条执行,即可实现目标。
适用系统:Debian 系发行版,包括 Ubuntu ,其他发行版按流程稍改命令一般也可。完成部署预计时间:15 分钟
文章里的一键脚本仅适用于 amd64 系统
本指南中的步骤是为非 root 用户编写的。需要提升权限的命令以 sudo
为前缀。
Prometheus 和 Node Exporter 可以从 GitHub 下载预编译的二进制文件,本文流程就是使用的二进制文件。
它们的 GitHub 页面也提供了有关如何从源代码构建 Prometheus 或将其作为 Docker 容器运行的说明。
复制一键式安装
为了更快的部署,我准备了脚本,实际上就是把下面前 3 节的内容放在一起罢了。
如果不想使用脚本,或者希望了解安装过程,跳过本节即可,从「下载并安装 Prometheus」开始。
如果使用下面两个脚本安装 Prometheus 和 Node Exporter,那么之后从「配置 Prometheus 监控客户端节点」开始看。
复制一键安装 Prometheus:(bash-script/install-prometheus.sh at main · AhFeil/bash-script (github.com))
wget -qO- 'https://raw.githubusercontent.com/AhFeil/bash-script/main/install-prometheus.sh' | sudo bash
若运行结束后,出现 active (running) ,则安装成功。
通过 http://ip_addr:9090
访问 Prometheus Web 界面和仪表板。将 ip_addr
替换为监控服务器的地址。
在客户端只给 监控服务器IP 开放 9100 端口,记得修改监控服务器IP:
sudo ufw allow from 监控服务器IP to any port 9100 comment 'node_exporter'
复制一键安装 Node Exporter:(bash-script/install-node_exporter.sh at main · AhFeil/bash-script (github.com))
wget -qO- 'https://raw.githubusercontent.com/AhFeil/bash-script/main/install-node_exporter.sh' | sudo bash
若运行结束后,出现 active (running) ,则安装成功。
更新的话重新运行一遍就可以
下载并安装 Prometheus
下载地址:Download | Prometheus ,复制最新LTS版本的下载地址。
下面脚本自动获取最新版本,并下载安装。一键复制,粘贴到终端执行即可。
# 获取 Prometheus 最新版本
github_project="prometheus/prometheus"
tag=$(wget -qO- -t1 -T2 "https://api.github.com/repos/${github_project}/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
# echo ${tag}
# tag2=${tag#*v}
# 下载 Prometheus 最新版本并解压
wget https://github.com/prometheus/prometheus/releases/download/${tag}/prometheus-${tag#*v}.linux-amd64.tar.gz && \
tar xvfz prometheus-*.tar.gz && \
rm prometheus-*.tar.gz && cd prometheus-*.linux-amd64
# 将 Prometheus 可执行文件放入通用的系统目录下
sudo mv prometheus promtool /usr/local/bin/
# /etc/prometheus 放Prometheus配置文件。 /var/lib/prometheus 存应用程序数据
sudo mkdir -p /etc/prometheus /var/lib/prometheus && \
sudo mv prometheus.yml /etc/prometheus/prometheus.yml
sudo mv consoles/ console_libraries/ /etc/prometheus/
# 清理
cd .. && rm -r prometheus-*.linux-amd64
- 将
prometheus
和promtool
目录移动到/usr/local/bin/
目录。这使得所有用户都可以访问 Prometheus。 prometheus.yml
是配置文件consoles
和console_libraries
目录包含创建自定义控制台所需的资源。此功能更为高级,本文未介绍。但是,这些文件也应移至etc/prometheus
目录,以备需要时使用。
使用以下命令验证 Prometheus 是否已成功安装:
prometheus --version
创建一个系统用户 prometheus
sudo useradd -rs /bin/false prometheus
所有权分配
sudo chown -R prometheus: /etc/prometheus /var/lib/prometheus
将 Prometheus 配置为服务
使用 systemd
守护进程,它能实现程序的后台运行、开机自启、崩溃重启等。
创建 prometheus.service
文件:
sudo vim /etc/systemd/system/prometheus.service
复制进去
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
Restart=on-failure
RestartSec=5s
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 \
--web.listen-address=0.0.0.0:9090 \
--web.enable-lifecycle \
--log.level=info
[Install]
WantedBy=multi-user.target
说明:
ExecStart
:就是在终端时开启程序的命令,只不过要用绝对路径。config.file
将 Prometheus 配置文件的位置为/etc/prometheus/prometheus.yml
。storage.tsdb.path
告诉 Prometheus 将程序数据存储在/var/lib/prometheus/
中。web.listen-address
设置为0.0.0.0:9090
,允许 Prometheus 侦听所有网络接口上的连接。web.enable-lifecycle
选项允许用户在不重新启动Prometheus的情况下重新加载配置文件。
重新加载 systemctl
守护进程。
sudo systemctl daemon-reload
设置开机自启,并立即启动运行
sudo systemctl enable --now prometheus
查看状态
sudo systemctl status prometheus
sudo systemctl start prometheus
如果 prometheus
服务无法正常启动,请运行命令 journalctl -u prometheus -f --no-pager
并检查输出是否有错误。
通过 http://ip_addr:9090
访问 Prometheus Web 界面和仪表板。将 ip_addr
替换为监控服务器的地址。
进入网页后,由于 Prometheus 使用的是默认配置文件,因此还没显示太多信息。
默认的 prometheus.yml
文件包含用于抓取本地主机的指令。到【Status】-【Targets】可以看见所有目标。 目前应该只有本地 Prometheus 一个目标。
在客户端安装 Node Exporter 并配置为服务
在客户端上安装 Node Exporter ,再将客户端添加到 prometheus.yml
中服务器列表中就能监控。其统计信息收集可在端口 9100
上获得。该端口可通过互联网访问,任何在其他地方运行 Prometheus 的人都可以收集它们。
因此,使用防火墙限制仅监控服务器可以访问:
sudo ufw allow from 监控服务器IP to any port 9100 comment 'node_exporter'
下载地址:Download | Node Exporter ,复制最新LTS版本的下载地址。
下面脚本自动获取最新版本,并下载安装。一键复制,粘贴到终端执行即可。
# 获取 Prometheus 最新版本
github_project="prometheus/node_exporter"
tag=$(wget -qO- -t1 -T2 "https://api.github.com/repos/${github_project}/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
echo ${tag}
echo ${tag#*v}
wget https://github.com/prometheus/node_exporter/releases/download/${tag}/node_exporter-${tag#*v}.linux-amd64.tar.gz && \
tar xvfz node_exporter-*.tar.gz && \
rm node_exporter-*.tar.gz
sudo mv node_exporter-*.linux-amd64/node_exporter /usr/local/bin
rm -r node_exporter-*.linux-amd64*
将 Node Exporter 作为服务运行会更方便。首先创建一个 node_exporter
用户。
sudo useradd -rs /bin/false node_exporter
创建一个服务文件 node_exporter.service
供 systemctl
使用。
sudo vim /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
sudo systemctl status node_exporter
sudo systemctl restart node_exporter
如果前面没设置只能由监控服务器访问,可以使用浏览器访问客户端节点的 9100
端口,例如 http://ip_addr:9100
。
将显示标题为 Node Exporter
的页面以及读取 Metrics
的链接。单击 Metrics
链接并确认正在收集统计信息。有关各种统计信息的详细说明,请参阅文档。
配置 Prometheus 监控客户端节点
客户端节点现在已准备好进行监控。要将客户端添加到 prometheus.yml
,请按照以下步骤操作:
在运行Prometheus的监控服务器上,打开 prometheus.yml
进行编辑。
sudo vim /etc/prometheus/prometheus.yml
找到 scrape_configs
,里面是作业列表。当前有一个名为 prometheus
的作业。此作业监视端口 9090
上的本地 Prometheus 任务。
在 prometheus
作业下方,添加第二个作业,其 job_name
为 remote_collector
。包括以下信息。
- 设置抓取时间间隔:
scrape_interval: 10s
- 添加要监控的 IP 和 端口号
:9100
,使用逗号分隔每个条目。 - 要启用对本地服务器的监视,请将
localhost:9100
条目添加到列表中,并在本地安装 Node Exporter。
该条目应类似于以下示例。将 remote_addr
替换为客户端的实际IP地址。
...
- job_name: "remote_collector"
scrape_interval: 10s
static_configs:
- targets: ["remote_addr:9100", "remote_addr2:9100"]
立即刷新 Prometheus,
sudo systemctl restart prometheus
使用 Web 浏览器重新访问监控服务器上端口 9090
的 Prometheus Web 门户。选择【Status】-【Targets】。将显示 remote_collector
作业的第二个链接,指向客户端上的端口 9100
。单击链接查看统计数据。
安装 Grafana 服务器
Prometheus 收集的统计信息只能被视为原始数据转储。很难阅读,而且没有太大用处。
Grafana 提供了查看 Prometheus 收集的统计信息的界面。在运行 Prometheus 的同一服务器上安装 Grafana 并将 Prometheus 添加为数据源。
- 安装一些必需的实用程序
sudo apt-get install -y apt-transport-https software-properties-common
- 导入 Grafana GPG 密钥
sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
- 添加 Grafana“稳定版本”存储库。
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
- 安装 Grafana 的开源版本。
sudo apt-get update && sudo apt-get install grafana
要安装 Grafana 企业版,请使用命令
sudo apt-get install grafana-enterprise
。
- 重新加载
systemctl
守护进程。
sudo systemctl daemon-reload
sudo systemctl enable --now grafana-server.service
sudo systemctl status grafana-server
sudo systemctl start grafana-server
关联 Grafana 和 Prometheus
所有系统组件现已安装,但 Grafana 和 Prometheus 尚未关联。剩下的可以使用 Grafana Web 界面完成。
要集成 Grafana 和 Prometheus,请按照以下步骤操作:
- 浏览器访问监控服务器的
3000
端口。例如,输入http://ip_addr:3000
,将ip_addr
替换为实际 IP 地址。 - Grafana 显示登录页面。使用用户名和默认密码 都是
admin
。当出现提示时,将密码更改为更安全的值。 - 成功更改密码后,Grafana 将显示 Grafana 仪表板。
- 要将 Prometheus 添加为数据源,请单击齿轮符号(代表配置),然后选择数据源。
- 在下一个显示中,单击“添加数据源”按钮。
- 选择Prometheus作为数据源。
- 对于本地 Prometheus 源,将 URL 设置为
http://localhost:9090
。大多数其他设置可以保留默认值。
- 对设置满意后,选择屏幕底部的【Save & test】按钮。
- 如果所有设置均正确,Grafana 会确认
Data source is working
。
导入 Grafana 仪表板
可以创建自定义仪表板。然而,Prometheus 已经创建了一个仪表板来支持 Node Exporter,名为 Node Exporter Full
,下面是导入的流程。
要创建自定义仪表板,请单击仪表板按钮,该按钮类似于四个正方形。然后选择+新建仪表板。有关更多信息,请参阅 Grafana 构建仪表板指南。
- 访问 Grafana 仪表板库: https://grafana.com/grafana/dashboards/。输入
Node exporter
作为搜索词。 - 选择
Node Exporter Full
条目。 - 右下角查看 ID 号。该板的 ID 当前为
1860
。 - 返回 Grafana 仪表板。选择由四个正方形组成的仪表板图标,
- 右边【New】-【Import】。
- 然后在 【Import via grafana.com】, 输入上一步中的 ID
1860
。然后选择【Load】。
- 在下一个屏幕确认导入详细信息。选择
Prometheus
作为数据源,然后单击【Import】按钮。
Node Exporter Full
仪表板立即生效。它显示客户端节点的性能指标和状态,包括内存、RAM 和 CPU 详细信息。
原文链接: https://blog.vfly2.com/2023/07/a-simpler-deployment-process-of-the-probe-grafana-prometheus-compared-to-docker/
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 承飞之咎 (blog.vfly2.com) 。
如果你认为我的文章有帮助,欢迎使用 RSS 订阅,也欢迎留言指正。
本文主体内容编译自: How to Install and Configure Prometheus and Grafana on Ubuntu | Linode Docs,感谢 Linode 的文章。