Ubuntu14.04でのGangliaの紹介
序章
Gangliaは、スケーラブルな分散監視システムです。 非常に多数のサーバーで適切に拡張でき、パフォーマンスメトリックをほぼリアルタイムで表示するのに役立ちます。
バックエンドでは、Gangliaは次のコンポーネントで構成されています。
- Gmond(Ganglia監視デーモン):ノードに関する情報を収集する小さなサービス。 これは、監視するすべてのサーバーにインストールされます。
- Gmetad(Gangliaメタデーモン):マスターノード上のデーモンで、すべてのGmondデーモン(および該当する場合は他のGmetadデーモン)からデータを収集します。
- RRD(Round Robin Database)ツール:マスターノード上のツールで、Gangliaのデータと視覚化を時系列で保存するために使用されます。
- PHP Webフロントエンド:マスターノード上のWebインターフェイスで、RRDツールのデータからのグラフとメトリックを表示します。
基本的に、監視するすべてのノード(サーバー)にはGmondがインストールされています。 すべてのノードはGmondを使用して、Gmetadを実行している単一のマスターノードにデータを送信します。Gmetadはすべてのノードデータを収集し、保存するためにRRDツールに送信します。 その後、PHPスクリプトとApacheを使用して、Webブラウザーでデータを表示できます。
これは、機能しているGangliaグリッドの図であり、マスターノードはGmetadデーモンを実行しているGangliaサーバーとして示され、他のノードはGmondデーモンを実行している接続サーバーとして示されています。
Webインターフェイスを使用して監視対象データを表示すると、データはいくつかのレベルで編成されます。 Gangliaは、個々の監視対象マシンであるノードを、類似したノードのグループであるクラスターに編成します。 より高いレベルでは、クラスターのコレクションをグリッドに編成することもできます。 Webインターフェイスにログインすると、この組織が表示されます。
この記事では、最初に my cluster という単一のクラスターをセットアップし、2つのノードを使用します。 後で、Londonという名前の単一のグリッドをServersとDatabasesの2つのクラスターでセットアップします。 例では、各クラスターに2つのノードが表示されます。
前提条件
必要になるだろう:
- Ubuntu14.04を実行している1つのマスターノードドロップレット。 これは、すべての監視データを表示するために使用するノードです。
- Ubuntu 14.04 を実行している、監視する少なくとも1つの追加ノード
- グリッドの例と完全に一致させたい場合は、 Ubuntu14.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、およびGangliaWebフロントエンドをインストールします。
sudo apt-get install -y ganglia-monitor rrdtool gmetad ganglia-webfrontend
インストール中に、Apacheを再起動するように求められます。 [はい]を選択します。 システムによっては、2回尋ねられる場合があります。 もう一度[はい]を選択します。
GangliaWebフロントエンド構成ファイルをApachesites-enabled
フォルダーにコピーして、オンライングラフィカルダッシュボードをセットアップします。
sudo cp /etc/ganglia-webfrontend/apache.conf /etc/apache2/sites-enabled/ganglia.conf
オプション:セキュリティを強化するために、このサイトをパスワードで保護することをお勧めします。 それ以外の場合は、インターネットに公開され、サーバー構成とIPアドレスを公開したくない場合があります。
注:このセクションとクライアントのインストールセクションは、 myclusterという名前の単一のクラスターを含むより簡単なセットアップを示しています。 グリッドと両方のクラスターをすぐにセットアップする場合は、グリッドセクションの設定も参照することをお勧めします。
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構成ファイルを編集します。 これはマスターノードですが、「マイクラスター」クラスターの最初のノードとして監視用に設定しています。 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つだけが存在するはずです。
メインタブでは、セットおよびカスタムの時間増分からのデータを表示できます。 右上のGetFresh Data ボタンをクリックして、データを手動で更新することもできます。
時間範囲の選択の下で、 –ノードの選択というラベルの付いたドロップダウンメニューから特定のノードを選択できます。 現在、ローカルホストが表示される唯一のノードである必要があります。
リストからlocalhostを選択すると、ローカルホストノードに固有の情報が表示されます。 localhostが監視されている唯一のノードであるため、localhostノードページとメインタブの情報は同じになります。
ここから、右上のノードビューボタンをクリックして、ノードに関するコンテキスト情報を表示することもできます。
メインページの残りの部分には、ノードのクラスターの概要が表示されます。 グラフをクリックすると、1時間から1年までのさまざまな時間単位で詳細情報が表示され、グラフデータがCSVまたはJSON形式でエクスポートされます。
ノードが大きくなり、メインページですべてを表示することが難しくなると、[検索]タブを使用して、正規表現を使用して特定のホストまたはメトリックを見つけることができます。 また、ホストを比較したり、カスタム集計グラフを作成したりすることもできます。
クライアントのインストール
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"
[...]
host
のudp_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インターフェースでクラスターの概要を表示し、特定のノードおよび特定のメトリックにドリルダウンできます。
グリッド
グリッドを使用すると、複数のクラスターをまとめて編成できます。 たとえば、さまざまなアプリケーションにサービスを提供するMySQLデータベースのクラスターが複数ある場合、それらのクラスターをすべて同じグリッドに編成して、すべてのMySQLサーバーのパフォーマンスを表示できます。 または、世界中にアプリケーションサーバーがある場合は、ロンドンなどの場所ごとにグリッドに配置できます。
グリッドを作成するには、Gangliaマスターノードの/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
回線またはクラスターごとに、異なるポート番号を使用する必要があることに注意してください。
たとえば、以下の例では、ServersおよびDatabasesという2つのクラスターをロンドンのグリッドに追加しています。 サーバーのすべてのノードはポート8556を使用しており、データベースのすべてのノードはポート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 <CLUSTER> tag. If you do not specify a cluster tag, then all <HOSTS> will
* NOT be wrapped inside of a <CLUSTER> tag. */
cluster {
name = "Databases"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
また、前のセクションとは異なり、mcast_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ホストサーバーまたはマスターノードでGanglia-monitor、Gmetad、およびApacheを再起動します。
sudo service ganglia-monitor restart && sudo service gmetad restart && sudo service apache2 restart
Webインターフェイスに、グリッドの名前とクラスターを選択するオプションが表示されます。 そこから、ノードを選択してドリルダウンできます。
結論
Gangliaは、セットアップと1つのノードから数百または数千へのスケールアップが非常に簡単です。 高いパフォーマンスレベルを備えており、必要な数のサーバーを監視するのに役立ちます。