Graphiteシリーズ#6:Carbon重合器

7464 ワード

前のブログ記事では、Carbon(caches)とWhisperをどのように設定するか、指標と可視化情報を公開するか、Carbonプロセスの動作を学びました.このブログでは、Carbonのもう一つの特性である重合器について説明します.

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指標ファイルに結果を格納します.私たちの例では、次の作業を行う必要があります.
  • 指標整合規則:PRODUCTION.host.*.requests.m1_rate
  • バッファ間隔:60秒
  • 集約関数:sum
  • 出力指標:PRODUCTION.host.all.requests.m1_rate

  • 各サーバの指標は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アグリゲータに指標をパブリッシュし、複数のホストから指標を模倣してパブリッシュすることで、アグリゲーション機能をテストできます.次の構成を使用します.
  • 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
  • $ 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"
      }
    ]
    

    集約データを取得するために独立した指標に関数を適用する必要はありません.集約データを事前に完了したすべての指標をクエリーするだけです.

    次のステップ


    集約ルールは、集約が必要な多くの指標を含むように拡張できます.ここには覚えておく必要があることがあります.
  • は、集約ルールに一致する指標の数が増加するにつれて、集約プロセスのメモリ使用量が増加します.キャッシュ・データ・ポイントが増加したためです.
  • は、1つの集約ルールにおけるキャッシュ間隔が指標パブリケーション間隔よりも大きいことを保証する.

  • オリジナルGraphiteシリーズ:
  • Provision Hardware
  • Carbon & Whisper
  • Whisper Storage Schemas & Aggregations
  • Graphite Webapp
  • Stress Testing Carbon Caches
  • Carbon Aggregators