ここから本文です

Sensuで始めるクラウド時代のシステム監視:SensuとUchiwaのインストール方法

4/13(木) 7:10配信

@IT

 前回は「Sensu」で必要となる2つのミドルウェア「Redis」と「RabbitMQ」について、その概要と構築方法を説明しました。監視結果などのデータの保存と、「sensu-server」と「sensu-client」の間の通信といった役割、公式ドキュメントに従った構築のチュートリアルを通して、理解を深めていただけたと思います。

「ansible-playbook」コマンドを実行すると、インストール処理が流し込まれる

 今回はいよいよSensuの本体である「sensu-server」「sensu-client」「sensu-api」と、Sensuのダッシュボードとなる「Uchiwa」のインストールと設定方法を解説します。前回に引き続き、「Ubuntu Server 16.04」の環境にSensuとミドルウェアをオールインワンで構築します。なお、Debian/Red Hat Enterprise Linux/CentOSについては公式ドキュメントをご覧ください。

●Sensuのインストールと初期設定

 まずは、公式ドキュメントの「Sensu on Ubuntu/Debian」に従って、Sensuをインストールします。Sensuは、Ubuntu Serverのパッケージマネージャの「apt-get」コマンドでインストールできるので、とても簡単です。

--
# Sensuのリポジトリの公開鍵をサーバに追加
$ wget -q https://sensu.global.ssl.fastly.net/apt/pubkey.gpg -O- | sudo apt-key add -
 
# SensuのリポジトリのURLをAptの設定に追加
$ echo "deb https://sensu.global.ssl.fastly.net/apt xenial main" | sudo tee /etc/apt/sources.list.d/sensu.list
 
# パッケージの情報を更新し、Sensuをインストール
$ sudo apt-get update
$ sudo apt-get -y install sensu
--

 次に、RabbitMQとRedisの接続設定、sensu-clientとsensu-apiの初期設定を行います。Sensuの設定は「/etc/sensu/conf.d」の配下に、

JSON形式のファイルで設置します。この設定ファイルは自由に分割することが可能で、Sensuで読み込む際に結合されます。

 ここでは、以下の4つのファイルを「vi」や「nano」などのエディタを使って作成してください。

{
"redis": {
"host": "127.0.0.1", // RedisのIPアドレス
"port": 6379 // Redisのポート(デフォルト)
}
}
▲/etc/sensu/conf.d/redis.json


{
"rabbitmq": {
"host": "127.0.0.1", // RabbitMQのIPアドレス
"port": 5672, // RabbitMQのポート(デフォルト)
"vhost": "/sensu", // RabbitMQのバーチャルホスト
"user": "sensu", // RabbitMQのユーザー名
"password": "secret" // RabbitMQのパスワード
}
}
▲/etc/sensu/conf.d/redis.json

{
"client": {
"name": "sensu.hico.io", // sensu-clientの名前(適宜変更)
"address": "150.95.134.43", // sensu-clientIPアドレス(適宜変更)
"environment": "development", // User Attributes
"subscriptions": [ // 監視グループ(次回に説明します)
"redis",
"rabbitmq"
]
}
}
▲/etc/sensu/conf.d/client.json

{
"api": {
"bind": "0.0.0.0", // APIを外部に公開
"port": 4567 // APIのポート(デフォルト)
}
}
▲/etc/sensu/conf.d/api.json

 ちなみに、sensu-clientでは「Client configuration」以外の項目も追加することが可能です。例えば、"environment": "development"など「User Attributes」と呼ばれる項目で、ユーザーがホストを識別したり、他のサービスやツールと連携したりする際に利用されます。

 最後に、Sensuのサービス(デーモン)を起動し、自動起動(スタートアップ)を有効化します。公式ドキュメントでは「service」コマンドと「update-rc.d」コマンドが案内されていますが、最近のOSではsystemdの「systemctl」を使う必要があるので、注意してください。

# Sensuのサービス(デーモン)を起動
$ sudo systemctl start sensu-server
$ sudo systemctl start sensu-client
$ sudo systemctl start sensu-api
 
# Sensuの自動起動(スタートアップ)を有効化
$ sudo systemctl enable sensu-server
$ sudo systemctl enable sensu-client
$ sudo systemctl enable sensu-api
▲Sensuのサービス起動と自動起動の有効化

●Uchiwaのインストールと初期設定

 UchiwaはSensuのダッシュボードで、Go言語とJavaScriptで実装されています。Sensuと組み合わせて使うことが一般的になっているので、公式ドキュメントの内容に従ってインストールします(パッケージのリポジトリはSensuと共通なので、追加の作業などは不要です)。ちなみに、公式のDockerイメージが提供されているので、コンテナとして動かすことも可能です。

$ sudo apt-get -y install uchiwa
▲Uchiwaのインストール(bash)

 次に、「/etc/sensu/uchiwa.json」にUchiwaの設定ファイルを作成します。"sensu"のパラメータが配列になっているように、複数のSensu環境を登録することが可能です。各Sensu環境は「Datacenter」と呼ばれ、複数のサービスやリージョンにまたがって管理することができます。

{
"sensu": [
{
"name": "sensu.hico.io", // sensu-apiの名前 (適宜変更)
"host": "150.95.134.43", // sensu-apiのIPアドレス (適宜変更)
"port": 4567 // sensu-apiのポート (デフォルト)
}
],
"uchiwa": {
"host": "0.0.0.0", // Uchiwaを外部に公開
"port": 3000 // Uchiwaのポート (デフォルト)
}
}
▲Uchiwaの設定ファイル(/etc/sensu/uchiwa.json)

 最後にUchiwaのサービス(デーモン)を起動し、自動起動(スタートアップ)を有効化します。サーバの3000番ポート(例、http://sensu.hico.io:3000)にアクセスすると、ダッシュボードを閲覧できます(画面1)。

# Uchiwaのサービス(デーモン)を起動
$ sudo service uchiwa start
 
# Uchiwaの自動起動(スタートアップ)を有効化
$ sudo update-rc.d uchiwa defaults
▲Uchiwaのサービス起動と自動起動の有効化

●構成管理ツールを使ったインストール方法

 2回にわたってRedis、RabbitMQ、Sensu、Uchiwaの手動での構築手順を紹介してきました。ここからは、構成管理ツールの「Ansible」を使用して、これらの構築を自動化する方法を紹介します。

 構成管理ツールでは、パッケージのインストールや設定ファイルの配置を自動化したり、コード化したりすることができます。“コードによるインフラの管理”である「Infrastructure as Code」を実現するために使用されます。

・[参考記事]いまさら聞けない「Infrastructure as Code」、一体どんなメリットが?(TechTargetジャパン)

 Ansibleは、レッドハットが開発しているオープンソースの構成管理ツールです。「学習コストが低い」「構成がシンプル」という特徴があるため、人気が高まってきています。

 Sensuでは「sensu-ansible」が提供されているので、今回はこれを利用します。他にも「sensu-chef」や「sensu-puppet」など、他の構成管理ツール向けのものも提供されています。

 事前に作業端末にAnsibleをインストールする必要がありますが、下記のコマンドを実行するだけで、簡単にSensuをオールインワンで構築することができます。なお、sensu-ansibleがUbuntu 16.04に対応していないため、本稿ではUbuntu 14.04で構築しています。

# 作業ディレクトリを作成
$ mkdir -p sensu-ansible/group_vars
$ cd sensu-ansible
 
# Ansibleの実行に必要なファイルを作成
$ vi site.yml
$ vi group_vars/all.yml
$ vi hosts
 
# AnsibleのリポジトリからSensuのPlaybookを取得
$ ansible-galaxy install cmacrae.sensu
 
# サーバにSSH経由でAnsibleを実行
$ ansible-playbook -i hosts site.yml
▲AnsibleによるSensuのインストール(bash)

 Ansibleの実行に必要なファイルの内容は、下記の通りです。「site.yml」が実行内容、「all.yml」がパラメータ、「hosts」が対象サーバです(「sensu.hico.io」の部分は、対象のIPアドレスまたはFQDNに置き換えてください)。

- hosts: sensu_masters
roles:
- role: cmacrae.sensu
▲site.yml

---
dynamic_data_store: data/dynamic
rabbitmq_server: ture
redis_server: true
redis_service_name: redis-server
sensu_include_plugins: false
sensu_include_dashboard: true
sensu_master: true
▲group_vars/all.yml

[sensu_masters]
sensu.hico.io
[rabbitmq_servers]
127.0.0.1
[redis_servers]
127.0.0.1
▲hosts

 「ansible-playbook」コマンドを実行すると、パッケージのインストールなどの処理が流し込まれます。完了後、サーバの3000番ポートにアクセスし、「admin:admin」でログインすると、ダッシュボードを閲覧できます。今回はオールインワンで構築しましたが、sensu-clientのみの導入も可能なので、ホストの追加時などに大変便利です。

●終わりに

 今回はSensuとUchiwaのインストールと初期設定、そしてAnsibleを使ったインストール方法を紹介しました。どちらもパッケージで簡単にインストールできるだけでなく、設定ファイルもJSON形式で分かりやすいと思います。また、Ansibleを使うことで、構築の自動化や複数のホストへの導入が可能になります。

 次回は、監視や通知を行うプラグインのインストールと設定を解説します。簡単な独自プラグインの開発方法も紹介する予定ですので、期待してください。

[堀内晨彦,@IT]

最終更新:4/13(木) 7:10
@IT

Yahoo!ニュースからのお知らせ