[Zookeeper-3.6.2源码解析系列]-10-可观测性信息的开启
目录
- 10-可观测性信息的开启
- 10.1 Log4j JMX mbean
- 10.2 Metrics开启指标数据采集
10-可观测性信息的开启
10.1 Log4j JMX mbean
针对Java的JMX MBean可以参考地址:JMX官网链接
先来看第一步注册log4j JMX mbean 设置环境变量zookeeper.jmx.log4j.disable
为true可以禁用注册.
我们往往需要运行时调整一下日志记录水平参数,又不想重启进程然后将配置全部重新Load一次, JMX就排上用场了。Log4j是内置JMX的支持,对于这个问题是有很好的解决的。只需要把相应的Log4j对象包装到MBean中去并注册到MBean服务器中去便可通过相应MBean管理环境来进行日志记录水平运行时调整。关于JMX的介绍也可以参考这个文章JMX超详细解读
这里主要通过添加org.apache.log4j.jmx.HierarchyDynamicMBean来实现在运行时对log4j的控制
在runFromConfig配置加载的第一行有这么一个代码:
ManagedUtil.registerLog4jMBeans();
如下所示:
public static void registerLog4jMBeans() throws JMException {if (isLog4jJmxEnabled()) {LOG.debug("registerLog4jMBeans()");MBeanServer mbs = MBeanRegistry.getInstance().getPlatformMBeanServer();try {// Create and Register the top level Log4J MBean// org.apache.log4j.jmx.HierarchyDynamicMBean hdm = new org.apache.log4j.jmx.HierarchyDynamicMBean();Object hdm = Class.forName("org.apache.log4j.jmx.HierarchyDynamicMBean").getConstructor().newInstance();String mbean = System.getProperty("zookeeper.jmx.log4j.mbean", "log4j:hierarchy=default");ObjectName mbo = new ObjectName(mbean);mbs.registerMBean(hdm, mbo);// Add the root logger to the Hierarchy MBean// org.apache.log4j.Logger rootLogger =// org.apache.log4j.Logger.getRootLogger();Object rootLogger = Class.forName("org.apache.log4j.Logger").getMethod("getRootLogger", (Class<?>[]) null).invoke(null, (Object[]) null);// hdm.addLoggerMBean(rootLogger.getName());Object rootLoggerName = rootLogger.getClass().getMethod("getName", (Class<?>[]) null).invoke(rootLogger, (Object[]) null);hdm.getClass().getMethod("addLoggerMBean", String.class).invoke(hdm, rootLoggerName);// Get each logger from the Log4J Repository and add it to the// Hierarchy MBean created above.// org.apache.log4j.spi.LoggerRepository r =// org.apache.log4j.LogManager.getLoggerRepository();Object r = Class.forName("org.apache.log4j.LogManager").getMethod("getLoggerRepository", (Class<?>[]) null).invoke(null, (Object[]) null);// Enumeration enumer = r.getCurrentLoggers();Enumeration enumer = (Enumeration) r.getClass().getMethod("getCurrentLoggers", (Class<?>[]) null).invoke(r, (Object[]) null);while (enumer.hasMoreElements()) {Object logger = enumer.nextElement();// hdm.addLoggerMBean(logger.getName());Object loggerName = logger.getClass().getMethod("getName", (Class<?>[]) null).invoke(logger, (Object[]) null);hdm.getClass().getMethod("addLoggerMBean", String.class).invoke(hdm, loggerName);}} catch (Exception e) {LOG.error("Problems while registering log4j 1.2 jmx beans!", e);throw new JMException(e.toString());}}}
10.2 Metrics开启指标数据采集
指标数据可以用来监控,优化等功能使用比如我们系统提供的PrometheusMetricsProvider
可以有效的将监控数据转化为普罗米修斯监控系统需要的数据指标。
指标数据收集开启主要代码如下:
final MetricsProvider metricsProvider;try {metricsProvider = MetricsProviderBootstrap.startMetricsProvider(config.getMetricsProviderClassName(),config.getMetricsProviderConfiguration());} catch (MetricsProviderLifeCycleException error) {throw new IOException("Cannot boot MetricsProvider " + config.getMetricsProviderClassName(), error);}try {ServerMetrics.metricsProviderInitialized(metricsProvider);
通过配置中的指标提供类型和配置来初始化指标提供器:MetricsProvider类型,
MetricsProvider是一个收集度量指标并向外部服务发布当前值的系统,provider既可以在ZooKeeper服务器上使用,也可以在ZooKeeper客户端使用
目前系统主要提供了如下指标提供器类型:
- DefaultMetricsProvider:
系统默认的配置,主要的数据指标可以通过开启Zookeeper四字命令然后输入四字命令获取数据
例如mntr四字命令获取监控数据
echo "mntr" |nc 127.0.0.1 2181
结果如下:
➜ github echo "mntr" |nc 127.0.0.1 2181
zk_version 3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT
zk_avg_latency 0
zk_max_latency 696
zk_min_latency 0
zk_packets_received 7178
zk_packets_sent 7181
zk_num_alive_connections 1
zk_outstanding_requests 0
zk_server_state standalone
zk_znode_count 36
zk_watch_count 0
zk_ephemerals_count 0
zk_approximate_data_size 5955
zk_open_file_descriptor_count 34
zk_max_file_descriptor_count 10240
zk_fsync_threshold_exceed_count 0
NullMetricsProvider 什么也不做
PrometheusMetricsProvider
将数据指标输出给外部服务普罗米修斯监控,在zoo.cfg配置信息方式如下:配置普罗米修斯数据提供器
metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider提供服务的端口
metricsProvider.httpPort=7000是否输出jvm信息
metricsProvider.exportJvmInfo=true
查看原文,技术咨询与支持,可以扫描微信公众号进行回复咨询
[Zookeeper-3.6.2源码解析系列]-10-可观测性信息的开启相关推荐
- Redux 源码解析系列(一) -- Redux的实现思想
文章来源: IMweb前端社区 黄qiong(imweb.io) IMweb团队正在招聘啦,简历发至jayccchen@tencent.com Redux 其实是用来帮我们管理状态的一个框架,它暴露给 ...
- TiKV 源码解析系列文章(二)raft-rs proposal 示例情景分析
作者:屈鹏 本文为 TiKV 源码解析系列的第二篇,按照计划首先将为大家介绍 TiKV 依赖的周边库 raft-rs .raft-rs 是 Raft 算法的 Rust 语言实现.Raft 是分布式领域 ...
- Tomcat源码解析系列二:Tomcat总体架构
Tomcat即是一个HTTP服务器,也是一个servlet容器,主要目的就是包装servlet,并对请求响应相应的servlet,纯servlet的web应用似乎很好理解Tomcat是如何装载serv ...
- prometheus变量_TiKV 源码解析系列文章(四)Prometheus(下)
本文为 TiKV 源码解析系列的第四篇,接上篇继续为大家介绍 rust-prometheus.上篇主要介绍了基础知识以及最基本的几个指标的内部工作机制,本篇会进一步介绍更多高级功能的实现原理. 与上篇 ...
- TiKV 源码解析系列 - Raft 的优化
这篇文章转载TiDB大牛 唐刘 的博客:https://mp.weixin.qq.com/s?__biz=MzI3NDIxNTQyOQ==&mid=2247484544&idx=1&a ...
- Netty 源码解析系列-服务端启动流程解析
netty源码解析系列 Netty 源码解析系列-服务端启动流程解析 Netty 源码解析系列-客户端连接接入及读I/O解析 五分钟就能看懂pipeline模型 -Netty 源码解析 1.服务端启动 ...
- Mybatis3 源码解析系列
简介 Mybatis作为一个优秀的Java持久化框架,在我们的日常工作中相信都会用到,本次源码解析系列,就开始探索下Mybatis 总结 在MyBatis的学习中,首先通读了<MyBatis3源 ...
- openGauss数据库源码解析系列文章——openGauss开发快速入门(二)
在上一篇openGauss数据库源码解析系列文章--openGauss开发快速入门(上)中,我们介绍了openGauss的安装部署方法,本篇将具体介绍openGauss基本使用. 二. openGau ...
- openGauss数据库源码解析系列文章--openGauss简介(一)
openGauss数据库是华为深度融合在数据库领域多年经验,结合企业级场景要求推出的新一代企业级开源数据库.此前,Gauss松鼠会已经发布了openGauss数据库核心技术系列文章,介绍了openGa ...
- SkeyePlayer RTSP/RTMP流媒体超低延迟播放器源码解析系列之H264一帧多NAL写MP4录像花屏问题解决方案
接上一篇[SkeyePlayer源码解析系列之录像写MP4]之续篇,我们来讲解一下关于H264编码格式中的一帧多nal(Network Abstract Layer, 即网络抽象层),关于H264和N ...
最新文章
- 重庆理工大学两江校区计算机学院,重庆理工大学两江校区国际项目9月开学
- android实战技巧,实战技巧:Android异步指南
- 自动化缺陷检测系统---项目总览
- pdf批量转换为图片
- 工业无线开关量信号传输器
- EasyBoot教程一:制作WIN7原版多重启动盘方法
- RabbitMQ-operation queue.declare caused a channel exception precondition_failed错误
- cad图转成shp文件并把其平面坐标投影配准成大地坐标(配准针对没有底图的情况)
- 初级C语言之【操作符】
- 你可以把Linux内核当成一家软件外包公司的老板
- springboot整合websocket异常集合
- 戴尔台式机修复计算机,dell电脑win10自动修复你的电脑未正确启动怎么修复
- AD生成BOM表_材料清单 (Bill of Material)
- C51编程语言bit和sbit,你知道bit和sbit有什么区别吗
- 作为PM,要知道的四类产品文档
- 5G能否成化合物半导体产业突破口
- Hbuild-X使用生成签名证书失败,怎么解决 +云打包
- 【豆舞咖啡】量变到质变
- 详解Oracle统计信息
- [单调栈]「Poetize4」玉蟾宫