CentOS7でグラファイト、カーボン、および収集された効果的な履歴ログを保持する方法
序章
監視システムは、実行中に大量のデータを受信して蓄積します。 監視システムの実行時間が長いほど、より多くのデータが収集されます。
ほとんどの監視システムには、長期的なデータ分析と保存のためのツールがありません。 ストレージの問題を引き起こすすべての読み取り値を保持するか、特定のしきい値に達すると古いデータを削除するため、長期間にわたってシステムパフォーマンスを分析できなくなります。
Zabbixなどの一部の監視システムでは、正確なデータ値と平均化されたデータ値の両方を保存できますが、カスタマイズ機能は非常に限られています。
時系列データベースは、大量の履歴データを保存する問題を解決するのに役立ちます。 時系列は、時間の経過に伴うデータポイントのシーケンスであり、時系列データベースは、このタイプのデータを格納するように最適化されています。
このチュートリアルでは、Graphiteをインストールして構成する方法を示します。これは、数値の時系列データを保存し、このデータのグラフをレンダリングするためのツールです。 これは、次の3つのソフトウェアコンポーネントで構成されています。
- Carbon -時系列データをリッスンし、ストレージバックエンドを使用してディスクに書き込むデーモン
- Whisper-時系列データを保存するためのRRDToolに似たシンプルなデータベース
- Graphite-Web -グラフをレンダリングし、取得したデータの機能豊富な視覚化と分析を提供するDjangoWebアプリケーション
最終的な構成では、監視エージェントがデータポイントをCarbonに送信します。Carbonには、カーボンリレー、カーボンアグリゲーター、およびカーボンキャッシュコンポーネントが含まれています。 CarbonはデータをWhisperデータベースに書き込みます。 Graphite-Webは、ユーザーが表示できるWebページにデータを表示します。
前提条件
開始する前に、次の手順を完了していることを確認してください。
- CentOS7ドロップレットをデプロイする
- サーバーの初期設定に従ってsudoユーザーを追加します
- サーバーにスワップスペースを追加します。 例の4GBの量で問題ありません
- EPEL(Enterprise Linux用の追加パッケージ)リポジトリを有効にします。
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
は、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>
ファイルを保存して閉じます。
ステップ5—パスワードで保護するGraphite(推奨)
デフォルトでは、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
(必須)—カーボン収集エージェントが使用するポート。 この例では、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には、高度なデータ表示オプションがあります。 たとえば、上の画像に示されているような画像を取得するには、いくつかのアクションを実行する必要があります。
- 左側のパネルで、メトリクス> collectd > Monitor (または手順7で構成した
Hostname
)> load[をクリックします。 X137X]> load > midterm。 負荷平均のグラフが表示されます。
- グラフ下のグラフデータボタンをクリックします。
- ポップアップの右側にある追加ボタンをクリックします。
- 次の行を貼り付けます:
collectd.Monitor.memory.*
。 これにより、すべてのメモリ関連のグラフが選択されます。 ホストに別の名前を使用した場合は、Monitor
の代わりにその名前を使用してください。 - OKを押します。 1つの画面に複数のグラフが表示されます。 スケールの違いにより、負荷曲線は線になりました。 これを修正するには、グラフを使用して次の操作を実行する必要があります。
- グラフデータボタンをもう一度クリックします。
collectd.Monitor.load.load.midterm
行を選択します。- 機能の適用ボタンをクリックします。
- 特殊>2番目のY軸に描画を選択します
- もう一度機能の適用をクリックします。
- スペシャル>カラーを選択します。
black
と入力し、OKを押します。collectd.Monitor.memory.*
行を選択します。- 機能の適用をクリックします。
- Special > DrawStackedを選択します。
- 手順7の最後に表示されているような画像が表示されます。
これは、サーバーからのデータを表示する1つの方法にすぎません。 同じグラフ上でさまざまなデータを組み合わせたり、さまざまな関数を適用したり、データをスケーリングしたり、移動平均を計算したり、データを予測したりすることができます。
結論
グラファイトは、時系列データを保存および分析するための強力なツールです。 このチュートリアルを完了すると、インストール方法、基本的なセットアップ方法、データの取得方法、および蓄積されたデータの操作方法についての一般的な理解が得られます。
グラファイトはダッシュボードとして使用できます。 CPU使用率、メモリ使用率、ネットワークインターフェイスの使用率などの主要なインジケーターを監視できます。
グラファイトには、データ分析のための多くの機能があります。 これらの関数を使用して、系列データの変換、結合、および計算を実行できます。 ほとんどの機能は順番に適用できます。 たとえば、すべてのブランチオフィスからの着信トラフィックを要約し、それを発信トラフィックの合計と比較することができます。 または、すべてのブランチオフィスからのすべての着信および発信トラフィックを要約し、長期間にわたる要約グラフを作成して、将来のキャパシティプランニングの傾向を確認することもできます。