Springboot+Hbase获取regions信息并上报到metrics接口中

这篇具有很好参考价值的文章主要介绍了Springboot+Hbase获取regions信息并上报到metrics接口中。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 添加HBase和Micrometer依赖
<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
  </dependency>
	
  <dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-client</artifactId>
  </dependency>
  <dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-core</artifactId>
    <version>1.9.0</version>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>micrometer-core</artifactId>
            <groupId>io.micrometer</groupId>
        </exclusion>
    </exclusions>
 </dependency>
 <dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    <version>1.9.0</version>
 </dependency>
</dependencies>
2. 新增HBase配置文件
<configuration>
    <!--
    Check out the properties here
    https://github.com/apache/hbase/blob/master/hbase-server/src/test/resources/hbase-site.xml
    -->
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>manager01,manager02,manager03</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>2181</value>
    </property>
    <property>
        <name>base.client.scanner.caching</name>
        <value>1000</value>
    </property>
    <property>
        <name>zookeeper.session.timeout</name>
        <value>60000</value>
    </property>

    <property>
        <name>zookeeper.znode.parent</name>
        <value>/hbase-unsecure</value>
    </property>

</configuration>
3. 编写服务获取HBase Admin客户端
@Slf4j
@Data
public class HBaseUtil implements Closeable {

    private static HBaseUtil hBaseUtil = null;

    private Configuration configuration = null;
    private Connection connection = null;
    private Admin admin = null;

 	@Override
    public void close() throws IOException {
        connection.close();
    }

    private HBaseUtil(Configuration configuration) throws IOException, ServiceException {
        this.configuration = configuration;
        HBaseAdmin.available(this.configuration);
        this.connection = ConnectionFactory.createConnection(configuration);
        this.admin = connection.getAdmin();
    }

    public static HBaseUtil getInstance() {
        if (hBaseUtil == null) {
            try {
                Configuration configuration = HBaseConfiguration.create();
        String path = HBaseUtil.class
                .getClassLoader()
                .getResource("config/hbase-site.xml")
                .getPath();
        System.out.println(path);
        configuration.addResource(new org.apache.hadoop.fs.Path(path));
                hBaseUtil = new HBaseUtil(configuration);
            } catch (IOException | ServiceException ex) {
                ex.printStackTrace();
            }
        }
        return hBaseUtil;
    }
    public List<ServerName> listAllServerName() throws IOException {
        List<ServerName> serverNames = new ArrayList<>();
        serverNames.addAll(admin.getClusterStatus().getServers());
        log.info("==========serverNames==============" + serverNames.size());
        return serverNames;
    }
	
	  public List<RegionInfo> listRegionsInfo(ServerName serverName) throws IOException {
        return admin.getRegions(serverName);
    }
   .......
 }
 
4. 获取regions信息并上报
@Service
@Slf4j
public class HBaseService {

    private static HBaseUtil hBaseUtil;

    @Autowired
    private MeterRegistry meterRegistry;


    public HBaseService() {
        hBaseUtil = HBaseUtil.getInstance();
    }

    /**
     * 处理Regions指标数据
     *
     * @throws Exception
     */
    public void exposeRegionMetrics() throws IOException {
        List<ServerName> serverNames = hBaseUtil.listAllServerName();
        for (TableName curTableName : tableNames) {
            List<RegionInfo> curRegions = hBaseUtil.listRegionsInfo(curTableName);
            // table中regions分区数量指标
            HBaseRegionNumsMetrics hBaseRegionNumsMetrics = HBaseRegionNumsMetrics.builder()
                    .nameSpace(curTableName.getNamespaceAsString())
                    .tableName(curTableName.getNameAsString())
                    .nums(curRegions.size())
                    .build();
            numsMetrics.add(hBaseRegionNumsMetrics);

            List<RegionMetrics> regionMetricsList = hBaseUtil.listRegionMetrics(curTableName, serverNames);
            regionMetricsList.forEach(r -> {
                // 文件数量指标
                HBaseRegionStoreCountMetrics curStoreCountMetrics = HBaseRegionStoreCountMetrics.builder()
                        .regionsName(r.getNameAsString())
                        .storeCount((long) r.getStoreCount())
                        .tableName(curTableName.getNameAsString()).build();
                storeCountMetrics.add(curStoreCountMetrics);
                // 总文件大小指标 MB
                HBaseRegionStoreSizeMetrics curStoreSizeMetrics = HBaseRegionStoreSizeMetrics.builder()
                        .regionsName(r.getNameAsString())
                        .storeSize(r.getStoreFileSize().getLongValue())
                        .tableName(curTableName.getNameAsString()).build();
                storeSizeMetrics.add(curStoreSizeMetrics);
            });

        }
        for (HBaseRegionNumsMetrics num : numsMetrics) {
            Gauge.builder(HBaseRegionNumsMetrics.METRICS_NAME, num::getNums).tags(num.getTags()).register(meterRegistry);
        }
       ......
    }
5. 启动定时任务
@Slf4j
@Component
@EnableScheduling
public class HBaseMetricsJob {

    @Autowired
    private HBaseService HBaseService;

    /**
     * @TODO 基础任务
     */
    @Scheduled(cron = "${scheduled.cron.expr}")
    public void task() {
        try {
            HBaseService.exposeRegionMetrics();
        } catch (Exception e) {
            log.error("==============HBase Exporter======ERROR=================");
            e.printStackTrace();
        }
    }
}

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

到了这里,关于Springboot+Hbase获取regions信息并上报到metrics接口中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • springboot获取登录用户的个人信息

    在Spring Boot中,获取登录用户的个人信息通常需要使用Spring Security框架来进行身份认证和授权。Spring Security提供了一个名为SecurityContextHolder的上下文对象,它包含了当前请求的身份认证信息。通过SecurityContextHolder,可以访问当前已认证的用户的信息。 当使用 Spring Boot + Spring

    2023年04月19日
    浏览(74)
  • springboot如何获取websocket的header头信息

    websocket协议与http协议类似,也有属于自己的头信息,如下图所示,为postman在连接时自定义的header: 那么在后端中,如何像http的 HttpServletRequest 一样来获取这个头信息的内容呢? 自定义一个WebSocket配置类: modifyHandshake()方法: 建立握手时,连接前的操作,可以获取到源信息,

    2024年02月01日
    浏览(31)
  • Java高校学校校园新生报到迎新系统设计与实现(Idea+Springboot+mysql)

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。 项目配有对应开发文档、

    2024年03月19日
    浏览(49)
  • 基于java高校校园新生报到系统 (springboot框架)开题答辩常规问题和如何回答

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、

    2024年01月19日
    浏览(46)
  • 基于Java(SpringBoot框架)毕业设计作品成品(37)高校校园新生报到系统设计与实现

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月07日
    浏览(56)
  • Springboot通过请求头获取当前用户信息的一种方式

    一、实现原理 1、token的存储 当用户登录时,将token, userInfo存入redis缓存中,以便鉴权与获取用户信息。 2、发送请求 每次发送请求时将token放入请求头中,令key为“Authorization”或其他值。 3、获取请求头部 4、用户请求头部携带的token在redis中获得userInfo 二、导入依赖 1、redi

    2024年02月05日
    浏览(39)
  • Springboot项目:解决@Async注解获取不到上下文信息问题

    springboot项目中,需要使用到异步调用某个方法,此时 第一个想到的就是 @Async 注解,但是 发现 方法执行报错了,具体报错如下: 上面日志有点多,其实核心就是这一部分日志: 这块逻辑就是,使用spring底层提供的获取上下文信息的方法。 所以说明 获取不到上下文信息,结

    2024年01月17日
    浏览(45)
  • 使用 ip2region 获取用户的 IP 归属地

    ip2region 是一个离线IP地址定位库和IP定位数据管理框架,能实现10微秒级别的查询效率,提供了众多主流编程语言的xdb数据生成和查询客户端实现。 每个 ip 数据段的 region 信息都固定了格式: 国家|区域|省份|城市|ISP ,只有中国的数据绝大部分精确到了城市,其他国家部分数

    2024年02月13日
    浏览(47)
  • SpringBoot+Prometheus采集Metrics指标数据

    简介 本文介绍在springboot3.x里配置启用系统指标监控功能,来监视系统各项Metrics指标,从而实时了解应用的运行健康状态,通过promtheus服务提供数据收集与指标可视化方案; Metrics指标 metrics指标表示应用程序代码运行中提供的多维度指标数据,每一条指标数据通常由时间序列

    2024年02月04日
    浏览(47)
  • SpringBoot自主监控,获取服务信息、JVM、CPU、内存、磁盘、堆、线程、GC等

    1. 简介   在日常开发中一些关键的业务服务,期望在高并发状态下可以正常工作,或在异常情况时可以记录当时的性能信息,所以就需要进行监控。常见的监控例如: Prometheus 可以实现这个需求,如果需要更加简单方便的自主监控能力,可以引入本博客中的方案。 2. 相关博

    2024年02月15日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包