zookeeper监控告警
一、ZooKeeper简介
ZooKeeper作为分布式系统中重要的组件,目前在业界使用越来越广泛,ZooKeeper的使用场景非常多,以下是几种典型的应用场景:
l 数据发布与订阅(配置中心)
l 负载均衡
l 命名服务(Naming Service)
l 分布式通知/协调
l 集群管理与Master选举
l 分布式锁
zk环境搭建
这里不详细说明,提供详细blog说明。
Zookeeper集群搭建:https://cloud.tencent.com/developer/article/1021111
Zookeeper配置文件详解:https://cloud.tencent.com/developer/article/1021117
Zookeeper常用四字命令:https://cloud.tencent.com/developer/article/1021119
二、ZooKeeper监控
在部门内部,有不少应用已经强依赖ZooKeeper,ZooKeeper的工作状态直接影响它们的正常工作。先来看一看哪些因素对ZooKeeper正常工作有比较大的影响:
影响ZooKeeper工作的主要因素
l 用于zookeeper写事务日志的目录要有足够大小,并且强烈建议在单独的磁盘(挂载点)上,这是影响ZK性能最大因素之一。
l 连接数。
l 注册的Watcher数。
l ZNode是否可读,可写。
l ZK事件通知的延时是否过大。
针对监控平台的以上几点要求,部内内部选用了目前使用业界已经比较成熟的阿里开源ZooKeeper监控框架TaoKeeper。
TaoKeeper源码及搭建方法参考https://github.com/alibaba/taokeeper
TaoKeeper介绍
TaoKeeper是阿里开源ZooKeeper监控告警框架,提供以下功能:
l CPU/MEM/LOAD的监控
l ZK日志目录所在磁盘剩余空间监控
l 单机连接数的峰值报警
l 单机 Watcher数的峰值报警
l 节点自检:是指对集群中每个IP所在ZK节点上的PATH: /YINSHI.MONITOR.ALIVE.CHECK 定期进行三次如下流程 : 节点连接 - 数据发布 - 修改通知 - 获取数据 - 数据对比, 在指定的延时内,三次流程均成功视为该节点处于正常状态。
工作原理
Taokeeper通过SSH连接到ZooKeeper部署的机器上,再在上面执行ZooKeeper的四字命令来得到统计信息,再分析保存到mysql数据库中。 监控目标机器的负载,也是通过SSH连接到目标机器,再执行top等命令,再分析得到数据。
常见四字命令:
l echo stat|nc 127.0.0.1 2181 来查看哪个节点被选择作为follower或者leader
l echo ruok|nc 127.0.0.1 2181 测试是否启动了该Server,若回复imok表示已经启动。
l echo cons | nc 127.0.0.1 2181 列出所有连接到服务器的客户端的完全的连接/会话的详情。
l echo wchs | nc 127.0.0.1 2181 列出服务器 watch 的详细信息。
注意事项
1 taokeeper通过ssh信道到访登录每台机器,需要打开ssh的password登陆方式,不然taokeeper运行时会出现authentication failed错误。打开方式如下:
l 对于contos机器(sshd版本为标准OpenSSL):需要把sshd配置文件中(本机为/etc/ssh/sshd_config.l)中PasswordAuthentication变量设置成yes;
l 对于suse机器(sshd版本为SSH Secure Shell):需要把sshd配置文件中(本机为/etc/ssh2/sshd2_config.l)中AllowedAuthentications变量加上password(AllowedAuthentications publickey,keyboard-interactive,password);
2 监控的每台机器需要安装nc命令(suse中叫netcat,可以直接做个软链到nc)
使用TaoKeeper,目前已建立起部门内ZooKeeper的监控视图
ZooKeeper集群实时状态
点击查看按钮可以查看具体信息
Watch数
连接数
集群状态趋势图
新增监控集群
三、ZooKeeper告警
TaoKeeper查看主要针对以下几个维度:
l ZooKeeper宕机告警
l 单机连接数超过阀值告警
l 单机Watch数超过阀值告警
l 磁盘,CPU,内存超过阀值告警
或自己使用四字命令+nc写脚本去做告警也行,这里不再详述。
- Java后端实现图片压缩技术(赞赏功能已开通,欢迎测试,噗~!)
- 我是如何得知10W+的访问量多来自工作日的 | 塔秘
- 使用百度UMeditor富文本编辑器,修改自定义图片上传,修改源码
- 【技术专栏】OpenVirteX体系结构之组件(一)
- 洞察 | 深圳数据分析师的职业前景如何?爬完拉勾数据给你分析 (附代码和过程)
- 【温故】金融数据挖掘之朴素贝叶斯
- 为你的网站加上SSL,可以使用HTTPS进行访问
- LeeCX - 开源后台管理系统简单介绍
- fastdfs 图片服务器 使用java端作为客户端上传图片
- Shiro系列(3) - What is shiro?
- 干货|用python抓取摩拜单车API数据并做可视化分析(源码)
- 干货|机器学习:Python实现聚类算法之K-Means
- 美团点餐—listview内部按钮点击事件
- C4C和CRM里获取当前登录用户分配的Organization Unit信息
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Nodejs 一些细节 (持续更新)
- Jenkins 凭据使用
- React源码解读【一】API复习与基础
- choco 安装 和 mkcert 本地https
- js 函数柯里化(Currying)
- GPS数据Python解析及地图可视化
- 文稿:Ant Design从无到有,带你体悟大厂前端开发范式
- 在React中实现和Vue一样舒适的keep-alive
- uniapp获取接口数据,渲染在picker选择器里面
- 我们是这样一步一步实现分布式锁的
- 缓存并发神技,如何通过双 key 来解决缓存并发问题?
- LRU缓存淘汰算法实现方案,这次没人再说你不会开发
- JVM技术总结之三——类加载机制
- 为什么你每次被问到HashMap底层原理都一知半解,搞定它
- 要想精通java,你必须得知道java的内存模型,不忽悠