猿问

如何从 SpringBoot 应用程序发出自定义指标并在 PCF Autoscaler 中使用它

我按照这个示例发出自定义指标,并按照这些详细信息在 PCF 中注册指标。

这是代码:

@RestController

public class CustomMetricsController {


    @Autowired

    private MeterRegistry registry;     


    @GetMapping("/high_latency")

    public ResponseEntity<Integer> highLatency() throws InterruptedException {

        int queueLength=0;

        Random random = new Random();

        int number = random.nextInt(50);

        System.out.println("Generate number is : "+number);

        if(number % 2 == 0) {

            queueLength=99;

        } else {

            queueLength=200;

        }

        return new ResponseEntity<>(queueLength, null, HttpStatus.OK);

    }

}

应用程序.yml:


management:

  endpoints:

    web:

      exposure:

        include: "metrics,prometheus"

  endpoint:

    metrics:

      enabled: true

    prometheus:

      enabled: true

安全配置类:

build.gradle 依赖部分:

http://img3.mukewang.com/64268dad00012a0505600310.jpg

在将应用程序部署到 PCF 后,我按照以下步骤注册自定义指标:

  1. 安装metric-registrar在我的本地机器上

  2. 发出一些整数的注册端点(我将其用于自动缩放器规则) cf register-metrics-endpoint api high_latency 在此步骤之后,我可以看到一个自定义用户提供的服务与我在 PCF 中的应用程序绑定

http://img4.mukewang.com/64268db90001b3a505320141.jpg

在我的本地安装log-cache插件以验证指标端点,这是日志

http://img4.mukewang.com/64268dce000108b214400163.jpg

最后,我在 Autoscaler 中为自定义指标添加了规则。

http://img2.mukewang.com/64268dd90001fa8604720115.jpg

这是我在 Autoscaler 事件历史记录中遇到的错误。

事件历史最近:2019 年 7 月 17 日,星期三,上午 11:20,Autoscaler 在扩展窗口期间没有收到任何 high_latency 指标。在这些指标可用之前,将推迟缩减规模。


青春有我
浏览 100回答 1
1回答

慕田峪4524236

我看着这个很大。这里有几件事...我相信您的注册命令是错误的,至少对于您引用的示例应用程序而言是这样。您正在使用cf register-metrics-endpoint api high_latency,这意味着您有一个名为的应用程序api和该应用程序上的一个端点,high_latency该端点使用 Prometheus 格式导出指标。对于这个示例应用程序,路径应该是/actuator/prometheus,根据自述文件和我的简短测试。当我使用命令时cf register-metrics-endpoint app-name /actuator/prometheus,我能够在输出中看到自定义指标cf tail,但在包含的输出中看不到它们。例如:(未显示在您的屏幕截图中)2019-07-17T22:54:37.83-0400 [custom-metrics-demo/0] GAUGE tomcat_global_request_max_seconds:2.0060002019-07-17T22:54:37.83-0400 [custom-metrics-demo/0] GAUGE system_cpu_count:4.0000002019-07-17T22:54:37.83-0400 [custom-metrics-demo/0] COUNTER tomcat_sessions_created_sessions_total:122019-07-17T22:54:37.83-0400 [custom-metrics-demo/0] COUNTER custom_metric_total:152019-07-17T22:54:37.83-0400 [custom-metrics-demo/0] GAUGE jvm_gc_pause_seconds_sum:0.1380002019-07-17T22:54:37.83-0400 [custom-metrics-demo/0] COUNTER jvm_gc_pause_seconds_count:25在引用的示例应用程序中,没有名为 的指标high_latency,因此它不能用作您的指标名称,因为它永远不会由应用程序生成。/actuator/prometheus如果您在浏览器中访问端点,则可以看到所有指标。Prometheus 格式是基于文本的,非常容易阅读。最后一个很棘手,没有记录,但我可以在 Autoscaler 的代码中看到它(在撰写本文时)。当 Autoscaler 从 LogCache 轮询指标时,它只提取 GAUGE 和 TIMER 事件,而不是 COUNTER 事件。如果您尝试使用custom_metric演示应用程序,那将无法正常工作,因为它是一个 COUNTER 指标。您只会看到有关 Autoscaler 在缩放窗口期间看不到任何指标事件的消息。确保您选择的是用于缩放的 GAUGE 指标。Autoscaler 似乎也不支持使用带有关联标签的指标。例如,如果您想使用tomcat_servlet_request_seconds_sum{name="dispatcherServlet",},我认为没有办法告诉 Autoscaler 标签name必须是某个值。该信息在 LogCache 中,但我认为 Autoscaler 目前不会使用它。在我写这篇文章的时候,我快速浏览了一下代码,似乎表明它只是在查看指标名称。如果您要创建自定义指标,这无关紧要。只是不要为指标使用任何标签。
随时随地看视频慕课网APP

相关分类

Java
我要回答