7.3. 监控 Camel 应用程序


通过监控应用程序,您可以收集有关应用程序的行为信息,如指标、健康检查和分布式追踪。

注意

本节使用 红帽构建的 Quarkus 示例中列出的 Observability 示例,添加带有 主题的可观察性。

提示

有关前提条件和其他常规信息,请参阅 Camel Quarkus 用户指南

7.3.1. 创建一个项目

  1. Development 模式中启动
  2. 运行 maven compile 命令:

    $ mvn clean compile quarkus:dev
    Copy to Clipboard Toggle word wrap

    这会编译项目,启动应用程序,并允许 Quarkus 工具监视工作区中的更改。

    项目中的任何修改都会在正在运行的应用程序中自动生效。

    提示

    如需了解更多详细信息,请参阅 Camel Quarkus 用户指南 的 Development 模式 部分。

7.3.2. 启用指标

要在 Camel Quarkus 中启用可观察性功能,您必须在项目的 pom.xml 文件中添加额外的依赖项。最重要的是 camel-quarkus-opentelemetryquarkus-micrometer-registry-prometheus

  1. 将依赖项添加到项目 pom.xml 中:

    <dependencies>
    
        ...
    
        <dependency>
            <groupId>org.apache.camel.quarkus</groupId>
            <artifactId>camel-quarkus-opentelemetry</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkiverse.micrometer.registry</groupId>
            <artifactId>quarkus-micrometer-registry-prometheus</artifactId>
        </dependency>
    
        ...
    
    </dependencies>
    Copy to Clipboard Toggle word wrap

    使用这些依赖项,您可以从 Camel MicrometerQuarkus Micrometer 中获益。

7.3.3. 创建量表

您可以通过多种方式为自定义指标创建量表:

7.3.3.1. 使用 Camel micrometer 组件

通过此方法,您可以使用 Routes.java

.to("micrometer:counter:org.acme.observability.greeting-provider?tags=type=events,purpose=example")
Copy to Clipboard Toggle word wrap

这将计算对 platform-http:/greeting-provider 端点的每个调用。

7.3.3.2. 使用 CDI 依赖项注入

使用此方法,您可以使用 MeterRegistry 的 CDI 依赖项注入:

@Inject
MeterRegistry registry;
Copy to Clipboard Toggle word wrap

然后直接在 Camel Processor 方法中使用它发布指标:

void countGreeting(Exchange exchange) {
    registry.counter("org.acme.observability.greeting", "type", "events", "purpose", "example").increment();
}
Copy to Clipboard Toggle word wrap
from("platform-http:/greeting")
    .removeHeaders("*")
    .process(this::countGreeting)
Copy to Clipboard Toggle word wrap

这会对每个调用计数为 platform-http:/greeting 端点。

7.3.3.3. 使用 Micrometer 注解

使用这个方法,您通过定义 bean TimerCounter.java 来使用 Micrometer 注解,如下所示:

@ApplicationScoped
@Named("timerCounter")
public class TimerCounter {

    @Counted(value = "org.acme.observability.timer-counter", extraTags = { "purpose", "example" })
    public void count() {
    }
}
Copy to Clipboard Toggle word wrap

然后可以通过 bean EIP 从 Camel 调用它(请参阅 TimerRoute.java):

.bean("timerCounter", "count")
Copy to Clipboard Toggle word wrap

每次触发 Camel 计时器时,它将递增计数器指标。

7.3.3.4. 浏览指标

指标在端口 9000 上的 /q/metrics 上的 HTTP 端点上公开。

注意

注意我们将不同的端口(9000)用于管理端点,然后我们的应用(8080)正在侦听。这是通过 quarkus.management.enabled = trueapplication.properties 中配置。如需更多信息,请参阅 Quarkus 管理界面指南

查看所有 Camel 指标操作:

$ curl -s localhost:9000/q/metrics
Copy to Clipboard Toggle word wrap

要只查看我们之前创建的指标,请使用:

$ curl -s localhost:9000/q/metrics | grep -i 'purpose="example"'
Copy to Clipboard Toggle word wrap

您应看到不同指标的三行(具有相同值,因为它们都由计时器触发)。

注意

您可能注意到 Prometheus 输出格式。如果您改为使用 JSON 格式,请按照 Quarkus Micrometer 管理界面 配置指南

7.3.4. Tracing

为了能够诊断 Camel Quarkus 应用程序中的问题,您可以开始追踪消息。我们将使用适用于云环境的 OpenTelemetry 标准。

您只需要将依赖项 camel-quarkus-opentelemetryquarkus-micrometer-registry-prometheus 添加到项目 pom.xml 中:

<dependencies>

    ...

    <dependency>
        <groupId>org.apache.camel.quarkus</groupId>
        <artifactId>camel-quarkus-opentelemetry</artifactId>
    </dependency>
    <dependency>
        <groupId>io.quarkiverse.micrometer.registry</groupId>
        <artifactId>quarkus-micrometer-registry-prometheus</artifactId>
    </dependency>

    ...

</dependencies>
Copy to Clipboard Toggle word wrap

然后,在 application.properties 中配置 OpenTelemetry 导出器:

# We are using a property placeholder to be able to test this example in convenient way in a cloud environment
quarkus.otel.exporter.otlp.traces.endpoint = http://${TELEMETRY_COLLECTOR_COLLECTOR_SERVICE_HOST:localhost}:4317
Copy to Clipboard Toggle word wrap
注意

有关其他 OpenTelemetry 导出器的详情,请参考 Camel Quarkus OpenTelemetry 扩展文档

要查看追踪事件,请启动一个追踪服务器。简单的实现方式是使用 Docker Compose:

$ docker-compose up -d
Copy to Clipboard Toggle word wrap

在服务器运行时,浏览到 http://localhost:16686。然后,从 'Service' 下拉菜单中选择 'camel-quarkus-observability',然后点 'Find Traces' 按钮。

platform-http 使用者路由引入了随机延迟,以模拟延迟,因此每个 trace 的总体时间应有所不同。查看 trace 时,您应该会看到 6 个 span 的层次结构,其中显示了通过每个端点交换的消息交换的进度。

7.3.5. 打包并运行应用程序

完成开发后,您可以打包并运行应用程序。

提示

有关 JVM 模式和原生模式的详情,请参阅 Camel Quarkus 用户指南中的"Package and run"部分

7.3.5.1. JVM 模式

$ mvn clean package
$ java -jar target/quarkus-app/quarkus-run.jar
...
[io.quarkus] (main) camel-quarkus-examples-... started in 1.163s. Listening on: http://0.0.0.0:8080
Copy to Clipboard Toggle word wrap

7.3.5.2. 原生模式

重要

原生模式需要安装 GraalVM 和其他工具。请参阅 Camel Quarkus 用户指南 的先决条件部分。

要使用 GraalVM 准备原生可执行文件,请运行以下命令:

$ mvn clean package -Pnative
$ ./target/*-runner
...
[io.quarkus] (main) camel-quarkus-examples-... started in 0.013s. Listening on: http://0.0.0.0:8080
...
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat