【30天精通Prometheus:一站式监控实战指南】第3天:Alertmanager从入门到实战:安装、配置详解与生产环境搭建指南

亲爱的读者们👋

  欢迎加入【30天精通Prometheus】专栏!📚 在这里,我们将探索Prometheus的强大功能,并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。🚀

  Prometheus是云原生和DevOps的核心监控工具,我们将从基础概念开始,逐步涵盖配置、查询、告警和可视化。💪

  在接下来的30天里,我们将解锁Prometheus的实战技巧,通过案例和分享,助你深入理解其工作原理。📆

  目标:30天后,你将熟练掌握Prometheus,为未来的项目挑战做好准备!💯

  这是一段精彩旅程,期待你的加入!🎉


一、Alertmanager概述📘

  Alertmanager在Prometheus监控体系中占据着至关重要的地位,它是Prometheus生态中不可或缺的组成部分。Prometheus本身负责数据的收集与存储,而Alertmanager则专注于告警通知的管理与发送,确保当系统或应用出现异常时,相关人员能够迅速获得通知并采取措施。
  定义Alertmanager,它是一款独立的告警通知系统,用于接收Prometheus发送的告警信息,并对其进行进一步的处理和管理。Alertmanager支持丰富的告警通知渠道,如电子邮件、Slack、即时通讯平台等,同时提供了告警信息的分组、去重、抑制等高级功能,帮助用户更加高效地处理告警。

Alertmanager的核心功能包括

  • 告警接收:Alertmanager能够接收来自Prometheus的告警信息,并根据配置对告警进行进一步处理。
  • 告警分组与去重:对于大量重复的告警信息,Alertmanager可以进行智能分组和去重,避免对接收者造成不必要的干扰。
  • 告警路由:Alertmanager支持灵活的告警路由规则,可以根据不同的告警条件和接收者的需求,将告警信息发送给相应的接收者。
  • 告警通知:Alertmanager支持多种告警通知方式,如电子邮件、Slack、Webhook等,用户可以根据实际需求进行配置。
  • 告警抑制与静默:在某些情况下,某些告警可能是由其他已知问题引起的,此时可以通过告警抑制功能避免重复发送;同时,Alertmanager还支持告警静默功能,允许用户临时关闭某些告警通知。

Alertmanager的特点主要体现在以下几个方面

  • 灵活性:Alertmanager的配置非常灵活,用户可以根据实际需求自定义告警规则、通知方式等。
  • 可扩展性:Alertmanager支持多种扩展方式,如自定义告警处理器、通知插件等,可以满足不同场景下的需求。
  • 可靠性:Alertmanager采用分布式架构,具有高可用性和容错能力,确保告警通知的可靠性。
  • 丰富的生态:Alertmanager作为Prometheus生态中的一部分,与Prometheus、Grafana等其他工具无缝集成,共同构建了一个完整的监控解决方案。

二、安装Alertmanager💾

注意事项和常见问题
  1.权限问题:确保你有足够的权限来执行安装和启动Alertmanager的命令。如果你使用的是Linux系统,可能需要使用sudo命令来获取管理员权限。

  2.防火墙设置:Alertmanager默认监听在9093端口(或配置的其他端口)。如果你的服务器启用了防火墙,请确保该端口是开放的,以便外部客户端能够访问Alertmanager的API。

  3.配置文件:Alertmanager的配置文件(alertmanager.yml)对于其运行至关重要。在安装过程中,请确保配置文件的路径和设置是正确的。如果你修改了配置文件,请务必重新加载或重启Alertmanager以使更改生效。

  4.日志和错误消息:如果Alertmanager无法启动或运行不正常,请检查终端或日志文件中的错误消息。这些消息通常会提供关于问题的详细信息,并帮助你找到解决方案。

  5.无法下载资料:如果无法下载资料可跳转到最后一章”相关资料下载地址“,进行离线下载

2.1 访问Alertmanager官方网站 🌐

2.2 选择适合的版本🔍

  • 在下载页面,你将看到不同操作系统的Alertmanager二进制包。根据你的操作系统选择适合的版本。例如,如果你使用的是Linux 64位系统,就选择alertmanager-x.x.x.linux-amd64.tar.gz(其中x.x.x是版本号)。

2.3 下载Alertmanager ⬇️

  • 点击所选版本的下载链接,将Alertmanager的二进制包下载到你的本地计算机。

2.4 解压安装包📂

  • 将下载的Alertmanager压缩包解压到你想要安装的目录。你可以使用命令行工具(如tar)来完成这个步骤。解压后,你将看到一个名为alertmanager-x.x.x.linux-amd64的目录,其中包含Alertmanager的二进制文件和其他相关文件。
tar -xzf alertmanager-x.x.x.linux-amd64.tar.gz

2.5 运行Alertmanager🚀

  • 进入解压后的目录,并运行Alertmanager服务器。在Linux下,你可以使用如下命令。这样就使用默认的配置文件alertmanager.yml启动了Alertmanager服务器。如果一切正常,你应该能在终端看到Alertmanager的启动日志。
cd alertmanager-x.x.x.linux-amd64  
  
./alertmanager --config.file=alertmanager.yml

如下执行结果示例(部分日志输出):
......
level=info ts=2024-05-16T12:34:56.789Z caller=main.go:235 msg="Starting Alertmanager" version="(version=x.x.x, branch=HEAD, revision=xxxxxxxxxxxx)"  
level=info ts=2024-05-16T12:34:56.789Z caller=main.go:236 build_context="(go=go1.xx.x, user=root@xxxxxxxx, date=yyyy-mm-ddThh:mm:ssZ)"  
level=info ts=2024-05-16T12:34:56.789Z caller=cluster.go:171 component=cluster msg="setting advertise address explicitly" addr=xxx.xxx.xxx.xxx port=9094  
level=info ts=2024-05-16T12:34:56.789Z caller=cluster.go:684 component=cluster msg="Waiting for gossip to settle..." interval=2s  
level=info ts=2024-05-16T12:34:58.790Z caller=cluster.go:709 component=cluster msg="gossip not settled but continuing anyway" polls=1 elapsed=2.000829918s  
level=info ts=2024-05-16T12:34:58.791Z caller=main.go:683 msg="Loading configuration file" file=alertmanager.yml  
level=info ts=2024-05-16T12:34:58.796Z caller=main.go:711 msg="Completed loading of configuration file" file=alertmanager.yml  
level=info ts=2024-05-16T12:34:58.796Z caller=main.go:534 msg="Listening on address" address=0.0.0.0:9093

三、Alertmanager配置详解📖

3.1 alertmanager.yml

关键配置部分

  • global:全局配置,如SMTP服务器设置,用于发送电子邮件通知。
  • route:告警路由规则,定义了如何根据告警的标签将告警路由到不同的接收者。
  • receiver:默认接收者,如果告警不匹配任何子路由,将发送给此接收者。
  • group_by:根据哪些标签对告警进行分组。
  • group_wait:在发送新告警到同一个分组之前等待的时间。
  • group_interval:发送新告警到同一个分组的间隔时间。
  • repeat_interval:重复发送相同告警的间隔时间。
  • routes:子路由规则,可以定义多个,根据告警的标签进行匹配。
  • receivers:接收者列表,定义了各种通知渠道,如电子邮件、Slack等。

配置示例
  假设我们想要设置告警通知、分组和抑制规则,以下是一个简化的配置示例

route:  
  # 告警路由规则  
  receiver: 'default-receiver'  
  group_by: ['alertname', 'cluster'] # 分组标签  
  group_wait: 30s # 等待多久再发送新告警到同一个分组  
  group_interval: 5m # 发送新告警到同一个分组的间隔时间  
  repeat_interval: 3h # 重复发送告警的间隔时间  
  
  # 子路由规则  
  routes:  
    - match:  
        severity: critical  
      receiver: 'team-x-slack'  
      group_wait: 1s # 对于critical告警,我们更快地响应  
      repeat_interval: 10m # 但不那么频繁地重复  
  
    - match:  
        service: database  
      receiver: 'db-team-mails'  
      continue: true # 继续匹配子路由  
      routes:  
        - match:  
            severity: critical  
          receiver: 'db-team-slack'  
  
receivers:  
  - name: 'team-x-mails'  
    email_configs:  
      - to: 'team-x@example.com'  
  - name: 'team-x-slack'  
    slack_configs:  
      - channel: '#team-x-alerts'  
  - name: 'db-team-mails'  
    email_configs:  
      - to: 'db-team@example.com'  
  - name: 'db-team-slack'  
    slack_configs:  
      - channel: '#db-alerts'  
  
inhibit_rules:  
  - source_match:  
      severity: 'critical'  
    target_match:  
      severity: 'warning'  
    equal: ['alertname', 'cluster', 'service']  
    # 当critical告警触发时,抑制与它有相同alertname、cluster和service的warning告警

3.2 alertmanager.service

基本配置

  • –config.file=“alertmanager.yml”
      指定Alertmanager的配置文件路径。这是Alertmanager运行所必需的,因为它定义了如何路由和发送告警通知。

数据存储

  • –storage.path=“data/”
      定义用于存储告警数据和状态信息的基本路径。
  • –data.retention=120h
      指定保留数据的时间。超过这个时间的数据将被清理。
  • –data.maintenance-interval=15m
      定义进行垃圾收集和将静默状态和通知日志快照到磁盘的间隔。

告警管理

  • –alerts.gc-interval=30m
      告警垃圾收集的间隔。在这个间隔后,过期的告警将被清理。

Web接口和API

  • –web.listen-address=:9093
      定义Alertmanager的Web界面和API的监听地址和端口。默认监听在:9093。
  • –web.config.file=“”
      允许你指定一个配置文件,用于启用TLS或身份验证。
  • –web.external-url=WEB.EXTERNAL-URL
      如果你通过反向代理服务Alertmanager,这个URL用于生成指向Alertmanager自身的相对和绝对链接。
  • –web.route-prefix=WEB.ROUTE-PREFIX
      Web端点的内部路由前缀。默认为–web.external-url的路径部分。
  • –web.get-concurrency=0
      同时处理的GET请求的最大数量。如果设置为0或负数,则限制将是GOMAXPROCS或8(以较大者为准)。
  • –web.timeout=0
      HTTP请求的超时时间。如果设置为0或负数,则不设置超时。

集群配置

  • –cluster.listen-address=“0.0.0.0:9094”
      Alertmanager集群的监听地址。设置为空字符串将禁用高可用性模式。
  • –cluster.advertise-address=CLUSTER.ADVERTISE-ADDRESS
      在集群中通告的明确地址。
  • –cluster.peer=CLUSTER.PEER
      初始集群对端(可以重复)。
  • –cluster.peer-timeout=15s
      等待对端发送通知的时间。
  • –cluster.gossip-interval=200ms
      发送消息的间隔。降低此值(更频繁)将加快集群中的消息传播速度,但会增加带宽使用。
  • –cluster.pushpull-interval=1m0s
      状态同步的间隔。降低此值(更频繁)将增加大型集群中的收敛速度,但会增加带宽使用。
  • –cluster.tcp-timeout=10s
      与远程节点建立流连接、读取和写入操作的超时时间。
  • –cluster.probe-timeout=500ms
      等待探测节点的确认之前,假定其不健康的超时时间。应设置为网络上的RTT(往返时间)的99百分位数。
  • –cluster.probe-interval=1s
      随机节点探测的间隔。降低此值(更频繁)将更快地检测失败的节点,但会增加带宽使用。
  • –cluster.settle-timeout=1m0s
      在评估通知之前,等待集群连接稳定的最大时间。
  • –cluster.reconnect-interval=10s
      尝试重新连接到丢失的对端的间隔。
  • –cluster.reconnect-timeout=6h0m0s
      尝试重新连接到丢失的对端的时间长度。
  • –cluster.tls-config=“”
      指定一个YAML配置文件,用于在八卦协议中启用双向TLS。
  • –cluster.allow-insecure-public-advertise-address-discovery
      允许Alertmanager发现和监听公共IP地址。
  • –cluster.label=“”
      集群标签是一个可选的字符串,包含在每个数据包和流中。它唯一标识集群,并防止在发送消息时出现跨通信问题。

功能和日志

  • –enable-feature=“”
      启用实验性功能。可以重复此标志以启用多个功能。
  • –log.level=info
      仅记录给定严重性或更高严重性的日志消息。
  • –log.format=logfmt
      日志消息的输出格式。可以是logfmt或json。

四、实战演练:生产环境搭建指南🔨

4.1 创建普通用户管理alertmanager👤

useradd deploy

4.2 解压alertmanager.tar.gz📦

注意:
  我的是x86,所以使用alertmanager-0.27.0.linux-amd64.tar.gz,您可以使用uname -a命令查看系统架构

tar xvf alertmanager-0.27.0.linux-amd64.tar.gz -C /home/deploy/

4.3 将Alertmanager集成到Prometheus配置中✂️

  将Alertmanager集成到Prometheus配置中,确保告警能够正确转发。编辑Prometheus的配置文件(通常是prometheus.yml),在alerting部分添加Alertmanager的配置。告诉Prometheus将告警发送到运行在本地9093端口的Alertmanager实例。

alerting:  
  alertmanagers:  
    - static_configs:  
        - targets: ['localhost:9093']  # Alertmanager的地址和端口

4.4 更改alertmanager软件包名称✂️

mv /home/deploy/alertmanager-0.27.0.linux-amd64 /home/deploy/alertmanager

# 然后,可能需要更改Alertmanager相关文件和目录的所有权,以确保新创建的用户可以访问它们
sudo chown -R alertmanager:alertmanager /home/deploy/alertmanager

4.5 配置告警通知渠道✂️

  编辑Alertmanager的配置文件(alertmanager.yml),在receivers部分配置你想要的通知渠道。例如,对于电子邮件通知,你可以这样配置:

receivers:  
- name: 'email-receiver'  
  email_configs:  
  - to: 'your-email@example.com'  
    smtp_smarthost: 'smtp.example.com:587'  
    smtp_from: 'alertmanager@example.com'  
    smtp_auth_username: 'your-username'  
    smtp_auth_password: 'your-password'  
    smtp_require_tls: true
  • 对于Slack或Webhook,你需要查找并遵循Alertmanager官方文档中的相应指南。

4.6 编辑alertmanager.service文件📝

注意:
  alertmanager相关参数您可参考上述参数详解,根据实际环境需求自行更改

cat > /etc/systemd/system/alertmanager.service <<EOF
[Unit]
Description=alertmanager
Documentation=https://prometheus.io/docs/alerting/alertmanager/
After=network.target

[Service]
Type=simple
User=deploy
Group=deploy
ExecStart=/home/deploy/alertmanager/alertmanager \
--config.file=/home/deploy/alertmanager/alertmanager.yml \
--web.listen-address=:9093 \
--data.retention=72h \
--storage.path=/home/deploy/alertmanager/var/lib/alertmanager \
--log.level=info \
--log.format=logfmt
ExecReload=/bin/kill -HUP
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

4.7 启动alertmanager.service🔌

sudo systemctl daemon-reload

sudo systemctl enable --now alertmanager.service

4.8 查看服务是否正常启动🔍

# 查看service服务是否启动
sudo systemctl status alertmanager.service

# 查看端口是否存在
sudo ss -ntulp | grep 9093

五、基于云原生的部署方案 🚀

5.1 使用Docker部署Alertmanager 🐳

5.1.1 获取Alertmanager Docker镜像 📸

  • 从docker-hub下载镜像
docker pull bitnami/alertmanager:0.28.1

docker tag bitnami/alertmanager:0.28.1 alertmanager:0.28.1
  • 从阿里云下载镜像(如果访问不到docker-hub)
// 如果访问不到docker-hub的可以访问如下地址
docker pull registry.cn-beijing.aliyuncs.com/insights-ops/alertmanager:0.28.1

docker tag registry.cn-beijing.aliyuncs.com/insights-ops/alertmanager:0.28.1 alertmanager:0.28.1
  • 从百度网盘下载镜像
docker load -i alertmanager-0.28.1.tar

docker tag bitnami/alertmanager:0.28.1 alertmanager:0.28.1

5.1.2 准备Alertmanager配置文件

mkdir -p /usr/local/alertmanager

touch /usr/local/alertmanager/alertmanager.yml

chmod -R 0777 /usr/local/alertmanager/

5.1.3 编辑alertmanager.yml

vi /usr/local/alertmanager/alertmanager.yml

global:
  resolve_timeout: 5m

route:
  receiver: 'default-receiver'

receivers:
- name: 'default-receiver'
  webhook_configs:
  - url: 'http://your-webhook-url.com/'

5.1.4 运行Alertmanager Docker容器 🏃

docker run -itd \
    --name alertmanager \
    -p 9093:9093 \
    -v /etc/localtime:/etc/localtime:ro \
    -v /usr/local/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
    alertmanager:0.28.1

5.1.5 验证Docker部署 ✅

# 查看容器是否正常启动,Status为Up为正常
docker ps -a | grep alertmanager

# 端口监听
ss -ntulp | grep 9093

5.2 利用Docker-Compose简化部署 📘

5.2.1 编写docker-compose.yml配置文件 📜

mkdir docker/docker-compose/docker-compose-alertmanager -p

vi docker/docker-compose/docker-compose-alertmanager/docker-compose.yml
version: '3'
services:
  alertmanager:
    image: alertmanager:0.28.1
    container_name: alertmanager
    ports:
      - "9093:9093"
    volumes:
      - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml

5.2.2 编写alertmanager.yml

vi docker/docker-compose/docker-compose-alertmanager/alertmanager.yml

global:
  resolve_timeout: 5m

route:
  receiver: 'default-receiver'

receivers:
- name: 'default-receiver'
  webhook_configs:
  - url: 'http://your-webhook-url.com/'

5.2.3 使用Docker-Compose启动服务 🚀

cd docker/docker-compose/docker-compose-alertmanager 

docker-compose up -d

5.2.4 验证Docker部署 ✅

# 查看容器是否正常启动,Status为Up为正常
docker ps -a | grep alertmanager

# 端口监听
ss -ntulp | grep 9093

5.3 在Docker Swarm中部署Alertmanager 🐝

5.3.1 创建Docker Compose文件

创建一个 docker-compose.yml 文件来定义 Alertmanager 服务。以下是一个示例配置文件:

mkdir docker/docker-swarm/alertmanager -p

vi docker/docker-swarm/alertmanager/docker-compose.yml
version: '3'
services:
  alertmanager:
    image: alertmanager:0.28.1
    container_name: alertmanager
    ports:
      - "9093:9093"
    volumes:
      - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml

networks:
  monitoring:
    driver: overlay

5.3.2 准备配置文件

在docker/docker-swarm/alertmanager 目录下创建alertmanager .yml 文件。

vi docker/docker-swarm/alertmanager/alertmanager.yml
global:
  resolve_timeout: 5m

route:
  receiver: 'default-receiver'

receivers:
- name: 'default-receiver'
  webhook_configs:
  - url: 'http://your-webhook-url.com/'

5.3.3 部署服务到Docker Swarm

使用 docker stack deploy 命令将服务部署到 Docker Swarm。

docker pull bitnami/alertmanager:0.28.1

docker stack deploy -c docker/docker-swarm/alertmanager/docker-compose.yml monitoring

5.3.4 验证部署

docker service ls

在这里插入图片描述

5.4 在Kubernetes(K8s)上部署Alertmanager🚀

5.4.1 创建Configmap

创建一个ConfigMap来保存Alertmanager配置文件。

mkdir k8s/alertmanger/

vi k8s/alertmanger/alertmanager-config.yml
apiVersion: v1
kind: ConfigMap
metadata:
  name: alertmanager-config
  namespace: monitoring # 根据需要更改命名空间
data:
  alertmanager.yml: |-
    global:
      resolve_timeout: 5m

    route:
      receiver: 'default-receiver'

    receivers:
      - name: 'default-receiver'
        webhook_configs:
          - url: 'http://your-webhook-url'

使用命令将其应用到Kubernetes集群中:

kubectl apply -f k8s/alertmanger/alertmanager-config.yml

5.4.2 部署 Alertmanager

创建一个名为alertmanager-deployment.yaml的文件来定义Alertmanager的Deployment和服务。

vi k8s/alertmanger/alertmanager-Deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: alertmanager
  namespace: monitoring # 确保与ConfigMap在同一命名空间
spec:
  replicas: 1
  selector:
    matchLabels:
      app: alertmanager
  template:
    metadata:
      labels:
        app: alertmanager
    spec:
      containers:
      - name: alertmanager
        image: prom/alertmanager:latest
        args:
        - "--config.file=/etc/alertmanager/alertmanager.yml"
        ports:
        - containerPort: 9093
        volumeMounts:
        - name: config-volume
          mountPath: /etc/alertmanager
      volumes:
      - name: config-volume
        configMap:
          name: alertmanager-config

---
apiVersion: v1
kind: Service
metadata:
  name: alertmanager
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - port: 9093
    targetPort: 9093
  selector:
    app: alertmanager

使用命令将其应用到Kubernetes集群中:

kubectl apply -f k8s/alertmanger/alertmanager-Deployment.yml

5.4.3 获取NodePort暴漏的外部端口

kubectl -n monitoring get svc | grep alertmanager

在这里插入图片描述

5.4.4 访问Alertmanager UI

  • 访问不到的话请检查自己的防火墙规则!
    在这里插入图片描述

相关资料下载地址📚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜提yBei冰美式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值