Prometheus是一个开源监控系统,可从您的服务中收集指标并将其存储在时间序列数据库中。Alertmanager是一种处理警报的工具,可以对相应的接收器进行重复数据删除,分组,发送警报。它可以处理客户端应用程序(如Prometheus)的警报,并支持许多接收器,包括电子邮件,PagerDuty,OpsGenie和Slack。
Blackbox Exporter通过HTTP,HTTPS,DNS,TCP或ICMP协议探测,返回有关请求的详细指标,包括它是否成功以及接收响应所需的时间。
在本教程中,您将安装和配置Alertmanager和Blackbox Exporter以监控Nginx Web服务器的响应能力。然后,您将配置Alertmanager通过电子邮件和Slack通知您服务器的响应情况。
在本教程中,您将需要:
8080
的Nginx服务器块。- 通过改listen指令来更改端口80~8080。您可以使用域或子域。
出于安全考虑,我们将创建两个新用户帐户blackbox_exporter和alertmanager。我们将在整个教程中使用这些帐户来运行Blackbox Exporter和Alertmanager,以及隔离相应核心文件和目录的所有权。这可确保Blackbox Exporter和Alertmanager无法访问和修改他们不拥有的数据。
使用Useradd
和--no-create-home
和--shell/bin/false
标志创建这些用户,以便这些用户无法登录到服务器:
$ sudo useradd --no-create-home --shell /bin/false blackbox_exporter
$ sudo useradd --no-create-home --shell /bin/false alertmanager
创建了用户之后,我们可以下载并配置Blackbox Exporter。
首先,将最新的稳定版Blackbox Exporter下载到您的主目录。您可以在Prometheus下载页面上找到最新的二进制文件及其校验和。
$ cd ~
$ curl -LO https://github.com/prometheus/blackbox_exporter/releases/download/v0.12.0/blackbox_exporter-0.12.0.linux-amd64.tar.gz
在解压缩归档文件之前,请使用sha256sum命令验证文件的校验和:
$ sha256sum blackbox_exporter-0.12.0.linux-amd64.tar.gz
将此命令的输出与Prometheus下载页面上的校验和进行比较,以确保您的文件是正版且未损坏:
c5d8ba7d91101524fa7c3f5e17256d467d44d5e1d243e251fd795e0ab4a83605 blackbox_exporter-0.12.0.linux-amd64.tar.gz
如果校验和不匹配,请删除下载的文件并重复上述步骤以重新下载文件。
当您确定校验和匹配时,请解压缩存档:
$ tar xvf blackbox_exporter-0.12.0.linux-amd64.tar.gz
这将创建一个名为blackbox_exporter-0.12.0.linux-amd64
的目录,其中包含blackbox_exporter
二进制文件,许可证和示例文件。
将二进制文件复制到/usr/local/bin
目录。
$ sudo mv ./blackbox_exporter-0.12.0.linux-amd64/blackbox_exporter /usr/local/bin
将二进制文件的用户和组所有权设置为blackbox_exporter用户,确保非root用户无法修改或替换该文件:
$ sudo chown blackbox_exporter:blackbox_exporter /usr/local/bin/blackbox_exporter
最后,我们将删除存档和解压缩的目录。
$ rm -rf ~/blackbox_exporter-0.12.0.linux-amd64.tar.gz ~/blackbox_exporter-0.12.0.linux-amd64
接下来,让我们配置Blackbox Exporter以通过HTTP协议探测端点。
让我们创建一个配置文件,定义Blackbox Exporter应该如何检查端点。我们还将创建一个systemd单元文件,以便我们可以使用管理Blackbox的服务systemd
。
我们将在下一步中指定要在Prometheus配置中进行探测的端点列表。
首先,为Blackbox Exporter的配置创建目录。根据Linux惯例,配置文件放在/etc
目录中,因此我们也将使用此目录来保存Blackbox Exporter配置文件:
$ sudo mkdir /etc/blackbox_exporter
然后将此目录的所有权设置为您在步骤1中创建的blackbox_exporter用户:
$ sudo chown blackbox_exporter:blackbox_exporter /etc/blackbox_exporter
在新创建的目录中,创建blackbox.yml
将保存Blackbox Exporter
配置设置的文件:
$ 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
modules:
http_2xx:
prober: http
timeout: 5s
http:
valid_status_codes: []
method: GET
您可以在Blackbox Exporter文档中找到有关配置选项的更多信息。
保存文件并退出文本编辑器。
在创建服务文件之前,请将配置文件上的用户和组所有权设置为在步骤1中创建的blackbox_exporter用户。
$ sudo chown blackbox_exporter:blackbox_exporter /etc/blackbox_exporter/blackbox.yml
现在创建服务文件,以便您可以使用systemd
方式管理Blackbox Exporter :
$ sudo nano /etc/systemd/system/blackbox_exporter.service
将以下内容添加到文件中:
/etc/systemd/system/blackbox_exporter.service
[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以使用新创建的服务文件:
$ sudo systemctl daemon-reload
现在启动Blackbox Exporter:
$ sudo systemctl start blackbox_exporter
通过检查服务的状态确保它成功启动:
$ sudo systemctl status blackbox_exporter
输出包含有关Blackbox Exporter进程的信息,包括主进程标识符(PID),内存使用,日志等。
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:
$ sudo systemctl enable blackbox_exporter
现在Blackbox Exporter已经完全配置并运行,我们可以配置Prometheus来收集有关探测请求到我们的端点的指标,这样我们就可以根据这些指标创建警报,并使用Alertmanager设置警报通知。
如步骤3中所述,要探测的端点列表位于Prometheus配置文件中,作为Blackbox Exporter targets指令的一部分。在此步骤中,您将配置Prometheus以使用Blackbox Exporter来抓取8080在先决条件教程中配置的端口上运行的Nginx Web服务器。
在编辑器中打开Prometheus配置文件:
$ sudo nano /etc/prometheus/prometheus.yml
此时,它应如下所示:
/etc/prometheus/prometheus.yml
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
...
- 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
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以使更改生效:
$ sudo systemctl restart prometheus
通过检查Prometheus服务状态,确保它按预期运行:
$ sudo systemctl status prometheus
如果服务的状态不是active (running)
,请按照屏幕上的日志并重新执行上述步骤以解决问题,然后再继续学习本教程。
此时,您已将Prometheus配置为从Blackbox Exporter中删除指标。为了从Alertmanager接收警报,您将在下一步中创建一组适当的Prometheus警报规则。
Prometheus警报分为两部分。第一部分由Prometheus服务器处理,包括根据警报规则生成警报并将其发送到Alertmanager。第二部分由Alertmanager完成,它根据配置管理收到的警报并将它们发送到适当的接收器。
在此步骤中,您将在创建警报规则时了解警报规则的基本语法,以检查您的服务器是否可用。
首先,创建一个文件来存储警报。在/etc/prometheus
目录上创建一个名为alert.rules.yml
的空文件:
$ sudo touch /etc/prometheus/alert.rules.yml
由于此文件是Prometheus配置的一部分,因此请确保将所有权设置为您在先决条件Prometheus教程中创建的prometheus用户:
$ sudo chown prometheus:prometheus /etc/prometheus/alert.rules.yml
有了alert文件,我们需要通过在配置文件中添加适当的指令来通知Prometheus。
在编辑器中打开Prometheus配置文件:
$ sudo nano /etc/prometheus/prometheus.yml
在rule_files
指令之后添加global
指令,以便在Prometheus启动时使Prometheus加载新创建的警报文件。
/etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
rule_files:
- alert.rules.yml
scrape_configs:
...
保存文件并退出文本编辑器。
现在让我们构建一个规则来检查端点是否已关闭。
为了制定警报规则,您将使用Blackbox Exporter的probe_success
指标,如果端点为up则返回1,如果不是则返回0。
该probe_success
指标包含两个标签:端点的地址的label
标签,和用于收集的度量出口商的名称的job标签。
在编辑器中打开警报规则文件:
$ 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
groups:
- name: alert.rules
rules:
- alert: EndpointDown
expr: probe_success == 0
for: 10s
labels:
severity: "critical"
annotations:
summary: "Endpoint {{ $labels.instance }} down"
保存文件并退出文本编辑器。
在重新启动Prometheus之前,请使用以下promtool
命令确保警报文件在语法上正确:
$ sudo promtool check rules /etc/prometheus/alert.rules.yml
输出包含文件中找到的规则数,以及有关规则在语法上是否正确的信息:
Checking /etc/prometheus/alert.rules.yml
SUCCESS: 1 rules found
最后,重新启动Prometheus以应用更改:
$ sudo systemctl restart prometheus
使用以下status
命令验证服务是否正在运行:
$ sudo systemctl status prometheus
如果服务的状态不是active
,请按照屏幕上的日志并重新执行上述步骤以解决问题,然后再继续学习本教程。
有了警报规则,我们可以下载并安装Alertmanager。
Blackbox Exporter已配置,我们的警报规则已到位。让我们下载并安装Alertmanager来处理Prometheus收到的警报。
您可以在Prometheus下载页面上找到最新的二进制文件及其校验和。将当前稳定版本的Alertmanager下载并解压缩到您的主目录:
$ cd \~
$ curl -LO https://github.com/prometheus/alertmanager/releases/download/v0.14.0/alertmanager-0.14.0.linux-amd64.tar.gz
在解压缩归档文件之前,请使用以下sha256sum
命令验证文件的校验和:
$ sha256sum alertmanager-0.14.0.linux-amd64.tar.gz
将此命令的输出与Prometheus下载页面上的校验和进行比较,以确保您的文件既是正版文件又未损坏。
caddbbbe3ef8545c6cefb32f9a11207ae18dcc788e8d0fb19659d88c58d14b37 alertmanager-0.14.0.linux-amd64.tar.gz
如果校验和不匹配,请删除下载的文件并重复上述步骤以重新下载文件。
确认下载后,请解压缩存档:
$ tar xvf alertmanager-0.14.0.linux-amd64.tar.gz
这将创建一个名为alertmanager-0.14.0.linux-amd64
包含两个二进制文件(alertmanager和amtool),许可证和示例配置文件的目录。
将两个二进制文件移动到/usr/local/bin
目录:
$ 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用户:
$ sudo chown alertmanager:alertmanager /usr/local/bin/alertmanager
$ sudo chown alertmanager:alertmanager /usr/local/bin/amtool
从主目录中删除剩余文件:
$ rm -rf alertmanager-0.14.0.linux-amd64 alertmanager-0.14.0.linux-amd64.tar.gz
既然所需文件位于适当的位置,我们可以将Alertmanager配置为通过电子邮件发送警报通知。
在此步骤中,您将创建存储Alertmanager的数据和配置设置的目录和文件,然后将Alertmanager配置为通过电子邮件发送警报。
遵循标准的Linux约定,我们将创建一个目录/etc
来存储Alertmanager的配置文件。
$ sudo mkdir /etc/alertmanager
将新创建的目录的用户和组所有权设置为alertmanager用户:
$ sudo chown alertmanager:alertmanager /etc/alertmanager
我们将配置文件存储在文件alertmanager.yml
中,因此创建此文件并在编辑器中打开它:
$ 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
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
...
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
route:
group_by: ['instance', 'severity']
group_wait: 30s
group_interval: 5m
repeat_interval: 3h
receiver: team-1
如果您只想匹配并发送有关特定警报的通知,则可以使用match
和match_re
子指令按标签的值过滤掉警报。该match
指令代表平等匹配,其中match_re
子指令表示通过正则表达式匹配。
现在我们将配置team-1
接收器,以便您可以接收警报通知。在该receivers
指令下,您可以定义包含名称和适当配置子指令的接收器。可用接收器列表和如何配置它们的说明可作为Alertmanager文档的一部分提供。
为了配置team-1电子邮件接收器,我们将在email_configs指令下使用子receivers指令:
Alertmanager config file part 3 - /etc/alertmanager/alertmanager.yml
receivers:
- name: 'team-1'
email_configs:
- to: 'your-email-address'
此时,您已将Alertmanager配置为将警报通知发送到您的电子邮件地址。您的配置文件应如下所示:
Alertmanager配置文件- /etc/alertmanager/alertmanager.yml
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。
在继续此步骤之前,请确保您已创建Slack帐户并且您具有可用的Slack工作区。
要向Slack发送警报,请先创建一个Incoming Webhook。
将浏览器指向https://workspace-name.slack.com/services/new/incoming-webhook/
。您将获得包含有关传入Webhooks的详细信息的页面以及您需要选择要向其发送警报的频道的下拉列表。
选择频道后,单击“ 添加传入WebHooks”集成按钮。
您将看到一个新页面,确认已成功创建webhook。复制此页面上显示的 Webhook URL,因为您将使用它来配置Alertmanager的Slack通知。
在编辑器中打开Alertmanager配置文件以配置Slack通知:
$ sudo nano /etc/alertmanager/alertmanager.yml
首先,使用创建Slack Incoming Webhook时获得的URL,将slack_api_url子指令添加到global配置部分。
Alertmanager config file part 1 - /etc/alertmanager/alertmanager.yml
global:
smtp_smarthost: 'localhost:25'
smtp_from: 'alertmanager@example.com'
smtp_require_tls: false
slack_api_url: 'your_slack_webhook_url'
有两种方法可以向多个接收器发送警报:
在team-1接收器中,添加一个新的子指令,slack_configs
,并提供应接收警报的通道的名称。在这种情况下,我们将使用general频道:
Alertmanager config file part 2 - /etc/alertmanager/alertmanager.yml
receivers:
- name: 'team-1'
email_configs:
- to: 'your-email-address'
slack_configs:
- channel: 'general<^>'
您完成的配置文件如下所示:
Alertmanager config file - /etc/alertmanager/alertmanager.yml
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。
我们让Alertmanager启动并运行。我们将首先为Alertmanager创建一个systemd
单元文件来管理其服务systemd。然后我们将更新Prometheus以使用Alertmanager。
创建一个新的systemd单元文件并在文本编辑器中打开它:
$ sudo nano /etc/systemd/system/alertmanager.service
将以下内容添加到文件中,以将systemd配置为使用Alertmanager用户运行Alertmanager,使用位于/etc/alertmanager/alertmanager.yml
和Alertmanager的URL的配置文件,配置为使用服务器的IP地址:
/etc/systemd/system/alertmanager.service
[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配置文件:
$ 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的单元文件:
$ sudo nano /etc/systemd/system/prometheus.service
将现有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 \
--web.external-url http://your_server_ip
您的新Prometheus单元文件将如下所示:
Prometheus service file - /etc/systemd/system/prometheus.service
[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以应用更改:
$ sudo systemctl daemon-reload
$ sudo systemctl restart prometheus
通过检查服务的状态,确保Prometheus按预期工作:
$ sudo systemctl status prometheus
如果服务的状态不是active (running)
,请按照屏幕上的日志并重新执行上述步骤以解决问题,然后再继续学习本教程。最后,启动Alertmanager:
$ sudo systemctl start alertmanager
检查服务的状态以确保Alertmanager按预期工作:
$ sudo systemctl status alertmanager
如果服务的状态不是active (running)
,请按照屏幕上的消息进行操作,并在继续本教程之前回溯前面的步骤以解决问题。
最后,启用该服务以确保在系统引导时Alertmanager将启动:
$ sudo systemctl enable alertmanager
要访问Alertmanager的Web UI,请允许9093
端口的流量通过防火墙:
$ sudo ufw allow 9093/tcp
Alertmanager现在配置为通过电子邮件和Slack发送警报通知。
让我们确保Alertmanger正常工作并发送电子邮件和Slack通知。我们将通过删除您创建的Nginx服务器块来禁用端点:
$ sudo rm /etc/nginx/sites-enabled/your_domain
重新加载Nginx以应用更改:
$ sudo systemctl reload nginx
如果要确认它实际已禁用,您可以将Web浏览器指向服务器的地址。您应该看到一条消息,指示该站点不再可访问。根据group_wait间隔(在我们的情况下为30秒),您应该在30秒后收到电子邮件和Slack通知。
如果没收到,使用以下status命令检查服务的状态,并按照屏幕上的日志查找问题的原因:
$ sudo systemctl status alertmanager
$ sudo systemctl status prometheus
您还可以通过打开http://your_server_ip/alerts
的方式从Prometheus Web UI检查警报的状态。您将被要求输入用户名和密码。通过单击警报名称,您将看到状态,警报规则和关联的标签:
验证Alertmanager工作后,通过重新创建从sites-available目录到sites-enabled目录的符号链接来启用端点:
$ sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled
再次重新加载Nginx以应用更改:
$ sudo systemctl reload nginx
在下一步中,我们将了解如何使用Alertmanager的命令行界面。
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在此过程中创建任何必要的父目录:
$ mkdir -p $HOME/.config/amtool
创建config.yml文件并在文本编辑器中打开它:
$ nano $HOME/.config/amtool/config.yml
添加以下行告诉amtool
使用Alertmanager和http://localhost:9093URL
:
alertmanager.url: http://localhost:9093
保存文件并退出文本编辑器。
现在,我们将看一下使用amtool
命令行工具可以做些什么。
使用该amtool alert query
命令,您可以列出已发送到Alertmanager的所有警报:
$ amtool alert query
输出显示警报的名称,警报首次出现的时间以及配置时提供的警报摘要:
Alertname Starts At Summary
EndpointDown 2018-04-03 08:48:47 UTC Endpoint http://localhost:8080 down
您还可以使用适当的匹配器按标签过滤警报。匹配器包含标签名称,适当的操作(例如,=用于完全匹配,=~用于部分匹配),以及标签的值。
如果要列出附加了严重性标签的所有警报,请使用alert query
命令中的severity=critical
匹配器:
$ amtool alert query severity=critical
与之前一样,输出包含警报的名称,警报首次出现的时间以及警报的摘要。
Alertname Starts At Summary
EndpointDown 2018-04-03 08:48:47 UTC Endpoint http://localhost:8080 down
您可以使用正则表达式将标签与=~运算符匹配。例如,要列出http://localhost
不依赖于端口端点的所有警报,可以使用instance=~http://localhost.*
匹配器:
$ amtool alert query instance=~http://localhost.*
由于您只有一个警报和端点,因此输出与前一个示例中的输出相同。
要查看Alertmanager配置,请使用以下amtool config
命令:
$ 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小时,您将使用以下命令:
$ amtool silence add instance=http://localhost:8080 --expires 3h
输出包含静音的标识号,因此请确保在需要时记下它,以防您想要消除静音:
4e89b15b-0814-41d3-8b74-16c513611732
如果要在创建静默时需要提供其他信息,例如作者和注释,请使用--author
和--comment
标志:
amtool silence add severity=critical --expires 3h --author "Sammy The Shark" --comment "Investigating the progress"
输出包含silence的ID:
12b7b9e1-f48a-4ceb-bd85-65ac882ceed1
该命令amtool silence query
将显示所有未过期的静音列表:
$ amtool silence query
输出包含静默ID,匹配器列表,到期时间戳,作者和注释:
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
命令类似,您可以使用标签匹配器按创建时附加的标签过滤输出:
$ amtool silence query instance=http://localhost:8080
与之前一样,输出将包括ID号和警报的详细信息:
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:
$ 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 删除。