服务注册中心consul的服务健康监控及告警
一、背景
consul既可以作为服务注册中心,也可以作为分布式配置中心。当它作为服务注册中心的时候,java微服务之间的调用,会定期查询服务的实例列表,并且实例的状态是健康可用。
如果发现被调用的服务,注册到consul的实例,没有一个是健康可用的时候,就会出现HystrixRuntimeException错误。
调用用户服务出现的异常示例:
HystrixRuntimeException: UserFeignService#customClassWithMems(Integer,String,Boolean) failed and fallback failed.
所以,我们要及时发现不健康的实例,本文就讨论下如何做好consul服务的监控及告警。
二、生产环境的consul集群
- 设计思路
1、生产环境下,consul采用HTTP Basic认证,访问 https://consul.xxx.net,输入用户名和密码。
后期的http请求,会在http header增加字段Authorization:Basic xxx,就不用每次交互都需要输入用户名和密码。
2、只能剔除同一个agent下的实例,所以提供UI的consul node,暴露到外网,同时不让服务注册到该node。这样更加安全,从外网无法剔除其他node上的服务。

- API网关对外网域名路由,启用HTTP Basic Auth

输入用户名和密码,校验成功,在http header会增加这么一个Key,
Authorization:Basic SGhvxxx2346SUdZcjlsO2V5O1==

所以,我们在请求consul api的时候,必须在http header增加上面的Key-Value键值对。
- 除了上面的http基本认证,我们还会要求访问consul得有token
示例:
curl -X PUT http://192.168.10.51:8500/v1/agent/service/deregister/user-service-192-168-5-16-8003?token=4db4d360-e5vc-4a36-723e-5x370e9f2432
至此,我们把背景和准备知识都铺垫完成,第三部分,我将把具体如何做监控的过程,详细描述。
三、监控脚本
# Consul Address
CONSUL_ADDR="https://consul.xxx.net"
# Consul acl token
CONSUL_ACL_TOKEN="4db4d360-e5vc-4a36-723e-5x370e9f2432"
# http basic auth (base64 the username and password)
HTTP_HEADER="Authorization:Basic SGhvxxx2346SUdZcjlsO2V5O1=="
# send alert message
ALERT_SYSTEM_INTERFACE="http://192.168.80.180:31767/api/v1/consul/alert"# Get a list of all services from Consul
SERVICES=$(curl -H "${HTTP_HEADER}" -s "${CONSUL_ADDR}/v1/catalog/services?token=${CONSUL_ACL_TOKEN}" | jq -r 'keys[]')# Loop through each service and check its health
for SERVICE_NAME in ${SERVICES}; doHEALTHY_COUNT=$(curl -H "${HTTP_HEADER}" -s "${CONSUL_ADDR}/v1/health/service/${SERVICE_NAME}?token=${CONSUL_ACL_TOKEN}&passing=true" | jq '. | length')if [ "${HEALTHY_COUNT}" -eq 0 ]; thenecho "WARNING!!! All instances of ${SERVICE_NAME} are unhealthy."ALERT_MSG="{\"consulAddress\":\"online consul\",\"content\":\"All instance of ${SERVICE_NAME} are unhealthy.\",\"serviceName\":\"${SERVICE_NAME}\"}"curl -X POST -H "Content-Type:application/json" -d "${ALERT_MSG}" "${ALERT_SYSTEM_INTERFACE}"fi
done
四、告警接口
- http调用示例
curl -X POST -H "Content-Type:application/json" \
-d "{\"consulAddress\":\"online consul\",\"content\":\"All instance of user-service are unhealthy.\",\"serviceName\":\"user-service\"}" \
"http://192.168.80.180:31767/api/v1/consul/alert"
- 接口设计
## Consul健康告警**接口地址**:`/api/v1/consul/alert`**请求方式**:`POST`**请求数据类型**:`application/json````javascript
{"consulAddress": "192.168.10.61:8500","content": "","serviceName": "user-service"
}
请求参数:
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|---|
| consulAlertDTO | consulAlertDTO | body | true | ConsulAlertDTO | ConsulAlertDTO |
| consulAddress | consul地址 | true | string | ||
| content | 内容 | false | string | ||
| serviceName | 服务名称 | true | string |
接口的实现,这里就不进行详述了。
当发现某个服务没有一个健康可用的实例时,相关人员将收到告警消息。

相关文章:
服务注册中心consul的服务健康监控及告警
一、背景 consul既可以作为服务注册中心,也可以作为分布式配置中心。当它作为服务注册中心的时候,java微服务之间的调用,会定期查询服务的实例列表,并且实例的状态是健康可用。 如果发现被调用的服务,注册到consul的…...
【算法第十四天7.28】二叉树的最大深度,二叉树的最小深度 ,完全二叉树的节点个数
链接力扣104-二叉树的最大深度 思路 class Solution {public int maxDepth(TreeNode root) {if(root null) return 0;if(root.left null) return maxDepth(root.right) 1;if(root.right null) return maxDepth(root.left) 1;int max Math.max(maxDepth(root.left),maxD…...
网络安全设备-等保一体机
本文为作者学习文章,按作者习惯写成,如有错误或需要追加内容请留言(不喜勿喷) 本文为追加文章,后期慢慢追加 等保一体机的功能 等保一体机产品主要依赖于其丰富的安全网元(安全网元包括:防火…...
Kafka的配置和使用
目录 1.服务器用docker安装kafka 2.springboot集成kafka实现生产者和消费者 1.服务器用docker安装kafka ①、安装docker(docker类似于linux的软件商店,下载所有应用都能从docker去下载) a、自动安装 curl -fsSL https://get.docker.com | b…...
【C++】unordered_map在Windows和Linux上的不同行为
我目前手头上的项目,需要编译在板端Linux上运行,但是日常daily调试多在Windows上开发。这就涉及到同一份代码在多平台上的编译个运行。有一次遇到了一个奇怪的现象:跑同样的一份代码,Windows和Linux出来的结果是不一致的。最终确定…...
Apipost三方消息通知,接口变更不用愁
Apipost致力于为开发者提供更全面的API管理功能。而最近,Apipost又新增了一个非常实用的功能:第三方消息推送。这个功能可以帮助开发人员及时了解API的变更情况,从而更好地管理和优化自己的API。 具体来说,Apipost的第三方消息推…...
C语言 用数组名作函数参数
当用数组名作函数参数时,如果形参数组中各元素的值发生变化,实参数组元素的值随之变化。 1.数组元素做实参的情况: 如果已经定义一个函数,其原型为 void swap(int x,int y);假设函数的作用是将两个形参(x,y…...
每日一题(980. 不同路径 III)-回溯
题目 980. 不同路径 III 题解思路 表格中值为1的为起始点值为0 的是可以经过的点,但是只能经过一次值为2 的是终点,计算从起点到终点一共有多少种路径 计算出值为0的方格个数,同时找到起点位置当位于终点时候且经过所有的方格为0的点 即为…...
【Python:json常用函数,用于加载和保存json文件】load(), loads(), dump(), dumps()
文章目录 1、load()2、loads()3、dump()4、dumps() json文件为javascript object Notation文件,属于轻量级的数据交换格式,可以用于存储和交换数据。json文件是由类似{ }的key-value映射组成。 1、load() 把json文件加载为Python的数据格式,…...
Flink State 和 Fault Tolerance详解
有状态操作或者操作算子在处理DataStream的元素或者事件的时候需要存储计算的中间状态,这就使得状态在整个Flink的精细化计算中有着非常重要的地位: 记录数据从某一个过去时间点到当前时间的状态信息。以每分钟/小时/天汇总事件时,状态将保留…...
小红书2023“家生活”趋势白皮书
关于报告的所有内容,公众【营销人星球】获取下载查看 核心观点 近年来,年轻人与家的关系愈发紧密。 在小红书上,我们观察到了家居家装内容的蓬勃生长,3 年来相关内容的笔记规模增长了6倍,相关品类的搜索量增加的 3.…...
使用 LangChain 搭建基于 Amazon DynamoDB 的大语言模型应用
LangChain 是一个旨在简化使用大型语言模型创建应用程序的框架。作为语言模型集成框架,在这个应用场景中,LangChain 将与 Amazon DynamoDB 紧密结合,构建一个完整的基于大语言模型的聊天应用。 本次活动,我们特意邀请了亚马逊云科…...
210. 课程表 II Python
文章目录 一、题目描述示例 1示例 2示例 3 二、代码三、解题思路 一、题目描述 现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] [ai, bi] ,表示在选修课程 ai 前 必须 …...
【LeetCode 算法】Linked List Cycle II 环形链表 II
文章目录 Linked List Cycle II 环形链表 II问题描述:分析代码哈希快慢指针 Tag Linked List Cycle II 环形链表 II 问题描述: 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链…...
蒸散发与植被总初级生产力估算
目标 熟悉蒸散发ET及其组分(植被蒸腾Ec、土壤蒸发Es、冠层截留Ei)、植被总初级生产力GPP的概念和碳水耦合的基本原理;掌握利用Python与ArcGIS工具进行课程相关的操作;熟练掌握国际上流行的Penman-Monteith模型,并能够…...
uniapp微信小程序底部弹窗自定义组件
基础弹窗效果组件 <template><view><viewclass"tui-actionsheet-class tui-actionsheet":class"[show ? tui-actionsheet-show : ]"><view class"regional-selection">底部弹窗</view></view><!-- 遮罩…...
人工智能的最新进展:2024年将会发生什么?
文章目录 2024年AI最新发展2024年AI具体应用2024年AI的具体预测 ✍创作者:全栈弄潮儿 🏡 个人主页: 全栈弄潮儿的个人主页 🏙️ 个人社区,欢迎你的加入:全栈弄潮儿的个人社区 📙 专栏地址&#…...
使用Golang实现一套流程可配置,适用于广告、推荐系统的业务性框架——组合应用
在《使用Golang实现一套流程可配置,适用于广告、推荐系统的业务性框架——简单应用》中,我们看到了各种组合Handler的组件,如HandlerGroup和Layer。这些组件下面的子模块又是不同组件,比如LayerCenter的子组件是Layer。如果此时我…...
DNS入门学习:DNS缓存的原理和作用(中科三方)
在实际业务场景中,DNS解析过程并不总是严格遵循从根域名服务器、顶级域名服务器再到权威域名服务器的一级级查询过程,这只是一个标准状态。为了节省全球查询的时间,同时减轻各级服务器的解析压力,DNS系统中引入了缓存机制。本文中…...
Linux虚拟机安装tomcat(图文详解)
目录 第一章、xshell工具和xftp的使用1.1)xshell下载与安装1.2)xshell连接1.3)xftp下载安装和连接 第二章、安装tomcat1.1)关闭防火墙,传输tomcat压缩包到Linux虚拟机12)启动tomcat 第一章、xshell工具和xf…...
DHT温湿度传感器高精度驱动设计与工程实践
1. DHT系列温湿度传感器驱动库深度解析与工程实践DHT系列传感器(DHT11、DHT22、AM2302)是嵌入式系统中应用最广泛的低成本数字温湿度传感方案之一。其单总线异步通信协议、无需外部上拉电阻(部分型号)、宽工作电压范围(…...
VidCoder:解决视频转码与苹果设备兼容问题的免费工具
你是否遇到过这样的情况:下载的电影是MKV格式,想在iPhone或iPad上播放,却发现无法导入;从网上下载的视频太大,想压缩后发送给朋友,却找不到合适的工具;或者你有一张DVD光盘,想把里面…...
春联生成模型中文版快速部署教程:3步完成环境配置
春联生成模型中文版快速部署教程:3步完成环境配置 想快速在Linux服务器上部署一个能写春联的AI模型吗?这篇教程将手把手带你完成从零到一的部署过程,无需深厚的技术背景,跟着步骤走就能搞定。 1. 环境准备:安装基础依赖…...
Source Han Serif CN:免费开源宋体的7种字重完整使用教程
Source Han Serif CN:免费开源宋体的7种字重完整使用教程 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为商业项目寻找高质量中文字体而烦恼吗?Source Ha…...
UE5特效与逻辑分离实战:用Niagara做炫酷弹道,用蓝图处理伤害判定(避坑指南)
UE5特效与逻辑分离实战:用Niagara做炫酷弹道,用蓝图处理伤害判定(避坑指南) 在UE5游戏开发中,弹道效果的处理往往面临一个核心矛盾:既要追求视觉上的华丽表现,又要确保游戏逻辑的精确性。传统做…...
终极指南:如何在macOS上快速安装QLVideo视频预览神器
终极指南:如何在macOS上快速安装QLVideo视频预览神器 【免费下载链接】QuickLookVideo This package allows macOS Finder to display thumbnails, static QuickLook previews, cover art and metadata for most types of video files. 项目地址: https://gitcode…...
Pi0机器人控制中心边缘计算效果展示:低延迟实时控制演示
Pi0机器人控制中心边缘计算效果展示:低延迟实时控制演示 1. 引言 想象一下,一个机器人能够像人类一样快速响应指令,几乎感觉不到任何延迟——你让它抬手,它瞬间抬手;你让它转向,它立即转向。这种流畅的实…...
XCA 2.9.0:高效管理数字证书与密钥的全面解决方案
XCA 2.9.0:高效管理数字证书与密钥的全面解决方案 【免费下载链接】xca X Certificate and Key management 项目地址: https://gitcode.com/gh_mirrors/xc/xca XCA(X Certificate and Key Management)是一款开源的图形化证书和密钥管理…...
树莓派3 GPIO避坑指南:从引脚烧毁到代码报错的10个常见问题(附解决方案)
树莓派3 GPIO避坑指南:从引脚烧毁到代码报错的10个常见问题(附解决方案) 当你第一次将LED连接到树莓派的GPIO引脚,却发现它死活不亮时,那种挫败感简直让人抓狂。更糟的是,你可能还会闻到一股焦糊味——没错…...
LCD屏幕闪烁(Flicker)的幕后元凶:用示波器实测VCOM电压,手把手教你调校
LCD屏幕闪烁(Flicker)的实战调校指南:从示波器测量到VCOM优化 当一块LCD屏幕在你面前不停闪烁时,那种视觉上的不适感会立刻转化为工程师的职业焦虑。Flicker现象不仅影响用户体验,更可能是产品设计缺陷的警示信号。作为…...
