前書き

Gangliaは、スケーラブルな分散監視システムです。 非常に多数のサーバーでうまく拡張でき、パフォーマンスメトリックをほぼリアルタイムで表示するのに役立ちます。

バックエンドでは、Gangliaは次のコンポーネントで構成されています。

  • Gmond(Ganglia監視デーモン):ノードに関する情報を収集する小さなサービス。 これは、監視するすべてのサーバーにインストールされます。

  • Gmetad(Gangliaメタデーモン):すべてのGmondデーモン(および該当する場合は他のGmetadデーモン)からデータを収集する*マスターノード*上のデーモン。

  • RRD(ラウンドロビンデータベース)ツール:時系列でGangliaのデータと視覚化を保存するために使用される*マスターノード*上のツール。

  • PHP Webフロントエンド:RRDツールのデータからグラフとメトリックを表示する*マスターノード*上のWebインターフェイス。

基本的に、監視するすべてのノード(サーバー)にGmondがインストールされています。 すべてのノードはGmondを使用して、Gmetadを実行している単一の*マスターノード*にデータを送信します。Gmetadはすべてのノードデータを収集し、保存するRRDツールに送信します。 その後、PHPスクリプトとApacheを使用して、Webブラウザーでデータを表示できます。

機能するGangliaグリッドの図を次に示します。Gmetadデーモンを実行するGangliaサーバーとして表示されるマスターノードと、Gmondデーモンを実行する接続サーバーとして表示される他のノードを示します。

image:https://assets.digitalocean.com/articles/ganglia_ubuntu14/1.png [Ganglia Architecture]

Webインターフェースを使用してモニター対象データを表示すると、データはいくつかのレベルで編成されます。 Gangliaは、個々の監視対象マシンである* nodes を、類似ノードのグループである clusters *に編成します。 上位レベルでは、クラスターのコレクションを*グリッド*に整理することもできます。 ウェブ管理画面にログインすると、この組織が表示されます。

この記事では、まず2つのノードを持つ* my cluster という単一のクラスターをセットアップします。 後で、 London という名前の1つのグリッドを、 Servers Databases *という2つのクラスターでセットアップします。 例では、各クラスターの2つのノードを示します。

前提条件

必要になるだろう:

  • * Ubuntu 14.04 *を実行している1つのマスターノードドロップレット。 これは、すべての監視データを表示するために使用するノードです。

  • * Ubuntu 14.04 *を実行して、監視する少なくとも1つの追加ノード

  • グリッドの例を正確に一致させたい場合は、* Ubuntu 14.04 *を実行する2つのノードを追加する必要があります。 ただし、各クラスターに1つのノードだけでチュートリアルを簡単に完了できます。

各ドロップレットでsudoユーザーを作成します。 最初に、 `+ adduser +`コマンドを使用してユーザーを作成し、ユーザー名を使用する名前に置き換えます。

adduser

これにより、ユーザーと適切なホームディレクトリおよびグループが作成されます。 新しいユーザーのパスワードを設定し、パスワードを確認するように求められます。 また、ユーザーの情報を入力するよう求められます。 ユーザー情報を確認して、ユーザーを作成します。

次に、 `+ visudo +`コマンドでユーザーにsudo権限を付与します。

visudo

これにより、 `+ / etc / sudoers`ファイルが開きます。 `+ User privilege specification `セクションで、作成されたユーザーに次のような行を追加します( ` username +`の代わりに選択したユーザー名を使用):

# User privilege specification
root       ALL=(ALL:ALL) ALL
  ALL=(ALL:ALL) ALL

ファイルを保存し、新しいユーザーに切り替えます。

su -

システムパッケージを更新およびアップグレードします。

sudo apt-get update && sudo apt-get -y upgrade

インストール

マスターノードで、Gangliaモニター、RRDtool、Gmetad、およびGanglia Webフロントエンドをインストールします。

sudo apt-get install -y ganglia-monitor rrdtool gmetad ganglia-webfrontend

インストール中に、Apacheを再起動するように求められます。 はいを選択します。 システムによっては、2回尋ねられる場合があります。 はいをもう一度選択します。

Ganglia Webフロントエンド設定ファイルをApacheの `+ sites-enabled +`フォルダーにコピーして、オンライングラフィカルダッシュボードをセットアップします。

sudo cp /etc/ganglia-webfrontend/apache.conf /etc/apache2/sites-enabled/ganglia.conf

オプション:https://www.digitalocean.com/community/tutorials/how-to-use-the-htaccess-file[password-protect]このサイトを使用すると、セキュリティを強化できます。 そうしないと、インターネットに公開され、サーバー構成とIPアドレスを公開したくない場合があります。

注:このセクションと* Client Installation セクションは、 my cluster という名前の単一のクラスターを含むより単純なセットアップを示しています。 グリッドと両方のクラスターをすぐにセットアップする場合は、 Grids *セクションの設定も参照することをお勧めします。

Gmetad構成ファイルを編集して、クラスターをセットアップします。 このファイルは、Getadデーモンがデータを収集する場所と方法を構成します。

sudo vi /etc/ganglia/gmetad.conf

以下に示すように、「+ data_source +」で始まる行を見つけます。

data_source "my cluster" localhost

`+ data_source `行を編集して、クラスターの名前、秒単位のデータ収集頻度、およびサーバーの接続情報を一覧表示します。 以下の例では、データソースは「 my cluster 」と呼ばれ、ローカルホスト(自身)から1分ごとにメトリックを収集します。 ` data_source +`行を追加して、必要な数のクラスターを作成できます。

data_source "" 60 localhost

変更を保存してください。

次に、Gmond構成ファイルを編集します。 これはマスターノードですが、「my cluster」クラスターの最初のノードとして監視用に設定しています。 `+ gmond.conf +`ファイルは、ノードが情報を送信する場所を設定します。

sudo vi /etc/ganglia/gmond.conf

+ cluster`セクションで、名前を + gmetad.conf + ファイルで設定した名前(この例では + my cluster`)に設定してください。 残りのフィールドはオプションで、 `+ unspecified +`のままにしておくことができます。

参考のために、 `+ owner `の値はクラスターの管理者を指定します。これは連絡の目的に役立ちます。 ` latlong `値は、グローバルに分散したクラスターの緯度と経度の座標を設定します。 ` url +`値は、クラスターに関する詳細情報を提供するリンク用です。

[...]
cluster {
 name = "" ## use the name from gmetad.conf
 owner = "unspecified"
 latlong = "unspecified"
 url = "unspecified"
}
[...]

「+ udp_send_channel 」セクションで、値「 localhost 」を持つ新しい「 host 」行を挿入します。これは、情報を送信するサーバーです。 ` mcast_join +`行をコメント化します。

参考までに、 `+ mcast_join +`の値はマルチキャストアドレスを提供しますが、1つのホストにのみデータを送信する必要があるため、これは不要です。 (後でこのクラスターのグリッドを作成することにした場合は、グリッドを再度有効にします。)

[...]
udp_send_channel   {
 #mcast_join = 239.2.11.71 ## comment out
 host =
 port = 8649
 ttl = 1
}
[...]

「+ udp_recv_channel 」セクションで、「 mcast_join 」および「 bind +」行をコメントアウトします。 (繰り返しますが、このクラスターをグリッドに追加する場合は、これらの行を再度有効にします。)

`+ bind +`の値はバインドするローカルアドレスを提供しますが、クラスターは情報を送信するだけなので、これは不要です。

[...]
udp_recv_channel {
 #mcast_join = 239.2.11.71 ## comment out
 port = 8649
 #bind = 239.2.11.71 ## comment out
}

/* You can specify as many tcp_accept_channels as you like to share
  an xml description of the state of the cluster */
tcp_accept_channel {
 port = 8649
}
[...]

Ganglia-monitor、Gmetad、およびApacheを再起動します。

sudo service ganglia-monitor restart && sudo service gmetad restart && sudo service apache2 restart

Webインターフェース

Gangliaがセットアップされ、http:// ip-address / gangliaからアクセスできるようになります。

メインページには、監視対象ノードの概要であるグリッドビューが表示されます。 現時点では、* localhost *のみが必要です。

image:https://assets.digitalocean.com/articles/ganglia_ubuntu14/2.png [Ganglia Web]

メインタブでは、設定およびカスタムの時間増分からデータを表示できます。 右上の[最新データを取得]ボタンをクリックして、データを手動で更新することもできます。

image:https://assets.digitalocean.com/articles/ganglia_ubuntu14/3.png [Ganglia Time]

時間範囲の選択の下で、* – Choose a Node *というラベルの付いたドロップダウンメニューから特定のノードを選択できます。 現時点では、localhostが唯一のノードであるはずです。

image:https://assets.digitalocean.com/articles/ganglia_ubuntu14/4.png [Ganglia Node]

リストから* localhost *を選択して、localhostノードに固有の情報を表示します。 localhostは監視対象の唯一のノードであるため、localhostノードページとメインタブの情報は同じになります。

image:https://assets.digitalocean.com/articles/ganglia_ubuntu14/5.png [Ganglia Localhost]

ここから、右上の[ノードビュー]ボタンをクリックして、ノードに関するコンテキスト情報を表示することもできます。

image:https://assets.digitalocean.com/articles/ganglia_ubuntu14/6.png [Ganglia Node View]

メインページの残りの部分には、ノードのクラスターの概要が表示されます。 グラフをクリックして、1時間から1年までのさまざまな時間単位で詳細情報を表示し、グラフデータをCSVまたはJSON形式でエクスポートします。

image:https://assets.digitalocean.com/articles/ganglia_ubuntu14/7.png [Ganglia Detail]

ノードが大きくなり、メインページでそれらをすべて表示することが難しくなると、正規表現を使用して、検索タブを使用して特定のホストまたはメトリックを見つけることができます。 ホストを比較したり、カスタム集計グラフを作成したりすることもできます。

クライアントのインストール

  • my cluster *クラスターで監視する2番目のノードに、Gangliaモニターをインストールします。

sudo apt-get install -y ganglia-monitor

ノードを監視するためにGmond構成ファイルを編集します。

sudo vi /etc/ganglia/gmond.conf

マスターノードで行ったように、 + cluster +`セクションのクラスター名(この例では `+ my cluster +)を更新して、マスターノードの名前と一致させます。

[...]
cluster {
 name = ""     ## Cluster name
 owner = "unspecified"
 latlong = "unspecified"
 url = "unspecified"
[...]

+ host +`の `+ udp_send_channel +`ブロックに行を追加します。これはマスターGangliaノードのIPアドレスです(例: `+ 1.1.1.1 +)。 `+ mcast_join +`行をコメント化します。

[...]
udp_send_channel {
 #mcast_join = 239.2.11.71   ## Comment
 host =    ## IP address of master node
 port = 8649
 ttl = 1
}
[...]

`+ udp_recv_channel `セクション全体を ` / * …​ * / + `構文。このサーバーは何も受信しません。

[...]
/* You can specify as many udp_recv_channels as you like as well.
udp_recv_channel {
 mcast_join = 239.2.11.71
 port = 8649
 bind = 239.2.11.71
}
*/
[...]

監視サービスを再起動します。

sudo service ganglia-monitor restart

数分待ってから、Webインターフェースをリロードしてください。 新しいノードがクラスターに自動的に表示されます。

このクラスターで監視する他のノードでこれらの手順を繰り返します。

これでクラスターができました! Webインターフェイスでクラスターの概要を表示し、特定のノードおよび特定のメトリックにドリルダウンできます。

image:https://assets.digitalocean.com/articles/ganglia_ubuntu14/8.png [Ganglia Cluster]

グリッド

グリッドを使用すると、複数のクラスターをまとめて整理できます。 たとえば、異なるアプリケーションにサービスを提供するMySQLデータベースのクラスターが複数ある場合、それらすべてのクラスターを同じグリッドに整理して、すべてのMySQLサーバーのパフォーマンスを表示できます。 または、世界中にアプリケーションサーバーがある場合は、ロンドンなどの場所ごとにグリッドに配置できます。

グリッドを作成するには、Ganglia * master node *で `+ / etc / ganglia / gmetad.conf +`ファイルを編集します。

Gmetadごとに1つのグリッドしか作成できないことに注意してください。 複数のグリッドを作成する場合は、Gmetadを別のサーバーにインストールする必要があります。 この例では、グリッドを* London *と呼びます。

sudo vi /etc/ganglia/gmetad.conf

`+ gridname `行のコメントを外し、 ` MyGrid +`を選択したグリッド名に置き換えて、グリッドセクションのグリッドに名前を付けます。 この例では、グリッドに* London *という名前を付けます。

# The name of this Grid. All the data sources above will be wrapped in a GRID
# tag with this name.
# default: unspecified
# gridname "MyGrid"

たとえば、すべてのロンドンサーバー用にグリッドを作成している場合:

gridname ""

このグリッドで必要なすべてのクラスターに対して新しい「+ data_source +」行を追加または編集します。

クラスターの名前を更新してから、そのクラスターに追加する各サーバーのホストとポートの情報を追加します。 クラスターはポート番号で識別されるため、新しい「+ data_source +」行、またはクラスターはそれぞれ異なるポート番号を使用する必要があることに注意してください。

たとえば、以下の例では、* Servers および Databases という2つのクラスターをロンドングリッドに追加しています。 *サーバー*のすべてのノードはポート 8556 を使用しており、*データベース*のすべてのノードはポート 8857 *を使用しています。

data_source ""
data_source ""

Gmetad構成ファイル(この例では、localhost、1.1.1.2、1.2.1.1、および1.2.1.2)で指定された各サーバー(またはノード)で、Gmond構成ファイルを編集します。

sudo vi /etc/ganglia/gmond.conf

クラスターセクションの「+ name 」値を更新して、クラスター名に一致させます。 ここでは、* Databases *クラスターの一部となるノードを設定します。 (以前の方法を使用して2つのノードをセットアップした場合、戻って新しい設定に一致するようにそれぞれのノードで ` / etc / ganglia / gmond.conf +`ファイルを編集する必要があることに注意してください。)

/* If a cluster attribute is specified, then all gmond hosts are wrapped inside
* of a <CLUSTER> tag.  If you do not specify a cluster tag, then all <HOSTS> will
* NOT be wrapped inside of a <CLUSTER> tag. */

cluster {
 name = ""
 owner = "unspecified"
 latlong = "unspecified"
 url = "unspecified"
}

また、前のセクションとは異なり、 `+ mcast_join +`行をコメントアウトしないでください。

`+ udp_send_channel `ブロックは次のようになります。 必ず ` port`番号を更新してください! この例では、これは* Databases クラスターの一部であるため、ポートは 8557 *である必要があります。 他の行は同じままでかまいません。

udp_send_channel {
mcast_join = 239.2.11.71
port =
ttl = 1
}

適切なポート番号を使用して、 `+ udp_recv_channel +`ブロックは次のようになります。 他の行は同じままでかまいません。

udp_recv_channel {
mcast_join = 239.2.11.71
port =
bind = 239.2.11.71
}

最後に、適切なポート番号を使用して、 `+ tcp_accept_channel +`ブロックは次のようになります。

tcp_accept_channel {
port =
}

各ノードで監視サービスを再起動します。

sudo service ganglia-monitor restart

Gangliaホストサーバーまたは*マスターノード*でGanglia-monitor、Gmetad、およびApacheを再起動します。

sudo service ganglia-monitor restart && sudo service gmetad restart && sudo service apache2 restart

Webインターフェースで、グリッドの名前とクラスターを選択するオプションが表示されます。 そこからノードを選択してドリルダウンできます。

image:https://assets.digitalocean.com/articles/ganglia_ubuntu14/9.png [Ganglia Grid]

結論

Gangliaは、1つのノードから数百または数千までのセットアップとスケールアップが非常に簡単です。 高いパフォーマンスレベルを備えており、必要な数のサーバーを監視できます。