如何在Ubuntu 16.04上将Prometheus 1.x升级到Prometheus 2.0

介绍

Prometheus是一个开源的监控系统,可以从您的服务中收集指标。 Prometheus2.0带来了许多改变和改进,例如新的时间序列数据库,更好的资源使用,警报的新配置格式以及更好的Alertmanager发现。

在本教程中,您将升级现有的Prometheus 1.x安装到Prometheus 2.0。 Prometheus 2.0中的新时间序列数据库(称为tsdb )与Prometheus 1.x不兼容,这意味着您无法使用Prometheus 2从Prometheus 1.x实例读取数据。为了解决这个限制,将Prometheus 1.x配置为只读数据存储以使您的旧数据可用。

Prometheus 2使用一种新的警报规则格式,因此您可以将现有警报规则更新为新格式,并使用Alertmanager。

最后,您将使用Web UI来确保Prometheus按预期工作。

本教程仅涵盖最重要的更改。 在升级到最新版本之前,您应该阅读宣布Prometheus 2.0 ,以确保您不受任何其他更改的影响。

先决条件

要学习本教程,您需要:

  • 使用Ubuntu 16.04教程遵循初始服务器安装程序设置了一台Ubuntu 16.04服务器,其中包括sudo非root用户和防火墙。
  • Prometheus 1.x安装在您的服务器上,包括Prometheus Web UI。 您可以通过运行prometheus -version命令找出您的Prometheus版本。 输出包含您的Prometheus版本以及构建信息。

本教程假设您的Prometheus安装有以下几点:

  • 你已经创建了一个prometheus用户。
  • 您已经创建了保存Prometheus配置文件的目录/etc/prometheus
  • 您已经创建了保存Prometheus数据的目录/var/lib/prometheus
  • prometheuspromtool可执行文件位于/usr/local/bin
  • 您已将Prometheus配置为作为prometheus的systemd服务运行。

第1步 - 将Prometheus升级到1.8.2

为了使用Prometheus 2.0访问您的旧数据,您需要将当前的Prometheus安装升级到版本1.8.2 ,然后使用remote_read功能将Prometheus 2.0设置为从旧版本读取。

使用prometheus -version命令,查看当前的Prometheus版本。 输出包含版本和构建信息。 如果您已经运行版本1.8.2跳过此步骤。

prometheus -version
prometheus -version outputprometheus, version 1.7.1 (branch: master, revision: 3afb3fffa3a29c3de865e1172fb740442e9d0133)
  build user:       root@0aa1b7fc430d
  build date:       20170612-11:44:05
  go version:       go1.8.3

在你走得更远之前,停止Prometheus,以便可以替换它的文件:

sudo systemctl stop prometheus

您可以在项目的GitHub发布页面上找到Prometheus 1.8.2以及校验和。 您需要一个名为prometheus-1.8.2.linux-amd64.tar.gz的文件。 使用以下curl命令,将Prometheus归档文件和校验和下载到您的主目录:

cd ~
curl -LO https://github.com/prometheus/prometheus/releases/download/v1.8.2/prometheus-1.8.2.linux-amd64.tar.gz
curl -LO https://github.com/prometheus/prometheus/releases/download/v1.8.2/sha256sums.txt

为确保您拥有真正的非损坏归档文件,请使用sha256sum命令为归档生成校验和,并将其与sha256sums.txt文件进行比较。

sha256sum -c sha256sums.txt 2>&1 | grep OK
Checksums checkprometheus-1.8.2.linux-amd64.tar.gz: OK

如果在输出中看不到OK ,请删除下载的存档并重新执行上述步骤以再次下载。

现在,解压档案。

tar xvf prometheus-1.8.2.linux-amd64.tar.gz

prometheuspromtool可执行文件复制到/usr/local/bin目录。

sudo cp prometheus-1.8.2.linux-amd64/prometheus /usr/local/bin
sudo cp prometheus-1.8.2.linux-amd64/promtool /usr/local/bin

将文件的用户和组所有权设置为prometheus用户。

sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool

最后,启动Prometheus以确保其正常工作。

sudo systemctl start prometheus

最后,检查服务的状态。

sudo systemctl status prometheus

您将看到以下输出:

Prometheus service status● prometheus.service - Prometheus
   Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2018-01-01 21:44:52 UTC; 2s ago
 Main PID: 1646 (prometheus)
    Tasks: 6
   Memory: 17.7M
      CPU: 333ms
   CGroup: /system.slice/prometheus.service
           └─1646 /usr/local/bin/prometheus -config.file /etc/prometheus/prometheus.yml -storage.local.path /var/lib/prometheus/
...

如果服务状态未active ,请按照屏幕上的日志并重新执行上述步骤以解决问题,然后再继续本教程。

验证Prometheus版本以确保您运行的是1.8.2版本。

prometheus -version
prometheus -version outputprometheus, version 1.8.2 (branch: HEAD, revision: 5211b96d4d1291c3dd1a569f711d3b301b635ecb)
  build user:       root@1412e937e4ad
  build date:       20171104-16:09:14
  go version:       go1.9.2

如果您没有看到version 1.8.2请确保您已下载正确的文件version 1.8.2节中的步骤。

最后,删除您下载的文件,因为您不再需要它们。

rm -rf prometheus-1.8.2.linux-amd64.tar.gz prometheus-1.8.2.linux-amd64

接下来,您将重新配置现有安装,以便在安装Prometheus 2.0时不会影响Prometheus 2.0。

第2步 - 将Prometheus 1.8.2配置为单独服务

我们希望保留Prometheus 1.8.2以便我们可以访问旧数据,但是我们需要确保我们的旧安装在安装Prometheus 2时不会干扰Prometheus 2。 为此,我们将在所有Prometheus相关目录和可执行文件的名称后加1 例如, prometheus可执行文件将成为prometheus1 我们还会更新服务定义并将其设置为在不同的端口上运行。

在继续之前,停止Prometheus,以便您可以重命名文件和目录。

sudo systemctl stop prometheus

/usr/local/bin目录中,您会发现两个Prometheus可执行文件 - prometheuspromtool 将它们分别重命名为prometheus1promtool1

sudo mv /usr/local/bin/prometheus /usr/local/bin/prometheus1
sudo mv /usr/local/bin/promtool /usr/local/bin/promtool1

Prometheus有两个相关的目录: /etc/prometheus用于存储配置文件, /var/lib/prometheus用于存储数据。 重命名这些目录。

sudo mv /etc/prometheus /etc/prometheus1
sudo mv /var/lib/prometheus /var/lib/prometheus1

我们将Prometheus 1.8.2作为只读数据存储区运行,因此我们不需要它从出口商收集任何数据。 为了确保这一点,我们将使用以下truncate命令从配置文件中删除所有内容。 删除文件的内容之前,请创建该文件的备份,以便稍后用于配置Prometheus 2.0。

sudo cp /etc/prometheus1/prometheus.yml /etc/prometheus1/prometheus.yml.bak

然后用truncate清空配置文件的内容。

sudo truncate -s 0 /etc/prometheus1/prometheus.yml

接下来,将服务文件从prometheus重命名为prometheus1

sudo mv /etc/systemd/system/prometheus.service /etc/systemd/system/prometheus1.service

在文本编辑器中打开Prometheus服务文件。

sudo nano /etc/systemd/system/prometheus1.service

您将在9090的默认端口上运行Prometheus 2.0,因此更改端口Prometheus 1.8.2监听端口9089 用以下配置替换ExecStart指令:

ExecStart - /etc/systemd/system/prometheus.service
...
ExecStart=/usr/local/bin/prometheus1 \
    -config.file /etc/prometheus1/prometheus.yml \
    -storage.local.path /var/lib/prometheus1/ \
    -web.listen-address ":9089"
...

保存该文件并关闭文本编辑器。 重新加载systemd以应用更改。

sudo systemctl daemon-reload

启动prometheus1服务。

sudo systemctl start prometheus1

为确保它按预期工作,请检查服务的状态。

sudo systemctl status prometheus1

和以前一样,输出包含有关过程的信息,例如PID,状态等等:

Service status output● prometheus1.service - Prometheus
   Loaded: loaded (/etc/systemd/system/prometheus1.service; disabled; vendor preset: enabled)
   Active: active (running) since Mon 2018-01-01 21:46:42 UTC; 3s ago
 Main PID: 1718 (prometheus1)
    Tasks: 6
   Memory: 35.7M
      CPU: 223ms
   CGroup: /system.slice/prometheus1.service
           └─1718 /usr/local/bin/prometheus1 -config.file /etc/prometheus1/prometheus.yml -storage.local.path /var/lib/prometheus1/
...

如果服务状态未active ,请按照屏幕上的日志并重新执行上述步骤以解决问题,然后再继续本教程。

启用该服务以确保它在系统引导时启动。

sudo systemctl enable prometheus1

此时Prometheus 1.8.2不会刮去任何出口商。 这将确保数据的一致性,一旦我们设置Prometheus 2.0,它将使用当前安装作为旧数据的只读数据存储。 下一步,我们将安装Prometheus 2.0并使用Prometheus 1.8.2来访问我们的旧数据。

第3步 - 配置Prometheus2.0

在这一步中,我们将配置Prometheus 2.0来刮取出口商,并使用Prometheus 1.8.2作为只读数据存储,以便我们可以访问我们现有的数据。

在继续本教程之前,请按照教程中第1步和2 2。

安装Prometheus后,创建一个新的配置文件。 配置文件格式没有改变,因此您可以将Prometheus 1.x配置文件与Prometheus 2一起使用。将您在前一步骤中创建的现有Prometheus配置的备份复制到/etc/prometheus/目录中。

sudo cp /etc/prometheus1/prometheus.yml.bak /etc/prometheus/prometheus.yml

将新创建的配置文件的用户和组所有权设置为Prometheus用户。

sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml

您对此文件所做的唯一更改是告诉Prometheus 2.0将Prometheus 1.8.2用作只读数据存储,以便您可以访问旧数据。 在文本编辑器中打开配置文件。

sudo nano /etc/prometheus/prometheus.yml

在配置文件的末尾,添加从远程Prometheus实例读取的remote_read指令。 告诉它从localhst:9089读取localhst:9089 ,你的Prometheus 1.8.2实例:

Prometheus配置文件 - /etc/prometheus/prometheus.yml
...

remote_read:
    - url: http://localhost:9089/api/v1/read

完成后,保存文件并关闭文本编辑器。

在第一次运行Prometheus 2.0之前,我们将更新警报规则并配置Alertmanager与Prometheus配合使用。 如果您不使用警报规则或Alertmanager,请跳过下一步。

第4步 - 配置警报(可选)

Prometheus 1.x警报规则是使用自定义语法定义的。 从版本2.0起,您使用YAML定义警报规则。 为了promtool迁移,Prometheus的promtool命令可以将旧规则文件转换为新格式。 如果您不使用警报规则,则可以跳过此步骤。

首先,将您拥有的所有规则从/etc/prometheus1目录复制到/etc/prometheus目录。

sudo cp /etc/prometheus1/*.rules /etc/prometheus/

另外,通过运行以下命令确保您具有promtool版本2.0:

promtool --version

输出包含promtool版本和构建信息。

promtool --versionpromtool, version 2.0.0 (branch: HEAD, revision: 0a74f98628a0463dddc90528220c94de5032d1a0)
  build user:       root@615b82cb36b6
  build date:       20171108-07:11:59
  go version:       go1.9.2

如果版本不是2.0,请确保将promtool可执行文件复制到正确的位置。

现在,导航到/etc/prometheus目录。

cd /etc/prometheus

对目录中的每个.rules文件运行以下promtool命令:

sudo promtool update rules file-name.rules

这会从提供的文件生成一个名为file-name .rules.yml文件的新文件。 如果您在屏幕上看到任何错误消息,请在继续教程之前按照屏幕上的日志解决问题。

确保在由promtool创建的文件上正确设置用户和组的所有权。

sudo chown prometheus:prometheus file-name.rules

最后,更新Prometheus配置文件以使用新创建的规则文件,而不是旧规则文件。 在编辑器中打开配置文件。

sudo nano /etc/prometheus/prometheus.yml

.ymlPostfix附加到rule_files指令下的每个条目,如下所示:

...
rule_files:
  - alert1.rules.yml
  - alert2.rules.yml
...

保存文件并退出编辑器。

现在删除旧的警报规则文件,因为它们不再需要。

sudo rm alert1.rules alert2.rules

接下来,让我们配置Prometheus来发现Alertmanager。 -alertmanager.url标志不再存在。 相反,Prometheus 2.0引入了Alertmanager服务发现功能,该功能带来了许多新功能,并与Kubernetes等服务更好地集成。 如果您不使用Alertmanager,请跳过此步骤的其余部分。

再次打开编辑器中的prometheus.yml文件:

sudo nano /etc/prometheus/prometheus.yml

以下alerting指令指示Prometheus使用在Droplet端口上运行的:9093 您可以在文件的任何位置添加以下内容:

/etc/prometheus/prometheus.yml
global:
...

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - alertmanager:9093

rule_files:
...

保存该文件并关闭文本编辑器。

Prometheus现在可以使用警报规则并与Alertmanager通信,我们已经准备好第一次运行它。

第5步 - 运行Prometheus 2.0

为了能够将Prometheus 2.0作为服务运行,我们需要创建一个服务文件。 我们可以从我们用于Prometheus 1.8.2的服务文件开始,因为除了ExecStart命令外,它大部分是相同的。

通过复制现有的服务文件创建一个新的服务文件:

sudo cp /etc/systemd/system/prometheus1.service /etc/systemd/system/prometheus.service

在您的编辑器中打开新建的服务文件:

sudo nano /etc/systemd/system/prometheus.service

Prometheus2.0在旗帜系统中带来了一些重要的变化,包括:

  • 现在标志使用双短划线( -- )而不是单短划线作为前缀。
  • 所有-storage.local-storage.remote标志已被删除并替换为--storage.tsdb标志。
  • -alertmanager.url已被移除并替换为Alertmanager服务发现,这在前面的步骤中已有介绍。

ExecStart指令替换为ExecStart指令:

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

--config.file指令指示Prometheus在/etc/prometheus目录中使用prometheus.yml文件。 我们将使用--storage.tsdb.path代替--storage.tsdb.path 另外,我们添加了两个--web. 标志,所以我们可以访问内置的Web模板。

完成后,保存文件并关闭文本编辑器。

最后,重新加载systemd,以便您可以使用新创建的服务。

sudo systemctl daemon-reload

然后开始Prometheus:

sudo systemctl start prometheus

检查服务的状态以确保其按预期工作。

sudo systemctl status prometheus
Prometheus service status● prometheus.service - Prometheus
    Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
    Active: active (running) since Mon 2018-01-01 20:15:09 UTC; 1h 20min ago
  Main PID: 1947 (prometheus)
    Tasks: 7
    Memory: 54.3M
      CPU: 15.626s
    CGroup: /system.slice/prometheus.service
            └─1947 /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/
...

如果服务状态未active ,请按照屏幕上的日志并重新执行上述步骤以解决问题,然后再继续本教程。

现在您知道该服务可以正常工作,请在启动系统时启动它:

sudo systemctl enable prometheus

您可以通过在浏览器中导航到http:// your_server_ip来访问Prometheus的Web UI,并使用您在安装Prometheus时配置的凭据进行身份验证。 您将在下一步中使用Web UI,以确保Prometheus按预期工作。

第6步 - 测试Prometheus

让我们确保Prometheus2正在按照预期抓取所有出口商,并确保它可以访问先前安装Prometheus的数据。

在Web浏览器中导航到http:// your_server_ip ,以访问Prometheus Web UI。 系统会要求您输入最初安装Prometheus时配置的用户名和密码。

输入凭证后,您会看到“ 图表”页面,您可以在其中执行和可视化查询:

Prometheus图表页面

在执行查询之前,让我们来看看Prometheus的版本和出口商状态。 点击导航栏中的状态链接,然后单击运行时和生成信息按钮。 您将看到包含有关Prometheus服务器信息的页面。

Prometheus运行时间信息

接下来,再次点击状态链接,然后点击目标按钮来检查您的出口商是否按预期运行。 该网页包含有关您的出口商的详细信息,包括它们是否已启动并正在运行。

Prometheus目标

如果您看到任何错误,请确保在继续教程之前按照屏幕上的说明解决问题。

您不会看到您的Prometheus 1.8.2数据源,因为它用作数据存储而不是导出器。 所以让我们确保我们可以访问旧数据和新数据。 点击图表按钮。

在“ 表达式”字段中,键入node_memory_MemAvailable/1024/1024以兆字节为单位获取服务器的可用内存。 点击执行按钮。

您会看到屏幕上显示的结果:

Prometheus图 - 查询

点击Graph选项卡可以随时查看可用内存。 在图表中,您应该看到以前的数据,在Prometheus暂停工作后,会看到最新的数据。

Prometheus查询可视化

如果您没有看到旧数据,请通过检查其服务的状态确保Prometheus 1.8.2已启动,并且您已将Prometheus 2.0配置为将其用作远程数据库。

您已验证Prometheus正在正常工作并报告数据。 现在让我们看看如何在Prometheus 1.8.2和旧数据不再使用时移除旧数据。

第7步 - 删除旧数据(可选)

一旦你不需要它,你可能想要移除Prometheus 1.8.2和旧数据。 按照这些步骤清理所有东西。

警告:这是一个不可逆转的操作! 删除旧数据后,除非您备份了它,否则无法恢复。

首先,从Prometheus 2配置文件中删除remote_read指令。 在您的编辑器中打开Prometheus 2.0配置文件:

sudo nano /etc/prometheus/prometheus.yml

找到并删除应位于文件末尾的remote_read指令:

remote_read:
    - url: http://localhost:9089/api/v1/read

保存该文件并关闭文本编辑器。 重新启动Prometheus以应用更改。

sudo systemctl restart prometheus

确保服务正常运行:

sudo systemctl status prometheus
Prometheus service status● prometheus.service - Prometheus
   Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2018-01-01 20:15:09 UTC; 1h 20min ago
 Main PID: 1947 (prometheus)
    Tasks: 7
   Memory: 54.3M
      CPU: 15.626s
   CGroup: /system.slice/prometheus.service
           └─1947 /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/
...

如果服务状态未active ,请按照屏幕上的日志并重新执行上述步骤以解决问题,然后再继续本教程。

接下来,禁用并删除prometheus1服务,然后清理所有Prometheus 1.8.2相关的目录和文件。

禁用该服务以确保它不会自动启动:

sudo systemctl disable prometheus1

然后停止服务:

sudo systemctl stop prometheus1

没有输出表明操作已成功完成。

现在删除prometheus1服务文件:

sudo rm /etc/systemd/system/prometheus1.service

最后,删除剩余的文件,因为它们不再需要。 首先,删除位于/usr/local/bin目录中的prometheus1promtool1可执行文件。

sudo rm /usr/local/bin/prometheus1 /usr/local/bin/promtool1

然后删除用于存储数据和配置的/etc/prometheus1/var/lib/prometheus1目录。

sudo rm -r /etc/prometheus1 /var/lib/prometheus1

Prometheus 1.8.2现在已从您的系统中删除,您的旧数据已消失。

结论

在本教程中,您将Prometheus 1.x升级到Prometheus 2.0,更新所有规则文件,并配置Prometheus以发现Alertmanager(如果它存在)。

通过阅读官方宣布Prometheus 2.0的帖子和项目的更新日志,了解Prometheus 2.0包含的所有更改的更多信息。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏