序章

監視システムは、実行中に大量のデータを受信して蓄積します。 監視システムの実行時間が長いほど、より多くのデータが収集されます。

ほとんどの監視システムには、長期的なデータ分析と保存のためのツールがありません。 ストレージの問題を引き起こすすべての読み取り値を保持するか、特定のしきい値に達すると古いデータを削除するため、長期間にわたってシステムパフォーマンスを分析できなくなります。

Zabbixなどの一部の監視システムでは、正確なデータ値と平均化されたデータ値の両方を保存できますが、カスタマイズ機能は非常に限られています。

時系列データベースは、大量の履歴データを保存する問題を解決するのに役立ちます。 時系列は、時間の経過に伴うデータポイントのシーケンスであり、時系列データベースは、このタイプのデータを格納するように最適化されています。

このチュートリアルでは、Graphiteをインストールして構成する方法を示します。これは、数値の時系列データを保存し、このデータのグラフをレンダリングするためのツールです。 これは、次の3つのソフトウェアコンポーネントで構成されています。

  • Carbon -時系列データをリッスンし、ストレージバックエンドを使用してディスクに書き込むデーモン
  • Whisper-時系列データを保存するためのRRDToolに似たシンプルなデータベース
  • Graphite-Web -グラフをレンダリングし、取得したデータの機能豊富な視覚化と分析を提供するDjangoWebアプリケーション

最終的な構成では、監視エージェントがデータポイントをCarbonに送信します。Carbonには、カーボンリレー、カーボンアグリゲーター、およびカーボンキャッシュコンポーネントが含まれています。 CarbonはデータをWhisperデータベースに書き込みます。 Graphite-Webは、ユーザーが表示できるWebページにデータを表示します。

前提条件

開始する前に、次の手順を完了していることを確認してください。

sudo yum -y install epel-release

システムを更新します。

sudo yum -y update

EPELリポジトリの詳細については、fedoraproject.orgを参照してください。

ステップ1—グラファイトとカーボンの取り付け

Python関連のツールやApacheWebサーバーなど、必要なアプリケーションをインストールします。

sudo yum install httpd mod_wsgi python-pip python-devel git pycairo libffi-devel

GitHubからGraphiteとCarbonの最新のソースファイルを入手します。

cd /usr/local/src
sudo git clone https://github.com/graphite-project/graphite-web.git
sudo git clone https://github.com/graphite-project/carbon.git

要件を確認してください。

python /usr/local/src/graphite-web/check-dependencies.py

次のメッセージが表示されます。

[REQUIRED] Unable to import the 'whisper' or 'ceres' modules, please download this package from the Graphite project page and install it.
	
	. . .
	
	6 optional dependencies not met. Please consider the optional items before proceeding.
	5 necessary dependencies not met. Graphite will not function until these dependencies are fulfilled.

したがって、不足しているモジュールをインストールする必要があります。 最初にgccをインストールします。

sudo yum install gcc 	 	

次に、モジュールをインストールします。

sudo pip install -r /usr/local/src/graphite-web/requirements.txt

次に、django-taggingパッケージのバージョンを確認します。

pip show django-tagging

パッケージのバージョンが0.3.4未満の場合は、次のように更新する必要があります。

sudo pip install -U django-tagging

要件をもう一度確認してください。

python /usr/local/src/graphite-web/check-dependencies.py

これで、次の出力が表示されます。

[OPTIONAL] Unable to import the 'ldap' module, do you have python-ldap installed for python 2.7.5? Without python-ldap, you will not be able to use LDAP authentication in the graphite webapp.
[OPTIONAL] Unable to import the 'python-rrdtool' module, this is required for reading RRD.
2 optional dependencies not met. Please consider the optional items before proceeding.
All necessary dependencies are met.

このチュートリアルでは、LDAP認証やRRDデータベースは必要ありません。

Carbonのインストール:

cd /usr/local/src/carbon/
sudo python setup.py install

Webアプリケーションをインストールします。

cd /usr/local/src/graphite-web/
sudo python setup.py install

これですべてのコンポーネントがインストールされ、Graphiteを構成する準備が整いました。

Graphiteには、いくつかのサンプル構成ファイルが含まれています。 次の手順に示すように、必要なのはそれらをコピーして編集することだけです。

ステップ2—Carbonの設定

Carbonにはいくつかのサービスが含まれています。

  • carbon-cache-メトリックを受け入れ、それらをディスクに書き込みます
  • carbon-relay-データを複製します
  • carbon-aggregatorcarbon-cacheの前で実行され、メトリックをWhisperに転送する前に時間の経過とともにバッファリングします

最後の2つはオプションです。

カーボン構成ファイル

メインの設定ファイルはcarbon.confです。 各Carbonデーモンの設定を定義します。

サンプルファイルのコピーを作成しましょう。

sudo cp /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf

このファイル内の各設定は、ファイル自体の有益なコメントを介して文書化されています。 それらを調べることはできますが、このチュートリアルでは、デフォルト設定が適しています。

ストレージスキーマ

次に、メトリックを保存するための保持率を記述したstorage-schemas.confファイルを編集する必要があります。 メトリックパスをパターンに一致させ、保存するデータポイントの頻度と履歴をWhisperに通知します。

データが占めるディスク容量のサイズは、このファイルの設定によって異なります。

まず、サンプルファイルのコピーを作成します。

sudo cp /opt/graphite/conf/storage-schemas.conf.example /opt/graphite/conf/storage-schemas.conf

編集のためにファイルを開きましょう:

sudo vi /opt/graphite/conf/storage-schemas.conf

デフォルトでは、2つのセクションが含まれています。

[carbon]
pattern = ^carbon\.
retentions = 60:90d
	
[default_1min_for_1day]
pattern = .*
retentions = 60s:1d

各セクションには次のものがあります。

  • 角括弧内に指定された名前
  • pattern=の後に指定された正規表現
  • retentions=の後に指定された保持率ライン

たとえば、新しいセクションを追加しましょう。

[zabbix_server]
pattern = ^Zabbix_server\.
retentions = 30s:7d,5m:30d,10m:1y

正規表現パターンは、Zabbix_serverで始まるすべてのメトリックに一致します。 さらに、この例では複数の保持を使用しています。

  • 各データポイントは30秒を表し、そのような頻度で最大7日間のデータを保持する必要があります
  • 過去30日間のすべての履歴データは5分間隔で保存されます
  • 昨年のすべての履歴データは10分間隔で保存されます

保持のしきい値を超えると、Whisperはメトリックをダウンサンプリングします。

注:セクションは上から下に順番に適用され、メトリック名に一致する最初のパターンが使用されます。

ストレージアグリゲーション(オプション)

次に、データを低精度の保持に集約する方法を定義するstorage-aggregation.confファイルが必要になる場合があります。 このファイルはオプションです。 存在しない場合は、デフォルトが使用されます。

サンプルファイルのコピーを作成します。

sudo cp /opt/graphite/conf/storage-aggregation.conf.example /opt/graphite/conf/storage-aggregation.conf

ファイルを見てみましょう:

sudo vi /opt/graphite/conf/storage-aggregation.conf

デフォルトでは、次の4つのセクションが含まれています。

[min]
pattern = \.min$
xFilesFactor = 0.1
aggregationMethod = min
	
[max]
pattern = \.max$
xFilesFactor = 0.1
aggregationMethod = max
	
[sum]
pattern = \.count$
xFilesFactor = 0
aggregationMethod = sum
	
[default_average]
pattern = .*
xFilesFactor = 0.5
aggregationMethod = average

storage-schemas.confファイルと同様に、各セクションには角括弧内に指定された名前と、pattern=の後に指定された正規表現があります。 各セクションには、2つの追加パラメーターもあります。

  • xFilesFactorは、null以外の値に集約するために、前の保持レベルのスロットのどの部分にnull以外の値が必要かを指定します。 デフォルトは0.5です
  • aggregationMethodは、次の保持レベル。 デフォルトはaverageです

デフォルトでは、データが次の保持間隔に達すると、Graphiteは.countで終わるすべてのメトリックを合計し、それぞれ.min/.maxで終わるすべてのメトリックの最小/最大を取得し、その他すべてを平均します。

リレー(オプション)

carbon-relayは、レプリケーションとシャーディングに使用されます。 carbon-relayは、carbon-cacheと一緒に(またはその代わりに)実行し、着信メトリックを異なるポートまたはホストで実行されている複数のバックエンドcarbon-cachesに中継できます。

他のホストへのデータ転送を構成するには、対応する構成ファイルを編集する必要があります。 まず、サンプルファイルのコピーを作成します。

sudo cp /opt/graphite/conf/relay-rules.conf.example /opt/graphite/conf/relay-rules.conf

編集用にファイルを開きます。

sudo vi /opt/graphite/conf/relay-rules.conf

デフォルトでは、データをローカルホストに送信する単一のセクションが含まれています。

[default]                                        
default = true                                   
destinations = 127.0.0.1:2004:a, 127.0.0.1:2104:b

:aおよび:bは、同じホスト上でカーボンキャッシュの複数のインスタンスを実行できることを意味します)

次の例は、Zabbix_serverから1つのホストにデータを送信し、他のすべてのデータを他の3つのホストに送信するcarbon-relay設定を示しています。

[zabbix]
pattern = ^Zabbix_server\.
destinations = 10.0.0.4:2004

[default]                                        
default = true                                   
destinations = 127.0.0.1:2004, 10.0.0.2:2024, 10.0.0.3:2004

最初のセクションの正規表現パターンは、Zabbix_serverで始まるすべてのメトリックに一致し、すべてのデータはIPアドレス10.0.0.4でホストに送信されます。 他のすべてのデータは、ローカルホストと他の2つのホストに送信されます。

relay-rules.confにリストされているすべての宛先は、[relay]セクションのDESTINATIONS設定の/opt/graphite/conf/carbon.confファイルにもリストされている必要があります。

sudo vi /opt/graphite/conf/carbon.conf

3つの新しいIPを追加しました。

[relay]
...
DESTINATIONS = 127.0.0.1:2004, 10.0.0.2:2024, 10.0.0.3:2004, 10.0.0.4:2004
... 

集約(オプション)

carbon-aggregatorは、Whisperデータベースにレポートする前に、時間の経過とともにメトリックをバッファリングするために使用されます。 carbon-cacheの前で実行できます。 集計ルールを使用すると、複数のメトリックを一緒に追加できるため、すべてのURLで多くのメトリックを要約する必要がなくなります。

データ集約を構成するには、最初にサンプルファイルをコピーします。

sudo cp /opt/graphite/conf/aggregation-rules.conf.example /opt/graphite/conf/aggregation-rules.conf

このファイルの各行の形式は次のようになります。

output_template (frequency) = method input_pattern

これにより、集計メトリックを計算するためにinput_patternに一致する受信メトリックがキャプチャされます。 計算はfrequency秒ごとに行われます。 使用可能な集計方法は、sumまたはavgです。 集計メトリックの名前は、input_patternからキャプチャされたフィールドに入力するoutput_templateに由来します。

たとえば、組織に25の支社があり、それらの総インターネットトラフィックのグラフを作成するとします。

  • collectd.monitoring-host.branch-01.if_octets.rx
  • collectd.monitoring-host.branch-02.if_octets.rx
  • collectd.monitoring-host.branch-03.if_octets.rx
  • collectd.monitoring-host.branch-25.if_octets.rx

各支社からのデータを保存し、各支社のグラフを作成してから合計することができます。

ただし、このタイプの操作にはコストがかかります。要約グラフをレンダリングするには、最初に25の異なるメトリックを読み取り、次に合計関数を適用して結果を結合し、最後にグラフを作成する必要があります。

総トラフィックのみに関心がある場合は、値を事前に計算できます。 これを行うには、正規表現のメトリックに一致するルールを定義し、それらを指定された時間バッファリングし、バッファリングされたデータに関数を適用して、結果を別のメトリックに格納します。 したがって、構成は次のようになります。

collectd.monitoring-host.branches.if_octets.rx (60) = sum collectd.monitoring-host.*.if_octets.rx

この構成では、メトリックは60秒間バッファリングされ、sum関数を使用して結合され、新しいメトリックファイルに保存されます。

ステップ3—サービスとしてのCarbonの開始

Carbonのinitスクリプトを構成します。

まず、それらを/etc/init.d/にコピーして、実行可能にします。

sudo cp /usr/local/src/carbon/distro/redhat/init.d/carbon-* /etc/init.d/
sudo chmod +x /etc/init.d/carbon-*

carbon-cacheを開始します:

sudo systemctl start carbon-cache

それらを使用することを選択した場合は、carbon-relayおよびcarbon-aggregatorを開始します。

sudo systemctl start carbon-relay
sudo systemctl start carbon-aggregator

Carbonの構成が完了しました。Carbonは実行中であり、データを受信する準備ができています。 これで、Webインターフェイスを構成できます。

ステップ4—Graphite-Webアプリケーションの構成

Graphite-Webは、Apache/mod_wsgiで実行されるDjangoWebアプリケーションです。

サンプル設定ファイルをコピーします。

sudo cp /opt/graphite/webapp/graphite/local_settings.py.example /opt/graphite/webapp/graphite/local_settings.py

編集用にファイルを開きます。

sudo vi /opt/graphite/webapp/graphite/local_settings.py

SECRET_KEYを見つけて、一意の値を入力します。 これは、暗号署名を提供するために使用されます。 ユニークである限り、ここに何でも置くことができます。 TIME_ZONEを見つけて、インストールのタイムゾーンに更新します。 必要に応じて、タイムゾーンのリストを参照してください。

. . .
		
SECRET_KEY = 'enter_your_unique_secret_key_here'
	    
. . .
	    
TIME_ZONE = 'America/Chicago'
	    
. . .

新しいデータベースを初期化します。

cd /opt/graphite
sudo PYTHONPATH=/opt/graphite/webapp/ django-admin.py syncdb --settings=graphite.settings

次の出力が表示されます。 プロンプトは、データベースのスーパーユーザーアカウントを作成するためのいくつかの質問をします。

	Operations to perform:
      Synchronize unmigrated apps: url_shortener, account, dashboard, tagging, events
      Apply all migrations: admin, contenttypes, auth, sessions
    Synchronizing apps without migrations:
      Creating tables...
        Creating table account_profile
      
      . . .
        
      Applying sessions.0001_initial... OK
    
    You have installed Django's auth system, and don't have any superusers defined.
    Would you like to create one now? (yes/no): yes
    Username (leave blank to use 'root'): root
    Email address: [email protected]
    Password: password
    Password (again): password
    Superuser created successfully.

次のコマンドを実行して、すべての静的ファイルを1つのディレクトリに収集します。

sudo PYTHONPATH=/opt/graphite/webapp/ django-admin.py collectstatic --settings=graphite.settings

次の出力が表示されます。 プロンプトが表示されたら、yesと答えます。

You have requested to collect static files at the destination
location as specified in your settings:
	
/opt/graphite/static
	
This will overwrite existing files!
Are you sure you want to do this?
	
Type 'yes' to continue, or 'no' to cancel: yes
Copying '/opt/graphite/webapp/content/js/browser.js'
Copying '/opt/graphite/webapp/content/js/completer.js'
...
407 static files copied to '/opt/graphite/static'.

apacheユーザーが所有する適切なGraphiteを作成します。

sudo chown -R apache:apache /opt/graphite/storage/
sudo chown -R apache:apache /opt/graphite/static/
sudo chown -R apache:apache /opt/graphite/webapp/

Webアプリケーションを実行するには、graphite.wsgiファイルが必要です。 このファイルには、アプリケーションオブジェクトを取得するために起動時に実行されているコードmod_wsgiが含まれています。 サンプルファイルをコピーします。

sudo cp /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi

Apacheを構成します。 一般的なApache仮想ホストの詳細については、このチュートリアルを参照してください。 Graphiteからサンプルの仮想ホストファイルをコピーします。

sudo cp /opt/graphite/examples/example-graphite-vhost.conf /etc/httpd/conf.d/graphite.conf

編集用にファイルを開きます。

	sudo vi /etc/httpd/conf.d/graphite.conf

ServerNameがドメインまたはIPアドレスに設定されていることを確認してください。 Alias行はすでに正しく設定されているはずです。 その下に<Directory>ブロックを追加します。

. . .
	    
ServerName your_server_ip
		
. . .
		
Alias /static/ /opt/graphite/static/
	    
<Directory /opt/graphite/static/>
   Require all granted
</Directory>

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

デフォルトでは、Webアプリケーションを実行しているサーバーのアドレスを知っている人なら誰でも任意のデータを表示できます。 これを防ぐために、パスワードアクセスを設定できます。

新しいフォルダを作成し、権限を設定します。

sudo mkdir /opt/graphite/secure
sudo chown -R apache:apache /opt/graphite/secure

htpasswdを使用して、Graphite-Webアプリケーションへのアクセスを制限する新しいユーザー名とパスワードを作成します。 以下の例では、ユーザーsammyを作成して新しいパスワードを追加する方法を確認できます。

sudo htpasswd -c /opt/graphite/secure/.passwd sammy
New password: password
Re-type new password: password
Adding password for user sammy

Apacheを構成します。 Require user行で、前の手順と同じ名前を指定する必要があります。

sudo vi /etc/httpd/conf.d/graphite.conf

この新しい<Location>ブロックをメイン仮想ホストブロックの任意の場所に追加します。

<Location "/"> 
     AuthType Basic
     AuthName "Private Area" 
     AuthUserFile /opt/graphite/secure/.passwd
     Require user sammy
</Location>

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

ステップ6—Graphite-Webの実行

Apacheサービスを開始し、それを含めて起動時に開始します。

sudo systemctl start httpd
sudo systemctl enable httpd

インストールが完了しました! ブラウザを起動し、アドレスhttp://your_server_ip/に移動します。

手順5で設定したユーザー名とパスワードを入力します。

次のように表示されます。

Graphite-Web Home Page

ステップ7—collectdからのメトリクスの公開

Graphiteは、さまざまな監視サービスからのデータを使用できます。 この例では、collectdを使用します。 これは、システムパフォーマンス統計を定期的に収集し、さまざまな方法で値を保存または送信するメカニズムを提供するデーモンです。

collectdの詳細については、公式サイトをご覧ください。

collectdをインストールします。

sudo yum install collectd

構成ファイルには多くの設定が含まれています。 編集用にファイルを開きます。

sudo vi /etc/collectd.conf

以下を完成させよ:

  • グローバル設定でHostnameを設定します。 これは任意の名前にすることができ、このホストを指定するためにWebインターフェイスで使用されます。
Hostname "Monitor"
  • write_graphiteプラグイン設定のコメントを解除します
LoadPlugin write_graphite
  • <Plugin write_graphite>ブロックの設定を次のように編集します。
<Plugin write_graphite>
  <Node "localhost">
    Host "localhost"
    Port "2003"
  Protocol "tcp"
 LogSendErrors true
  Prefix "collectd."
	# Postfix "collectd"
  StoreRates true
   AlwaysAppendDS false
  EscapeCharacter "_"
  </Node>
</Plugin>

write_graphiteプラグインの主なパラメーター:

  • Host required )—Carbon収集エージェントのホスト名。 私たちの場合、ローカルホストで動作しています
  • Port必須)—カーボン収集エージェントが使用するポート。 この例では、carbon-relayはポート2003でリッスンします
  • Prefix —Carbonに送信されるホスト名の前に付加されるプレフィックス文字列。 Graphiteがホストを自動的にグループ化できるようにポイントを追加しました
  • Postfix —Carbonに送信されるホスト名の前に付加される接尾辞文字列。 プレフィックスを設定しているため、このオプションは必要ありません。無効にすることができます

収集を開始して、Graphiteへのメトリックの送信を開始します。

sudo systemctl start collectd.service

注:トラブルシューティングするには、コマンドsudo systemctl status collectd.serviceを使用して選択されたステータスのステータスを確認します。 これにより、Graphiteへの書き込みに問題があるかどうかがわかります。

CollectedはすぐにGraphiteへのデータ送信を開始します。 Webページを更新します。 Metrics フォルダーを展開すると、collectdが一覧表示されます。 しばらくすると、以下に示すように、データのきれいなグラフが表示されるようになります。

Graphs for Metrics > collectd > Monitor > load > load > midterm

ステップ8—データの操作

Graphiteには、高度なデータ表示オプションがあります。 たとえば、上の画像に示されているような画像を取得するには、いくつかのアクションを実行する必要があります。

  1. 左側のパネルで、メトリクス> collectd > Monitor (または手順7で構成したHostname)> load[をクリックします。 X137X]> load > midterm。 負荷平均のグラフが表示されます。

Click the Graph Data button

  1. グラフ下のグラフデータボタンをクリックします。
  2. ポップアップの右側にある追加ボタンをクリックします。
  3. 次の行を貼り付けます:collectd.Monitor.memory.*。 これにより、すべてのメモリ関連のグラフが選択されます。 ホストに別の名前を使用した場合は、Monitorの代わりにその名前を使用してください。
  4. OKを押します。 1つの画面に複数のグラフが表示されます。 スケールの違いにより、負荷曲線は線になりました。 これを修正するには、グラフを使用して次の操作を実行する必要があります。
  5. グラフデータボタンをもう一度クリックします。
  6. collectd.Monitor.load.load.midterm行を選択します。
  7. 機能の適用ボタンをクリックします。
  8. 特殊>2番目のY軸に描画を選択します
  9. もう一度機能の適用をクリックします。
  10. スペシャル>カラーを選択します。
  11. blackと入力し、OKを押します。
  12. collectd.Monitor.memory.*行を選択します。
  13. 機能の適用をクリックします。
  14. Special > DrawStackedを選択します。
  15. 手順7の最後に表示されているような画像が表示されます。

これは、サーバーからのデータを表示する1つの方法にすぎません。 同じグラフ上でさまざまなデータを組み合わせたり、さまざまな関数を適用したり、データをスケーリングしたり、移動平均を計算したり、データを予測したりすることができます。

結論

グラファイトは、時系列データを保存および分析するための強力なツールです。 このチュートリアルを完了すると、インストール方法、基本的なセットアップ方法、データの取得方法、および蓄積されたデータの操作方法についての一般的な理解が得られます。

グラファイトはダッシュボードとして使用できます。 CPU使用率、メモリ使用率、ネットワークインターフェイスの使用率などの主要なインジケーターを監視できます。

グラファイトには、データ分析のための多くの機能があります。 これらの関数を使用して、系列データの変換、結合、および計算を実行できます。 ほとんどの機能は順番に適用できます。 たとえば、すべてのブランチオフィスからの着信トラフィックを要約し、それを発信トラフィックの合計と比較することができます。 または、すべてのブランチオフィスからのすべての着信および発信トラフィックを要約し、長期間にわたる要約グラフを作成して、将来の容量計画の傾向を確認することもできます。