序章

システムとアプリケーションに関する情報を収集することで、インフラストラクチャ、サーバー、およびソフトウェアに関する情報に基づいた決定を行うために必要な情報を得ることができます。

この種の情報を取得し、理解しやすい方法で表示するには、さまざまな方法があります。 これらのアプリケーションの1つは、Graphiteと呼ばれます。

Graphiteは、システムから収集されたデータの視覚的表現を整理およびレンダリングするための優れたツールです。 柔軟性が高く、追跡しているメトリックのパフォーマンスと正常性の詳細な表現と広範な概要の両方のメリットを享受できるように構成できます。

以前のガイドでは、グラフ作成および統計収集アプリケーションの概要を確認しました。これらをつなぎ合わせて、統計を表示する堅牢なシステムを作成できます。 このガイドでは、Ubuntu14.04サーバーでGraphiteをセットアップする方法を説明します。 今後のガイドでは、collectdおよびStatsdからGraphite統計をフィードする方法について説明します。

Graphiteをインストールする

開始するには、Graphiteコンポーネントをダウンロードしてインストールする必要があります。 グラフ作成ソフトウェアの概要を見ると、Graphiteがいくつかのコンポーネントで構成されていることに気付くでしょう。Webアプリケーション、Carbonと呼ばれるストレージバックエンド、およびwhisperと呼ばれるデータベースライブラリです。

グラファイトは、以前はインストールがかなり困難でした。 幸い、Ubuntu 14.04では、必要なすべてのコンポーネントがデフォルトのリポジトリにあります。

ローカルパッケージインデックスを更新してから、必要なパッケージをインストールしましょう。

sudo apt-get update
sudo apt-get install graphite-web graphite-carbon

インストール中に、インストールをパージすることにした場合に、Carbonでデータベースファイルを削除するかどうかを尋ねられます。 統計を破壊しないように、ここで「いいえ」を選択してください。 新しく始める必要がある場合は、いつでも手動でファイルを削除できます( var/lib/graphite/whisper).

インストールが完了すると、Graphiteがインストールされます。 すべてを軌道に乗せて実行するには、追加の構成を行う必要があります。

Djangoのデータベースを構成する

Graphiteデータ自体はCarbonとwhisperデータベースライブラリによって処理されますが、WebアプリケーションはDjango Pythonアプリケーションであり、そのデータをどこかに保存する必要があります。

デフォルトでは、これはSQLite3データベースファイルを使用するように構成されています。 ただし、これらは本格的なリレーショナルデータベース管理システムほど堅牢ではないため、代わりにPostgreSQLを使用するようにアプリを構成します。 PostgreSQLはデータの入力に関してはるかに厳密であり、将来的に問題を引き起こす可能性のある例外をキャッチします。

PostgreSQLコンポーネントをインストールする

次のように入力することで、必要なデータベースソフトウェアとヘルパーパッケージをインストールできます。

sudo apt-get install postgresql libpq-dev python-psycopg2

これにより、データベースソフトウェアと、Graphiteがデータベースに接続して通信するために使用するPythonライブラリがインストールされます。

データベースユーザーとデータベースを作成する

データベースソフトウェアをインストールしたら、Graphiteが使用するPostgreSQLユーザーとデータベースを作成する必要があります。

を使用してインタラクティブなPostgreSQLプロンプトにサインインできます psql コマンドとして postgres システムユーザー:

sudo -u postgres psql

次に、Djangoがデータベースを操作するために使用するデータベースユーザーアカウントを作成する必要があります。 ユーザーに電話します graphite. このユーザーの安全なパスワードを選択します。

パスワード付きのユーザーgraphiteを作成します'パスワード';

これで、データベースを作成して、新しいユーザーにデータベースの所有権を与えることができます。 データベースを呼び出します graphite また、それらの関連付けを簡単に認識できるようにするために、次のようにします。

CREATE DATABASE graphite WITH OWNER graphite;

終了したら、PostgreSQLセッションを終了できます。

\q

Postgresがファイル履歴を保存できなかったことを示すメッセージが表示される場合があります。 これは私たちにとって問題ではないので、続行できます。

GraphiteWebアプリケーションを構成する

これで、データベースとユーザーの準備が整いました。 ただし、構成したコンポーネントを使用するには、Graphiteの設定を変更する必要があります。 他にも確認すべき設定がいくつかあります。

GraphiteWebアプリ構成ファイルを開きます。

sudo nano /etc/graphite/local_settings.py

まず、ハッシュを作成するときにソルトとして使用される秘密鍵を設定する必要があります。 コメントを外す SECRET_KEY パラメータを設定し、値を長くて一意の値に変更します。

SECRET_KEY =' a_salty_string '

次に、タイムゾーンを指定する必要があります。 これはグラフに表示される時間に影響するため、設定することが重要です。 このリストの「TZ」列で指定されているタイムゾーンに設定します。

TIME_ZONE =' America / New_York '

また、グラフデータを保存するための認証を構成する必要があります。 データベースを同期すると、ユーザーアカウントを作成できるようになりますが、次の行のコメントを解除して認証を有効にする必要があります。

USE_REMOTE_USER_AUTHENTICATION = True

次に、 DATABASES 辞書の定義。 Postgres情報を反映するように値を変更したいと思います。 変更する必要があります NAME, ENGINE, USER, PASSWORD、 と HOST キー。

終了すると、次のようになります。

 DATABASES = {'default':{'NAME':' graphite '、'ENGINE':'django.db.backends。  postgresql_psycopg2 '、' USER':'グラファイト'、' PASSWORD':'パスワード'、' HOST':' 127.0.0.1 '、' PORT':''}}

赤い領域は、変更する必要のある値です。 パスワードは、パスワードを選択したものに変更してください。 graphite Postgresのユーザー。

また、必ず設定してください HOST パラメータ。 これを空白のままにすると、Postgresはピア認証を使用して接続しようとしていると見なします。この場合、ピア認証は正しく認証されません。

終了したら、ファイルを保存して閉じます。

データベースを同期する

データベースセクションに入力したので、データベースを同期して正しい構造を作成できます。

これを行うには、次のように入力します。

sudo graphite-manage syncdb

データベースのスーパーユーザーアカウントを作成するように求められます。 インターフェイスにサインインできるように、新しいユーザーを作成します。 これは好きなように呼び出すことができます。 これにより、グラフを保存してインターフェイスを変更できます。

Carbonを構成する

データベースができたので、GraphiteストレージバックエンドであるCarbonの構成を開始できます。

まず、起動時にカーボンサービスを開始できるようにします。 これを行うには、サービス構成ファイルを開きます。

sudo nano /etc/default/graphite-carbon

これには、サービスが起動時に開始するかどうかを指定するパラメーターが1つだけあります。 値を「true」に変更します。

    CARBON_CACHE_ENABLED=true

ファイルを保存して閉じます。

次に、Carbon構成ファイルを開きます。

sudo nano /etc/carbon/carbon.conf

このファイルのほとんどは、私たちの目的のためにすでに正しく構成されています。 ただし、小さな変更を加えます。

このディレクティブの設定をtrueに調整して、ログローテーションをオンにします。

ENABLE_LOGROTATION = True

ファイルを保存して閉じます。

ストレージスキーマの構成

次に、ストレージスキーマファイルを開きます。 これは、Carbonに値を保存する期間と、これらの値をどの程度詳細にする必要があるかを示します。

sudo nano /etc/carbon/storage-schemas.conf

内部には、次のようなエントリがあります。

[カーボン]パターン=^カーボン。 保持=60:90d

[default_1min_for_1day]パターン=。*保持=60s:1d

このファイルには現在、2つのセクションが定義されています。 1つ目は、Carbon自体からのデータをどう処理するかを決定するためのものです。 Carbonは、実際には、独自のパフォーマンスのいくつかのメトリックを格納するように構成されています。 一番下の定義は、別のセクションと一致していないすべてのデータに適用するように設計されたキャッチオールです。 デフォルトのポリシーを定義します。

括弧内の単語は、新しい定義を定義するために使用されるセクションヘッダーです。 各セクションの下に、パターン定義と保持ポリシーがあります。

パターン定義は、Carbonに送信されるすべての情報を照合するために使用される正規表現です。 Carbonに送信される情報には、これがチェックするメトリック名が含まれます。 最初の例では、パターンは問題のメトリックが文字列「carbon.」。

保持ポリシーは、一連の数値によって定義されます。 各セットは、メトリック間隔(メトリックが記録される頻度)、コロン、およびそれらの値を格納する時間の長さで構成されます。 数字の複数のセットをコンマで区切って定義できます。

実例を示すために、後で使用するテスト値と一致する新しいスキーマを定義します。

デフォルトのセクションの前に、テスト値用の別のセクションを追加します。 次のようにします。

[テスト]パターン=^テスト。 保持=10s:10m、1m:1h、10m:1d

これは、「test.」。 収集したデータをさまざまな詳細で3回保存します。 最初のアーカイブ定義(10s:10m)は10秒ごとにデータポイントを作成します。 値は10分間だけ保存されます。

2番目のアーカイブ(1m:1h)は毎分データポイントを作成します。 過去1分間のすべてのデータを収集し(前のアーカイブでは10秒ごとにポイントが作成されるため6ポイント)、それを集約してポイントを作成します。 デフォルトでは、ポイントを平均することでこれを行いますが、後で調整できます。 この詳細レベルで1時間データを保存します。

作成される最後のアーカイブ(10m:1d)は10分ごとにデータポイントを作成し、2番目のアーカイブと同じ方法でデータを集約します。 1日のデータを保存します。

Graphiteに情報を要求すると、要求している時間枠を測定する最も詳細なアーカイブからの情報が返されます。 したがって、過去5分間のメトリックを要求すると、最初のアーカイブからの情報が返されます。 過去50分間のグラフを要求すると、データは2番目のアーカイブから取得されます。

終了したら、ファイルを保存して閉じます。

ストレージの集約方法について

より詳細な情報を一般化された数値にまとめるときにCarbonがデータを集約することを決定する方法は、正確なメトリックが必要かどうかを理解するために非常に重要です。 これは、上記で作成したテストスキーマの2番目と3番目のアーカイブのように、Graphiteがメトリックの詳細度の低いバージョンを作成するたびに適用されます。

上で述べたように、デフォルトの動作は、集計時に平均を取ることです。 これは、最も詳細なアーカイブ以外に、Carbonが受け取ったデータポイントを平均して数値を作成することを意味します。

ただし、これは必ずしも望ましいとは限りません。 たとえば、さまざまな期間にイベントが発生した合計回数が必要な場合は、データポイントを平均するのではなく、データポイントを合計して一般化されたデータポイントを作成します。

と呼ばれるファイルで集計を行う方法を定義できます storage-aggregation.conf. ファイルをCarbonexamplesディレクトリからCarbon設定ディレクトリにコピーします。

sudo cp /usr/share/doc/graphite-carbon/examples/storage-aggregation.conf.example /etc/carbon/storage-aggregation.conf

テキストエディタでファイルを開きます。

sudo nano /etc/carbon/storage-aggregation.conf

これは最後のファイルに少し似ています。 次のようなエントリがあります。

[min]パターン=.min$ xFilesFactor = 0.1aggregationMethod = min 

セクション名とパターンは、storage-schemasファイルとまったく同じです。 これは、定義しているメトリックに一致する任意の名前とパターンです。

The XFilesFactor これは、Carbonが集計を実行する必要がある値の最小パーセンテージを指定できるという点で興味深いパラメーターです。 デフォルトでは、すべての値はに設定されています 0.5、つまり、集約ポイントを作成する場合は、50% ofのより詳細なデータポイントを使用できる必要があります。

これを使用して、実際の状況を誤って表現する可能性のあるデータポイントを作成していないことを確認できます。 たとえば、ネットワークの問題が原因でデータが70 % o fドロップされている場合、データの30% ofのみを正確に表すポイントを作成したくない場合があります。

次に、集計方法を定義します。 可能な値は、average、sum、last、max、minです。 それらはかなり自明ですが、非常に重要です。 間違った値を選択すると、データが誤った方法で記録されます。 正しい選択は、実際に追跡しているメトリックが何であるかに完全に依存します。

:最短のアーカイブ間隔の長さよりも頻繁にGraphiteデータポイントを送信すると、一部のデータが失われることを理解することが重要です!

これは、Graphiteが集約を適用するのは、詳細なアーカイブから一般化されたアーカイブに移行する場合のみであるためです。 詳細データポイントを作成するときは、間隔が経過したときに送信された最新のデータのみを書き込みます。 StatsD については、別のガイドで説明します。このガイドは、より頻繁に受信するデータをキャッシュおよび集約することで、この問題を軽減するのに役立ちます。

ファイルを保存して閉じます。

終了したら、次のように入力してCarbonを開始できます。

sudo service carbon-cache start

Apacheのインストールと構成

Webインターフェースを使用するために、ApacheWebサーバーをインストールして構成します。 GraphiteにはApacheの構成ファイルが含まれているため、選択は非常に簡単です。

次のように入力して、コンポーネントをインストールします。

sudo apt-get install apache2 libapache2-mod-wsgi

インストールが完了したら、デフォルトの仮想ホストファイルを無効にする必要があります。これは、新しいファイルと競合するためです。

sudo a2dissite 000-default

次に、GraphiteApache仮想ホストファイルを利用可能なサイトディレクトリにコピーします。

sudo cp /usr/share/graphite-web/apache2-graphite.conf /etc/apache2/sites-available

次に、次のように入力して仮想ホストファイルを有効にします。

sudo a2ensite apache2-graphite

サービスをリロードして変更を実装します。

sudo service apache2 reload

Webインターフェイスをチェックする

すべての設定が完了したので、Webインターフェイスを確認できます。

Webブラウザーで、サーバーのドメイン名またはIPアドレスにアクセスします。

http:// server_domain_name_or_IP

次のような画面が表示されます。

先に進む前に、ログインして、作成したグラフ設定を保存できるようにする必要があります。 上部のメニューバーの[ログイン]ボタンをクリックし、Djangoデータベースの同期時に構成したユーザー名とパスワードを入力します。

次に、ツリーを開いた場合 Graphite 左側のペインに、Carbonのエントリが表示されます。 これは、Carbonがそれ自体について記録したデータのグラフを見つけることができる場所です。 いくつかのオプションをクリックします。 ここでは、受信したメトリックをグラフ化し、操作メトリックを更新しています。

それでは、Graphiteにデータを送信してみましょう。 これらの手順を実行するときは、このような統計をGraphiteに送信することはほとんどないことに注意してください。 これを行うにははるかに優れた方法がありますが、これはバックグラウンドで何が起こっているかを示すのに役立ち、Graphiteがデータを処理する方法の制限を理解するのにも役立ちます。 これらをコンパニオンサービスで回避する方法については、後で説明します。

メトリックメッセージには、メトリック名、値、およびタイムスタンプが含まれている必要があります。 これはターミナルで行うことができます。 私たちと一致する値を作成しましょう test 作成したストレージスキーマ。 また、集計時に値を合計する定義の1つと一致します。 を使用します date タイムスタンプを作成するコマンド。 タイプ:

echo "test.count 4 `date +%s`" | nc -q0 127.0.0.1 2003

ページを更新してから、 Graphite 左側のツリーには、新しいテストメトリックが表示されます。 上記のコマンドを数回送信し、その間に少なくとも10秒待ちます。 最小の間隔で複数の値が送信されると、Graphiteは最後の値を除くすべてをスローすることを忘れないでください。

次に、Webインターフェイスで、過去8分間を表示するようにGraphiteに指示します。 テストメトリックのグラフで、緑色の矢印が付いた白い長方形のアイコンをクリックします。 マウスを合わせると「最近のデータを選択」と表示されます。

ポップアップウィンドウから8分を選択します。 「グラフの更新」というアイコンをクリックして、最新のデータを取得します。 情報がほとんどないグラフが表示されるはずです。 これは、それぞれが「4」であるいくつかの値のみを送信したため、変動がないためです。

ただし、過去15分間のグラフを表示すると(コマンドを数回送信し、10秒より長く1分未満の間隔で送信したと仮定)、次のように表示されます。

これは、最初のアーカイブでは15分間データが保存されないため、Graphiteは2番目のアーカイブでレンダリングデータを探します。 集計定義の1つと一致する「カウント」メトリックをGraphiteに送信したため、外観が異なります。

カウント集計は、平均化するのではなく、より大きな間隔の間に受け取った値を合計するようにGraphiteに指示します。 ご覧のとおり、選択した集計方法は、より詳細なポイントから一般化データポイントを作成する方法を定義するため、非常に重要です。

結論

これでGraphiteがインストールおよびセットアップされましたが、実行できる機能はまだかなり制限されています。 常に手動でデータをフィードする必要はなく、最小間隔内に複数のメトリックがある場合にデータを破棄しないようにする必要があります。 これらの問題を回避するのに役立つコンパニオンツールが必要です。

次のガイドでは、 collectd をセットアップして、Graphiteデータをフィードし、これらの制限を回避するために使用できるシステム統計収集デーモンを設定する方法について説明します。 今後のガイドでは、StatsDをGraphiteで構成する方法と、Graphiteインターフェースをより詳細に使用する方法についても説明します。

ジャスティン・エリングウッド