Graphiteシリーズ#6:Carbon重合器
前のブログ記事では、Carbon(caches)とWhisperをどのように設定するか、指標と可視化情報を公開するか、Carbonプロセスの動作を学びました.このブログでは、Carbonのもう一つの特性である重合器について説明します.
Whisperに指標を報告する前に,時間が経つにつれてCarbon重合器は指標をバッファリングする.たとえば、10秒ごとに受信したリクエストの数を10のアプリケーション・サーバで報告しているとします.
このような方法でのデータポイントは非常に見識がある.負荷分散機能が実際に正しいかどうか、サーバ間の負荷が分散しているかどうかを検証したいかもしれません.
それでも、他の場合は、サーバアプリケーションが受信したリクエストの合計数に興味があるだけです.これはGraphite関数によってあなたの指標で非常に簡単に実現できます.
この方法の問題は,操作が非常に高価であることである.グラフィックをレンダリングするには、まず対応するWhisperファイルから10個の異なる指標を読み込む必要があります.次に、指定した関数のマージ結果を実行して、最後にグラフィックを構築する必要があります.私たちがどの値の可視化に興味を持っているかを知っていれば、これらの値を推定することで利益を得ることができます.
これらの値を推定するために、一致する指標の正規表現規則を定義できます.指定した時間にそれらをバッファリングし、バッファデータに対して関数を実行し、個別のWhisper指標ファイルに結果を格納します.私たちの例では、次の作業を行う必要があります.指標整合規則:PRODUCTION.host.*.requests.m1_rate バッファ間隔:60秒 集約関数:sum 出力指標:PRODUCTION.host.all.requests.m1_rate
各サーバの指標は10秒ごとに私たちの環境に報告されます.この構成と合わせて,指標バッファは6つのパブリケーション間隔でsum関数を用いて出力されたWhisper指標ファイルにマージして格納する.最後に、集約指標データをクエリーすることで、グラフィックを構築できます.
Carbonアキュムレータは、Carbon cachesの前で動作するように構成することができる.入力された指標は、集約器によって受信され、cachesに伝達されることができる.
Carbon&WhisperブログのCarbon cacheの構成と実行方法に関するマニュアルを参照してください.私の環境では、次の構成cacheを使用します.
次のコマンドを使用して実行します.
Carbonアグリゲータの場合、同じCarbonプロファイルにはデフォルトの設定があります.
私のCarbon cacheプロセスの受信ポートはデフォルトに設定されています(2004).したがって、デフォルトの構成を使用して、cacheプロセスと通信できる集約プロセスを開始できます.
集約ルール・プロファイルは、複数行で指定された集約が必要な指標と、それらがどのように結合されるべきかによって構成されます.各ローのフォーマットは次のとおりです.
これは、受信したマッチング
私が発表した指標の性質のため、すべての指標が環境から始まり、ホスト文字列と正しいホスト名に従うことを知っています.残りの指標文字列は、実際の指標名に対応します.以下は,流入流量の統計的解析と重合指標の結果であり,以上の重合規則により得られる.
このとき、Carbon集約プロセスが単一の集約ルールを実行し、データポイントをCarbon cacheに送信します.動作を観察するためにデータポイントのパブリッシュを開始することができます.
前述の論文では,Stresserアプリケーションを用いてCarbon cacheに指標を公開した.同じパラメータ変更を使用して、Stresserを構成して、1つのCarbonアグリゲータに指標をパブリッシュし、複数のホストから指標を模倣してパブリッシュすることで、アグリゲーション機能をテストできます.次の構成を使用します. Publishing port: 2023 (aggregator) Number of timers: 2 Number of hosts: 5 Publishing interval: 10 seconds Total metrics published every 10 seconds: 150 metrics Total metrics published per minute: 900 Debug mode: true
Stresserが開始して間もなく、正しいWhisperファイルが作成されているかどうかを確認できます.明らかに、各独立した指標のWhisperファイルはすでに作成されているはずです.
しかし、より重要なのは、集約指標も作成されるべきです.
Graphite WebappでStresserを使用して発表した指標を可視化するために非常に簡単なダッシュボードを作成しました.次のダッシュボード定義を使用します.
集約データを取得するために独立した指標に関数を適用する必要はありません.集約データを事前に完了したすべての指標をクエリーするだけです.
集約ルールは、集約が必要な多くの指標を含むように拡張できます.ここには覚えておく必要があることがあります.は、集約ルールに一致する指標の数が増加するにつれて、集約プロセスのメモリ使用量が増加します.キャッシュ・データ・ポイントが増加したためです. は、1つの集約ルールにおけるキャッシュ間隔が指標パブリケーション間隔よりも大きいことを保証する.
オリジナルGraphiteシリーズ: Provision Hardware Carbon & Whisper Whisper Storage Schemas & Aggregations Graphite Webapp Stress Testing Carbon Caches Carbon Aggregators
Carbon重合器
Whisperに指標を報告する前に,時間が経つにつれてCarbon重合器は指標をバッファリングする.たとえば、10秒ごとに受信したリクエストの数を10のアプリケーション・サーバで報告しているとします.
PRODUCTION.host.ip-0.requests.m1_rate
PRODUCTION.host.ip-1.requests.m1_rate
PRODUCTION.host.ip-2.requests.m1_rate
PRODUCTION.host.ip-3.requests.m1_rate
PRODUCTION.host.ip-4.requests.m1_rate
PRODUCTION.host.ip-5.requests.m1_rate
PRODUCTION.host.ip-6.requests.m1_rate
PRODUCTION.host.ip-7.requests.m1_rate
PRODUCTION.host.ip-8.requests.m1_rate
PRODUCTION.host.ip-9.requests.m1_rate
このような方法でのデータポイントは非常に見識がある.負荷分散機能が実際に正しいかどうか、サーバ間の負荷が分散しているかどうかを検証したいかもしれません.
それでも、他の場合は、サーバアプリケーションが受信したリクエストの合計数に興味があるだけです.これはGraphite関数によってあなたの指標で非常に簡単に実現できます.
sumSeries(PRODUCTION.host.*.requests.m1_rate)
この方法の問題は,操作が非常に高価であることである.グラフィックをレンダリングするには、まず対応するWhisperファイルから10個の異なる指標を読み込む必要があります.次に、指定した関数のマージ結果を実行して、最後にグラフィックを構築する必要があります.私たちがどの値の可視化に興味を持っているかを知っていれば、これらの値を推定することで利益を得ることができます.
これらの値を推定するために、一致する指標の正規表現規則を定義できます.指定した時間にそれらをバッファリングし、バッファデータに対して関数を実行し、個別のWhisper指標ファイルに結果を格納します.私たちの例では、次の作業を行う必要があります.
各サーバの指標は10秒ごとに私たちの環境に報告されます.この構成と合わせて,指標バッファは6つのパブリケーション間隔でsum関数を用いて出力されたWhisper指標ファイルにマージして格納する.最後に、集約指標データをクエリーすることで、グラフィックを構築できます.
Carbonプロセススタック
Carbonアキュムレータは、Carbon cachesの前で動作するように構成することができる.入力された指標は、集約器によって受信され、cachesに伝達されることができる.
Carbon Cache
Carbon&WhisperブログのCarbon cacheの構成と実行方法に関するマニュアルを参照してください.私の環境では、次の構成cacheを使用します.
$ vi /opt/graphite/conf/carbon.conf
[cache]
LINE_RECEIVER_INTERFACE = 0.0.0.0
LINE_RECEIVER_PORT = 2003
PICKLE_RECEIVER_INTERFACE = 0.0.0.0
PICKLE_RECEIVER_PORT = 2004
CACHE_QUERY_INTERFACE = 0.0.0.0
CACHE_QUERY_PORT = 7002
次のコマンドを使用して実行します.
$ cd /opt/graphite/bin
$ ./carbon-cache.py start
$ ps -efla | grep carbon-cache
1 S root 18826 1 4 80 0 - 156222 ep_pol Jun04 ? 02:04:31 /usr/bin/python ./carbon-cache.py start
Carbon重合器
Carbonアグリゲータの場合、同じCarbonプロファイルにはデフォルトの設定があります.
$ vi /opt/graphite/conf/carbon.conf
[aggregator]
LINE_RECEIVER_INTERFACE = 0.0.0.0
LINE_RECEIVER_PORT = 2023
PICKLE_RECEIVER_INTERFACE = 0.0.0.0
PICKLE_RECEIVER_PORT = 2024
DESTINATIONS = 127.0.0.1:2004
AGGREGATION_RULES = aggregation-rules.conf
REWRITE_RULES = rewrite-rules.conf
私のCarbon cacheプロセスの受信ポートはデフォルトに設定されています(2004).したがって、デフォルトの構成を使用して、cacheプロセスと通信できる集約プロセスを開始できます.
$ cd /opt/graphite/bin
$ ./carbon-aggregator.py start
$ ps -efla | grep carbon-aggregator
1 S root 23767 1 0 80 0 - 56981 ep_pol 13:53 ? 00:00:00 /usr/bin/python ./carbon-aggregator.py start
集約ルール
集約ルール・プロファイルは、複数行で指定された集約が必要な指標と、それらがどのように結合されるべきかによって構成されます.各ローのフォーマットは次のとおりです.
output_template (buffering_time_interval) = function input_pattern
これは、受信したマッチング
input_pattern
の指標を測定して、集約指標を計算するために使用される.この計算はbuffering_time_interval
秒ごとに発生する.関数アプリケーションは、sum
であってもよいし、avg
であってもよい.集約指標の名前は、output_template
から派生し、input_pattern
からの任意のキャプチャフィールドに記入される.前のブログの例では、次の集約ルールを構築できます.# aggregate all m1_rate metrics
.host.all..m1_rate (60) = sum .host.*.<>.m1_rate
私が発表した指標の性質のため、すべての指標が環境から始まり、ホスト文字列と正しいホスト名に従うことを知っています.残りの指標文字列は、実際の指標名に対応します.以下は,流入流量の統計的解析と重合指標の結果であり,以上の重合規則により得られる.
Incoming: PRODUCTION.host.ip-0.requests.m1_rate
= PRODUCTION
host.* = host.ip-0
= requests
m1_rate = m1_rate
Aggregate: PRODUCTION.host.all.requests.m1_rate
= PRODUCTION
host.all = host.all
= requests
m1_rate = m1_rate
このとき、Carbon集約プロセスが単一の集約ルールを実行し、データポイントをCarbon cacheに送信します.動作を観察するためにデータポイントのパブリッシュを開始することができます.
データの集約
前述の論文では,Stresserアプリケーションを用いてCarbon cacheに指標を公開した.同じパラメータ変更を使用して、Stresserを構成して、1つのCarbonアグリゲータに指標をパブリッシュし、複数のホストから指標を模倣してパブリッシュすることで、アグリゲーション機能をテストできます.次の構成を使用します.
$ java -jar stresser.jar localhost 2023 5 2 10 true
Initializing 2 timers - publishing 150 metrics every 10 seconds from 5 host(s)
Publishing metric: STRESS.host.ip-0.com.graphite.stresser.a
Publishing metric: STRESS.host.ip-1.com.graphite.stresser.a
Publishing metric: STRESS.host.ip-2.com.graphite.stresser.a
Publishing metric: STRESS.host.ip-3.com.graphite.stresser.a
Publishing metric: STRESS.host.ip-4.com.graphite.stresser.a
Publishing metric: STRESS.host.ip-0.com.graphite.stresser.b
Publishing metric: STRESS.host.ip-1.com.graphite.stresser.b
Publishing metric: STRESS.host.ip-2.com.graphite.stresser.b
Publishing metric: STRESS.host.ip-3.com.graphite.stresser.b
Publishing metric: STRESS.host.ip-4.com.graphite.stresser.b
Stresserが開始して間もなく、正しいWhisperファイルが作成されているかどうかを確認できます.明らかに、各独立した指標のWhisperファイルはすでに作成されているはずです.
$ ls -l /opt/graphite/storage/whisper/STRESS/host/ip-*/com/graphite/stresser/a/
/opt/graphite/storage/whisper/STRESS/host/ip-0/com/graphite/stresser/a/:
-rw-r--r--. 1 root root 17308 Jun 6 14:27 m1_rate.wsp
/opt/graphite/storage/whisper/STRESS/host/ip-1/com/graphite/stresser/a/:
-rw-r--r--. 1 root root 17308 Jun 6 14:27 m1_rate.wsp
/opt/graphite/storage/whisper/STRESS/host/ip-2/com/graphite/stresser/a/:
-rw-r--r--. 1 root root 17308 Jun 6 14:27 m1_rate.wsp
/opt/graphite/storage/whisper/STRESS/host/ip-3/com/graphite/stresser/a/:
-rw-r--r--. 1 root root 17308 Jun 6 14:27 m1_rate.wsp
/opt/graphite/storage/whisper/STRESS/host/ip-4/com/graphite/stresser/a/:
-rw-r--r--. 1 root root 17308 Jun 6 14:27 m1_rate.wsp
しかし、より重要なのは、集約指標も作成されるべきです.
$ ls -l /opt/graphite/storage/whisper/STRESS/host/all/com/graphite/stresser/a/
-rw-r--r--. 1 root root 17308 Jun 6 14:30 m1_rate.wsp
ビジュアル集計
Graphite WebappでStresserを使用して発表した指標を可視化するために非常に簡単なダッシュボードを作成しました.次のダッシュボード定義を使用します.
[
{
"target": [
"aliasByNode(STRESS.host.ip*.com.graphite.stresser.a.m1_rate,2)",
"aliasByNode(STRESS.host.all.com.graphite.stresser.a.m1_rate,2)"
],
"title": "Individual & Aggregate Rates"
}
]
集約データを取得するために独立した指標に関数を適用する必要はありません.集約データを事前に完了したすべての指標をクエリーするだけです.
次のステップ
集約ルールは、集約が必要な多くの指標を含むように拡張できます.ここには覚えておく必要があることがあります.
オリジナルGraphiteシリーズ: