第 7 章 为 JBoss EAP 开发 Micrometer 应用程序


7.1. 在 JBoss EAP 中集成 Micrometer 指标

通过使用 Micrometer,您可以在 JBoss EAP 中监控和收集应用程序指标。Micrometer 支持提供了应用程序指标的暴露。导出过程基于 PUSH,确保指标发送到 OpenTelemetry Collector。

先决条件

注意

本节中的示例包括如何使用 configure-micrometer.cli 文件,它基于 Micrometer Quickstart

流程

  1. 打开终端。
  2. 使用以下脚本将 JBoss EAP 启动为独立服务器:

    $ <EAP_HOME>/bin/standalone.sh -c standalone-microprofile.xml
    Copy to Clipboard Toggle word wrap
    注意

    对于 Windows 服务器,请使用 &lt ;EAP_HOME&gt; \bin\standalone.bat 脚本。

  3. 打开一个新的终端。
  4. 导航到应用程序根目录。
  5. 运行以下命令来配置服务器:

    $ <EAP_HOME>/bin/jboss-cli.sh --connect --file=configure-micrometer.cli
    Copy to Clipboard Toggle word wrap
    注意

    对于 Windows 服务器,请使用 &lt ;EAP_HOME&gt; \bin\jboss-cli.bat 脚本。

    <EAP_HOME > 替换为服务器的路径。

    预期输出:

    The batch executed successfully
    process-state: reload-required
    Copy to Clipboard Toggle word wrap

  6. 使用以下管理命令重新载入服务器:

    $ <EAP_HOME>/bin/jboss-cli.sh --connect --commands=reload
    Copy to Clipboard Toggle word wrap
  7. 使用以下内容创建名为 docker-compose.yaml 的配置文件:

    version: "3"
    
    services:
      otel-collector:
        image: otel/opentelemetry-collector
        command: [--config=/etc/otel-collector-config.yaml]
        volumes:
          - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml:Z
        ports:
          - 1888:1888 # pprof extension
          - 8888:8888 # Prometheus metrics exposed by the collector
          - 8889:8889 # Prometheus exporter metrics
          - 13133:13133 # health_check extension
          - 4317:4317 # OTLP gRPC receiver
          - 4318:4318 # OTLP http receiver
          - 55679:55679 # zpages extension
          - 1234:1234 # /metrics endpoint
    Copy to Clipboard Toggle word wrap
  8. 使用以下内容创建名为 otel-collector-config.yaml 的配置文件:

    extensions:
      health_check:
      pprof:
        endpoint: 0.0.0.0:1777
      zpages:
        endpoint: 0.0.0.0:55679
    
    receivers:
      otlp:
        protocols:
          grpc:
          http:
    
    processors:
      batch:
    
    exporters:
      prometheus:
        endpoint: "0.0.0.0:1234"
    
    service:
      pipelines:
        metrics:
          receivers: [otlp]
          processors: [batch]
          exporters: [prometheus]
    
      extensions: [health_check, pprof, zpages]
    Copy to Clipboard Toggle word wrap
  9. 运行以下命令启动收集器服务器实例:

    $ docker-compose up
    Copy to Clipboard Toggle word wrap
    注意

    您还可以使用 Podman 而不是 Docker。如果您选择 Podman,则使用 $ podman-compose up 命令而不是 $ docker-compose。如果您的环境不支持 Docker 或 Podman,请参阅 Otel Collector 文档了解 安装和运行 OpenTelemetry Collector 的指南。

  10. RootResource 类中,了解 MeterRegistry 如何注入您的类,以确保在注册量表前正确设置。

    @Path("/")
    @ApplicationScoped
    public class RootResource {
        // ...
        @Inject
        private MeterRegistry registry;
    
        private Counter performCheckCounter;
        private Counter originalCounter;
        private Counter duplicatedCounter;
    
        @PostConstruct
        private void createMeters() {
            Gauge.builder("prime.highestSoFar", () -> highestPrimeNumberSoFar)
                    .description("Highest prime number so far.")
                    .register(registry);
            performCheckCounter = Counter
                    .builder("prime.performedChecks")
                    .description("How many prime checks have been performed.")
                    .register(registry);
            originalCounter = Counter
                    .builder("prime.duplicatedCounter")
                    .tags(List.of(Tag.of("type", "original")))
                    .register(registry);
            duplicatedCounter = Counter
                    .builder("prime.duplicatedCounter")
                    .tags(List.of(Tag.of("type", "copy")))
                    .register(registry);
        }
        // ...
    }
    Copy to Clipboard Toggle word wrap
  11. 检查 checkIfPrime () 方法正文,以了解如何在应用程序逻辑中使用注册的量表。例如:

    @GET
    @Path("/prime/{number}")
    public String checkIfPrime(@PathParam("number") long number) throws Exception {
        performCheckCounter.increment();
    
        Timer timer = registry.timer("prime.timer");
    
        return timer.recordCallable(() -> {
    
            if (number < 1) {
                return "Only natural numbers can be prime numbers.";
            }
    
            if (number == 1) {
                return "1 is not prime.";
            }
    
            if (number == 2) {
                return "2 is prime.";
            }
    
            if (number % 2 == 0) {
                return number + " is not prime, it is divisible by 2.";
            }
    
            for (int i = 3; i < Math.floor(Math.sqrt(number)) + 1; i = i + 2) {
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    //
                }
                if (number % i == 0) {
                    return number + " is not prime, is divisible by " + i + ".";
                }
            }
    
            if (number > highestPrimeNumberSoFar) {
                highestPrimeNumberSoFar = number;
            }
    
            return number + " is prime.";
        });
    }
    Copy to Clipboard Toggle word wrap
  12. 导航到应用程序根目录。

    语法

    $ cd <path_to_application_root>/<application_root>
    Copy to Clipboard Toggle word wrap

    例如,引用 Micrometer Quickstart:

    $ cd ~/quickstarts/micrometer
    Copy to Clipboard Toggle word wrap

  13. 使用以下命令编译并部署应用程序:

    $ mvn clean package wildfly:deploy
    Copy to Clipboard Toggle word wrap

这会将 micrometer/target/micrometer.war 部署到正在运行的服务器。

验证

  1. 使用 Web 浏览器访问 应用,也可以运行以下命令:

    $ curl http://localhost:8080/micrometer/prime/13
    Copy to Clipboard Toggle word wrap

    预期输出:

    13 is prime.
    Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat