SensuとUchiwaのインストールと基本設定のポイントSensuで始めるクラウド時代のシステム監視(4)

新たなクラウド監視ツールとして注目され始めている「Sensu」の活用方法を解説する本連載。今回は、Sensu本体とSensuのダッシュボード「Uchiwa」のインストール方法を解説します。

» 2017年04月12日 05時00分 公開
[堀内晨彦@IT]
「Sensuで始めるクラウド時代のシステム監視」のインデックス

連載目次

いよいよSensu本体をインストール!

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

 今回はいよいよ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
▲Sensuのインストール(bash)

 次に、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イメージが提供されているので、コンテナとして動かすことも可能です。


# Uchiwaをインストール
$ 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のサービス起動と自動起動の有効化

画面1 画面1 インストールされたUchiwa

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

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

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

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

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

終わりに

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

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

筆者紹介

堀内 晨彦(ほりうち あきひこ)

生まれも育ちも香川県。香川大学大学院 情報科出身。学生時代は研究の傍ら、勉強会やコミュニティー活動に積極的に参加し、「Sensu Deep Talks」などを主催。2016年4月からは上京し、ICT企業でベアメタルクラウドの開発に従事。趣味は料理とカメラ。

Webサイト:https://hico-horiuchi.github.io/


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。