本文へジャンプします。

ニフティクラウドRDBの新機能を利用し、DBサーバーの監視システムを迅速に構築する方法

はじめに

こんにちは、ニフティクラウドを担当している福澤と申します。

この記事では、本日リリースされたニフティクラウド RDBの新機能を使って、DBサーバーの監視の仕組みを簡単に構築する方法をご紹介したいと思います。

DBサーバーの監視といえば・・・

  • HAが発生した場合、即座にその通知が携帯のメールへ送信される
  • サーバーのCPU使用率が一定以上になった場合アラートメールが自動で送信される

などなどあると思いますが、ニフティクラウドRDBを使うことで簡単に実現できます!

イベント通知機能

皆様はコントロールパネル左メニューの「イベント」をクリックすると、バックアップ実施やフェイルオーバー発生等のイベント一覧が閲覧できることはご存知でしょうか?
event
便利な機能ですが、イベントの発生を確認するためには、コンパネにログインしなければなりませんでした。
これだとエラー等が発生した場合もすぐに気づかず、障害の影響を大きくしてしまうかもしれません。

そんなお悩みを解決するために、2015/2/18にリリースされた「イベント通知」という機能を使ってみます。

  • イベント通知機能とは?
    イベントが発生した場合に設定したメールアドレス宛に通知を行なうことができる機能です。
    冗長化によるフェイルオーバー発生等のイベントをすぐにメールで通知してくれるので、
    DBサーバーの監視を簡単に行うことができます。

今回は、試しにDBサーバを再起動した場合、メールが送信される設定を行ってみたいと思います。
ニフティクラウドコントロールパネルにログインし、サクサク設定していきましょう。

1. サイドメニュー「イベント通知」より「イベント通知新規作成」をクリックします。

eventSubscription

2. 作成画面では通知先のメールアドレス等を入力し、「作成する」ボタンをクリックします。

eventSubscriptionCreate

3.イベント通知が作成されました。

eventSubscriptionRet

これで作成したDBサーバーに再起動が発生した場合、メールが届くはずなので早速試してみます。

reboot
コントロールパネルで再起動を実施

メールBOXを確認してみると・・・以下のようなメールが届きました!
mail

イベント通知機能は、今回ご紹介した再起動以外にも様々なイベントをメールで受け取ることができます。
イベント通知機能を使って監視を強化することで、安心安全なDB サービスを提供することができます。
ニフティクラウドRDBの新機能「イベント通知」を是非使ってみて下さい。

RDBのリソース情報を監視して、ESSでメール送信してみる

イベント通知は利用せずに、ニフティクラウドRDBの情報を取得したいと思います。
そのために、昨年12月末にリリースされたニフティクラウドRDBのモニタリング情報を取得するAPIとニフティクラウドESSのメール送信用のAPIを利用してみます。
ess_cpu

上記イメージでこれでもかってくらいにCPUの使用率をケータイ向けにメールしてみましょう。
対象のニフティクラウドRDBは上記で作成しているニフティクラウドRDBを利用することとします。

ニフティクラウドRDB モニタリング情報取得API利用

APIを利用するため、以下2点の準備を行います。

  • API認証用のアクセスキーとシークレットキーを確認
  • RDBのモニタリングAPIをリクエストするプログラムを用意

API認証用のアクセスキーとシークレットキーを確認

ニフティクラウドのコントロールパネルにログインし、ヘッダー部分を確認します。
ニフティIDをクリックし、プルダウンメニューから「API認証」をクリックします。
api
API認証のアクセスキーとシークレットキーが確認できるため、メモしておきます。
key

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
クイックスタートを参考に、送信元メールアドレスの設定を完了させます。
mail

ニフティクラウド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の新機能を、ぜひお試しください。

ニフティクラウド 導入相談窓口
ニフティクラウド 無料セミナー

閉じる

閉じる

クラウドブログ編集部

クラウドブログ編集部

ニフティクラウド ユーザーブログ編集部のアカウントです。 編集部からのお知らせや、レギュラーライター以外のゲストによる寄稿記事を掲載していきます。

浜中 慶

浜中 慶

1980年、神奈川県生まれ。2003年ニフティ入社。 ポータルサイト開発を中心に、音楽配信サービス、CGMサービスなど様々なプロジェクトに企画/デザイン/システム担当として参加。現在は@niftyのポータルサービス向けコンテンツ管理システムの企画/開発/運用を担当。

吉田 雄哉

吉田 雄哉

株式会社co-meetingの創業メンバー。「取締役&External- facing Technologist」と名乗り新しいIT技術を広く伝える活動とWebアプリケーション開発を行う毎日。パッケージベンダーでのSaaS立上げ・製造業の情報システム部門で企画やPM・受託開発と従事してきたため、ベンダーサイドとユーザサイド の両方の視点を持ち合わせる。

石田 健亮

石田 健亮

株式会社ドリーム・アーツで小売事業者向けSaaS「Shopらん」を企画、開発。メインの仕事はプログラマーだがサーバー管理や営業もこなすユーティリティプレイヤー。最近好きな事はパフォーマンスチューニング。特に並列化プログラミングがマイブーム。キライなことはデータセンターでの作業。騒音と乾燥が弱点。ニフティクラウドでデータセンターに行く必要が無くなったことが本当の利点だ と思っている。

五月女 雄一

五月女 雄一

ニフティでは「インフラを守る簡単な様で奥が深いお仕事」をしています。 夢はインフラの気持ちが読めるエンジニアになること。

わたなべ かずひろ

わたなべ かずひろ

専門学校卒業後、ソフトウェア開発会社で電力系統制御システムの開発に従事。その後、CD-ROM等マルチメディア系PCソフトの開発を経て、1998年フリーランスに。 2000年8月に株式会社イーツーの設立に参画。携帯を含む様々なWeb系のシステム開発に携わる。現在はiPhone/Androidアプリなどの開発も手がけている。

市角

市角

ニフティクラウドのコントロールパネル設計・開発をメインに、たまにインフラの運用やお手伝いもやっていたりします。コントロールパネルや新機能の活用方法、アイデアなどを中心に書いていく予定です。

仲山 昌宏

仲山 昌宏

歌って踊れるインフラエンジニア兼、PHPもRubyもJavaも書くPerl使い。 物理サーバの運用に飽きて、フルラックに格安サーバ詰めて自宅プライベートクラウドを構築中。 今年は個人的には分散処理を攻めていきます。

猪飼 賢広

猪飼 賢広

1984年、愛知県名古屋市生まれ。大学は福島県にある某大学。2008年ニフティに入社。 開発系部署に配属後、主に各種テーマサイト開発のシステム面調整、開発進行管理役などとして参加。 現在もPC・ガラケーサイトの開発まわりを担当。インフラまわりを触る案件にも携わっており、日々修行中。 好きな芸人はなかやまきんに君とレイザーラモンRG。

久江 裕之

久江 裕之

ニフティクラウドのインフラ運用、OS提供の仕事をしています。 新しいOSやイメージが出る時にこのブログでご紹介いたします。入社5年目。一流のインフラエンジニアを目指して日々勉強中。

竹内 豪

竹内 豪

ニフティクラウド エンジニア

山口

山口

ニフティクラウドの基盤設計、新サービス/アライアンス/インフラ企画、その他雑用全般を担当しています。 クラウドに欲しい機能や、こんなふうに使ってほしいという想いが共有できれば良いですね。

芳中 隆幸

芳中 隆幸

ニフティクラウドの開発、運用を担当しています。

酒井 浩平

酒井 浩平

ニフティクラウドの中にいます。 ネットワークまわりの運用・開発や自動化などに取り組んでいます。 すべてのエンジニアを幸せにすることを目指しています。

higebu

higebu

ニフティクラウド IaaSのエンジニアです。 ネットワーク、DRサービス with VMware vCloud® Air™ Technology辺りの担当をしています。

武田

武田

ニフティクラウドの開発・運用を担当しています。 各種機能の内容についてなどで執筆させていただく予定です。

福澤真

福澤真

ニフティクラウドのコンパネ開発、運用をしています。

森藤 大地

森藤 大地

データに関する仕事が好きです。

宮原徹

宮原徹

日本仮想化技術株式会社 代表取締役社長兼CEO。仮想化技術に関するコンサルタントとして長年活動しており、特にベンチマークテストによる性能評価を得意としている。

荒谷翔

荒谷翔

株式会社はてなでMackerelのセールスデベロッパーとして勤務しています

東條 望

東條 望

2014年にニフティへ中途入社。 入社後から現在まで、ニフティクラウドのサービス企画・開発を担当しています。 各サービスの紹介を執筆させていただく予定です。

世良迪夫

世良迪夫

ニフティクラウドのRDBなどを担当しています