Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.第104章 メトリクス
メトリクスコンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.14 から利用可能
metrics: コンポーネントを使用すると、Camel ルートからさまざまなメトリクスを直接収集できます。サポートされるメトリックタイプは、カウンター、ヒストグラム、メーター、タイマー です。メトリクス を使用すると、アプリケーションの動作を測定するための簡単な方法が提供されます。設定可能なレポートバックエンドは、統計を収集し、視覚化するためのさまざまな統合オプションを有効にします。コンポーネントは、
MetricsRoutePolicyFactory
も提供します。これにより、codehale メトリクスを使用してルート統計を公開できます。詳細は、ページ下部を参照してください。
Maven ユーザーは、このコンポーネントの以下の依存関係を
pom.xml
に追加する必要があります。
URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
metrics:[ meter | counter | histogram | timer ]:metricname[?options]
metrics:[ meter | counter | histogram | timer ]:metricname[?options]
metric Registry リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel Metrics Component はデフォルトで
MetricRegistry
を使用し、Slf4jReporter
と 60 秒のレポート間隔を使用します。デフォルトレジストリーは、Camel レジストリーで metricRegistry
という名前の Bean を提供することで、カスタムレジストリーに置き換えることができます。たとえば、Spring Java Configuration を使用します。
警告
MetricRegistry
レポートに内部スレッドを使用します。バージョン 3.0.1 には、ユーザーが終了時にクリーンアップするパブリック API はありません。そのため、Camel Metrics Component を使用すると、Java クラ出力ダーがリークし、OutOfMemoryErrors
が発生する可能性があります。
使用方法 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Headers リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
URI で定義されたメトリクス名は、ヘッダーと名前
CamelMetricsName
を使用して上書きできます。
以下に例を示します。
from("direct:in") .setHeader(MetricsConstants.HEADER_METRIC_NAME, constant("new.name")) .to("metrics:counter:name.not.used") .to("direct:out");
from("direct:in")
.setHeader(MetricsConstants.HEADER_METRIC_NAME, constant("new.name"))
.to("metrics:counter:name.not.used")
.to("direct:out");
name.not.used
ではなく、new.name
という名前のカウンターを更新します。
Metrics エンドポイントがエクスチェンジの処理を終了すると、Metrics 固有のヘッダーはすべてメッセージから削除されます。エクスチェンジのエンドポイントの処理中に、Metrics エンドポイントはすべての例外をキャッチし、レベル
warn
を使用してログエントリーを書き込みます。
メトリクスタイプのカウンター リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
metrics:counter:metricname[?options]
metrics:counter:metricname[?options]
オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前
|
デフォルト
|
説明
|
Increment
|
-
|
カウンターに追加する長い値
|
decrement
|
-
|
カウンターから減算する長い値
|
increment
または decrement
が定義されていない場合、カウンター値は 1 つずつ増えます。increment
と decrement
の両方が定義されている場合は、インクリメント操作のみが呼び出されます。
// update counter simple.counter by 7 from("direct:in") .to("metric:counter:simple.counter?increment=7") .to("direct:out");
// update counter simple.counter by 7
from("direct:in")
.to("metric:counter:simple.counter?increment=7")
.to("direct:out");
// increment counter simple.counter by 1 from("direct:in") .to("metric:counter:simple.counter") .to("direct:out");
// increment counter simple.counter by 1
from("direct:in")
.to("metric:counter:simple.counter")
.to("direct:out");
// decrement counter simple.counter by 3 from("direct:in") .to("metric:counter:simple.counter?decrement=3") .to("direct:out");
// decrement counter simple.counter by 3
from("direct:in")
.to("metric:counter:simple.counter?decrement=3")
.to("direct:out");
Headers リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
メッセージヘッダーは、Metrics コンポーネント URI で指定される
increment
および decrement
の値を上書きするために使用できます。
名前
|
説明
|
想定されるタイプ
|
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");
// 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");
// 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");
// 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");
メトリックのタイプヒストグラム リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
metrics:histogram:metricname[?options]
metrics:histogram:metricname[?options]
オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前
|
デフォルト
|
説明
|
value
|
-
|
ヒストグラムで使用する値
|
value
が設定されていない場合、ヒストグラムには何も追加されず、警告が記録されます。
// adds value 9923 to simple.histogram from("direct:in") .to("metric:histogram:simple.histogram?value=9923") .to("direct:out");
// adds value 9923 to simple.histogram
from("direct:in")
.to("metric:histogram:simple.histogram?value=9923")
.to("direct:out");
// nothing is added to simple.histogram; warning is logged from("direct:in") .to("metric:histogram:simple.histogram") .to("direct:out");
// nothing is added to simple.histogram; warning is logged
from("direct:in")
.to("metric:histogram:simple.histogram")
.to("direct:out");
Headers リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
メッセージヘッダーを使用して、Metrics コンポーネント URI に指定された値をオーバーライドできます。
名前
|
説明
|
想定されるタイプ
|
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")
// 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")
メトリックタイプのメーター リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
metrics:meter:metricname[?options]
metrics:meter:metricname[?options]
オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前
|
デフォルト
|
説明
|
mark
|
-
|
マークとして使用する長い値
|
mark
が設定されていない場合、meter.mark()
は引数なしで呼び出されます。
// marks simple.meter without value from("direct:in") .to("metric:simple.meter") .to("direct:out");
// marks simple.meter without value
from("direct:in")
.to("metric:simple.meter")
.to("direct:out");
// marks simple.meter with value 81 from("direct:in") .to("metric:meter:simple.meter?mark=81") .to("direct:out");
// marks simple.meter with value 81
from("direct:in")
.to("metric:meter:simple.meter?mark=81")
.to("direct:out");
Headers リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
メッセージヘッダーを使用して、Metrics コンポーネント URI に指定された
mark
値を上書きできます。
名前
|
説明
|
想定されるタイプ
|
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");
// 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");
メトリクスタイプタイマー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
metrics:timer:metricname[?options]
metrics:timer:metricname[?options]
オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前
|
デフォルト
|
説明
|
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");
// 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");
TimerContext
オブジェクトは、異なる Metrics コンポーネント呼び出し間で Exchange プロパティーとして保存されます。
Headers リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
メッセージヘッダーは、Metrics コンポーネント URI に指定されたアクション値を上書きするために使用できます。
名前
|
説明
|
想定されるタイプ
|
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");
// sets timer action using header
from("direct:in")
.setHeader(MetricsConstants.HEADER_TIMER_ACTION, TimerAction.start)
.to("metric:timer:simple.timer")
.to("direct:out");
MetricsRoutePolicyFactory リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
このファクトリーを使用すると、コード化されたメトリクスを使用してルートの使用状況の統計を公開する各ルートに RoutePolicy を追加できます。このファクトリーは、以下の例のように Java および XML で使用できます。
ヒント
MetricsRoutePolicyFactory を使用する代わりに、選択したいくつかのルートのみをインストルメント化する場合に、インストルメント化するルートごとに MetricsRoutePolicy を定義できます。
Java の場合は、以下のようにファクトリーを
CamelContext
に追加します。
context.addRoutePolicyFactory(new MetricsRoutePolicyFactory());
context.addRoutePolicyFactory(new MetricsRoutePolicyFactory());
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"/>
<!-- use camel-metrics route policy to gather metrics for all routes -->
<bean id="metricsRoutePolicyFactory" class="org.apache.camel.component.metrics.routepolicy.MetricsRoutePolicyFactory"/>
MetricsRoutePolicyFactory
および MetricsRoutePolicy
は以下のオプションをサポートします。
名前
|
デフォルト
|
説明
|
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(); ... }
MetricRegistryService registryService = context.hasService(MetricsRegistryService.class);
if (registryService != null) {
MetricsRegistry registry = registryService.getMetricsRegistry();
...
}
MetricsMessageHistoryFactory リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
このファクトリーを使用すると、メッセージのルーティング中にメトリクスを使用してメッセージ履歴のパフォーマンス統計をキャプチャーできます。これは、すべてのルートの各ノードにメトリクスタイマーを使用して機能します。このファクトリーは、以下の例のように Java および XML で使用できます。
Java の場合は、以下のようにファクトリーを CamelContext に設定します。
context.setMessageHistoryFactory(new MetricsMessageHistoryFactory());
context.setMessageHistoryFactory(new MetricsMessageHistoryFactory());
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"/>
<!-- use camel-metrics message history to gather metrics for all messages being routed -->
<bean id="metricsMessageHistoryFactory" class="org.apache.camel.component.metrics.messagehistory.MetricsMessageHistoryFactory"/>
以下のオプションはファクトリーでサポートされます。
名前 | デフォルト | 説明 |
---|---|---|
useJmx | false | com.codahale.metrics.JmxReporter を使用して、詳細な統計を JMX に報告するかどうか。CamelContext で JMX が有効になっている場合、MetricsRegistryService MBean は JMX ツリーのサービスタイプの下に登録されることに注意してください。この MBean には、JSon を使用して統計を出力する 1 つの操作があります。useJmx を true に設定する必要があるのは、統計タイプごとに詳細な MBean が必要な場合のみです。 |
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##.###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();
MetricsMessageHistoryService service = context.hasService(MetricsMessageHistoryService.class);
String json = service.dumpStatisticsAsJson();
また、MBean は
name=MetricsMessageHistoryService
を使用して type=services
ツリーに登録される JMX API です。