SensuのフロントエンドにUchiwaを利用する方法

 2014/08/09
このエントリーをはてなブックマークに追加

全国100万人のSensuユーザーのみなさんこんにちは。

Sensuでは標準でSensu DashboardというWeb UIが付属しているのですが、これがあまりイケてないので他のものを使うのが定番です。 いままではRubyで書かれているSensu Adminを使う場合が多かったのですが、今日紹介するのはUchiwaというフロントエンドツールです。

Uchiwaの特徴

  • Node.jsで書かれており非常に軽量。特にデータベースとかもいらない
  • SensuAdminと違って複数のSensu Serverの出力を統合できる
  • GUIがイケてる感じ
  • 結構開発が活発

インストール

インストールは極めて簡単です。

ソースコードからインストールする場合

Node.jsがインストールされていない場合は事前にインストールしておいてください。

次にコードを以下のように取得し、チェックアウトしたディレクトリに移動します。

git clone https://github.com/sensu/uchiwa.git
cd uchiwa

bowerをインストールします。

npm install -g bower

アプリケーションをインストールします。

npm install --production

config.json.example次にSensu Serverの接続情報を設定します。当該ディレクトリにconfig.json.exampleというファイルがあるので、config.jsonにリネームして中身を編集します。

例えば以下のような内容になります。最初のsensuの箇所では接続対象となるSensu APIの情報を設定します。次のuchiwaの箇所では起動時のポートやユーザー情報を設定します。

{
  "sensu": [
    {
      "name": "Site 1",
      "host": "sensu.meguro.ryuzee.com",
      "port": 9000,
      "ssl": false,
      "user": "",
      "pass": "",
      "path": "",
      "timeout": 5000
    }
  ],
  "uchiwa": {
    "host": "0.0.0.0",
    "port": 3000,
    "user": "admin",
    "pass": "secret",
    "refresh": 10000
  }
}

これで準備が出来ましたので以下のように起動します。

node app.js

起動できたら、 http://localhost:3000 にアクセスしてください。認証後以下のように表示されればOKです。

Docker経由でのインストール

手動でインストールした場合もたいした手順はなく非常に簡単ですが、Dockerを使えば更に簡単に環境を用意できます。

今回は折角なので、Elastic Beanstalkを使ってAWS環境上にDockerでデプロイしていきます。

Elastic Beanstalkの環境設定

Elastic Beanstalkはマネジメントコンソールからも操作できますが、ebと呼ばれるコマンドラインツールを使っていくのが楽です。 まだツールをインストールしていない場合はこちらからダウンロードしてインストールします。

環境の初期化

次に適当なディレクトリを作成し移動した上で、以下のコマンドを実行してください(順番がだいじです)。

git init
eb init

実行すると、対話式に環境の設定が始まります。

まず最初にアクセスキーとシークレットキーの設定を行ないます。自分専用の端末を使っている場合は予め環境変数に指定しておくと色々なところで使えて楽です。 ここで利用するアクセスキーとシークレットキーはマスターアカウントのものは設定しないのが無難です。IAMユーザーを利用するようにしましょう。

To get your AWS Access Key ID and Secret Access Key,
  visit "https://aws-portal.amazon.com/gp/aws/securityCredentials".
Enter your AWS Access Key ID (current value is "AKIAJ*****DSV5Q"):
Enter your AWS Secret Access Key (current value is "wdcQ4*****eck4q"):

次にリージョンを選択します。今回は東京リージョンに作ることとして、6を選択します。

Select an AWS Elastic Beanstalk service region.
Available service regions are:
1) US East (Virginia)
2) US West (Oregon)
3) US West (North California)
4) EU West (Ireland)
5) Asia Pacific (Singapore)
6) Asia Pacific (Tokyo)
7) Asia Pacific (Sydney)
8) South America (Sao Paulo)
Select (1 to 8): 6

次にアプリケーション名やEnvironment名を指定します。

Enter an AWS Elastic Beanstalk application name (auto-generated value is "uchiwa-docker"):
Enter an AWS Elastic Beanstalk environment name (auto-generated value is "uchiwa-docker-env"):

構成を選択します。ここでは普通のWeb ServerのしかけでOKなので1を選択します。

Select an environment tier.
Available environment tiers are:
1) WebServer::Standard::1.0
2) Worker::SQS/HTTP::1.0
Select (1 to 2): 1

ソリューションスタック(どんなミドルウェアやAMIにするか)を選択します。非常に多数の選択肢が表示されますが、49のDockerを選択します。

Select a solution stack.
Available solution stacks are:
1) 64bit Amazon Linux 2014.03 v1.0.4 running PHP 5.5
2) 64bit Amazon Linux 2014.03 v1.0.4 running PHP 5.4
(略)
49) 64bit Amazon Linux 2014.03 v1.0.1 running Docker 1.0.0
50) 64bit Amazon Linux 2014.03 v1.0.0 running Docker 1.0.0
Select (1 to 50): 49

次に冗長化の設定です。今回は遊びなので2のシングルインスタンスで良いでしょう。本番で使う場合は1)を選ぶことになるかもしれません。

Select an environment type.
Available environment types are:
1) LoadBalanced
2) SingleInstance
Select (1 to 2): 2

DBの設定です。今回はDBは不要なので、nを選択します。

Create an RDS DB Instance? [y/n]: n

EC2インスタンス起動時に付与するIAMロールを選択します。今回は起動したEC2インスタンスからAWSのAPIを呼び出したりはしないので、1)を選択してデフォルトにします。

Attach an instance profile (current value is "[Create a default instance profile]"):
1) [Create a default instance profile]
2) federation
3) aws-opsworks-ec2-role.1404277372170
4) aws-opsworks-ec2-role.1404277371433
5) aws-opsworks-ec2-role.1404277370722
6) aws-opsworks-ec2-role
7) Fuga-aMediaManagerWebsite-WBRDF2L1W2L0-WebASGroupInstanceProfile-1TRRVCHPSRTGN
8) [Other instance profile]
Select (1 to 8): 1

これで初期化は終わりました。この時点で、.elasticbeanstalk/configというファイルが作成されます。

更に追加で.elasticbeanstalk/optionsettings.uchiwa-docker-envというファイルを作成し、インスタンスを起動するサブネットとVPCを指定します。 なお、値は利用している環境によって変わります。また特に指定しない場合はデフォルトVPC内に起動するので、それでも良い場合はこの作業は不要です。

[aws:ec2:vpc]
Subnets=subnet-5d984235
VPCId=vpc-4dd6c224

Docker起動設定

Dockerのコンテナを起動する場合、Elastic BeanstalkではDockerfileを使う方法と、Dockerrun.aws.jsonファイルを使う方法の2つがあります。 今回は後者を利用します。

以下の内容でカレントディレクトリにDockerrun.aws.jsonを作成してください。

{
  "AWSEBDockerrunVersion": "1",
  "Image" : {
    "Name" : "uchiwa/uchiwa"
  },
  "Ports": [
    {
      "ContainerPort": "3000"
    }
  ]
}

次に、Dockerが利用する環境変数を準備します。カレントディレクトリに.ebextensionsフォルダを作成し、ファイル名が.configで終わるような設定ファイルを作成します。ここではenv.configとしました。内容は以下のとおりです。自分の環境にあわせて値を書き換えます。

option_settings:
  - option_name: API1_PORT_4567_TCP_PORT
    value: 9000
  - option_name: API1_PORT_4567_TCP_ADDR
    value: 10.0.90.254
  - option_name: API1_UCHIWA_NAME
    value: sensu.meguro.ryuzee.com
  - option_name: UCHIWA_USER
    value: admin
  - option_name: UCHIWA_PASS
    value: sabinuki 

uchiwaのDockerイメージを利用する場合、環境変数を指定することで、uchiwaの設定を行なうことが可能です。

  • API1_PORT_4567_TCP_PORT は必須で、Sensu APIのポートを指定します。
  • API1_PORT_4567_TCP_ADDR も必須で、Sensu APIのエンドポイントを指定します。今回は同一VPC内なのでローカルIPで指定しています。
  • API1_UCHIWA_NAMEは任意で、画面表示の際に利用されます。
  • UCHIWA_USERも任意で設定されている場合、uchiwaにアクセスした際にBASIC認証が行なわれます
  • UCHIWA_PASSはUCHIWA_USERとセットで利用します。

ここまで準備ができたらローカルレポジトリに追加します。

git add Dockerrun.aws.json
git add .ebextensions/env.config
git commit -m "寿司くいたい"

これで準備完了なので、Elastic Beanstalk経由でインスタンスを起動しデプロイします。

eb start

こんな感じでログが表示されて構築完了です。最後にエンドポイントが表示されるので、コピーしてブラウザでアクセスしてみてください。

Starting application "uchiwa-docker".
Would you like to deploy the latest Git commit to your environment? [y/n]: y

Waiting for environment "uchiwa-docker-env" to launch.
2014-08-09 16:40:44 INFO    createEnvironment is starting.
2014-08-09 16:40:49 INFO    Using elasticbeanstalk-ap-northeast-1-660875509136 as Amazon S3 storage bucket for environment data.
2014-08-09 16:41:17 INFO    Created EIP: 54.64.11.62
2014-08-09 16:41:18 INFO    Created security group named: sg-a755acc2
2014-08-09 16:42:20 INFO    Waiting for EC2 instances to launch. This may take a few minutes.
2014-08-09 16:45:29 INFO    Successfully pulled uchiwa/uchiwa:latest
2014-08-09 16:45:39 INFO    Successfully built aws_beanstalk/staging-app
2014-08-09 16:45:50 INFO    Docker container 68330e14b302 is running aws_beanstalk/current-app.
2014-08-09 16:46:07 INFO    Application available at uchiwa-docker-env-sushikuitaine.elasticbeanstalk.com.
2014-08-09 16:46:07 INFO    Successfully launched environment: uchiwa-docker3-env
Application is available at "uchiwa-docker-env-sushikuitaine.elasticbeanstalk.com".

もしこの後設定を変えてデプロイする場合は、ファイルなどを書き換えてローカルコミットしたあとに

git aws.push

とすればOKです。

他の画面はこんな感じです。

クライアント一覧

チェック一覧

それでは楽しい監視ライフを!!

 2014/08/09
このエントリーをはてなブックマークに追加

サイト内検索


著作

寄稿

Latest post: