Ubuntu 14.04でのGangliaの概要

前書き

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

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

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

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

  • RRD(Round Robin Database)ツール:時系列でGangliaのデータと視覚化を保存するために使用されるmaster nodeのツール。

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

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

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

Ganglia Architecture

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

この記事では、最初に、2つのノードを持つmy clusterという単一のクラスターをセットアップします。 後で、ServersDatabasesの2つのクラスターを持つLondonという名前の単一のグリッドを設定します。 例では、各クラスターに2つのノードが表示されます。

前提条件

必要になるだろう:

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

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

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

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

adduser username

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

次に、visudoコマンドを使用してユーザーにsudo権限を付与します。

visudo

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

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

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

su - username

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

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フロントエンド構成ファイルをApachesites-enabledフォルダーにコピーして、オンライングラフィカルダッシュボードをセットアップします。

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

オプション:セキュリティを強化するために、このサイトを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分に1回メトリックを収集します。 さらにdata_source行を追加して、必要な数のクラスターを作成できます。

data_source "my cluster" 60 localhost

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

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

sudo vi /etc/ganglia/gmond.conf

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

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

[...]
cluster {
  name = "my cluster" ## 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 = localhost
  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の1つだけがあるはずです。

Ganglia Web

メインタブでは、設定された時間増分とカスタム時間増分からデータを表示できます。 右上のGet Fresh Dataボタンをクリックして、データを手動で更新することもできます。

Ganglia Time

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

Ganglia Node

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

Ganglia Localhost

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

Ganglia Node View

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

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 = "my cluster"     ## Cluster name
  owner = "unspecified"
  latlong = "unspecified"
  url = "unspecified"
[...]

hostudp_send_channelブロックに行を追加します。これは、マスターGangliaノードのIPアドレスである必要があります(例: 1.1.1.1)。 mcast_join行をコメントアウトします。

[...]
udp_send_channel {
  #mcast_join = 239.2.11.71   ## Comment
  host = 1.1.1.1   ## 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インターフェイスでクラスターの概要を表示し、特定のノードおよび特定のメトリックにドリルダウンできます。

Ganglia Cluster

グリッド

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

グリッドを作成するには、Gangliamaster 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 "London"

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

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

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

data_source "Servers" localhost 1.1.1.2:8556
data_source "Databases" 1.2.1.1:8557 1.2.1.2:8557

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  tag.  If you do not specify a cluster tag, then all  will
 * NOT be wrapped inside of a  tag. */

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

また、前のセクションとは異なり、notmcast_join行をコメントアウトする必要があります。

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

udp_send_channel {
mcast_join = 239.2.11.71
port = 8557
ttl = 1
}

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

udp_recv_channel {
mcast_join = 239.2.11.71
port = 8557
bind = 239.2.11.71
}

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

tcp_accept_channel {
port = 8557
}

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

sudo service ganglia-monitor restart

Gangliaホストサーバーまたはmaster nodeでGanglia-monitor、Gmetad、およびApacheを再起動します。

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

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

Ganglia Grid

結論

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

Related