序章

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

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

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-aggregator -前を走る carbon-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 非ヌル値に集約するために、前の保持レベルのスロットのどの部分が非ヌル値を持つ必要があるかを指定します。 デフォルトは 0.5
  • aggregationMethod 関数を指定します(average, sum, min, max, last)次の保持レベルの値を集計するために使用されます。 デフォルトは 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 同じホスト上でカーボンキャッシュの複数のインスタンスを実行できることを意味します)

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

[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 また、にリストされている必要があります /opt/graphite/conf/carbon.conf ファイル、 DESTINATIONS の設定 [relay] セクション:

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. 集計メトリックの名前は、 output_template からキャプチャされたフィールドに入力する input_pattern.

たとえば、組織に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-relaycarbon-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 ユーザー:

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アドレスに設定されます。 The 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で設定したユーザー名とパスワードを入力します。

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

ステップ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 required )—カーボン収集エージェントが使用するポート。 この例では、 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が一覧表示されます。 しばらくすると、以下に示すように、データのきれいなグラフが表示されるようになります。

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

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

  1. 左側のパネルで、メトリクス> collectd > Monitor (または Hostname 手順7で構成しました)> load > load > midterm。 負荷平均のグラフが表示されます。
  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使用率、メモリ使用率、ネットワークインターフェイスの使用率などの主要なインジケーターを監視できます。

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