监控最佳实践--redis及业务接口
简介: 监控最佳实践--redis及业务接口
1. 背景
1.1 问题
2020-12-04,客户侧redis集群版监控DB0 CPU突增至100%,导致数据库无法正常服务,经排查客户侧业务上存在2M左右的大key导致DB0阻塞。并且客户侧使用的集群连接方式为默认proxy模式,如下图所示,DB0阻塞导致其他节点也无法正常服务;处理办法:客户侧配合切断大key业务的高频繁次调用,请求恢复。
图1:proxy模式
1.2 思考
此次问题导致客户侧课程报名入口严重受损,进而引发深度思考。在使用redis等产品方面的监控报警手段不够完善,不够仔细,并且后续再查看业务日志发现错误率已经逐渐增多,直至redis层面表现出来才get到问题所在。针对此次redis的大key问题,给客户提供了关于大key以及热点key的分析办法,并建议完善客户侧监控报警的可读性以及业务日志接口的错误告警。
2. 数据库监控分析
2.1 redis监控指标分享
redis集群版云监控指标如下表所示。
|
监控项 |
单位 |
MetricName |
Dimensions |
Statistics |
|
平均响应时间 |
us |
ShardingAvgRt |
userId、instanceId、nodeId |
Average、Maximum |
|
连接数使用率 |
% |
ShardingConnectionUsage |
userId、instanceId、nodeId |
Average、Maximum |
|
CPU使用率 |
% |
ShardingCpuUsage |
userId、instanceId、nodeId |
Average、Maximum |
|
命中率 |
% |
ShardingHitRate |
userId、instanceId、nodeId |
Average、Maximum |
|
入方向流量 |
KByte/s |
ShardingIntranetIn |
userId、instanceId、nodeId |
Average、Maximum |
|
流入带宽使用率 |
% |
ShardingIntranetInRatio |
userId、instanceId、nodeId |
Average、Maximum |
|
出方向流量 |
KByte/s |
ShardingIntranetOut |
userId、instanceId、nodeId |
Average、Maximum |
|
流出带宽使用率 |
% |
ShardingIntranetOutRatio |
userId、instanceId、nodeId |
Average、Maximum |
|
缓存内Key数量 |
个 |
ShardingKeys |
userId、instanceId、nodeId |
Average、Maximum |
|
最大响应时间 |
us |
ShardingMaxRt |
userId、instanceId、nodeId |
Average、Maximum |
|
内存使用率 |
% |
ShardingMemoryUsage |
userId、instanceId、nodeId |
Average、Maximum |
|
QPS使用率 |
% |
ShardingQPSUsage |
userId、instanceId、nodeId |
Average、Maximum |
|
已用连接数 |
个 |
ShardingUsedConnection |
userId、instanceId、nodeId |
Average、Maximum |
|
内存使用量 |
Bytes |
ShardingUsedMemory |
userId、instanceId、nodeId |
Average、Maximum、Sum |
|
平均每秒访问次数 |
个 |
ShardingUsedQPS |
userId、instanceId、nodeId |
Average、Maximum |
2.2 redis大key分析
1.在控制台选择对应的实例,进行大key及Hot key分析处理。
图2:实例分析
2.利用API接口进行分析大 key以及Hot key。
缓存分析与热点Key查询可参考文后资料了解详情[1]。
2.3 数据库同环比监控
创建分组报警规则目前已更新至分组界面。
2.3.1 创建应用分组
图3:创建应用分组
2.3.2 创建报警规则
图4:创建报警规则
图5:设置报警规则
3. 日志监控
利用sls接入客户端日志,可以通过设定规则建立仪表盘以及实现报警。此方案日志接入采取logtail方式内网传输。
3.1 安装logtail
安装logtail方法可参考文后资料[2]。
3.2 创建project和logstore
登录日志服务控制台,依次创建对应地域的project及logstore。
图6:project-logstore创建
3.3 数据接入向导
此次客户侧日志格式分别为json、log4j。
3.3.1 json
选择json文本日志>选择现有机器组>对应logtail配置
图7:logtail配置
1.设置索引
对于多重json日志,需要将字段类型更改为json。
图8:设置索引
2.查询分析
图9:查询分析
3.3.2 log4j
选择正则文本日志>选择现有机器组>对应logtail配置
1.正则识别首行
图10:设置自动生成
2.提取字段
图11: 日志提取字段
3.设置索引
注意:只对新写入数据生效。
图12:设置索引
4.查询分析
图13:查询分析
3.4 日志报警
3.4.1 仪表盘
图14:仪表盘信息展示
3.4.2 报警
在仪表右上侧导航栏中单击告警,在下拉菜单中选择创建。
图15:创建告警
图16:告警内容设置
作者:SRE团队技术小编-小凌
本文为阿里云原创内容,未经允许不得转载
监控最佳实践--redis及业务接口的更多相关文章
- Sentry 后端监控 - 最佳实践(官方教程)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- 【Yii系列】最佳实践之后台业务框架
缘起 上面的几章都讲概念了,没有怎么讲到实践的东西,可能会有些枯燥,这很正常的,概念还是需要慢慢啃的,尤其是官网其他的部分,需要狠狠的啃. 什么,你啃不动了?看看官网旁边的那个在线用户吧. 你不啃的时 ...
- Sentry Web 前端监控 - 最佳实践(官方教程)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- iOS系统中导航栏的转场解决方案与最佳实践
背景 目前,开源社区和业界内已经存在一些 iOS 导航栏转场的解决方案,但对于历史包袱沉重的美团 App 而言,这些解决方案并不完美.有的方案不能满足复杂的页面跳转场景,有的方案迁移成本较大,为此我们 ...
- DDD实战进阶第一波(八):开发一般业务的大健康行业直销系统(业务逻辑条件判断最佳实践)
这篇文章其实是大健康行业直销系统的番外篇,主要给大家讲讲如何在领域逻辑中,有效的处理业务逻辑条件判断的最佳实践问题. 大家都知道,聚合根.实体和值对象这些领域对象都自身处理自己的业务逻辑.在业务处理过 ...
- 京东前端:PhantomJS 和NodeJS在网站前端监控平台的最佳实践
1. 为什么需要一个前端监控系统 通常在一个大型的 Web 项目中有很多监控系统,比如后端的服务 API 监控,接口存活.调用.延迟等监控,这些一般都用来监控后台接口数据层面的信息.而且对于大型网站系 ...
- .NET API 接口数据传输加密最佳实践
.NET API 接口数据传输加密最佳实践 我们在做 Api 接口时,相信一定会有接触到要给传输的请求 body 的内容进行加密传输.其目的就是为了防止一些敏感的内容直接被 UI 层查看或篡改. 其实 ...
- RESTful接口设计原则/最佳实践(学习笔记)
RESTful接口设计原则/最佳实践(学习笔记) 原文地址:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api 1 ...
- atitit.基于http json api 接口设计 最佳实践 总结o7
atitit.基于http json api 接口设计 最佳实践 总结o7 1. 需求:::服务器and android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通参数 meth,p ...
- Kubernetes集群的监控报警策略最佳实践
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/M2l0ZgSsVc7r69eFdTj/article/details/79652064 本文为Kub ...
随机推荐
- C++ allocator类
new在申请内存时,他将内存分配和对象的构造放在了一起,delete也将对象的析构和内存的释放结合在一起.但allocator类允许将内存分配和对象构造分开. 分配内存 allocator<st ...
- x86 常见调用约定(cdecl,fastcall,stdcall) & x86和ARM调用约定的栈帧分析 & ARM ATPCS(ARM-THUMB procedure call standard)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- terminate called after throwing an instance of 'std::regex_error'(C++11)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- Django:Could not find backend 'django_redis.cache.RedisCache': cannot import name 'six'
1.报错内容: django.core.cache.backends.base.InvalidCacheBackendError: Could not find backend 'django_red ...
- 【ATCOER、D - ±1 Operation 2】前缀和+排序二分
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; public cla ...
- Android之Window和弹窗问题
目录介绍 10.0.0.1 Window是什么?如何通过WindowManager添加Window(代码实现)?WindowManager的主要功能是什么? 10.0.0.2 Window概念解析?W ...
- Cesium之DrawCommand与绘制三角形
1. 引言 Cesium中的Command对象包含执行的指令参数和执行方法,Command对象主要有三类: ClearCommand DrawCommand ComputeCommand DrawCo ...
- Vue中的$nextTick有什么作用?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.NextTick是什么 官方对其的定义 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 D ...
- Web Audio API 第2章 完美的播放时机控制
Web Audio API 第2章 完美的播放时机控制 相较于 标签, Web Audio API 拥有低延迟精确定时模型. 低延时对于游戏或交互式应用来说非常重要,因为交互操作时要快速响应给用户的听 ...
- 使用Go语言开发一个短链接服务:四、生成code算法
章节 使用Go语言开发一个短链接服务:一.基本原理 使用Go语言开发一个短链接服务:二.架构设计 使用Go语言开发一个短链接服务:三.项目目录结构设计 使用Go语言开发一个短链接服务:四.生成 ...