はじめに
こんにちは、ニフティクラウドを担当している福澤と申します。
この記事では、本日リリースされたニフティクラウド RDBの新機能を使って、DBサーバーの監視の仕組みを簡単に構築する方法をご紹介したいと思います。
DBサーバーの監視といえば・・・
- HAが発生した場合、即座にその通知が携帯のメールへ送信される
- サーバーのCPU使用率が一定以上になった場合アラートメールが自動で送信される
などなどあると思いますが、ニフティクラウドRDBを使うことで簡単に実現できます!
イベント通知機能
皆様はコントロールパネル左メニューの「イベント」をクリックすると、バックアップ実施やフェイルオーバー発生等のイベント一覧が閲覧できることはご存知でしょうか? 便利な機能ですが、イベントの発生を確認するためには、コンパネにログインしなければなりませんでした。 これだとエラー等が発生した場合もすぐに気づかず、障害の影響を大きくしてしまうかもしれません。
そんなお悩みを解決するために、2015/2/18にリリースされた「イベント通知」という機能を使ってみます。
- イベント通知機能とは? イベントが発生した場合に設定したメールアドレス宛に通知を行なうことができる機能です。 冗長化によるフェイルオーバー発生等のイベントをすぐにメールで通知してくれるので、 DBサーバーの監視を簡単に行うことができます。
今回は、試しにDBサーバを再起動した場合、メールが送信される設定を行ってみたいと思います。 ニフティクラウドコントロールパネルにログインし、サクサク設定していきましょう。
1. サイドメニュー「イベント通知」より「イベント通知新規作成」をクリックします。
2. 作成画面では通知先のメールアドレス等を入力し、「作成する」ボタンをクリックします。
3.イベント通知が作成されました。
これで作成したDBサーバーに再起動が発生した場合、メールが届くはずなので早速試してみます。
コントロールパネルで再起動を実施
メールBOXを確認してみると・・・以下のようなメールが届きました!
イベント通知機能は、今回ご紹介した再起動以外にも様々なイベントをメールで受け取ることができます。 イベント通知機能を使って監視を強化することで、安心安全なDB サービスを提供することができます。 ニフティクラウドRDBの新機能「イベント通知」を是非使ってみて下さい。
RDBのリソース情報を監視して、ESSでメール送信してみる
イベント通知は利用せずに、ニフティクラウドRDBの情報を取得したいと思います。 そのために、昨年12月末にリリースされたニフティクラウドRDBのモニタリング情報を取得するAPIとニフティクラウドESSのメール送信用のAPIを利用してみます。
上記イメージでこれでもかってくらいにCPUの使用率をケータイ向けにメールしてみましょう。 対象のニフティクラウドRDBは上記で作成しているニフティクラウドRDBを利用することとします。
ニフティクラウドRDB モニタリング情報取得API利用
APIを利用するため、以下2点の準備を行います。
- API認証用のアクセスキーとシークレットキーを確認
- RDBのモニタリングAPIをリクエストするプログラムを用意
API認証用のアクセスキーとシークレットキーを確認
ニフティクラウドのコントロールパネルにログインし、ヘッダー部分を確認します。 ニフティIDをクリックし、プルダウンメニューから「API認証」をクリックします。 API認証のアクセスキーとシークレットキーが確認できるため、メモしておきます。
RDBのモニタリングAPIをリクエストするプログラムを用意
APIはモニタリング情報取得用NiftyGetMetricStatisticsを利用します。 ニフティクラウド エンジニアリングパーツ SDK for Javaを利用して、リクエストを行うプログラムを作成。 と思ったのですが、SDK対応していないため、署名作成部分を作成し、APIを利用することとします。
リクエスト時のパラメーターは以下とします。 詳しくはAPIリファレンスに記載しているので、確認してください。
Version | 2013-05-15N2013-12-16 |
---|---|
Action | NiftyGetMetricStatistics |
Dimensions.member.1.Name | DBInstanceIdentifier |
Dimensions.member.1.Value | db-server-001 |
StartTime | 2015-02-13 17:00 |
EndTime | 2015-02-14 17:00 |
MetricName | CPUUtilization |
MetricNameにCPUUtilizationを指定することで、CPU使用率の情報を取得することが可能です。
Request
POST https://rdb.jp-east-1.api.cloud.nifty.com/ HTTP/1.1
Authorization: NIFTY4-HMAC-SHA256 Credential=アクセスキー/20150214/jp-east-1/rdb/nifty4_request, SignedHeaders=host;x-nifty-date, Signature=シグネチャ文字列
Host: rdb.jp-east-1.api.cloud.nifty.com
X-Nifty-Date: 20150214T083012Z
Content-Length: 220
Dimensions.member.1.Name=DBInstanceIdentifier&MetricName=CPUUtilization&Action=NiftyGetMetricStatistics&EndTime=2015-02-14+17%3A00&StartTime=2015-02-13+17%3A00&Version=2013-05-15N2013-12-16&Dimensions.member.1.Value=db-server-001
Response
HTTP/1.1 200 OK
Date: Sat, 14 Feb 2015 08:31:58 GMT
Set-Cookie: JSESSIONID=8F9008795ACC21C8B46930A82B0372D8.ipaas2; Path=/; Secure; HttpOnly
Content-Type: application/xml;charset=UTF-8
Keep-Alive: timeout=8, max=256
Connection: Keep-Alive
Transfer-Encoding: chunked
<?xml version="1.0" encoding="UTF-8" standalone="no"?><NiftyGetMetricStatisticsResponse><NiftyGetMetricStatisticsResult>
<Datapoints>
<member>
<NiftyTargetName>db-server-001</NiftyTargetName>
<Timestamp>2015-02-13T17:08:14Z</Timestamp>
<Sum>2.6</Sum>
<SampleCount>1</SampleCount>
</member>
<member>
<NiftyTargetName>db-server-001</NiftyTargetName>
<Timestamp>2015-02-13T17:18:14Z</Timestamp>
<Sum>2.6</Sum>
<SampleCount>1</SampleCount>
</member>
・・・・
・・・・ 省略
・・・・
<member>
<NiftyTargetName>db-server-001</NiftyTargetName>
<Timestamp>2015-02-14T08:18:14Z</Timestamp>
<Sum>2.6</Sum>
<SampleCount>1</SampleCount>
</member>
<member>
<NiftyTargetName>db-server-001</NiftyTargetName>
<Timestamp>2015-02-14T08:28:14Z</Timestamp>
<Sum>2.6</Sum>
<SampleCount>1</SampleCount>
</member>
</Datapoints>
<Label>CPUUtilization</Label>
</NiftyGetMetricStatisticsResult><ResponseMetadata>
<RequestId>67288f82-65de-4371-b2a0-1e943706ad58</RequestId>
</ResponseMetadata></NiftyGetMetricStatisticsResponse>
がCPU使用率となります。 結果は最新の情報が最後に出力され、2015年2月14日 17時28分14秒時点で、「2.6」となっています。
ニフティクラウドESS メール送信API利用
APIを利用するため、以下2点の準備を行う。
- ニフティクラウドコントロールパネルより、ニフティクラウドESSの設定
- ニフティクラウドESSのメール送信APIをリクエストするプログラムを用意
ニフティクラウドESSの設定
ニフティクラウドコントロールパネルからニフティクラウドESSを選択し、画面を表示します。 クイックスタートを参考に、送信元メールアドレスの設定を完了させます。
ニフティクラウドESSのメール送信APIをリクエストするプログラムを用意
APIはメール送信用SendEmailを利用します。
ニフティクラウドRDBのAPIリクエスト用に作成した署名作成のプログラムを利用し、APIを利用することとします。
リクエスト時のパラメーターは以下とします。 詳しくはAPIリファレンスに記載しているので、確認してください。
Version | 2010-12-01 |
---|---|
Action | SendEmail |
Destination.ToAddresses.member.1 | localhost@example.com |
Message.Subject.Data | test |
Message.Body.Text.Data | hello |
Source | localhost@example.com |
Request
POST https://ess.api.cloud.nifty.com/ HTTP/1.1
Authorization: NIFTY4-HMAC-SHA256 Credential=アクセスキー/20150214/east-1/email/nifty4_request, SignedHeaders=host;x-nifty-date, Signature=シグネチャ
Host: ess.api.cloud.nifty.com
X-Nifty-Date: 20150214T085114Z
Content-Length: 188
Source=localhost%40example.com&Destination.ToAddresses.member.1=localhost%40example.com&Action=SendEmail&Message.Body.Text.Data=hello&Version=2010-12-01&Message.Subject.Data=test
Response
HTTP/1.1 200 OK
Date: Sat, 14 Feb 2015 08:51:14 GMT
X-Frame-Options: SAMEORIGIN
x-amzn-RequestId: 3e04e6f5-cace-40a1-a786-87ec3b0eaadc
X-Nifty-RequestId: 3e04e6f5-cace-40a1-a786-87ec3b0eaadc
Content-Type: text/xml
Content-Length: 266
Connection: close
<SendEmailResponse>
<SendEmailResult>
<MessageId>000001153d0bbb-37af-4571-8888-bb1cb0aef933-000000</MessageId>
</SendEmailResult>
<ResponseMetadata>
<RequestId>3e04e6f5-cace-40a1-a786-87ec3b0eaadc</RequestId>
</ResponseMetadata>
</SendEmailResponse>
※ニフティクラウド エンジニアリングパーツ SDK for Javaに対応しているため、以下のようにも作成可能です(あくまで参考)。
import java.io.IOException;
import java.util.ArrayList;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceAsync;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceAsyncClient;
import com.amazonaws.services.simpleemail.model.Body;
import com.amazonaws.services.simpleemail.model.Content;
import com.amazonaws.services.simpleemail.model.Destination;
import com.amazonaws.services.simpleemail.model.Message;
import com.amazonaws.services.simpleemail.model.SendEmailRequest;
import com.amazonaws.services.simpleemail.model.SendEmailResult;
public class SendEmail {
public static void main(String[] args) throws IOException {
AWSCredentials credentials = new ClasspathPropertiesFileCredentialsProvider().getCredentials();
AmazonSimpleEmailServiceAsync ses = new AmazonSimpleEmailServiceAsyncClient(credentials);
ses.setEndpoint("https://ess.api.cloud.nifty.com/");
SendEmailRequest request = new SendEmailRequest();
Future fresult = ses.sendEmailAsync(request);
SendEmailResult result;
try {
//宛先格納用のCollection
ArrayList toAddresses = new ArrayList();
//宛先メールアドレスを追加
toAddresses.add("localhost@example.com");
//宛先メールアドレスをリクエストに設定
Destination destination = new Destination();
destination.setToAddresses(toAddresses);
request.setDestination(destination);
//送信元メールアドレスをリクエストに設定
request.setSource("localhost@example.com");
//返信先メールアドレスを設定
request.setReturnPath("localhost@example.com");
//メッセージ本文のオブジェクト
Message message = new Message();
//件名と本文を設定
message.setSubject(new Content("test"));
message.setBody(new Body(new Content("hello")));
//メールの内容をリクエストに設定
request.setMessage(message);
result = fresult.get(30, TimeUnit.SECONDS);
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
ここまでニフティクラウドRDBとニフティクラウドESSのAPIの利用が確認できました。 ではcronに登録し、5分ごとにニフティクラウドRDBのモニタリング情報を取得し、最新のCPU使用率をニフティクラウドESSのAPIでメール送信します。
例 # crontab -l */5 * * * * バッチ名
以下のようにメールを受信しました。
1通目 | 題名:NiftyGetMetricStatistics 2015/02/16 08-00-03 cpu(%):2.5 |
---|---|
2通目 | 題名:NiftyGetMetricStatistics 2015/02/16 08-05-03 cpu(%):3.0 |
3通目 | 題名:NiftyGetMetricStatistics 2015/02/16 08-10-03 cpu(%):3.2 |
4通目 | 題名:NiftyGetMetricStatistics 2015/02/16 08-15-03 cpu(%):2.5 |
5通目 | 題名:NiftyGetMetricStatistics 2015/02/16 08-20-03 cpu(%):4.0 |
ケータイでもすぐに分かるように、題名にすべての情報を入れました。
まとめ
ニフティクラウドRDBの新機能「イベント通知」と「モニタリングAPI」についてご紹介しました。 この機能を使うことで、簡単に監視を行うことができます。 また、モニタリングAPIを使って情報を取得することで、自由に監視のしくみを作ることもできます。 ニフティクラウドRDBの新機能を、ぜひお試しください。