最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

業(yè)務(wù)系統(tǒng)的Prometheus實踐示例詳解

 更新時間:2023年04月11日 09:37:56   作者:政采云技術(shù)  
這篇文章主要為大家介紹了業(yè)務(wù)系統(tǒng)的Prometheus實踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

什么是 Prometheus

Prometheus(普羅米修斯)是古希臘的一個神明,名字的意思是「先見之明」。從它的名字可以看出,Prometheus 是做「先見之明」的監(jiān)控告警用途。

官網(wǎng)描述為From metrics to insight,用指標洞察系統(tǒng)。

Prometheus 其實就是一個數(shù)據(jù)監(jiān)控解決方案,它能幫你簡單快速地搭建起一套可視化的監(jiān)控系統(tǒng)。

例如研發(fā)比較關(guān)注機器的 CPU、內(nèi)存、硬盤,產(chǎn)品和運營比較關(guān)注運營層面的指標,例如新增用戶數(shù),日活等,都可以通過 Prometheus 和 grafana 簡單,直觀化展示。

例如下圖 JVM 的監(jiān)控。

業(yè)務(wù)實踐背景

公司某個業(yè)務(wù)需要 n 個評審專家對同一批 n 張業(yè)務(wù)報表批量簽字。3 方簽字接口只有支持單個報表簽字,所以需要 n*n 次,單次簽字邏輯復(fù)雜,流程較長,所有后臺用線程池做了異步化。

簽字作為業(yè)務(wù)的核心節(jié)點,不能有故障。所以怎么監(jiān)控線程池的關(guān)鍵指標,實現(xiàn)動態(tài)調(diào)整參數(shù),當任務(wù)數(shù)量過多告警,是一個需要解決的痛點。

我們通過 Prometheus 自定義線程池的指標,grafana 展示,apollo 動態(tài)調(diào)整線程池的變量,實現(xiàn)彈性擴展。

實踐

線程池參數(shù)動態(tài)更新

通過接入 apollo 配置,當檢測到線程池的配置變化時,重新設(shè)置:

  • 核心線程數(shù)
  • 最大線程數(shù)
  • 修改線程空閑時間
@Component
public 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<String> changedKeys) {
        //apollo 變更的是線程池變量
        if (changedKeys.contains(EvaluationProcessAsyncRequestTaskConfig.ASYNC_REQUEST_TASK_CHANGE_FLAG_KEY)) {
            // 核心線程數(shù)
            Integer corePoolSizeOld = executorService.getCorePoolSize();
            if (!corePoolSize.equals(corePoolSizeOld)) {
                executorService.setCorePoolSize(corePoolSize);
            }
            // 最大線程數(shù)
            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 進行監(jiān)控,只需引入 Spring Boot Actuator 相關(guān)的 jar,就可以簡單集成,然后我們就可以自定義業(yè)務(wù)指標,上報 Prometheus 了

<dependency>
    <groupId>cn.gov.zcy.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency

Prometheus 中的核心類 io.micrometer.core.instrument.MeterRegistry 中可以定制各種業(yè)務(wù)指標,也有封裝的例如計數(shù)類 Counter,這里引用一個 Gauge 只定義的指標

@Component
public class MonitorFactory {
    @Resource
    private MeterRegistry meterRegistry;
    @Resource
    private ThreadPoolExecutor threadPoolExecutor;
    private ThreadPoolSizeMonitor threadPoolSizeMonitor = new ThreadPoolSizeMonitor(threadPoolExecutor);
    class ThreadPoolSizeMonitor implements ToDoubleFunction {
        private ThreadPoolExecutor executor;
        //計數(shù)
        private AtomicDouble monitor = new AtomicDouble(0);
        public Object getMonitor() {
            return monitor;
        }
        public ThreadPoolSizeMonitor(ThreadPoolExecutor executor) {
            this.executor = executor;
        }
        @Override
        public double applyAsDouble(Object o) {
            monitor.set(executor.getPoolSize());
            return monitor.get();
        }
    }
    //上報指標,初始化時注冊指標
    @PostConstruct
    public void monitorThreadPool() {
        // 當前存活線程數(shù)
        Gauge.builder("ReportBatchSignPool_poolSizeMonitor", threadPoolSizeMonitor.getMonitor(), threadPoolSizeMonitor).register(meterRegistry);
        // 當前活躍(忙碌)線程數(shù)
        // 核心存活線程數(shù)
        // 提交的任務(wù)數(shù)
        // 執(zhí)行完畢的任務(wù)數(shù)
        // 任務(wù)隊列積壓監(jiān)控
    }
    //1 分鐘更新一次指標數(shù)據(jù)
    @Scheduled(cron = "0 0/1 * * * ?")
    public void publishWatcher() {
        threadPoolSizeMonitor.applyAsDouble(null);
    }
}

Prometheus 指標展示

用 Prometheus quering 語句查詢出具體數(shù)值 最后一列展示向量結(jié)果 16,查詢語法如下

prometheus.io/docs/promet…

grafana 可視化展示

告警配置

grafana 配置告警,配置具體的通知信息,觸發(fā)規(guī)則,告警的通知渠道 參考官方文檔

grafana.com/docs/grafan…

通知到叮叮告警群

總結(jié)

本文介紹了研發(fā)人員通過配置 Prometheus 自定義的業(yè)務(wù)指標,實現(xiàn)監(jiān)控告警完整鏈路的大致的流程。大家也可以定制化除了系統(tǒng)指標(例如 CPU、JVM、IO 等)外,梳理出自己系統(tǒng)的核心業(yè)務(wù),添加告警,增強系統(tǒng)的穩(wěn)定性,做到未雨綢繆,防患于未然。

參考文獻

Prometheus 官方文檔

grafana 告警 文檔

以上就是業(yè)務(wù)系統(tǒng)的Prometheus實踐示例詳解的詳細內(nèi)容,更多關(guān)于Prometheus業(yè)務(wù)系統(tǒng)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • javax.mail.SendFailedException: Sending failed問題原因

    javax.mail.SendFailedException: Sending failed問題原因

    這篇文章主要介紹了javax.mail.SendFailedException: Sending failed問題原因,需要的朋友可以參考下
    2015-05-05
  • Activiti7通過代碼動態(tài)生成工作流實現(xiàn)詳解

    Activiti7通過代碼動態(tài)生成工作流實現(xiàn)詳解

    這篇文章主要為大家介紹了Activiti7通過代碼動態(tài)生成工作流實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Java基礎(chǔ)教程之八大基本數(shù)據(jù)類型

    Java基礎(chǔ)教程之八大基本數(shù)據(jù)類型

    這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)教程之八大基本數(shù)據(jù)類型的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Java方法遞歸與輸入輸出深入探索

    Java方法遞歸與輸入輸出深入探索

    這篇文章主要介紹了Java方法遞歸與輸入輸出的相關(guān)資料,方法遞歸是一種在方法內(nèi)部調(diào)用自身的技術(shù),適用于具有遞歸結(jié)構(gòu)的問題,輸入輸出是Java程序與外部世界交互的橋梁,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-04-04
  • Spring Data Jpa 復(fù)合主鍵的實現(xiàn)

    Spring Data Jpa 復(fù)合主鍵的實現(xiàn)

    這篇文章主要介紹了Spring Data Jpa 復(fù)合主鍵的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Spring Cloud微服務(wù)架構(gòu)的構(gòu)建:分布式配置中心(加密解密功能)

    Spring Cloud微服務(wù)架構(gòu)的構(gòu)建:分布式配置中心(加密解密功能)

    這篇文章主要給大家介紹了關(guān)于Spring Cloud微服務(wù)架構(gòu)的構(gòu)建:分布式配置中心(加密解密)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2018-05-05
  • 詳細分析JVM類加載機制

    詳細分析JVM類加載機制

    JVM將class文件字節(jié)碼文件加載到內(nèi)存中,?并將這些靜態(tài)數(shù)據(jù)轉(zhuǎn)換成方法區(qū)中的運行時數(shù)據(jù)結(jié)構(gòu),在堆(并不一定在堆中,HotSpot在方法區(qū)中)中生成一個代表這個類的java.lang.Class?對象,作為方法區(qū)類數(shù)據(jù)的訪問入口,接下來將詳細講解JVM類加載機制
    2022-04-04
  • Java多線程中線程的兩種創(chuàng)建方式及比較代碼示例

    Java多線程中線程的兩種創(chuàng)建方式及比較代碼示例

    這篇文章主要介紹了Java多線程中線程的兩種創(chuàng)建方式及比較代碼示例,簡單介紹了線程的概念,并行與并發(fā)等,然后通過實例代碼向大家展示了線程的創(chuàng)建,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Mybatis SqlSessionFactory與SqlSession詳細講解

    Mybatis SqlSessionFactory與SqlSession詳細講解

    SqlSessionFactory是MyBatis的核心類之一,其最重要的功能就是提供創(chuàng)建MyBatis的核心接口SqlSession,所以我們需要先創(chuàng)建SqlSessionFactory,為此我們需要提供配置文件和相關(guān)的參數(shù)
    2022-11-11
  • mybatis中的異常BindingException詳解

    mybatis中的異常BindingException詳解

    這篇文章主要介紹了mybatis中的異常BindingException詳解,此異常是mybatis中拋出的,意思是使用的這個方法找到,但是因為mapperScan()已經(jīng)掃描到了Mapper類了,在綁定Mapper.xml時沒有綁定到導(dǎo)致的,需要的朋友可以參考下
    2024-01-01

最新評論

赣榆县| 昌黎县| 德化县| 电白县| 随州市| 即墨市| 佛坪县| 绩溪县| 武强县| 托克托县| 朝阳区| 自贡市| 和林格尔县| 达孜县| 郎溪县| 泸定县| 宜君县| 宣化县| 义乌市| 玉龙| 博罗县| 宜宾县| 蓬安县| 定远县| 新乡县| 绥德县| 开化县| 滨海县| 尉氏县| 靖宇县| 洛隆县| 大英县| 淮阳县| 张家口市| 石泉县| 固始县| 正安县| 台安县| 德化县| 平度市| 茂名市|