Prometheus监控实战系列二十四: Alertmanager集群

Posted 唐僧骑白马

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prometheus监控实战系列二十四: Alertmanager集群相关的知识,希望对你有一定的参考价值。

上篇文章介绍了Prometheus Server自身的高可用方案,但除了Prometheus Server外,Alertmanager也是整个告警体系里面重要的组件。所有的告警都需要通过它来进行发送,当Alertmanager出现问题时,告警信息将无法送达用户。

本文我们将讲解关于Alertmanager的集群方案。

1、功能概述

Alertmanager使用HashiCorp 公司的Memberlist库来实现集群功能。Memberlist使用Go语言开发,并基于Gossip的协议来管理集群成员和成员故障检测。

Gossip协议(Gossip protocol)是一种去中心化、容错并保证最终一致性的协议,被广泛应用于分布式系统中。Gossip的原理是由网络中的某个节点,通过一种随机的方式向集群中的N个节点同步信息,相关节点在收到消息后,又会重复相同的工作,最终达到整个集群所有节点的统一。

Gossip协议具有以下优点:

  • 扩展性强,可以允许集群内节点任意增加或者减少。
  • 协议操作简单,实现起来简单方便。
  • 容错性强,节点之间是平等关系,任何节点出现问题都不影响集群。
  • 最终一致性,可以在较短时间内快速将变化覆盖到全局节点。

2、Alertmanager配置

在本次配置中,我们通过三个Alertmanager来进行演示,分别为am1、am2和am3,其中am1主机做为集群的启动节点。每台alertmanager必须保证配置文件的一致性,否则集群实际上并不是高可用的效果 。

am1: 192.168.75.160
am2: 192.168.75.166
am3: 192.168.75.167

Gossip的传播需要指定特定端口,此处我们使用8001为监听端口。为了能够让Alertmanager节点之间进行通讯,需要在Alertmanager启动时设置相应的参数。其中主要的参数包括:

--cluster.listen-address string: 当前实例集群服务监听地址

--cluster.peer value: 初始化时关联的其它实例的集群服务地址

am1启动配置:

alertmanager --config.file alertmanager.yml --storage.path /data/alertmanager/ --cluster.listen-address="192.168.75.160:8001" &

am2与am3启动配置:

alertmanager --config.file alertmanager.yml --storage.path /data/alertmanager/ --cluster.listen-address="0.0.0.0:8001" --cluster.peer=192.168.75.160:8001 &

在配置完成后,我们可以在任意一个Alertmanager中看到如下状态,证明三个节点已加入到集群中。


在集群启动后,我们可以在其中一个Alertmanager上设置silence,并查看配置是否复制到其他Alertmanager节点,以此来验证集群是否正常工作。如下图所示,现在集群已经在正常运行,接下来可以开始进行Prometheus的设置。

3、Prometheus设置

对于Alertmanager集群,我们不需要在集群前面额外增加负载均衡器。在Prometheus的配置文件中,只需要将所有Alertmanager的地址配置进去,这样当集群中的某个Alertmanager发生故障时,Prometheus会自动找寻另一个来发送警报。而收到警报Alertmanager节点,自身会负责与集群中的其他活动成员共享所有收到的警报。

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
        - 192.168.75.160:9093
        - 192.168.75.166:9093
        - 192.168.75.167:9093

启动Prometheus后,我们在Status页面会看到相关的Alertmanager信息,代表配置成功。

上一篇:Prometheus监控实战系列二十三:高可用与扩展性
下一篇:Prometheus监控实战系列二十五: Thanos介绍

Prometheus监控实战系列七:任务与实例

1、功能概述

任务与实例,是Prometheus监控中经常会提到的词汇。在其术语中,每一个提供样本数据的端点称为一个实例(instance),它可以是各种exporter,如node-exporter、mysql-exporter,也可以是你自己开发的一个服务。只要提供符合prometheus要求的数据格式 ,并允许通过HTTP请求获取信息的端点都可称为实例。而对于实例数据的采集,则是通过一个个任务(job)来进行管理,每个任务会管理一类相同业务的实例。

在前面"配置介绍“一文中,我们对Prometheus的配置文件promehteus.yml进行过讲解,其中scrape_configs模块即是管理任务的配置。

如下是Prometheus默认配置的Job,用于获取Prometheus自身的状态信息,这是一个格式最精简的Job。

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']

当Job生效后,我们可以在Prometheus的Targets页面看到相关的任务实例,其中Endpoint项代表该实例的采集地址;State项为实例状态,状态为UP表示可正常采集;Labels为实例所拥有的标签 ,标签会包含在获取到的所有时间序列中。

2、配置参数

Job_name(任务名称)

Job_name定义了该job的名称,这会生成一个标签job="xxx",并插入到该任务所有获取指标的标签列中。如上面的Prometheus任务指标,我们可以在表达式浏览器中查询 job="prometheus",即可看到与该job相关的指标。

此外,Job也支持自定义标签的方式。如下所示,将在该Job获取的指标中添加group=“dev”的标签。

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
      labels:
		group: 'dev'

配置完成后,重启Prometheus可看到标签 已生效。

注意:修改Job后,只对新获取数据生效,原有数据不会有变化 。

static_configs(静态配置)

static_configs为静态配置,需要手动在配置文件填写target的目标信息,格式为域名/IP + 端口号。当有多个目标实例时,书写格式如下 :

scrape_configs:
  - job_name: 'myjob'
    static_configs:
    - targets: 
      -  '192.168.0.1:9100'
      -  '192.168.0.2:9100'
      -  '192.168.0.3:9100'

Prometheus对于监控实例的加载,除了静态配置,还可以使用文件配置的方式。操作方式很简单,只需要在一个文件中填好相关的实例信息,然后在Job中加载该文件即可,文件的格式必须是yaml或json格式。

如:

[root@server prometheus]# cat agent.yml 
- targets:
    - '192.168.75.162:9100'

配置Job加载该文件

# 被监控机器
  - job_name: 'agent1'
    file_sd_configs:
    - files:
      - /usr/local/prometheus/agent.yml

scrape_interval和scrape_timeout

scrape_interval代表抓取间隔,scrape_timeout代替抓取的超时时间,它们默认继承来global全局配置的设置。但如果有特殊需求,也可以对单个Job单独定义自己的参数。

示例:

scrape_configs:
  - job_name: 'myjob'
    scrape_interval:15s
    scrape_timeout: 10s
    static_configs:
    - targets: ['192.168.0.1:9100']

注意:scrape_timeout时间不能大于scrape_interval,否则Prometheus将会报错。

metric_path

指定抓取路径,可以不配置,默认为/metrics。

示例:

scrape_configs:
  - job_name: 'myjob'
    metric_path:/metrics
    static_configs:
    - targets: ['192.168.0.1:9100']

scheme

指定采集使用的协议,http或者https,默认为http。

示例:

scrape_configs:
  - job_name: 'myjob'
    scheme: http
    static_configs:
    - targets: ['192.168.0.1:9100']

params

某些特殊的exporter需要在请求中携带url参数,如Blackbox_exporter ,可以通过params进行相关参数配置。

示例:

scrape_configs:
  - job_name: 'myjob'
    params:
      module: [http_2xx]  
    static_configs:
    - targets: ['192.168.0.1:9100']

basic_auth

默认情况下,exporter不需要账号密码即可获取到相关的监控数据。在某些安全程度较高的场景下,可能验证通过后才可获取exporter信息,此时可通过basic_auth配置Prometheus的获取exporter信息时使用的账密。

scrape_configs:
  - job_name: 'myjob' 
    static_configs:
    - targets: ['192.168.0.1:9100']
    basic_auth:
      username: admin
      password: mypassword

上一篇:Prometheus监控实战系列六:PromQL语法(下)
下一篇:Prometheus监控实战系列八:标签重写

以上是关于Prometheus监控实战系列二十四: Alertmanager集群的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus监控实战系列七:任务与实例

Prometheus监控实战系列十一:可视化

Prometheus监控实战系列八:标签重写

MATLAB可视化实战系列(二十四)-三维可视化如何利用圆锥图显示向量场?

超级实用,解密云原生监控技术,使用prometheus轻松搞定redis监控

MATLAB实战系列(二十四)-MATLAB粒子群(PSO)优化算法在电力系统中的应用程序集合