前書き

監視システムは、実行中に大量のデータを受信して​​蓄積します。 監視システムの実行時間が長くなるほど、収集するデータが増えます。

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

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

https://en.wikipedia.org/wiki/Time_series_database [時系列データベース]は、大量の履歴データを保存する問題の解決に役立ちます。 時系列は、時間の経過に伴うデータポイントの単なるシーケンスであり、時系列データベースはこのタイプのデータを格納するために最適化されています。

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

  • * Carbon *-時系列データをリッスンし、ストレージバックエンドを使用してディスクに書き込むデーモン

  • *ささやき-時系列データを保存するためのRRDToolに似たシンプルなデータベース

  • * Graphite-Web *-グラフをレンダリングし、取得したデータの機能豊富な視覚化と分析を提供するDjango Webアプリケーション

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

前提条件

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

sudo yum -y install epel-release

システムを更新します。

sudo yum -y update

EPELリポジトリの詳細については、https://fedoraproject.org/wiki/EPEL [fedoraproject.org]をご覧ください。

ステップ1-グラファイトとカーボンのインストール

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

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 +`の前で実行され、ウィスパーに転送される前にメトリックを時間とともにバッファリングします

最後の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 +`です

  • 「+ aggregation Method」は、次の保持レベルの値を集計するために使用される関数(「+ 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 +`は、同じホストでカーボンキャッシュの複数のインスタンスを実行できることを意味します)

以下の例は、「+ 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」のホストに送信されます。 他のすべてのデータは、localhostおよび他の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, , ,
...

集約(オプション)

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

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

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

このファイルの各行の形式は次のとおりです。

() =

これは、集約メトリックを計算するために「+ 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の下で実行されるDjango Webアプリケーションです。

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

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 +`を見つけて、インストールのタイムゾーンに更新します。 必要に応じて、https://en.wikipedia.org/wiki/List_of_tz_database_time_zones [タイムゾーンのリスト]を参照してください。

. . .

SECRET_KEY = ''

. . .

TIME_ZONE = ''

. . .

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

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):
   Username (leave blank to use 'root'):
   Email address:
   Password:
   Password (again):
   Superuser created successfully.

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

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:
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仮想ホストの詳細については、https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-centos-7 [このチュートリアル]を参照してください。 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

. . .

Alias /static/ /opt/graphite/static/

<Directory /opt/graphite/static/>
  Require all granted
</Directory>

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

ステップ5-グラファイトのパスワード保護(推奨)

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

新しいフォルダーを作成し、アクセス許可を設定します。

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

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

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

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
</Location>

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

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

Apacheサービスを開始し、ブート時に開始するためにそれを含めます。

sudo systemctl start httpd
sudo systemctl enable httpd

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

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

以下が表示されます。

image:https://assets.digitalocean.com/articles/historicallogs_graphite_carbon/1.png [Graphite-Web Home Page]

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

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

collectdの詳細については、https://collectd.org/ [公式サイト]をご覧ください。

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

sudo yum install collectd

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

sudo vi /etc/collectd.conf

以下を完成させよ:

  • グローバル設定で「+ Hostname +」を設定します。 これは任意の名前にすることができ、このホストを指定するためにWebインターフェースで使用されます。

Hostname
  • `+ write_graphite +`プラグイン設定のコメントを外します

LoadPlugin write_graphite
  • `+ <Plugin write_graphite> +`ブロックの設定を次のように編集します。

<Plugin write_graphite>
 <Node "">
   Host "localhost"
   Port ""
 Protocol "tcp"
LogSendErrors true
 Prefix ""

 StoreRates true
  AlwaysAppendDS false
 EscapeCharacter "_"
 </Node>
</Plugin>

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

  • + Host +required)-Carbon収集エージェントのホスト名。 私たちの場合、それはローカルホストで動作しています

  • + Port +required)-Carbon収集エージェントが使用するポート。 この例では、「+ carbon-relay 」はポート「+2003」でリッスンします

  • + Prefix +-Carbonに送信されるホスト名の前に付加されるプレフィックス文字列。 Graphiteがホストを自動的にグループ化できるようにポイントを追加しました

  • + Postfix +-Carbonに送信されるホスト名の前に付加される後置文字列。 プレフィックスを設定するため、このオプションは必要ありません。したがって、無効にすることができます。

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

sudo systemctl start collectd.service

収集されたデータはすぐにグラファイトに送信され始めます。 Webページを更新します。 * Metrics フォルダーを展開すると、 collectd *が一覧表示されます。 しばらくすると、以下に示すように、データのきれいなグラフを見ることができます。

image:https://assets.digitalocean.com/articles/historicallogs_graphite_carbon/2.png [メトリックのグラフ>収集済み>モニター>負荷>負荷>中期]

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

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

  1. 左側のパネルから、* Metrics *> * collectd *> * Monitor *(または手順7で設定した + Hostname +)> * load *> * load *> * midterm *をクリックします。 負荷平均のグラフが表示されます。

image:https://assets.digitalocean.com/articles/historicallogs_graphite_carbon/3.png [グラフデータボタンをクリック]

  1. グラフの下の[グラフデータ]ボタンをクリックします。

  2. ポップアップの右側にある[追加]ボタンをクリックします。

  3. 次の行を貼り付けます: + collectd..memory。* +。 これにより、メモリ関連のグラフがすべて選択されます。 ホストに別の名前を使用した場合は、「+ Monitor Of」の代わりにその名前を使用します。

  4. * OK *を押します。 1つの画面に複数のグラフが表示されます。 スケールの違いにより、負荷曲線は直線になりました。 これを修正するには、グラフで次の操作を実行する必要があります。

  5. [グラフデータ]ボタンをもう一度クリックします。

  6. `+ collectd..load.load.midterm +`行を選択します。

  7. [機能の適用]ボタンをクリックします。

  8. 特別> * 2番目のY軸に描画*を選択します

  9. [機能の適用]をもう一度クリックします。

  10. 特別> *色*を選択します。

  11. 「+ black +」と入力し、* OK *を押します。

  12. `+ collectd.Monitor.memory。* +`行を選択します。

  13. [機能の適用]をクリックします。

  14. [特別]> [積み上げ]を選択します。

  15. 手順7の最後に表示される画像に似た画像が表示されます。

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

結論

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

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

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