第104章 メトリクス


メトリクスコンポーネント

Camel 2.14 から利用可能
metrics: コンポーネントを使用すると、Camel ルートからさまざまなメトリクスを直接収集できます。サポートされるメトリックタイプは、カウンターヒストグラムメータータイマー です。メトリクス を使用すると、アプリケーションの動作を測定するための簡単な方法が提供されます。設定可能なレポートバックエンドは、統計を収集し、視覚化するためのさまざまな統合オプションを有効にします。コンポーネントは、MetricsRoutePolicyFactory も提供します。これにより、codehale メトリクスを使用してルート統計を公開できます。詳細は、ページ下部を参照してください。
Maven ユーザーは、このコンポーネントの以下の依存関係を pom.xml に追加する必要があります。
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-metrics</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
Copy to Clipboard Toggle word wrap

URI 形式

metrics:[ meter | counter | histogram | timer ]:metricname[?options]
Copy to Clipboard Toggle word wrap

metric Registry

Camel Metrics Component はデフォルトで MetricRegistry を使用し、Slf4jReporter と 60 秒のレポート間隔を使用します。デフォルトレジストリーは、Camel レジストリーで metricRegistry という名前の Bean を提供することで、カスタムレジストリーに置き換えることができます。たとえば、Spring Java Configuration を使用します。
@Configuration
public static class MyConfig extends SingleRouteCamelConfiguration {

    @Bean
    @Override
    public RouteBuilder route() {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                // define Camel routes here
            }
        };
    }

    @Bean(name = MetricsComponent.METRIC_REGISTRY_NAME)
    public MetricRegistry getMetricRegistry() {
        MetricRegistry registry = ...;
        return registry;
    }
}
Copy to Clipboard Toggle word wrap
警告
MetricRegistry レポートに内部スレッドを使用します。バージョン 3.0.1 には、ユーザーが終了時にクリーンアップするパブリック API はありません。そのため、Camel Metrics Component を使用すると、Java クラ出力ダーがリークし、OutOfMemoryErrors が発生する可能性があります。

使用方法

各メトリクスには type および name があります。サポートされるタイプは、カウンターヒストグラムメータータイマー です。メトリック名は単純な文字列です。メトリックタイプが指定されていない場合は、デフォルトでタイプ meter が使用されます。

Headers

URI で定義されたメトリクス名は、ヘッダーと名前 CamelMetricsName を使用して上書きできます。
以下に例を示します。
from("direct:in")
    .setHeader(MetricsConstants.HEADER_METRIC_NAME, constant("new.name"))
    .to("metrics:counter:name.not.used")
    .to("direct:out");
Copy to Clipboard Toggle word wrap
name.not.used ではなく、new.name という名前のカウンターを更新します。
Metrics エンドポイントがエクスチェンジの処理を終了すると、Metrics 固有のヘッダーはすべてメッセージから削除されます。エクスチェンジのエンドポイントの処理中に、Metrics エンドポイントはすべての例外をキャッチし、レベル warn を使用してログエントリーを書き込みます。

メトリクスタイプのカウンター

metrics:counter:metricname[?options]
Copy to Clipboard Toggle word wrap

オプション

Expand
名前
デフォルト
説明
Increment
-
カウンターに追加する長い値
decrement
-
カウンターから減算する長い値
increment または decrement が定義されていない場合、カウンター値は 1 つずつ増えます。incrementdecrement の両方が定義されている場合は、インクリメント操作のみが呼び出されます。
// update counter simple.counter by 7
from("direct:in")
    .to("metric:counter:simple.counter?increment=7")
    .to("direct:out");
Copy to Clipboard Toggle word wrap
// increment counter simple.counter by 1
from("direct:in")
    .to("metric:counter:simple.counter")
    .to("direct:out");
Copy to Clipboard Toggle word wrap
// decrement counter simple.counter by 3
from("direct:in")
    .to("metric:counter:simple.counter?decrement=3")
    .to("direct:out");
Copy to Clipboard Toggle word wrap

Headers

メッセージヘッダーは、Metrics コンポーネント URI で指定される increment および decrement の値を上書きするために使用できます。
Expand
名前
説明
想定されるタイプ
CamelMetricsCounterIncrement
URI のインクリメント値を上書きします。
Long
CamelMetricsCounterDecrement
URI のデクリメント値の上書き
Long
// update counter simple.counter by 417
from("direct:in")
    .setHeader(MetricsConstants.HEADER_COUNTER_INCREMENT, constant(417L))
    .to("metric:counter:simple.counter?increment=7")
    .to("direct:out");
Copy to Clipboard Toggle word wrap
// updates counter using simple language to evaluate body.length
from("direct:in")
    .setHeader(MetricsConstants.HEADER_COUNTER_INCREMENT, simple("${body.length}"))
    .to("metrics:counter:body.length")
    .to("mock:out");
Copy to Clipboard Toggle word wrap

メトリックのタイプヒストグラム

metrics:histogram:metricname[?options]
Copy to Clipboard Toggle word wrap

オプション

Expand
名前
デフォルト
説明
value
-
ヒストグラムで使用する値
value が設定されていない場合、ヒストグラムには何も追加されず、警告が記録されます。
// adds value 9923 to simple.histogram
from("direct:in")
    .to("metric:histogram:simple.histogram?value=9923")
    .to("direct:out");
Copy to Clipboard Toggle word wrap
// nothing is added to simple.histogram; warning is logged
from("direct:in")
    .to("metric:histogram:simple.histogram")
    .to("direct:out");
Copy to Clipboard Toggle word wrap

Headers

メッセージヘッダーを使用して、Metrics コンポーネント URI に指定された値をオーバーライドできます。
Expand
名前
説明
想定されるタイプ
CamelMetricsHistogramValue
URI のヒストグラム値の上書き
Long
// adds value 992 to simple.histogram
from("direct:in")
    .setHeader(MetricsConstants.HEADER_HISTOGRAM_VALUE, constant(992L))
    .to("metric:histogram:simple.histogram?value=700")
    .to("direct:out")
Copy to Clipboard Toggle word wrap

メトリックタイプのメーター

metrics:meter:metricname[?options]
Copy to Clipboard Toggle word wrap

オプション

Expand
名前
デフォルト
説明
mark
-
マークとして使用する長い値
mark が設定されていない場合、meter.mark() は引数なしで呼び出されます。
// marks simple.meter without value
from("direct:in")
    .to("metric:simple.meter")
    .to("direct:out");
Copy to Clipboard Toggle word wrap
// marks simple.meter with value 81
from("direct:in")
    .to("metric:meter:simple.meter?mark=81")
    .to("direct:out");
Copy to Clipboard Toggle word wrap

Headers

メッセージヘッダーを使用して、Metrics コンポーネント URI に指定された mark 値を上書きできます。
Expand
名前
説明
想定されるタイプ
CamelMetricsMeterMark
URI のマーク値の上書き
Long
// updates meter simple.meter with value 345
from("direct:in")
    .setHeader(MetricsConstants.HEADER_METER_MARK, constant(345L))
    .to("metric:meter:simple.meter?mark=123")
    .to("direct:out");
Copy to Clipboard Toggle word wrap

メトリクスタイプタイマー

metrics:timer:metricname[?options]
Copy to Clipboard Toggle word wrap

オプション

Expand
名前
デフォルト
説明
action
-
start または stop
action または無効な値が指定されていない場合、警告はタイマー更新なしでログに記録されます。実行中のタイマーまたは stop でアクション start が呼び出されている場合は、何も更新されず、警告が記録されます。
// measure time taken by route "calculate"
from("direct:in")
    .to("metrics:timer:simple.timer?action=start")
    .to("direct:calculate")
    .to("metrics:timer:simple.timer?action=stop");
Copy to Clipboard Toggle word wrap
TimerContext オブジェクトは、異なる Metrics コンポーネント呼び出し間で Exchange プロパティーとして保存されます。

Headers

メッセージヘッダーは、Metrics コンポーネント URI に指定されたアクション値を上書きするために使用できます。
Expand
名前
説明
想定されるタイプ
CamelMetricsTimerAction
URI でのタイマーアクションの上書き
org.apache.camel.component.metrics.timer.TimerEndpoint.TimerAction
// sets timer action using header
from("direct:in")
    .setHeader(MetricsConstants.HEADER_TIMER_ACTION, TimerAction.start)
    .to("metric:timer:simple.timer")
    .to("direct:out");
Copy to Clipboard Toggle word wrap

MetricsRoutePolicyFactory

このファクトリーを使用すると、コード化されたメトリクスを使用してルートの使用状況の統計を公開する各ルートに RoutePolicy を追加できます。このファクトリーは、以下の例のように Java および XML で使用できます。
ヒント
MetricsRoutePolicyFactory を使用する代わりに、選択したいくつかのルートのみをインストルメント化する場合に、インストルメント化するルートごとに MetricsRoutePolicy を定義できます。
Java の場合は、以下のようにファクトリーを CamelContext に追加します。
context.addRoutePolicyFactory(new MetricsRoutePolicyFactory());
Copy to Clipboard Toggle word wrap
XML DSL の場合は、以下のように <bean> を定義します。
<!-- use camel-metrics route policy to gather metrics for all routes -->
<bean id="metricsRoutePolicyFactory" class="org.apache.camel.component.metrics.routepolicy.MetricsRoutePolicyFactory"/>
Copy to Clipboard Toggle word wrap
MetricsRoutePolicyFactory および MetricsRoutePolicy は以下のオプションをサポートします。
Expand
名前
デフォルト
説明
useJmx
false
com.codahale.metrics.JmxReporter を使用して、詳細な統計を JMX に報告するかどうか。CamelContext で JMX が有効になっている場合、JMX ツリーのサービスタイプの下に MetricsRegistryService mbean が登録されていることに注意してください。この mbean には、統計を JSON 出力する 1 つのオペレーションがあります。useJmx を true に設定することは、統計タイプごとに詳細な mbeans が必要な場合にのみ必要です。
jmxDomain
org.apache.camel.metrics
JMX ドメイン名
prettyPrint
false
統計を json 形式で出力する際に pretty print を使用するかどうか。
metricsRegistry
共有 com.codahale.metrics.MetricRegistry の使用を許可します。指定しない場合は、Camel はこの CamelContext によって使用される共有インスタンスを作成します。
rateUnit
TimeUnit.SECONDS
メトリクスレポーターまたは統計を json 出力するときのレートに使用する単位。
durationUnit
TimeUnit.MILLISECONDS
メトリクスレポーターまたは統計を json 出力するときの期間に使用する単位。
namePattern
##name##.##routeId##.##type##
Camel 2.17: 使用する名前パターン。区切り文字としてドットを使用しますが、変更できます。##name####routeId##、および ##type## の値は実際の値に置き換えられます。###name### は CamelContext の名前で、###routeId### はルートの名前、###type### は応答の値になります。
Java コード tou からは、以下のように org.apache.camel.component.metrics.routepolicy.MetricsRegistryService から com.codahale.metrics.MetricRegistry を保持できます。
MetricRegistryService registryService = context.hasService(MetricsRegistryService.class);
if (registryService != null) {
  MetricsRegistry registry = registryService.getMetricsRegistry();
  ...
}
Copy to Clipboard Toggle word wrap

MetricsMessageHistoryFactory

このファクトリーを使用すると、メッセージのルーティング中にメトリクスを使用してメッセージ履歴のパフォーマンス統計をキャプチャーできます。これは、すべてのルートの各ノードにメトリクスタイマーを使用して機能します。このファクトリーは、以下の例のように Java および XML で使用できます。
Java の場合は、以下のようにファクトリーを CamelContext に設定します。
context.setMessageHistoryFactory(new MetricsMessageHistoryFactory());
Copy to Clipboard Toggle word wrap
XML DSL の場合は、以下のように <bean> を定義します。
<!-- use camel-metrics message history to gather metrics for all messages being routed -->
<bean id="metricsMessageHistoryFactory" class="org.apache.camel.component.metrics.messagehistory.MetricsMessageHistoryFactory"/>
Copy to Clipboard Toggle word wrap
以下のオプションはファクトリーでサポートされます。
Expand
名前デフォルト説明
useJmxfalsecom.codahale.metrics.JmxReporter を使用して、詳細な統計を JMX に報告するかどうか。CamelContext で JMX が有効になっている場合、MetricsRegistryService MBean は JMX ツリーのサービスタイプの下に登録されることに注意してください。この MBean には、JSon を使用して統計を出力する 1 つの操作があります。useJmxtrue に設定する必要があるのは、統計タイプごとに詳細な MBean が必要な場合のみです。
jmxDomainorg.apache.camel.metricsJMX ドメイン名。
prettyPrintfalseJSon 形式で統計を出力するときに pretty print を使用するかどうか。
metricsRegistry 共有 com.codahale.metrics.MetricRegistry を有効にします。指定がない場合は、Camel はこの CamelContext の共有インスタンスを作成します。
rateUnitTimeUnit.SECONDSメトリクスレポーターのレートに使用する単位、または統計を JSon としてダンプする場合。
durationUnitTimeUnit.MILLISECONDSメトリクスレポーターまたは統計を JSon としてダンプするときの期間に使用する単位。
namePattern##name##.##routeId##.###id###.##type##使用する名前パターン。区切り文字としてドットを使用しますが、変更できます。##name####routeId####type##、および ###id### の値は、実際の値に置き換えられます。###name### は CamelContext の名前で、###routeId### パターンはルートの名前、###id### パターンはノード ID を表し、###type### は履歴の値になります。
実行時に、Java API または JMX からメトリクスにアクセスできます。これにより、データを JSon 出力として収集できます。Java コードから、以下のように CamelContext からサービスを取得できます。
MetricsMessageHistoryService service = context.hasService(MetricsMessageHistoryService.class);
String json = service.dumpStatisticsAsJson();
Copy to Clipboard Toggle word wrap
また、MBean は name=MetricsMessageHistoryService を使用して type=services ツリーに登録される JMX API です。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat