找回密码
 会员注册
查看: 17|回复: 0

业务系统的Prometheus实践

[复制链接]

3

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2024-10-12 23:24:31 | 显示全部楼层 |阅读模式
业务系统的Prometheus实践 316 什么是 PrometheusPrometheus(普罗米修斯)是古希腊的一个神明,名字的意思是「先见之明」。从它的名字可以看出,Prometheus 是做「先见之明」的监控告警用途。官网描述为From metrics to insight,用指标洞察系统。Prometheus 其实就是一个数据监控解决方案,它能帮你简单快速地搭建起一套可视化的监控系统。例如研发比较关注机器的 CPU、内存、硬盘,产品和运营比较关注运营层面的指标,例如新增用户数,日活等,都可以通过 Prometheus 和 grafana 简单,直观化展示。例如下图 JVM 的监控。业务实践背景公司某个业务需要 n 个评审专家对同一批 n 张业务报表批量签字。3 方签字接口只有支持单个报表签字,所以需要 n*n 次,单次签字逻辑复杂,流程较长,所有后台用线程池做了异步化。签字作为业务的核心节点,不能有故障。所以怎么监控线程池的关键指标,实现动态调整参数,当任务数量过多告警,是一个需要解决的痛点。我们通过 Prometheus 自定义线程池的指标,grafana 展示,apollo 动态调整线程池的变量,实现弹性扩展。实践线程池参数动态更新通过接入 apollo 配置,当检测到线程池的配置变化时,重新设置:核心线程数最大线程数修改线程空闲时间@Componentpublic class ApolloRefreshConfig {    @Resource    private RefreshScope refreshScope;    @Resource    private ApplicationContext applicationContext;   @Resource   private ThreadPoolExecutor executorService;      @ApolloConfigChangeListener    public void onChange(ConfigChangeEvent changeEvent) {        applicationContext.publishEvent(new EnvironmentChangeEvent(changeEvent.changedKeys()));        refreshScope.refreshAll();        // 刷新变量        asyncRequestTaskConfigChange(changeEvent.changedKeys());    }    private void asyncRequestTaskConfigChange(Set changedKeys) {        //apollo 变更的是线程池变量        if (changedKeys.contains(EvaluationProcessAsyncRequestTaskConfig.ASYNC_REQUEST_TASK_CHANGE_FLAG_KEY)) {            // 核心线程数            Integer corePoolSizeOld = executorService.getCorePoolSize();            if (!corePoolSize.equals(corePoolSizeOld)) {                executorService.setCorePoolSize(corePoolSize);            }            // 最大线程数            Integer maximumPoolSizeOld = executorService.getMaximumPoolSize();            if (!maximumPoolSize.equals(maximumPoolSizeOld)) {                executorService.setMaximumPoolSize(maximumPoolSize);            }            // 修改线程空闲时间            Long keepAliveTimeOld = executorService.getKeepAliveTime(TimeUnit.MINUTES);            if (!keepAliveTime.equals(keepAliveTimeOld)) {                executorService.setKeepAliveTime(keepAliveTime, TimeUnit.MINUTES);            }        }    }}线程池指标上报在 springboot 版本 2.X 版本以后,使用 Prometheus 进行监控,只需引入 Spring Boot Actuator 相关的 jar,就可以简单集成,然后我们就可以自定义业务指标,上报 Prometheus 了    cn.gov.zcy.boot    spring-boot-starter-actuator
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-25 13:58 , Processed in 0.316579 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表