新たなクラウド監視ツールとして注目され始めている「Sensu」の活用方法を解説する本連載。今回はSensuで必要となるミドルウェア「Redis」と「RabbitMQ」について、その概要と構築手順を解説します。
前回は「Sensu Core」と「Sensu Enterprise」の違い、他の監視サービスとの比較について説明しました。「Heads Up Display(HUD)」やサードパーティー連携など、Sensu Enterpriseで提供される機能の他、「Datadog」「Mackerel」といった監視サービスと比較しても安価で自由度が高いことなどをご理解いただけたと思います。
今回は「Sensu」で必要となる2つのミドルウェア「Redis」と「RabbitMQ」について、その概要の紹介と、Sensuの公式ドキュメントに従った構築手順を解説します(画面1)。環境は「Ubuntu Server 16.04」で、Sensuとミドルウェアを“オールインワン”で構築します(Debian/Red Hat Enterprise Linux/CentOSなども公式ドキュメントに案内があるので、ご覧ください)。
「Redis」は、オープンソースのインメモリKey-Valueストア構築ソフトウェアです(画面2)。なお、Key-Valueストアとは、データを名前と値のペアで保存する形式のデータベースのことです。Sensuの環境では、Redisはデータベースやキャッシュ、データブローカーといった用途で使用されます。
Sensuでは「sensu-client」や監視結果などのデータを保存するために使用します。例えば「sensu.hico.io」という名前のsensu-clientの場合は、下記のようなデータが保存されます(sensu-serverがJSON形式のデータをRedisの文字列型として保存しています)。
{ "name": "sensu.hico.io", "address": "150.95.134.43", "subscriptions": [ "redis", "rabbitmq", "client:sensu.hico.io" ], "version": "0.28.2", "timestamp": 1489214806 }
Sensuの公式ドキュメント「Install Redis on Ubuntu/Debian」に記載された手順に従って、Redisをインストールします。Ubuntu Serverのパッケージマネージャの「apt-get」コマンドでインストールできるので、とても簡単です。
# パッケージの情報を更新し、Redisをインストール $ sudo apt-get update $ sudo apt-get -y install redis-server # Redisのサービス(デーモン)を起動 $ sudo /etc/init.d/redis-server start # Redisの自動起動(スタートアップ)を有効化 $ sudo update-rc.d redis-server defaults # Redisが起動し、接続できることを確認 $ redis-cli ping
「redis-cli ping」のコマンドを実行して「PONG」と返ってくれば、インストールは成功です。設定ファイル「/etc/redis/redis.conf」はデフォルトのままで問題ありません。また、sensu-serverとsensu-apiが同じRedisに接続できる必要があるので、注意してください。
「RabbitMQ」は、オープンソースのメッセージブローカーソフトウェアです(画面3)。アプリケーションや機能の間で、「AMQP」というプロトコルでメッセージを送受信する際に使用されます。
「OpenStack」のようなマイクロサービスアーキテクチャでは、サービス間で操作と状態をやりとりするためにRabbitMQが使用されています。
RabbitMQのシステムでは、送信側はキューにメッセージを保存し、受信側はキューからメッセージを取り出して処理します。送受信はそれぞれ複数のクライアントから実行できるので、分散処理や高信頼性のシステムを実現することができます。
Sensuでは、sensu-serverからsensu-clientに監視の実行を指示したり、sensu-clientからsensu-serverに監視結果を送信したりするために使用しています。
Sensuの公式ドキュメント「Install RabbitMQ on Ubuntu/Debian」に記載された手順に従って、Redisをインストールします。最初に、RabbitMQの実行に必要な「Erlang」をインストールします。
# ErlangのAptリポジトリを追加 $ sudo wget http://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb $ sudo dpkg -i erlang-solutions_1.0_all.deb # パッケージの情報を更新し、Erlangをインストール $ sudo apt-get update $ sudo apt-get -y install socat erlang-nox
次に、RabbitMQを公式サイトからダウンロードしてインストールします(これは、apt-getコマンドを使うと古いバージョンがインストールされるためです)。
# RabbitMQのパッケージをダウンロードしてインストール $ wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server_3.6.6-1_all.deb $ sudo dpkg -i rabbitmq-server_3.6.6-1_all.deb # RabbitMQのサービス(デーモン)を起動 $ sudo /etc/init.d/rabbitmq-server start # RabbitMQの自動起動(スタートアップ)を有効化 $ sudo update-rc.d rabbitmq-server defaults
また、RabbitMQではキューやメッセージのために大量のファイルを開くため、「ファイルディスクリプタ」(ユーザーやプロセスが開けるファイルの上限数)を変更しておく必要があります(筆者は、RabbitMQがファイルを開けなくなり、Sensuの監視が停止した経験があります)。
# ファイルディスクリプタの上限数を変更 $ echo "rabbitmq soft nofile 65536\nrabbitmq hard nofile 65536" | sudo tee -a /etc/security/limits.conf $ echo "session required pam_limits.so" | sudo tee -a /etc/pam.d/common-session $ echo "session required pam_limits.so" | sudo tee -a /etc/pam.d/common-session-noninteractive # RabbitMQの設定を変更して再起動 $ sudo mkdir -p /etc/systemd/system/rabbitmq-server.service.d $ echo -e "[Service]\nLimitNOFILE=65536" | sudo tee -a /etc/systemd/system/rabbitmq-server.service.d/limits.conf $ sudo /etc/init.d/rabbitmq-server restart
最後に、Sensu用のバーチャルホストとユーザーを作成し、権限を設定します。
全てのsensu-serverとsensu-clientが同じRabbitMQに接続できる必要があるので、注意してください。
$ sudo rabbitmqctl add_vhost /sensu $ sudo rabbitmqctl add_user sensu secret $ sudo rabbitmqctl set_permissions -p /sensu sensu ".*" ".*" ".*"
今回はSensuで必要となる2つのミドルウェア、RedisとRabbitMQについて説明しました。
RedisはKey-Valueストアで、sensu-clientや監視結果などのデータを保存するために使用しています。RabbitMQはメッセージブローカーで、sensu-serverとsensu-clientの間の通信に使用しています。どちらも最近人気のミドルウェアなので、Sensu以外でも利用する機会があると思います。
次回は、sensu-serverとsensu-client、sensu-apiのインストールと設定について、今回と同様に具体的なコマンドなどを示しながらチュートリアル形式で解説します。
生まれも育ちも香川県。香川大学大学院 情報科出身。学生時代は研究の傍ら、勉強会やコミュニティー活動に積極的に参加し、「Sensu Deep Talks」などを主催。2016年4月からは上京し、ICT企業でベアメタルクラウドの開発に従事。趣味は料理とカメラ。
Webサイト:https://hico-horiuchi.github.io/
Copyright © ITmedia, Inc. All Rights Reserved.