前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ubuntu 16.04上如何使用Alertmanager和Blackbox导出程序监视Web服务器

Ubuntu 16.04上如何使用Alertmanager和Blackbox导出程序监视Web服务器

原创
作者头像
水门
修改2018-08-14 11:55:54
6K0
修改2018-08-14 11:55:54
举报
文章被收录于专栏:云计算教程系列

介绍

Prometheus是一个开源监控系统,可从您的服务中收集指标并将其存储在时间序列数据库中。Alertmanager是一种处理警报的工具,可以对相应的接收器进行重复数据删除,分组,发送警报。它可以处理客户端应用程序(如Prometheus)的警报,并支持许多接收器,包括电子邮件,PagerDutyOpsGenieSlack

Blackbox Exporter通过HTTP,HTTPS,DNS,TCP或ICMP协议探测,返回有关请求的详细指标,包括它是否成功以及接收响应所需的时间。

在本教程中,您将安装和配置Alertmanager和Blackbox Exporter以监控Nginx Web服务器的响应能力。然后,您将配置Alertmanager通过电子邮件和Slack通知您服务器的响应情况。

准备

在本教程中,您将需要:

  • 一个Ubuntu 16.04服务器,包括一个拥有sudo权限的非root用户。
  • 安装Nginx
  • 一个侦听端口8080的Nginx服务器块。
代码语言:txt
复制
-   通过改listen指令来更改端口80~8080。您可以使用域或子域。
  • 安装Prometheus 2.X。
  • 用于发送电子邮件的SMTP服务器。
  • (可选)如果您想通过Slack从Alertmanager接收警报,您需要Slack帐户和工作区。

第1步 - 创建服务用户

出于安全考虑,我们将创建两个新用户帐户blackbox_exporteralertmanager。我们将在整个教程中使用这些帐户来运行Blackbox Exporter和Alertmanager,以及隔离相应核心文件和目录的所有权。这可确保Blackbox Exporter和Alertmanager无法访问和修改他们不拥有的数据。

使用Useradd--no-create-home--shell/bin/false标志创建这些用户,以便这些用户无法登录到服务器:

代码语言:txt
复制
$ sudo useradd --no-create-home --shell /bin/false blackbox_exporter
$ sudo useradd --no-create-home --shell /bin/false alertmanager

创建了用户之后,我们可以下载并配置Blackbox Exporter。

第2步 - 安装Blackbox Exporter

首先,将最新的稳定版Blackbox Exporter下载到您的主目录。您可以在Prometheus下载页面上找到最新的二进制文件及其校验和。

代码语言:txt
复制
$ cd ~
$ curl -LO https://github.com/prometheus/blackbox_exporter/releases/download/v0.12.0/blackbox_exporter-0.12.0.linux-amd64.tar.gz

在解压缩归档文件之前,请使用sha256sum命令验证文件的校验和:

代码语言:txt
复制
$ sha256sum blackbox_exporter-0.12.0.linux-amd64.tar.gz

将此命令的输出与Prometheus下载页面上的校验和进行比较,以确保您的文件是正版且未损坏:

代码语言:txt
复制
c5d8ba7d91101524fa7c3f5e17256d467d44d5e1d243e251fd795e0ab4a83605  blackbox_exporter-0.12.0.linux-amd64.tar.gz

如果校验和不匹配,请删除下载的文件并重复上述步骤以重新下载文件。

当您确定校验和匹配时,请解压缩存档:

代码语言:txt
复制
$ tar xvf blackbox_exporter-0.12.0.linux-amd64.tar.gz

这将创建一个名为blackbox_exporter-0.12.0.linux-amd64的目录,其中包含blackbox_exporter二进制文件,许可证和示例文件。

将二进制文件复制到/usr/local/bin目录。

代码语言:txt
复制
$ sudo mv ./blackbox_exporter-0.12.0.linux-amd64/blackbox_exporter /usr/local/bin

将二进制文件的用户和组所有权设置为blackbox_exporter用户,确保非root用户无法修改或替换该文件:

代码语言:txt
复制
$ sudo chown blackbox_exporter:blackbox_exporter /usr/local/bin/blackbox_exporter

最后,我们将删除存档和解压缩的目录。

代码语言:txt
复制
$ rm -rf ~/blackbox_exporter-0.12.0.linux-amd64.tar.gz ~/blackbox_exporter-0.12.0.linux-amd64

接下来,让我们配置Blackbox Exporter以通过HTTP协议探测端点。

第3步 - 配置和运行Blackbox Exporter

让我们创建一个配置文件,定义Blackbox Exporter应该如何检查端点。我们还将创建一个systemd单元文件,以便我们可以使用管理Blackbox的服务systemd

我们将在下一步中指定要在Prometheus配置中进行探测的端点列表。

首先,为Blackbox Exporter的配置创建目录。根据Linux惯例,配置文件放在/etc目录中,因此我们也将使用此目录来保存Blackbox Exporter配置文件:

代码语言:txt
复制
$ sudo mkdir /etc/blackbox_exporter

然后将此目录的所有权设置为您在步骤1中创建的blackbox_exporter用户:

代码语言:txt
复制
$ sudo chown blackbox_exporter:blackbox_exporter /etc/blackbox_exporter

在新创建的目录中,创建blackbox.yml将保存Blackbox Exporter配置设置的文件:

代码语言:txt
复制
$ sudo nano /etc/blackbox_exporter/blackbox.yml

我们将配置Blackbox Exporter以使用默认http探针来探测端点。Probers定义Blackbox Exporter如何检查端点是否正在运行。所述http探测器通过发送HTTP请求到端点并测试其响应代码检查端点。您可以选择要用于探测的HTTP方法,以及接受哪些状态代码作为成功响应。其他流行的探测器包括TCP协议探测器,icmp探测器,通过ICMP协议探测的dns探测器和用于检查DNS条目的探测器。

在本教程中,我们将使用httpprober来探测通过HTTP GET方法在端口8080上运行的端点。默认情况下,探测器假定2xx范围内的有效状态代码有效,因此我们不需要提供有效状态代码列表。

我们将配置5秒的超时时间,这意味着Blackbox Exporter会在报告失败之前等待5秒钟的响应。根据您的应用程序类型,选择符合您需求的任何值。

注意: Blackbox Exporter的配置文件使用YAML格式,其禁止使用制表符,严格要求使用两个空格进行缩进。如果配置文件格式不正确,Blackbox Exporter将无法启动。

将以下配置添加到文件中:

/etc/blackbox_exporter/blackbox.yml

代码语言:txt
复制
modules:
  http_2xx:
    prober: http
    timeout: 5s
    http:      
      valid_status_codes: []
      method: GET

您可以在Blackbox Exporter文档中找到有关配置选项的更多信息。

保存文件并退出文本编辑器。

在创建服务文件之前,请将配置文件上的用户和组所有权设置为在步骤1中创建的blackbox_exporter用户。

代码语言:txt
复制
$ sudo chown blackbox_exporter:blackbox_exporter /etc/blackbox_exporter/blackbox.yml

现在创建服务文件,以便您可以使用systemd方式管理Blackbox Exporter :

代码语言:txt
复制
$ sudo nano /etc/systemd/system/blackbox_exporter.service

将以下内容添加到文件中:

/etc/systemd/system/blackbox_exporter.service

代码语言:txt
复制
[Unit]
Description=Blackbox Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=blackbox_exporter
Group=blackbox_exporter
Type=simple
ExecStart=/usr/local/bin/blackbox_exporter --config.file /etc/blackbox_exporter/blackbox.yml

[Install]
WantedBy=multi-user.target

此服务文件告诉systemd将Blackbox Exporter作为blackbox_exporter用户运行,配置文件位于/etc/blackbox_exporter/blackbox.yml

保存文件并退出文本编辑器。

最后,重新加载systemd以使用新创建的服务文件:

代码语言:txt
复制
$ sudo systemctl daemon-reload

现在启动Blackbox Exporter:

代码语言:txt
复制
$ sudo systemctl start blackbox_exporter

通过检查服务的状态确保它成功启动:

代码语言:txt
复制
$ sudo systemctl status blackbox_exporter

输出包含有关Blackbox Exporter进程的信息,包括主进程标识符(PID),内存使用,日志等。

代码语言:txt
复制
 blackbox_exporter.service - Blackbox Exporter
   Loaded: loaded (/etc/systemd/system/blackbox_exporter.service; disabled; vendor preset: enabled)
   Active: active (running) since Thu 2018-04-05 17:48:58 UTC; 5s ago
 Main PID: 5869 (blackbox_export)
    Tasks: 4
   Memory: 968.0K
      CPU: 9ms
   CGroup: /system.slice/blackbox_exporter.service
           └─5869 /usr/local/bin/blackbox_exporter --config.file /etc/blackbox_exporter/blackbox.yml

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

最后,启用该服务以确保在服务器重新启动时启动Blackbox Exporter:

代码语言:txt
复制
$ sudo systemctl enable blackbox_exporter

现在Blackbox Exporter已经完全配置并运行,我们可以配置Prometheus来收集有关探测请求到我们的端点的指标,这样我们就可以根据这些指标创建警报,并使用Alertmanager设置警报通知。

第4步 - 配置Prometheus抓取 Blackbox Exporter

如步骤3中所述,要探测的端点列表位于Prometheus配置文件中,作为Blackbox Exporter targets指令的一部分。在此步骤中,您将配置Prometheus以使用Blackbox Exporter来抓取8080在先决条件教程中配置的端口上运行的Nginx Web服务器。

在编辑器中打开Prometheus配置文件:

代码语言:txt
复制
$ sudo nano /etc/prometheus/prometheus.yml

此时,它应如下所示:

/etc/prometheus/prometheus.yml

代码语言:txt
复制
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'node_exporter'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9100']

在该scrape_configs指令的最后,添加以下条目,该条目将告诉Prometheus使用http_2xx在步骤3中配置的Blackbox Exporter模块探测在本地端口8080上运行的端点。

/etc/prometheus/prometheus.yml

代码语言:txt
复制
...
  - job_name: 'blackbox'
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets:
        - http://localhost:8080
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: localhost:9115

默认情况下,Blackbox Exporter在端口9115上运行,并在/probe端点上提供度量标准。

所述scrape_configs用于导出黑箱配置不同于用于其它出口的配置。最显着的区别是targets指令,它列出了被探测的端点而不是导出器的地址。使用适当的address标签集指定导出器的地址。

您将在Prometheus文档中找到有关relabel指令的详细说明。

您的Prometheus配置文件现在将如下所示:

Prometheus config file - /etc/prometheus/prometheus.yml

代码语言:txt
复制
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'node_exporter'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9100']
  - job_name: 'blackbox'
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets:
        - http://localhost:8080
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: localhost:9115

重新启动Prometheus以使更改生效:

代码语言:txt
复制
$ sudo systemctl restart prometheus

通过检查Prometheus服务状态,确保它按预期运行:

代码语言:txt
复制
$ sudo systemctl status prometheus

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

此时,您已将Prometheus配置为从Blackbox Exporter中删除指标。为了从Alertmanager接收警报,您将在下一步中创建一组适当的Prometheus警报规则。

第5步 - 创建警报规则

Prometheus警报分为两部分。第一部分由Prometheus服务器处理,包括根据警报规则生成警报并将其发送到Alertmanager。第二部分由Alertmanager完成,它根据配置管理收到的警报并将它们发送到适当的接收器。

在此步骤中,您将在创建警报规则时了解警报规则的基本语法,以检查您的服务器是否可用。

首先,创建一个文件来存储警报。在/etc/prometheus目录上创建一个名为alert.rules.yml的空文件:

代码语言:txt
复制
$ sudo touch /etc/prometheus/alert.rules.yml

由于此文件是Prometheus配置的一部分,因此请确保将所有权设置为您在先决条件Prometheus教程中创建的prometheus用户:

代码语言:txt
复制
$ sudo chown prometheus:prometheus /etc/prometheus/alert.rules.yml

有了alert文件,我们需要通过在配置文件中添加适当的指令来通知Prometheus。

在编辑器中打开Prometheus配置文件:

代码语言:txt
复制
$ sudo nano /etc/prometheus/prometheus.yml

rule_files指令之后添加global指令,以便在Prometheus启动时使Prometheus加载新创建的警报文件。

/etc/prometheus/prometheus.yml

代码语言:txt
复制
global:
  scrape_interval: 15s

rule_files:
  - alert.rules.yml

scrape_configs:
...

保存文件并退出文本编辑器。

现在让我们构建一个规则来检查端点是否已关闭。

为了制定警报规则,您将使用Blackbox Exporter的probe_success指标,如果端点为up则返回1,如果不是则返回0

probe_success指标包含两个标签:端点的地址的label标签,和用于收集的度量出口商的名称的job标签。

在编辑器中打开警报规则文件:

代码语言:txt
复制
$ sudo nano /etc/prometheus/alert.rules.yml

与Prometheus配置文件一样,警报规则文件使用YAML格式,该格式严格禁止选项卡,并且需要两个空格来缩进。如果文件格式不正确,Prometheus将无法启动。

首先,我们将创建一个警报规则,EndpointDown用于检查probe_sucess度量标准是否等于0,持续时间为10秒。这可确保如果端点在10秒内不可用,Prometheus将不会发送任何警报。根据您的应用类型和需求,您可以自由选择所需的持续时间。

此外,我们将附加两个表示严重严重性的标签和警报摘要,以便我们轻松管理和过滤警报。

如果要在警报的标签和注释中包含更多详细信息,可以使用{{ \$labels.metrics_label}}语法来获取标签的值。我们将使用它来包含指标的instance标签中的端点地址。

将以下规则添加到警报文件中:

/etc/prometheus/alert.rules.yml

代码语言:txt
复制
groups:
- name: alert.rules
  rules:
  - alert: EndpointDown
    expr: probe_success == 0
    for: 10s
    labels:
      severity: "critical"
    annotations:
      summary: "Endpoint {{ $labels.instance }} down"

保存文件并退出文本编辑器。

在重新启动Prometheus之前,请使用以下promtool命令确保警报文件在语法上正确:

代码语言:txt
复制
$ sudo promtool check rules /etc/prometheus/alert.rules.yml

输出包含文件中找到的规则数,以及有关规则在语法上是否正确的信息:

代码语言:txt
复制
Checking /etc/prometheus/alert.rules.yml
  SUCCESS: 1 rules found

最后,重新启动Prometheus以应用更改:

代码语言:txt
复制
$ sudo systemctl restart prometheus

使用以下status命令验证服务是否正在运行:

代码语言:txt
复制
$ sudo systemctl status prometheus

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

有了警报规则,我们可以下载并安装Alertmanager。

第6步 - 下载Alertmanager

Blackbox Exporter已配置,我们的警报规则已到位。让我们下载并安装Alertmanager来处理Prometheus收到的警报。

您可以在Prometheus下载页面上找到最新的二进制文件及其校验和。将当前稳定版本的Alertmanager下载并解压缩到您的主目录:

代码语言:txt
复制
$ cd \~
$ curl -LO https://github.com/prometheus/alertmanager/releases/download/v0.14.0/alertmanager-0.14.0.linux-amd64.tar.gz

在解压缩归档文件之前,请使用以下sha256sum命令验证文件的校验和:

代码语言:txt
复制
$ sha256sum alertmanager-0.14.0.linux-amd64.tar.gz

将此命令的输出与Prometheus下载页面上的校验和进行比较,以确保您的文件既是正版文件又未损坏。

代码语言:txt
复制
caddbbbe3ef8545c6cefb32f9a11207ae18dcc788e8d0fb19659d88c58d14b37  alertmanager-0.14.0.linux-amd64.tar.gz

如果校验和不匹配,请删除下载的文件并重复上述步骤以重新下载文件。

确认下载后,请解压缩存档:

代码语言:txt
复制
$ tar xvf alertmanager-0.14.0.linux-amd64.tar.gz

这将创建一个名为alertmanager-0.14.0.linux-amd64包含两个二进制文件(alertmanager和amtool),许可证和示例配置文件的目录。

将两个二进制文件移动到/usr/local/bin目录:

代码语言:txt
复制
$ sudo mv alertmanager-0.14.0.linux-amd64/alertmanager /usr/local/bin
$ sudo mv alertmanager-0.14.0.linux-amd64/amtool /usr/local/bin

将二进制文件的用户和组所有权设置为您在步骤1中创建的alertmanager用户:

代码语言:txt
复制
$ sudo chown alertmanager:alertmanager /usr/local/bin/alertmanager
$ sudo chown alertmanager:alertmanager /usr/local/bin/amtool

从主目录中删除剩余文件:

代码语言:txt
复制
$ rm -rf alertmanager-0.14.0.linux-amd64 alertmanager-0.14.0.linux-amd64.tar.gz

既然所需文件位于适当的位置,我们可以将Alertmanager配置为通过电子邮件发送警报通知。

第7步 - 配置Alertmanager通过电子邮件发送警报

在此步骤中,您将创建存储Alertmanager的数据和配置设置的目录和文件,然后将Alertmanager配置为通过电子邮件发送警报。

遵循标准的Linux约定,我们将创建一个目录/etc来存储Alertmanager的配置文件。

代码语言:txt
复制
$ sudo mkdir /etc/alertmanager

将新创建的目录的用户和组所有权设置为alertmanager用户:

代码语言:txt
复制
$ sudo chown alertmanager:alertmanager /etc/alertmanager

我们将配置文件存储在文件alertmanager.yml中,因此创建此文件并在编辑器中打开它:

代码语言:txt
复制
$ sudo nano /etc/alertmanager/alertmanager.yml

与其他与Prometheus相关的文件一样,此文件也使用YAML格式,因此请确保使用两个空格而不是制表符进行缩进。

我们将Alertmanager配置为使用Postfix发送电子邮件。我们需要使用该smtp_smarthost指令提供SMTP服务器的地址,以及我们希望使用该smtp_from指令发送电子邮件的地址。由于Postfix与Alertmanager在同一台服务器上运行,因此服务器的地址为localhost:25。我们将使用alertmanager用户发送电子邮件。

默认情况下,Postfix没有配置TLS,因此我们需要告诉Alertmanager允许使用该smtp_require_tls指令的非TLS SMTP服务器。

将SMTP配置放在global指令下,因为它用于指定在所有其他配置上下文中有效的参数。这包括我们的SMTP配置,还可以包含用于各种集成的API令牌:

Alertmanager配置文件第1部分 - /etc/alertmanager/alertmanager.yml

代码语言:txt
复制
global:

smtp_smarthost: 'localhost:25'

smtp_from: 'alertmanager\@your_domain'

smtp_require_tls: false

注意:确保替换your_domin为您的域名。

此时,Alertmanager知道如何发送电子邮件,但我们需要定义如何使用该route指令处理传入警报。该route指令适用于每个传入警报,并定义属性,例如Alertmanager将如何对警报进行分组,谁是默认收件人,或者Alertmanager在发送初始警报之前将等待多长时间。

要对警报进行分组,请使用group_by子指令,该子指令采用内联数组标签(例如['label-1','label-2'])。分组可确保将包含相同标签的警报分组并在同一批次中发送。

每个route指令都有一个使用receiver子指令定义的接收器。如果要添加多个接收器,则需要在同一指令下定义多个接收器或route使用routes子指令嵌套多个指令。在本教程中,我们将介绍配置Slack警报的第一种方法。

在这种情况下,我们将仅按照Blackbox的instance标签和severity标签进行分组,确保我们将在一封邮件中为我们的端点发送多个警报,其严重程度很高。

添加以下group_by指令:

Alertmanager config file part 2 - /etc/alertmanager/alertmanager.yml

代码语言:txt
复制
...
route:
  group_by: ['instance', 'alert']

接下来,我们将定义间隔,例如Alertmanager在发送初始警报和新警报之前将等待多长时间。

使用group_wait子指令,我们将定义Alertmanager在发送初始警报之前将等待多长时间。在此期间,Alertmanager将等待Prometheus发送其他警报(如果存在),以便它们可以在同一批次中发送。由于我们只有一个警报,我们将选择30秒内的任意值。

接下来,使用group_interval间隔,我们将定义如果同一组中有新警报的话,Alertmanager在发送下一批警报之前将等待多长时间。您可以根据需要自由选择任何值,但我们会将其设置为每5分钟一次。

我们将配置的最后一个时间间隔是repeat_interval,它定义了如果警报尚未解决,Alertmanager在发送通知之前将等待多长时间。您可以选择适合您需求的任何值,但我们将使用3小时的任意值。

最后,使用receiver子指令定义谁将接收警报通知。我们将使用一个名为team-1的接收器,稍后我们将对其进行定义。

修改route指令,使其如下所示:

Alertmanager config file part 2 - /etc/alertmanager/alertmanager.yml

代码语言:txt
复制
route:
  group_by: ['instance', 'severity']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 3h
  receiver: team-1

如果您只想匹配并发送有关特定警报的通知,则可以使用matchmatch_re子指令按标签的值过滤掉警报。该match指令代表平等匹配,其中match_re子指令表示通过正则表达式匹配。

现在我们将配置team-1接收器,以便您可以接收警报通知。在该receivers指令下,您可以定义包含名称和适当配置子指令的接收器。可用接收器列表和如何配置它们的说明可作为Alertmanager文档的一部分提供。

为了配置team-1电子邮件接收器,我们将在email_configs指令下使用子receivers指令:

Alertmanager config file part 3 - /etc/alertmanager/alertmanager.yml

代码语言:txt
复制
receivers:
  - name: 'team-1'
    email_configs:
      - to: 'your-email-address'

此时,您已将Alertmanager配置为将警报通知发送到您的电子邮件地址。您的配置文件应如下所示:

Alertmanager配置文件- /etc/alertmanager/alertmanager.yml

代码语言:txt
复制
global:
  smtp_smarthost: 'localhost:25'
  smtp_from: 'alertmanager@example.com'
  smtp_require_tls: false

route:
  group_by: ['instance', 'severity']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 3h
  receiver: team-1

receivers:
  - name: 'team-1'
    email_configs:
      - to: 'your-email-address'

在下一步中,我们将配置Alertmanager以向Slack通道发送警报。如果您不想配置Slack,可以直接跳到步骤10,我们将创建服务文件并配置Prometheus以使用Alertmanager。

第8步 - 配置Alertmanager通过Slack发送警报

在继续此步骤之前,请确保您已创建Slack帐户并且您具有可用的Slack工作区。

要向Slack发送警报,请先创建一个Incoming Webhook

将浏览器指向https://workspace-name.slack.com/services/new/incoming-webhook/。您将获得包含有关传入Webhooks的详细信息的页面以及您需要选择要向其发送警报的频道的下拉列表。

Slack Incoming Webhook
Slack Incoming Webhook

选择频道后,单击“ 添加传入WebHooks”集成按钮。

您将看到一个新页面,确认已成功创建webhook。复制此页面上显示的 Webhook URL,因为您将使用它来配置Alertmanager的Slack通知。

在编辑器中打开Alertmanager配置文件以配置Slack通知:

代码语言:txt
复制
$ sudo nano /etc/alertmanager/alertmanager.yml

首先,使用创建Slack Incoming Webhook时获得的URL,将slack_api_url子指令添加到global配置部分。

Alertmanager config file part 1 - /etc/alertmanager/alertmanager.yml

代码语言:txt
复制
global:
  smtp_smarthost: 'localhost:25'
  smtp_from: 'alertmanager@example.com'
  smtp_require_tls: false

  slack_api_url: 'your_slack_webhook_url'

有两种方法可以向多个接收器发送警报:

  1. 在同一条目下包含多个接收器配置。
  2. 创建多个接收器条目并嵌套多个route指令。

在team-1接收器中,添加一个新的子指令,slack_configs,并提供应接收警报的通道的名称。在这种情况下,我们将使用general频道:

Alertmanager config file part 2 - /etc/alertmanager/alertmanager.yml

代码语言:txt
复制
receivers:
  - name: 'team-1'
    email_configs:
      - to: 'your-email-address'
    slack_configs:
      - channel: 'general<^>'

您完成的配置文件如下所示:

Alertmanager config file - /etc/alertmanager/alertmanager.yml

代码语言:txt
复制
global:
  smtp_smarthost: 'localhost:25'
  smtp_from: 'alertmanager@example.com'
  smtp_require_tls: false

  slack_api_url: 'your_slack_webhook_url'

route:
  group_by: ['instance', 'severity']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 3h
  receiver: team-1

receivers:
  - name: 'team-1'
    email_configs:
      - to: 'your-email-address'
    slack_configs:
      - channel: 'general'

保存文件并退出编辑器,我们现在准备第一次运行Alertmanager。

第9步 - 运行Alertmanager

我们让Alertmanager启动并运行。我们将首先为Alertmanager创建一个systemd单元文件来管理其服务systemd。然后我们将更新Prometheus以使用Alertmanager。

创建一个新的systemd单元文件并在文本编辑器中打开它:

代码语言:txt
复制
$ sudo nano /etc/systemd/system/alertmanager.service

将以下内容添加到文件中,以将systemd配置为使用Alertmanager用户运行Alertmanager,使用位于/etc/alertmanager/alertmanager.yml和Alertmanager的URL的配置文件,配置为使用服务器的IP地址:

/etc/systemd/system/alertmanager.service

代码语言:txt
复制
[Unit]
Description=Alertmanager
Wants=network-online.target
After=network-online.target

[Service]
User=alertmanager
Group=alertmanager
Type=simple
WorkingDirectory=/etc/alertmanager/
ExecStart=/usr/local/bin/alertmanager --config.file=/etc/alertmanager/alertmanager.yml --web.external-url http://your_server_ip:9093

[Install]
WantedBy=multi-user.target

这将作为alertmanager用户运行Alertmanager 。它还告诉Alertmanager将URLhttp://your_server_ip:9093用于其WebUI,其中9093是Alertmanager的默认端口。一定要包含协议(http://)。

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

接下来,我们需要通过将相应的Alertmanager服务发现目录添加到Prometheus配置文件来告诉Prometheus有关Alertmanager的信息。默认情况下,Alertmanager在端口9093上运行,因为它与Prometheus位于同一服务器上,我们将使用地址localhost:9093

打开Prometheus配置文件:

代码语言:txt
复制
$ sudo nano /etc/prometheus/prometheus.yml

rule_files指令之后,添加以下alerting指令:

Prometheus configuration file - /etc/prometheus/prometheus.ymlPrometheus configuration file - /etc/prometheus/prometheus.yml ... rule_files:alert.rules.ymlalerting: alertmanagers:static_configs: - targets: - localhost:9093 ...完成后,保存文件并关闭文本编辑器。

为了能够从您收到的警报中跟踪URL,您需要-web.external-url在启动Prometheus时使用该标志告诉Prometheus服务器的IP地址或域名。

打开systemd的单元文件:

代码语言:txt
复制
$ sudo nano /etc/systemd/system/prometheus.service

将现有ExecStart行替换为以下行:

代码语言:txt
复制
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.external-url http://your_server_ip

您的新Prometheus单元文件将如下所示:

Prometheus service file - /etc/systemd/system/prometheus.service

代码语言:txt
复制
[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 \ 
    --web.external-url http://your_server_ip

[Install]
WantedBy=multi-user.target

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

重新加载systemd并重新启动Prometheus以应用更改:

代码语言:txt
复制
$ sudo systemctl daemon-reload
$ sudo systemctl restart prometheus

通过检查服务的状态,确保Prometheus按预期工作:

代码语言:txt
复制
$ sudo systemctl status prometheus

如果服务的状态不是active (running),请按照屏幕上的日志并重新执行上述步骤以解决问题,然后再继续学习本教程。最后,启动Alertmanager:

代码语言:txt
复制
$ sudo systemctl start alertmanager

检查服务的状态以确保Alertmanager按预期工作:

代码语言:txt
复制
$ sudo systemctl status alertmanager

如果服务的状态不是active (running),请按照屏幕上的消息进行操作,并在继续本教程之前回溯前面的步骤以解决问题。

最后,启用该服务以确保在系统引导时Alertmanager将启动:

代码语言:txt
复制
$ sudo systemctl enable alertmanager

要访问Alertmanager的Web UI,请允许9093端口的流量通过防火墙:

代码语言:txt
复制
$ sudo ufw allow 9093/tcp

Alertmanager现在配置为通过电子邮件和Slack发送警报通知。

第10步 - 测试Alertmanager

让我们确保Alertmanger正常工作并发送电子邮件和Slack通知。我们将通过删除您创建的Nginx服务器块来禁用端点:

代码语言:txt
复制
$ sudo rm /etc/nginx/sites-enabled/your_domain

重新加载Nginx以应用更改:

代码语言:txt
复制
$ sudo systemctl reload nginx

如果要确认它实际已禁用,您可以将Web浏览器指向服务器的地址。您应该看到一条消息,指示该站点不再可访问。根据group_wait间隔(在我们的情况下为30秒),您应该在30秒后收到电子邮件和Slack通知。

如果没收到,使用以下status命令检查服务的状态,并按照屏幕上的日志查找问题的原因:

代码语言:txt
复制
$ sudo systemctl status alertmanager
$ sudo systemctl status prometheus

您还可以通过打开http://your_server_ip/alerts的方式从Prometheus Web UI检查警报的状态。您将被要求输入用户名和密码。通过单击警报名称,您将看到状态,警报规则和关联的标签:

Prometheus UI - alerts
Prometheus UI - alerts

验证Alertmanager工作后,通过重新创建从sites-available目录到sites-enabled目录的符号链接来启用端点:

代码语言:txt
复制
$ sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled

再次重新加载Nginx以应用更改:

代码语言:txt
复制
$ sudo systemctl reload nginx

在下一步中,我们将了解如何使用Alertmanager的命令行界面。

第11步 - 使用CLI管理警报

Alertmanager附带命令行工具amtool,可让您监控,管理和消除警报。

该amtool工具要求您在--alertmanager.url每次执行命令时使用该标志提供Alertmanager的URL。为了在amtool不提供URL的情况下使用,我们将首先创建一个配置文件。

配置文件的默认位置是$HOME/.config/amtool/config.yml,这使得配置仅适用于当前用户,并且/etc/amtool/config.yml使配置可用于服务器上的每个用户。

在本教程中,我们将使用该\$HOME/.config/amtool/config.yml文件。

首先,创建目录。-p标志告诉mkdir在此过程中创建任何必要的父目录:

代码语言:txt
复制
$ mkdir -p $HOME/.config/amtool

创建config.yml文件并在文本编辑器中打开它:

代码语言:txt
复制
$ nano $HOME/.config/amtool/config.yml

添加以下行告诉amtool使用Alertmanager和http://localhost:9093URL

代码语言:txt
复制
alertmanager.url: http://localhost:9093

保存文件并退出文本编辑器。

现在,我们将看一下使用amtool命令行工具可以做些什么。

使用该amtool alert query命令,您可以列出已发送到Alertmanager的所有警报:

代码语言:txt
复制
$ amtool alert query

输出显示警报的名称,警报首次出现的时间以及配置时提供的警报摘要:

代码语言:txt
复制
Alertname     Starts At                Summary
EndpointDown  2018-04-03 08:48:47 UTC  Endpoint http://localhost:8080 down

您还可以使用适当的匹配器按标签过滤警报。匹配器包含标签名称,适当的操作(例如,=用于完全匹配,=~用于部分匹配),以及标签的值。

如果要列出附加了严重性标签的所有警报,请使用alert query命令中的severity=critical匹配器:

代码语言:txt
复制
$ amtool alert query severity=critical

与之前一样,输出包含警报的名称,警报首次出现的时间以及警报的摘要。

代码语言:txt
复制
Alertname     Starts At                Summary
EndpointDown  2018-04-03 08:48:47 UTC  Endpoint http://localhost:8080 down

您可以使用正则表达式将标签与=~运算符匹配。例如,要列出http://localhost不依赖于端口端点的所有警报,可以使用instance=~http://localhost.*匹配器:

代码语言:txt
复制
$ amtool alert query instance=~http://localhost.*

由于您只有一个警报和端点,因此输出与前一个示例中的输出相同。

要查看Alertmanager配置,请使用以下amtool config命令:

代码语言:txt
复制
$ amtool config

输出将包含/etc/alertmanager/alertmanager.yml文件的内容。

现在让我们看一下如何使用静音警报amtool。

通过静音警报,您可以在给定时间内根据匹配器将警报静音。在此期间,您不会收到任何有关沉默警报的电子邮件或Slack通知。

amtool silence add命令将匹配器作为参数,并基于匹配器创建新的沉默警报

要定义警报的过期时间,使用--expires标志和期望的持续时间,如1h或RFC3339格式(--expire-on标志+到期的时间)。例如,格式2018-10-04T07:50:00+00:00代表2018年10月4日上午7点50分。

如果未提供--expires--expires-on标志,警报将被静音1小时

要将http://localhost:8080实例的所有警报静音3小时,您将使用以下命令:

代码语言:txt
复制
$ amtool silence add instance=http://localhost:8080 --expires 3h

输出包含静音的标识号,因此请确保在需要时记下它,以防您想要消除静音:

代码语言:txt
复制
4e89b15b-0814-41d3-8b74-16c513611732

如果要在创建静默时需要提供其他信息,例如作者和注释,请使用--author--comment标志:

代码语言:txt
复制
amtool silence add severity=critical --expires 3h --author "Sammy The Shark" --comment "Investigating the progress"

输出包含silence的ID:

代码语言:txt
复制
12b7b9e1-f48a-4ceb-bd85-65ac882ceed1

该命令amtool silence query将显示所有未过期的静音列表:

代码语言:txt
复制
$ amtool silence query

输出包含静默ID,匹配器列表,到期时间戳,作者和注释:

代码语言:txt
复制
ID                                    Matchers                        Ends At                  Created By       Comment
12b7b9e1-f48a-4ceb-bd85-65ac882ceed1  severity=critical               2018-04-04 08:02:58 UTC  Sammy The Shark  Investigating in the progress
4e89b15b-0814-41d3-8b74-16c513611732  instance=http://localhost:8080  2018-04-04 08:14:21 UTC  sammy

alert query命令类似,您可以使用标签匹配器按创建时附加的标签过滤输出:

代码语言:txt
复制
$ amtool silence query instance=http://localhost:8080

与之前一样,输出将包括ID号和警报的详细信息:

代码语言:txt
复制
ID                                    Matchers                        Ends At                  Created By  Comment
4e89b15b-0814-41d3-8b74-16c513611732  instance=http://localhost:8080  2018-04-04 08:14:21 UTC  sammy

最后,要使silence失效,请使用amtool silence expire和您想要过期的silence ID:

代码语言:txt
复制
$ amtool silence expire 12b7b9e1-f48a-4ceb-bd85-65ac882ceed1
$ amtool silence expire 4e89b15b-0814-41d3-8b74-16c513611732

没有输出表示命令执行成功。如果您看到错误信息,请确保提供了正确的静音ID。

结论

在本教程中,您将Blackbox Exporter和Alertmanager配置为与Prometheus一起使用。


参考文献:《How To Use Alertmanager And Blackbox Exporter To Monitor Your Web Server On Ubuntu 16.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第1步 - 创建服务用户
  • 第2步 - 安装Blackbox Exporter
  • 第3步 - 配置和运行Blackbox Exporter
  • 第4步 - 配置Prometheus抓取 Blackbox Exporter
  • 第5步 - 创建警报规则
  • 第6步 - 下载Alertmanager
  • 第7步 - 配置Alertmanager通过电子邮件发送警报
  • 第8步 - 配置Alertmanager通过Slack发送警报
  • 第9步 - 运行Alertmanager
  • 第10步 - 测试Alertmanager
  • 第11步 - 使用CLI管理警报
  • 结论
相关产品与服务
Prometheus 监控服务
Prometheus 监控服务(TencentCloud Managed Service for Prometheus,TMP)是基于开源 Prometheus 构建的高可用、全托管的服务,与腾讯云容器服务(TKE)高度集成,兼容开源生态丰富多样的应用组件,结合腾讯云可观测平台-告警管理和 Prometheus Alertmanager 能力,为您提供免搭建的高效运维能力,减少开发及运维成本。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档