7.3. 监控 Camel 应用程序
通过监控应用程序,您可以收集有关应用程序的行为信息,如指标、健康检查和分布式追踪。
本节使用 红帽构建的 Quarkus 示例中列出的 Observability
示例,添加带有 微
主题的可观察性。
有关前提条件和其他常规信息,请参阅 Camel Quarkus 用户指南。
7.3.1. 创建一个项目 复制链接链接已复制到粘贴板!
- 在 Development 模式中启动
运行 maven
compile
命令:mvn clean compile quarkus:dev
$ mvn clean compile quarkus:dev
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会编译项目,启动应用程序,并允许 Quarkus 工具监视工作区中的更改。
项目中的任何修改都会在正在运行的应用程序中自动生效。
提示如需了解更多详细信息,请参阅 Camel Quarkus 用户指南 的 Development 模式 部分。
7.3.2. 启用指标 复制链接链接已复制到粘贴板!
要在 Camel Quarkus 中启用可观察性功能,您必须在项目的 pom.xml 文件中添加额外的依赖项。最重要的是 camel-quarkus-opentelemetry
和 quarkus-micrometer-registry-prometheus
。
将依赖项添加到项目
pom.xml
中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用这些依赖项,您可以从 Camel Micrometer 和 Quarkus 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")
.to("micrometer:counter:org.acme.observability.greeting-provider?tags=type=events,purpose=example")
这将计算对 platform-http:/greeting-provider
端点的每个调用。
7.3.3.2. 使用 CDI 依赖项注入 复制链接链接已复制到粘贴板!
使用此方法,您可以使用 MeterRegistry
的 CDI 依赖项注入:
@Inject MeterRegistry registry;
@Inject
MeterRegistry registry;
然后直接在 Camel Processor
方法中使用它发布指标:
void countGreeting(Exchange exchange) { registry.counter("org.acme.observability.greeting", "type", "events", "purpose", "example").increment(); }
void countGreeting(Exchange exchange) {
registry.counter("org.acme.observability.greeting", "type", "events", "purpose", "example").increment();
}
from("platform-http:/greeting") .removeHeaders("*") .process(this::countGreeting)
from("platform-http:/greeting")
.removeHeaders("*")
.process(this::countGreeting)
这会对每个调用计数为 platform-http:/greeting
端点。
7.3.3.3. 使用 Micrometer 注解 复制链接链接已复制到粘贴板!
使用这个方法,您通过定义 bean TimerCounter.java
来使用 Micrometer 注解,如下所示:
然后可以通过 bean EIP 从 Camel 调用它(请参阅 TimerRoute.java
):
.bean("timerCounter", "count")
.bean("timerCounter", "count")
每次触发 Camel 计时器时,它将递增计数器指标。
7.3.3.4. 浏览指标 复制链接链接已复制到粘贴板!
指标在端口 9000
上的 /q/metrics
上的 HTTP 端点上公开。
注意我们将不同的端口(9000)用于管理端点,然后我们的应用(8080)正在侦听。这是通过 quarkus.management.enabled = true
在 application.properties
中配置。如需更多信息,请参阅 Quarkus 管理界面指南。
查看所有 Camel 指标操作:
curl -s localhost:9000/q/metrics
$ curl -s localhost:9000/q/metrics
要只查看我们之前创建的指标,请使用:
curl -s localhost:9000/q/metrics | grep -i 'purpose="example"'
$ curl -s localhost:9000/q/metrics | grep -i 'purpose="example"'
您应看到不同指标的三行(具有相同值,因为它们都由计时器触发)。
您可能注意到 Prometheus 输出格式。如果您改为使用 JSON 格式,请按照 Quarkus Micrometer 管理界面 配置指南。
7.3.4. Tracing 复制链接链接已复制到粘贴板!
为了能够诊断 Camel Quarkus 应用程序中的问题,您可以开始追踪消息。我们将使用适用于云环境的 OpenTelemetry 标准。
您只需要将依赖项 camel-quarkus-opentelemetry
和 quarkus-micrometer-registry-prometheus
添加到项目 pom.xml
中:
然后,在 application.properties
中配置 OpenTelemetry 导出器:
We are using a property placeholder to be able to test this example in convenient way in a cloud environment
# 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
有关其他 OpenTelemetry 导出器的详情,请参考 Camel Quarkus OpenTelemetry 扩展文档。
要查看追踪事件,请启动一个追踪服务器。简单的实现方式是使用 Docker Compose:
docker-compose up -d
$ docker-compose up -d
在服务器运行时,浏览到 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
$ 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
7.3.5.2. 原生模式 复制链接链接已复制到粘贴板!
原生模式需要安装 GraalVM 和其他工具。请参阅 Camel Quarkus 用户指南 的先决条件部分。
要使用 GraalVM 准备原生可执行文件,请运行以下命令:
mvn clean package -Pnative ./target/*-runner
$ mvn clean package -Pnative
$ ./target/*-runner
...
[io.quarkus] (main) camel-quarkus-examples-... started in 0.013s. Listening on: http://0.0.0.0:8080
...