prometheus + consul 服务注册+报警 最佳实践

这篇具有很好参考价值的文章主要介绍了prometheus + consul 服务注册+报警 最佳实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、 说明

本文主要将prometheus和consul 结合起来使用,通过conusl 注册服务至prometheus,实现服务统一注册,统一报警管理等。

整个架构思路consul+consul_export+prometheus+alertmanager ,consul通过check检测服务状态,然后通过consul_export暴露给prometheus,prometheus通过alert规则,通知alertmanager,接着邮件通知管理人员。

在各服务器上安装node_expoert,然后将node配置到consul的hcl服务文件中,进行服务注册,当然也可以http api发现。然后在prometheus主yml文件中配置consul_sd_configs对服务进行发现。

单台架构如下。

prometheus + consul  服务注册+报警  最佳实践

 文章来源地址https://www.toymoban.com/news/detail-843314.html

 

本次server服务器有3台,组建consul集群,全部用做server端,然后在每一台都部署node_expoerter作为prometheus node节点。

IP规划如下:

172.19.100.212(prometheus主服务器,理论上可以不部署node_expoerter),   

172.19.100.213

172.19.100.52

二、consul集群搭建

2.1 consul安装

在每台服务器上安装consul。采用yum 安装,这也是我最推荐的方式。配置目录路径在/etc/consul.d。

yum install -y yum-utils
yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
yum -y install consul

 

2.2 集群文件配置

212服务器的配置如下。data_dir已经在默认的consul.hcl中有配置,所以注释掉了。其他两台服务器根据如下配置分别配置IP。systemct    start consul启动consul即可。

server = true

bootstrap_expect = 3

#        data_dir = "/tmp/consul"

node_name = "172.19.100.212"

bind_addr = "172.19.100.212"

client_addr = "0.0.0.0"

ui_config = {

  enabled = true

}

enable_script_checks = true

start_join = [

  "172.19.100.213",

  "172.19.100.52"

]

retry_join = [

  "172.19.100.213",

  "172.19.100.52"

]

prometheus + consul  服务注册+报警  最佳实践

 

搭建好的集群如下:

 

2.3 consul_exporter安装

       consul_exporter主要用于将consul的check 报警导出到prometheus ,这样在prometheus就不需要再次配置报警规则了。

下载地址:https://github.com/prometheus/consul_exporter/releases

当然如果需要额外的报警功能,可以通过blackbox_exporter配置,里边有很多报警模块。      

        consul_export 不需要额外的配置,三台直接安装后启动即可,后续在prometheus中配置三台的地址即可。目前我只在212服务器上安装了。

[root@zht-app001 opt]# tar -xzvf consul_exporter-0.11.0.linux-amd64.tar.gz

consul_exporter-0.11.0.linux-amd64/

consul_exporter-0.11.0.linux-amd64/LICENSE

consul_exporter-0.11.0.linux-amd64/consul_exporter

consul_exporter-0.11.0.linux-amd64/NOTICE

[root@zht-app001 opt]# cd consul_exporter-0.11.0.linux-amd64

[root@zht-app001 consul_exporter-0.11.0.linux-amd64]# ls

consul_exporter  LICENSE  NOTICE

[root@zht-app001 consul_exporter-0.11.0.linux-amd64]# nohup ./consul_exporter &

[1] 11749

[root@zht-app001 consul_exporter-0.11.0.linux-amd64]# nohup: ignoring input and appending output to ‘nohup.out’

[root@zht-app001 consul_exporter-0.11.0.linux-amd64]# tail -f nohup.out

ts=2024-03-18T02:07:50.153Z caller=consul_exporter.go:82 level=info msg="Starting consul_exporter" version="(version=0.11.0, branch=HEAD, revision=3e5be6411ce11ba011b9e4fe52029daba8160ee8)"

ts=2024-03-18T02:07:50.153Z caller=consul_exporter.go:83 level=info build_context="(go=go1.21.5, platform=linux/amd64, user=root@34d50aaee2f8, date=20231225-15:29:52, tags=unknown)"

ts=2024-03-18T02:07:50.154Z caller=tls_config.go:274 level=info msg="Listening on" address=[::]:9107

ts=2024-03-18T02:07:50.154Z caller=tls_config.go:277 level=info msg="TLS is disabled." http2=false address=[::]:9107

prometheus + consul  服务注册+报警  最佳实践

consul_exporter的可选配置如下,如果不配置都是默认的,consul的token我将在最后配置。配置命令如下:

export CONSUL_HTTP_TOKEN=<your_token_here> 

 

2.4 consul token设置

三、prometheus 搭建

前往https://prometheus.io/download/ 下载最新的prometheus组件

3.1 node_exporter 安装 和注册

       每一个conul (server/client)agent上都需要安装node_exporter,然后分别对node进行注册。

3.1.1 安装

我将文件下载到了/opt目录,然后将node_exporter配置为系统service;文件名为node_exporter.service,放置在/etc/systemd/system目录下:

       配置如下:

[Unit]

Description=Node Exporter for Prometheus

After=network-online.target

 

[Service]

#User=<非特权用户,例如 node_exporter>

ExecStart=/opt/node_exporter-1.7.0.linux-amd64/node_exporter

#EnvironmentFile=-/etc/default/node_exporter  # 如果有额外环境变量配置,可以在这里引用

Restart=on-failure

RestartSec=5s

 

[Install]

WantedBy=multi-user.target

          操作命令如下

systemctl daemon-reload

systemctl start node_exporter.service

systemctl status node_exporter.service

systemctl enable node_exporter.service

 

       状态如下

 prometheus + consul  服务注册+报警  最佳实践

 

3.1.2 注册到consul

       在consul配置文件夹下新建hcl文件即可,配置如下,其余服务器按照一样的操作进行。

[root@izwz92l6wmcnfyprbcxmjkz opt]# cd /etc/consul.d/

[root@izwz92l6wmcnfyprbcxmjkz consul.d]# ls

consul.env  consul.hcl  server.hcl

[root@izwz92l6wmcnfyprbcxmjkz consul.d]# vim node_exporter.hcl

 

       Token在后续配置,配置好后,重新启动consul

services {

  name = "node_172.19.100.52"

  address = "172.19.100.52"

  id = "node_172.19.100.52"

  port = 9100

  tags = ["prometheus","172.19.100.52"]

  #token = "d1e6d941-8577-1f27-dd7b-0d8ac9212ba5"

  checks {

    id = "node_172.19.100.52_tcp_check"

    name = "Node Exporter TCP Check"

    interval = "10s"

    timeout = "1s"

    tcp = ":9100"

  }

}

 

       可以看到node注册成功,check检查成功,这个结果后续我们要通过consul_exporter传到至prometheus。

prometheus + consul  服务注册+报警  最佳实践

prometheus + consul  服务注册+报警  最佳实践

 

3.2 安装prometheus

        将下载的tar.gz解下后,将prometheus配置成系统/etc/systemd/system/prometheus.service

[Unit]

Description=Prometheus Monitoring System

Documentation=https://prometheus.io/docs/introduction/overview/

After=network-online.target

 

[Service]

#User=prometheus

#Group=prometheus

ExecStart=/opt/prometheus-2.50.1.linux-amd64/prometheus  --config.file=/opt/prometheus-2.50.1.linux-amd64/prometheus.yml

Restart=always

RestartSec=10s

LimitNOFILE=4096

 

[Install]

WantedBy=multi-user.target

 

 

sudo systemctl daemon-reload

sudo systemctl start prometheus

sudo systemctl status prometheus # 查看服务运行状态

sudo systemctl enable prometheus # 设置开机启动

 

3.3 配置consul_sd_config 和consul_exporter

       在prometheus.yml配置如下,然后重启prometheus 即可

 

- job_name: "consul_export报警"

    static_configs:

      - targets: ["172.19.100.212:9107"] # 这里填写 Consul Exporter 监听的 IP 和端口

    relabel_configs: [] # 根据需要重写标签

 

  - job_name: "node_export服务发现"

    consul_sd_configs:

      - server: "172.16.100.212:8500"

        #token: "4489cdd3-1952-4ded-4eb9-07a823f5b2ff"

        #token: "3ce3c959-c9e5-7e2c-abe7-1fccbbfe01ae"

        tags:

          - "prometheus"

    relabel_configs:

      - source_labels: [__meta_consul_health]

        target_label: service_health_status

 

       界面如图

 prometheus + consul  服务注册+报警  最佳实践

 

       点击consul_exporter报警的endpoint的的界面如下,可以看到服务的check状态。我们可以根据这些状态编写rules进行报警。

 prometheus + consul  服务注册+报警  最佳实践

 

3.4 rules 报警规则配置

需要先在prometheus.yml中加如下配置

rule_files:

  # - "first_rules.yml"

  # - "second_rules.yml"

  - "prometheus.rules.yml"

 

在prometheus.rules.yml配置如下,这是针对3.3中node的报警规则,一旦有匹配的expr,则会触发rules中的alert规则。而alert规则会直接传送到alertmanager里边查看默认的route,再决定下一步操作(比如发送邮件报警,或者发送到企业微信)。

groups:

#consu_export报警

- name: consul_health_alerts

  rules:

    - alert: "consul服务报警"

      expr: consul_health_service_status{status="critical"} == 1 # 1 表示critical状态

      for: 1m # 可以根据实际情况调整这个时间窗口,比如持续5分钟未恢复才报警

      labels:

        severity: critical

      annotations:

        summary: "Consul Service {{ $labels.service_name }} is critical"

        description: "Service '{{ $labels.service_name }}' has been in a critical state for more than 1 minutes."

    - alert: "consul服务报警"

      expr: consul_health_service_status{status="warning"} == 1

      for: 1m # 可以根据实际情况调整这个时间窗口,比如持续5分钟未恢复才报警

      labels:

        severity: warning

      annotations:

        summary: "Consul Service {{ $labels.service_name }} is warning"

        description: "Service '{{ $labels.service_name }}' has been in

a warning  state for more than 1 minutes."

 

这是prometheus的alert页面,显示的就是我上边配置的报警规则

 prometheus + consul  服务注册+报警  最佳实践

3.5 alertmanager 配置

       需要现在prometheus.yml中加入以下配置

# Alertmanager configuration

alerting:

  alertmanagers:

    - static_configs:

        - targets:

            - localhost:9093

 

 

将tar.gz解压到/opt/,然后配置系统服务/etc/systemd/system/ alertmanager.service

[Unit]

Description=Prometheus Alertmanager System

After=network-online.target

 

[Service]

ExecStart=/opt/alertmanager-0.27.0.linux-amd64/alertmanager  --config.file=/opt/alertmanager-0.27.0.linux-amd64/alertmanager.yml

Restart=on-failure

RestartSec=5s

 

[Install]

WantedBy=multi-user.target

 

 

systemctl daemon-reload

systemctl start alertmanager.service

systemctl status alertmanager.service

systemctl enable alertmanager.service

 

alertmanager.yml配置如下,我通过QQ邮件进行报警。

global:

  resolve_timeout: 5m

 

route:

  receiver: "email-receiver"

 

receivers:

  - name: "email-receiver"

    email_configs:

      - send_resolved: true # 是否发送解决通知

        to: "XXXXX" # 接收报警邮件的地址

        from: "XXXXX " # 发送报警邮件的地址

        smarthost: "smtp.qq.com:587" # SMTP服务器地址及端口

        auth_username: "XXXXX" # SMTP用户名

        auth_password: "XXXXX" # SMTP密码(如果是明文,推荐使用加密存储)

        require_tls: true # 如果SMTP服务器支持TLS,则启用

 

inhibit_rules: [] # 可选,抑制规则配置

 

这是alertmanager页面,目前还没有报警,所以是空白的,下边我们来将其中一个node_export节点停掉,来观察一下报警。

 prometheus + consul  服务注册+报警  最佳实践

 

3.6 报警演示

手动关闭52服务器上的node_exporter 服务 Systemctl stop node_exporter

1、consul最先check出报警

 prometheus + consul  服务注册+报警  最佳实践

 

2、prometheus alert进入pending状态

如果1分钟内,状态没有改变,则变为firing

 prometheus + consul  服务注册+报警  最佳实践

 

3、prometheus  alert进入firing状态

 prometheus + consul  服务注册+报警  最佳实践

 

4、alertmanager平台触发报警

将通过alertmanager.yml中route规则发送邮件。

 prometheus + consul  服务注册+报警  最佳实践

 

5、接收到报警邮件

prometheus + consul  服务注册+报警  最佳实践

 

 

6、报警解除,收到解除邮件

Systemctl start node_exporter后报警消失,发送接触报警邮件,至此,报警链条完美闭环。

prometheus + consul  服务注册+报警  最佳实践

 

 

到了这里,关于prometheus + consul 服务注册+报警 最佳实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Consul】基于Golang实现Consul服务的注册、注销、修改、监控注册的服务变化、实时同步服务信息机制

    大家好 我是寸铁👊 总结了一篇【Consul】基于Go实现Consul服务的注册、注销、修改、监控注册的服务变化、实时同步服务信息机制✨ 这应该是目前全网最全的使用golang手搓Consul服务信息机制✨ 喜欢的小伙伴可以点点关注 💝 consul常常被用来作服务注册与服务发现,而它的wa

    2024年04月09日
    浏览(23)
  • 微服务 - Consul服务注册中心

    上篇说到构建良好的架构,依托于基础设施建设(自动化测试、自动化部署、服务监控,服务发现、配置中心等等),决定成败的往往是基础设施建设,所以从搭建一个注册中心和配置中心开始我们新一阶段的启程。 注册中心选型 你有没有思考过这样一个问题,为什么会有这么

    2023年04月23日
    浏览(31)
  • Consul服务注册发现集群搭建

    Consul 是一种用于服务发现、配置和分布式一致性的开源工具和平台。它由 HashiCorp 公司开发和维护,旨在简化构建和维护分布式系统的任务。 Consul 提供了许多功能,包括: 服务发现 :Consul允许服务注册和发现。当服务启动时,它可以向Consul注册自己的位置和元数据。其他服

    2024年04月08日
    浏览(19)
  • docker consul 服务注册与发现

    Docker consul的容器服务更新与发现 ------------------------------------ Consul ------------------------------------ (1)什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接

    2024年02月09日
    浏览(22)
  • Eureka、Zookeeper、Consul服务注册与发现

    一、Eureka服务注册与发现 1.1 概念 Eureka 是 Netflix 公司开源的一个服务注册与发现的组件 。 Eureka 和其他 Netflix 公司的服务组件(例如负载均衡、熔断器、网关等) 一起,被 Spring Cloud 社区整合为Spring-Cloud-Netflix 模块。 Eureka 包含两个组件:Eureka Server (注册中心) 和 Eureka Clien

    2024年02月02日
    浏览(23)
  • Docker consul的容器服务注册与发现

    nacos(转给微服务)、Eureka和consul一样,也是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构,起初的解决

    2024年02月11日
    浏览(18)
  • 【博客669】prometheus rate()选择range范围的最佳实践

    我们使用rate来计算counter的速率,那么rate的range范围应该选择哪一个?有没有固定的答案呢?30s,1m? 答案:没有,要根据你的scrap_interval来决定的 选择范围的一般规则是至少应为刮擦间隔的 4 倍。这是为了允许各种竞争条件,并对失败的刮擦具有弹性。 剖析: 假设您有一个

    2024年02月10日
    浏览(21)
  • Docker+Consul+Registrator 实现服务注册与发现

    第四阶段 时  间:2023年8月8日 参加人:全班人员 内  容: Docker+Consul+Registrator 实现服务注册与发现 目录 一、服务注册中心引言 CAP理论是分布式架构中重要理论: 二、服务注册中心软件 (一)ZooKeeper (二)Eureka (三)Etcd (四)Consul 常用的服务发现产品之间的比较: 三

    2024年02月13日
    浏览(36)
  • Net Core Ocelot+Consul实现网关、服务注册、服务发现

    Ocelot是一个开源的ASP.NET Core微服务网关,它提供了API网关所需的所有功能,如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关,它可以与现有的服务集成,并帮助您保护、监控和扩展您的微服务。 以下是Ocelot的一些主要功能: 路由管理:Ocelot允许您

    2024年01月21日
    浏览(27)
  • Docker-consul容器服务自动发现与注册

    docker consul 容器的自动发现与注册。 什么叫做微服务(容器)注册与发现 是一种分布式管理系统,定位服务的方法。 在传统架构中,应用程序之间直连到已知的服务,设备提供的网络:ip网络,基于tcp/ip:端口 由于现代微服务部署,服务的动态性,数量增加了,传统的基于

    2024年01月24日
    浏览(21)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包