IDCF Tech-Blog

読者です 読者をやめる 読者になる 読者になる

IDCF Tech-Blog

クラウド・ビッグデータ・データセンターを提供するIDCフロンティアの公式エンジニアブログ

第一回MORIO Dojo入門者限定イベント ~Dojo開き~

MORIO Dojo(アンバサダー)

こんにちは。MORIO Dojo女将の谷口(ワタシ)です。

MORIO Dojoとは2016年5月10日から始まった、IDCFクラウドのアンバサダープログラムです。

応募して、認定されると限定イベントへの招待や限定クーポンなどの参加者特典を受けることができます。

早速ですが、先日(7月21日)に第一回MORIO Dojo入門者限定イベント(@Debarge)を開催しました!

雨も止んで、たくさんのDojo入門者のかたにお会いできましたので、そのご報告です!

当日のプログラムは以下の通り。


  • 開会のご挨拶/乾杯
  • MORIO Dojo認定証授与式
  • LTタイム
  • IDCFクラウドマニアッククイズ!
  • みんなのブログを知ろう!
  • 閉会の儀

開会のご挨拶/入門の御礼は、女将から。入門者のかたと、杯を交わすことができました!w f:id:santaniguchi:20160722162841p:plain

MORIO Dojo認定証授与式

MORIO Dojoに入門いただいた皆様に認定証をお渡ししました! f:id:santaniguchi:20160722171000j:plain

こちらのカード、入門者の方々のDojoネーム(ハンドルネーム的なもの)を1枚1枚印字しました。 皆様で同じDojoグッズを持つことで、一体感を持っていただけるかな?という想いで作りました。(オネガイダカラ..ポイ.シナイデ...)

認定証授与の様子です。喜んでいただけてよかったですー(MORI帯、黒帯認定おめでとうございます!) f:id:santaniguchi:20160722170752p:plain

LTタイム

f:id:santaniguchi:20160722183337j:plain

①IDCFクラウド開発最新情報

IDCFクラウドの開発チーム(飯田)からIDCFクラウドの今年度の新機能リリース実績と、これからの開発ロードマップのお話をさせていただきました。 ILB(7/14)、GSLB(7/21)リリースの話と、現在開発中の機能・サービスのロードマップについての「ここだけの話」なので詳細はヒミツです。気になる方ははMORIO Dojoへの入門をお待ちしてます! www.idcf.jp

②エバンジェリストグループの藤城から「僕はまだ10%しかIDCFクラウドを理解していなかった」

(半分は本の宣伝?!笑)

www.slideshare.net

③最後に入門者の(@hogehuga)さんから「(Vulsで)脆弱性対策をもっと楽に!」

ユーザー会に続き、Vulsネタ!

www.slideshare.net

IDCFクラウドマニアッククイズ

IDCFクラウドに関するアンバサダーだから、応えられるようなマニアックなクイズをご用意し、優勝者には未発売の「IDCFクラウド攻略」ガイドをプレゼントしました! 後半はかなりの難問が多く、アンバサダーの方々も自信なさげwというか、社内のメンバーですら答えられるか怪しいレベルの問題でした! ぜひ挑戦してみてください!

www.slideshare.net

みんなのブログを知ろう!

他の入門者は何を書いてるのかな?失敗や成功を共有してほしい!という想いから「みんなのブログ」と題して、Dojo入門者のみんなが書いているブログを紹介させていただきましたー!WP系、IDCFクラウド使い倒す系、IoT(IDCFチャンネル)系など人によって、分野が分かれており、個人的にとっても面白かったです! 帰り際に「もっとブログ書きます!」という声もいただき、ブログ紹介は定期的に実施していきたいと思います♪

閉会の儀

とまぁ、このようなかんじで緩やかに進行していったDojo開きですが、入門者のみんなの笑顔で終了することができました! f:id:santaniguchi:20160724174837j:plain

IDCFクラウド MORIO Dojoでは入門者を絶賛募集しています!また、MORIO Dojoのプログラムもブラッシュアップしていきたいので、入門者からの要望もお待ちしております!

ではでは、次回は自分もイベントに参加したいよ!という方は、↓こちらからご応募お待ちしております~

www.idcf.jp

YBIのクエリ結果をSlackへ通知する

Yahoo!ビッグデータインサイト ビッグデータ

ビッグデータ・ソリューションアーキテクトの高階(takashina)です。

みなさんの社内や組織内のコミュニケーションには、どんなツールを使ってますか? 電話、メール、ケータイメッセージはもちろんのこと、LINE、FacebookのMessenger、Skype、Facetime、Slack、chatwork、HipChatなどといった様々なジャンルのツールを使っているかと思います。プッシュ通知されるツールだと、タイムラインを追っていくだけで必要な情報や通知内容が読めるので、手間が少なくて便利ですよね。

ログのバッチ処理をしている場合、自動的にその集計結果を送ってきてもらえたら、それも手間が少なくて便利そう。 そこで今日は、Yahoo!ビッグデータインサイト(以下「YBI」)で実行したクエリの結果をSlackへ通知する手順についてご紹介します。
f:id:maktakas:20160530124256p:plain

前提条件

ここから先、次の前提で綴っていきます。

  • CentOSサーバーの基本的な操作ができる
  • 外部のBotから投稿してもOKなSlackのアカウントを持っている
  • YBIのアカウントを持ち、YBIの基本機能を理解している

用意するモノ

手順

1. IDCFクラウドで仮想サーバー作成、ネットワークの設定

まずはIDCFクラウドでSlackへの投稿を操作するサーバーを作ります。 他のサーバーを使う方は、適宜同様の設定をしてください。

IDCFクラウドで仮想サーバーを作成する手順についてはIDCFクラウド ヘルプサイトをご覧ください。 なお、今回はおすすめTemplateのCentOS 7.1 64-bitで作成しました。
ネットワークの設定は下記のように行います。 SSH(22/TCP)とSinatra(4567/TCP)でアクセス可能としてください。
※Sinatraが何者か、は後述します。

まずIPアドレスの取得
f:id:maktakas:20160523204354p:plain

ファイアウォールの設定
f:id:maktakas:20160523204433p:plain

ポートフォワードの設定
f:id:maktakas:20160523204503p:plain

2. Slackでの準備

続いてSlack側で準備をしていきます。通知を送りたいSlackのteamにアクセスしておきましょう。

外部のツール等からSlackへ投稿できる機能としてIncoming Webhooksがあります。今回はこの機能を使ってYBIからSlackへのクエリ結果通知を実現していきます。
なお、既にIncoming Webhooksの設定がされているSlackのChannelであれば、ここの手順は不要です。

2-1. Slack設定ページ

歯車マークのChannel Settingsから「Add an app or integration」を選択します。
f:id:maktakas:20160520143305p:plain

すると、Slackの細かな設定ができるページへ飛びます。 ここの検索窓で「incoming webhooks」を入力すると候補に「Incoming Webhooks」が現れるのでクリックします。

2-2. Incoming Webhooks設定ページ

f:id:maktakas:20160520143621p:plain

team名の右側にある「configure」、「Add Configuration」とクリックします。
f:id:maktakas:20160520144728p:plain f:id:maktakas:20160520144733p:plain

Post to Channelで、Incoming Webhooksで投稿する先のchannelを選択して、 「Add Incoming WebHookss integration」ボタンをクリックします。
f:id:maktakas:20160520145011p:plain

2-3. 投稿用URLの発行

https://hooks.slack.comで始まるWebhook URLが発行されます。 外部ツールからこのURLにデータを投げるとSlackのChannel投稿されるわけです。
f:id:maktakas:20160520145956p:plain

このページでは、Webhookを使った投稿者名、アイコン等を変更することができますが、とりあえず今はそのまま次に進みます。 「Save Settings」をクリックして、Slack側での準備は完了です。

※注意!
このWebhook URLは関係者以外に知られないようにしてください。バレてしまうと誰でもChannelへ投稿できるようになってしまいます!

2-4. Webhook URLのテスト

Webhook URLを使った投稿ができるかどうか、CentOSサーバーにログインして、試してみましょう。

$ curl -X POST --data-urlencode 'payload={"text": "Test Message"}' https://hooks.slack.com/services/xxxxxxxxx/xxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxx

うまく行けば、SlackのChannelにこんな投稿がされているはずです。
f:id:maktakas:20160523155616p:plain

3. td2slackの準備

続いて、CentOSサーバーにてtd2slackをインストールします。 YBIはTreasure Dataのサービスをベースにしています。YBIからSlackへ通知する仕組みについては、Treasure Dataのクエリ結果をSlackに流せる「td2slack」があるので、これを使います。

td2slackは、RubyによるWebアプリケーションを簡単に実現するためのソフトウェアであるSinatraで作られています。 今回ご紹介しているtd2slackは、YBIから送られてきたHTTP PUTをSinatraでフッキングしてSlackへ送る、という動きをしています。
Sinatraについて詳しく知りたい方はこちらをどうぞ

3-1. yumインストール

td2slackをインストールするのにbundlerを使っていきます。
その前に、インストールに使うruby-devel、gcc、rubygem-bundlerをyumでインストールします。RubyGemsもアップデートしておきましょう。

$ sudo yum install ruby-devel gcc rubygem-bundler
(中略)
New leaves:
  gcc.x86_64
  ruby-devel.x86_64
  rubygem-bundler.noarch

$ sudo gem update --system
Updating rubygems-update
Fetching: rubygems-update-2.6.4.gem (100%)
Successfully installed rubygems-update-2.6.4
Installing RubyGems 2.6.4
RubyGems 2.6.4 installed
(中略)
RubyGems system software updated

3-2. git clone

適当なディレクトリ配下にgit cloneします。

$ git clone https://github.com/treasure-data/td2slack.git
Cloning into 'td2slack'...
remote: Counting objects: 49, done.
remote: Total 49 (delta 0), reused 0 (delta 0), pack-reused 49
Unpacking objects: 100% (49/49), done.

3-3. 環境変数設定

下記の環境変数を設定します。

$ export SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxxxxxxxx/xxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxx
$ export RACK_ENV=production
  • Sinatraアプリケーション(app.rb)からSLACKへ投稿する際に、SLACK_WEBHOOK_URLの環境変数で指定したURLへ送っています。
  • RACK_ENVは、Sinatraアプリケーションを外部のサーバーから利用できるようにするために設定しています。

3-4. td2slackインストール

td2slackで使われるjsonのgemがGemfileに含まれていなかったため、追記したうえでbundlerでインストールします。

$ cd td2slack
$ vi Gemfile
source 'https://rubygems.org'
gem 'sinatra'
gem 'slack-notifier'
gem 'json'     (← 一行追加)

$ bundle install --path vendor/bundle
Fetching gem metadata from https://rubygems.org/.............
Resolving dependencies...
Installing json 1.8.3
Installing rack 1.6.0
Installing rack-protection 1.5.3
Installing tilt 2.0.1
Installing sinatra 1.4.6
Installing slack-notifier 1.1.0
Using bundler 1.7.8
Your bundle is complete!
It was installed into ./vendor/bundle

これで実行環境が整いました。

4. 実行テスト

とりあえず実行してみましょう。

$ bundle exec ruby app.rb
[2016-05-23 20:21:05] INFO  WEBrick 1.3.1
[2016-05-23 20:21:05] INFO  ruby 2.0.0 (2014-11-13) [x86_64-linux]
== Sinatra (v1.4.7) has taken the stage on 4567 for production with backup from WEBrick
[2016-05-23 20:21:05] INFO  WEBrick::HTTPServer#start: pid=11116 port=4567

この状態でYBIのWeb UIからクエリを実行してみます。 適当なDatabaseを選んで、テスト用に「SELECT 'aaa' AS foo」などという単純なクエリを書きます。 このクエリの結果は「foo」カラムに「aaa」という文字列が1行だけ現れます。
f:id:maktakas:20160523211531p:plain

これをResult Exportの機能で「HTTP PUT」へエクスポートします。記入個所はHost、Port、Pathの3箇所です。
f:id:maktakas:20160523211541p:plain

ここまで設定したら、Web UI右上にある「Run」!

すると..Slackにこんな投稿がされるはずです。
f:id:maktakas:20160523212329p:plain

CentOSサーバーにはこんなログが出てます。

WARN: tilt autoloading 'tilt/erb' in a non thread-safe way; explicit require 'tilt/erb' suggested.
xxx.xxx.xx.xx - - [23/May/2016:20:23:54 +0900] "PUT /example HTTP/1.1" 200 - 0.4638
xxx-xxx-xx-xx.jp-east.compute.idcfcloud.com - - [23/May/2016:20:23:54 JST] "PUT /example HTTP/1.1" 200 164
- -> /example
[2016-05-23 20:23:54] ERROR Errno::ECONNRESET: Connection reset by peer
        /usr/share/ruby/webrick/httpserver.rb:80:in `eof?'
        /usr/share/ruby/webrick/httpserver.rb:80:in `run'
        /usr/share/ruby/webrick/server.rb:295:in `block in start_thread'

確認できたらSinatraは止めておきましょう。Ctrl-Cです。

5. td2slackをデーモンで動かす

Sinatraアプリであるtd2slackは、rackupコマンドでデーモン起動可能です。下記では4567/TCPポートで起動しています。netstatで起動状況を確認してみましょう。

$ bundle exec rackup -D config.ru -p 4567

$ netstat -tnap
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:4567            0.0.0.0:*               LISTEN      18591/ruby      

止める時はkillしてください。

$ kill -9 ${pid}

6. 出力結果のフォーマット作成

Result Exportを設定する際に、 Path: /example と設定しました。 これは、CentOSサーバーのtd2slack/viewsディレクトリ配下にあるerbファイルに沿って出力されています。 example.erbファイルを見てみると..

$ more views/example.erb
This is <%=@td['foo'][0]%>

クエリの結果は「foo」カラムに「aaa」という文字列が1行だけ現れるもので、Slackへの投稿された内容は以下の通りでした。
f:id:maktakas:20160523212329p:plain

<%=@td['foo'][0]%>の部分にクエリ結果の「aaa」が代入されていたのですね。 このようにviewsディレクトリ配下のerbファイルを設定すると、いろいろと出力結果をカスタマイズできます。

ところで、YBIにはsample_datasetsというデータベース内に、過去のNasdaq株価データが入ったテーブルがサンプルデータとして格納されています。このデータセットに対して、次のようなクエリを実行して、結果をSlackへ流してみましょう。Sinatraアプリを起動しておくのをお忘れなく。

$ bundle exec rackup -D config.ru -p 4567

設定ファイル:トップ5をフォーマットして表示しています。

$ vi views/rate_of_increase.erb
Nasdaq株価上昇率トップ5
日付 | 銘柄 | 上昇率
<% 5.times do |i| %>
  <%= i + 1 %>位 <%= @td['date'][i] %> | <%= @td['symbol'][i] %> | <%= @td['rate_of_increase'][i] %>
<% end %>

クエリ:日毎・銘柄毎の株価上昇率を計算して、上昇率トップ5を取得しています。

SELECT TD_TIME_FORMAT(time, 'yyyy-MM-dd') AS date, symbol, (close - open) / open AS rate_of_increase
FROM nasdaq
WHERE TD_TIME_RANGE(time, '2012-01-01', '2013-01-01')
  AND (close - open) > 0
  AND open > 0
ORDER BY rate_of_increase DESC
LIMIT 5

Result Exportの設定は次のようにします。

Export to: HTTP PUT
Host: td2slackが動くホスト名かIPアドレス
Port: 4567
Username: 空白
Passowrd: 空白
Path: /rate_of_increase

クエリをRunしてみましょう。Slackへ出力される結果は次のようになるはずです。
f:id:maktakas:20160524212506p:plain

今回の環境

$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
$ /usr/bin/ruby -v
ruby 2.0.0p598 (2014-11-13) [x86_64-linux]
$ /usr/bin/gem -v
2.6.4
$ /usr/bin/bundler -v
Bundler version 1.7.8

おわりに

いかがでしたか。
クエリ結果を定期的にSlackへ出力してもらえると、監視アラートの代わりに使うこともできますね。

それでは、ごきげんよう!

ボリュームアップロード機能の紹介

IDCFクラウド API

こんにちは。IDCフロンティア UX開発部の進藤です。

5/19にIDCFクラウドにおきまして、ボリュームアップロード機能をリリース致しました。
IDCFクラウド以外の環境(他社クラウドサービス等)で作成されたボリュームを、より簡単にIDCFクラウドでご利用頂けるようになりました。
ボリュームアップロード機能は、クラウドコンソール画面からはもちろん、APIもご利用頂けます。

この記事では、ボリュームアップロード機能の具体的なご利用方法を紹介します。

準備

ご準備頂くのは、OVA形式のボリューム だけです!

APIから実施される場合は、CloudStackのAPIを実行できる環境もご用意ください。

以降では例として、IDCFクラウドで作成したボリュームを、別アカウントのIDCFクラウドにアップロードする方法をご紹介します。

なお 例で使用するアカウントは下記の通りとします。
 - アップロード アカウント:アカウントA
 - アップロード アカウント:アカウントB

アカウントAのボリューム(OVAファイル) f:id:cshintoidcf:20160524174143p:plain

今回はこちらのURLのボリュームを使用します。


IDCFクラウドコンソールでアップロードする

まずは、IDCFクラウドのコンソールにてアップロードする方法を紹介します。

1. アップロード先のアカウントでログインします。

例では、アップロード先のアカウントを"アカウントB"としています。 f:id:cshintoidcf:20160524172609p:plain

2. 「コンピューティング」>「ボリューム」へ遷移し、「ボリューム作成」をクリックします。

f:id:cshintoidcf:20160524171614p:plain

3. 「アップロード」をクリックし、必要事項を入力します。

《入力事項》

  • ボリューム名:任意の名前をご入力ください
  • ゾーン :アップロードするゾーンをご選択ください
  • URL :OVAファイルのURLをご入力ください
  • ※"http://*****.ova"形式のファイルのみアップロード可能です。
    お持ちのOVAファイルのURLが"https://・・・.ova"の場合、"s"を削除してご入力ください。

    f:id:cshintoidcf:20160524171902p:plain
    入力が完了したら「作成する」をクリックします。
    確認画面が表示されたら、「はい」をクリックしてください。

    4. アップロードが完了するまで待ちます。

    f:id:cshintoidcf:20160524171936p:plain

    アップロードが完了すると、ステータスが「Uploaded」に変わります。
    図はアップロードしたボリュームの詳細画面です。
    アカウントBにOVAファイルがアップロードできました。 f:id:cshintoidcf:20160524172654p:plain

    仮想マシンにアタッチしてみる

    アップロードしたボリュームはそのまま仮想マシンへアタッチできます。

    1. アカウントBでアップロードしたボリュームの詳細画面で、「アタッチ」をクリックします。

    f:id:cshintoidcf:20160524172716p:plain

    2. アタッチ先の仮想マシンを選択して、「アタッチする」をクリックします。

    f:id:cshintoidcf:20160524172741p:plain

    アタッチが完了すると、アタッチ先仮想マシン名が表示され、ステータスもReadyに変わります。 f:id:cshintoidcf:20160524172759p:plain アタッチ完了後ボリューム詳細画面
    これでアカウントBの仮想マシンでボリュームが使えるようになりました。
    f:id:cshintoidcf:20160524172815p:plain

    CloudStack APIを実行してアップロードする

    次にCloudStackのAPI:uploadVolumeでのアップロード方法を紹介します。

    1. 利用可能なゾーンを確認する

    listZones やlistVolumesを実行し、IDCFクラウドのアップロード先のアカウントBで有効化されているゾーンを確認します。
    今回はuploadVolume実行後との比較のためlistVolumesを実行しました。
    エンドポイントは西日本リージョンを指定しています。

    $ cs listVolumes
    {
      "count": 2,     //作成済ボリュームは2台ある
      "volume": [
        {
          "account": "*************", 
          "attached": "2016-05-24T15:39:48+0900", 
          "created": "2016-05-24T15:35:31+0900", 
          (中略)
          "name": "UpLoad_Test001",     //先程IDCFクラウドコンソールからアップロードしたUpLoad_Test001
          "pcidevicepath": "*************", 
          "provisioningtype": "thin", 
          "quiescevm": false, 
          "size": 16106127360, 
          "state": "Ready", 
          "storagetype": "shared", 
          "tags": [], 
          "type": "DATADISK", 
          "virtualmachineid": "*************", 
          "vmdisplayname": "testS1-w", 
          "vmname": "testS1-w", 
          "vmstate": "Running", 
          "zoneid": "{augusta_zoneid}",     //augustaゾーンのID(ボリュームアップロード時に使用します)
          "zonename": "augusta"
        }, 
        {
          "account": "*************", 
          "chaininfo": "{\"diskDeviceBusName\":\"scsi0:0\",\"diskChain\":[\"[jw01v-str03-p01b-DS23] i-1953-20809-W1VM/ROOT-20809.vmdk\"]}", 
          "created": "2016-05-17T14:30:33+0900", 
          (中略)
          "name": "ROOT-20809", 
          "provisioningtype": "thin", 
          "quiescevm": false, 
          "serviceofferingdisplaytext": "1 CPU x 0.8 GHz / 1 GB RAM", 
          "serviceofferingid": "*************", 
          "serviceofferingname": "light.S1", 
          "size": 16106127360, 
          "state": "Ready", 
          "storagetype": "shared", 
          "tags": [], 
          "templatedisplaytext": "Root Disk: 15GB,(v2)", 
          "templateid": "*************", 
          "templatename": "CentOS 7.1 64-bit", 
          "type": "ROOT", 
          "virtualmachineid": "*************", 
          "vmdisplayname": "testS1-w", 
          "vmname": "testS1-w", 
          "vmstate": "Running", 
          "zoneid": "{augusta_zoneid}", 
          "zonename": "augusta"
        }
      ]
    }


    2. uploadVolumeを実行する

    必要なパラメータを指定してuploadVolumeを実行します。

    • パラメータ
      • zoneid:アップロード先ゾーンのid(listZones等で取得)
      • format:OVAを指定
      • name:任意のボリューム名(例ではUplLoad_Test002)
      • url:ボリュームのURL
        ※uploadVolumeでは、"http://・・・.ova" 形式のファイルのみご利用頂けます。
        例では準備にて記載している アカウントAで作成したボリュームを指定しています。


    uploadVolume実行例

    $ cs uploadVolume zoneid={augusta_zoneid} format=OVA name=UpLoad_Test002 url=http://X-X-X-X.systemip.idcfcloud.com/userdata/2e94a824-89fb-43cc-b177-31583d57a774.ova
    Polling result... ^C to abort
    {
      "accountid": "*************", 
      "cmd": "org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd", 
      "created": "2016-05-24T15:45:40+0900", 
      "jobid": "*************", 
      "jobprocstatus": 0, 
      "jobresult": {
        "volume": {
          "account": "*************", 
          "created": "2016-05-24T15:45:40+0900", 
          "destroyed": false, 
          "diskofferingdisplaytext": "Custom Disk", 
          "diskofferingid": "*************", 
          "diskofferingname": "Custom", 
          "domain": "*************", 
          "domainid": "*************", 
          "id": "*************", 
          "isextractable": true, 
          "name": "UpLoad_Test002", 
          "provisioningtype": "thin", 
          "quiescevm": false, 
          "size": 0, 
          "state": "UploadNotStarted", 
          "status": "", 
          "storagetype": "shared", 
          "tags": [], 
          "type": "DATADISK", 
          "zoneid": "{augusta_zoneid}", 
          "zonename": "augusta"
        }
      }, 
      "jobresultcode": 0, 
      "jobresulttype": "object", 
      "jobstatus": 1, 
      "userid": "*************"
    }


    ステータスが"UploadNotStarted"となっていますが、listVolumesを実行すると、アカウントBの指定のゾーンに正常にアップロードされていることが確認できます。

    $cs listVolumes
    {
      "count": 3,     //1台アップロードしたため、作成済ボリューム台数が3になった
      "volume": [
        {
          "account": "*************", 
          "created": "2016-05-24T15:45:40+0900", 
          (中略) 
          "name": "UpLoad_Test002",     //APIからアップロードしたボリューム
          "provisioningtype": "thin", 
          "quiescevm": false, 
          "size": 16106127360, 
          "state": "Uploaded",          //ステータスがUploadedになっている
          "storagetype": "shared", 
          "tags": [], 
          "type": "DATADISK", 
          "zoneid": "{augusta_zoneid}", 
          "zonename": "augusta"
        }, 
        {
          "account": "*************", 
          "attached": "2016-05-24T15:39:48+0900", 
          "created": "2016-05-24T15:35:31+0900", 
          (中略) 
          "name": "UpLoad_Test001",     //IDCFクラウドコンソールからアップロードしたUpLoad_Test001
          "pcidevicepath": "*************", 
          "provisioningtype": "thin", 
          "quiescevm": false, 
          "size": 16106127360, 
          "state": "Ready", 
          "storagetype": "shared", 
          "tags": [], 
          "type": "DATADISK", 
          "virtualmachineid": "*************", 
          "vmdisplayname": "testS1-w", 
          "vmname": "testS1-w", 
          "vmstate": "Running", 
          "zoneid": "{augusta_zoneid}", 
          "zonename": "augusta"
        }, 
        {
          "account": "*************", 
          "chaininfo": "{\"diskDeviceBusName\":\"scsi0:0\",\"diskChain\":[\"[jw01v-str03-p01b-DS23] i-1953-20809-W1VM/ROOT-20809.vmdk\"]}", 
          "created": "2016-05-17T14:30:33+0900", 
          (中略)
          "name": "ROOT-20809", 
          "provisioningtype": "thin", 
          "quiescevm": false, 
          "serviceofferingdisplaytext": "1 CPU x 0.8 GHz / 1 GB RAM", 
          "serviceofferingid": "*************", 
          "serviceofferingname": "light.S1", 
          "size": 16106127360, 
          "state": "Ready", 
          "storagetype": "shared", 
          "tags": [], 
          "templatedisplaytext": "Root Disk: 15GB,(v2)", 
          "templateid": "*************", 
          "templatename": "CentOS 7.1 64-bit", 
          "type": "ROOT", 
          "virtualmachineid": "*************", 
          "vmdisplayname": "testS1-w", 
          "vmname": "testS1-w", 
          "vmstate": "Running", 
          "zoneid": "{augusta_zoneid}", 
          "zonename": "augusta"
        }
      ]
    }

    IDCFクラウドコンソールでも確認できます。 f:id:cshintoidcf:20160524172852p:plain

    (補足)CloudStack API実行環境について

    CloudStackAPI実行環境の構築方法はいくつかありますが、今回は以下の記事(Qiita)を参考にcsライブラリを使用しました。
    シンプルなCloudStack CLI/ライブラリ cs
    こちらも当社エンジニアが執筆しております♪

    詳細はQiitaの記事をご覧いただければと思いますが、環境構築方法を簡単にまとめますと次の様になります。

    • 使用環境
      • Mac OSX Yosemite10.10.5
    ①csライブラリインストール
    $which pip          //pipがインストールされているか確認
    $easy_install pip   //pipインストール
    $pip install cs     //csライブラリインストール

    ※pipはPythonを使用しているため 事前にPythonがインストールされているかご確認ください。


    ②.cloudstack.iniファイルの作成

    .cloudstack.iniファイルを新規に作成します。 .cloudstack.iniファイルに、次の様にIDCFクラウドアカウントのエンドポイント、APIキー、シークレットキーを記述して保存します。
    エンドポイント等は、IDCFクラウドコンソールの「コンピューティング」または「アカウント設定」> 「API」で確認することができます。

    $ vi .cloudstack.ini
    [cloudstack]
    endpoint = END_POINT //IDCFクラウドAPIエンドポイント
    key = API_KEY         //IDCFクラウドアカウントのAPIキー
    secret = SECRET_KEY   //IDCFクラウドアカウントのシークレットキー


    ③動作確認

    APIを正常に実行できるかどうか listZonesを実行して確認してみます。
    以下は、.cloudstack.iniでエンドポイントを西日本リージョンに指定した場合の実行例です。
    正常に完了すると augustaゾーンの情報が取得できます。

    $cs listZones
    {
      "count": 1, 
      "zone": [
        {
          "allocationstate": "Enabled", 
          "dhcpprovider": "VirtualRouter", 
          "id": "{augusta_zoneid}", 
          "localstorageenabled": true, 
          "name": "augusta", 
          "networktype": "Advanced", 
          "securitygroupsenabled": false, 
          "tags": [], 
          "zonetoken": "********"
        }
      ]
    }


    もし、下記の様なエラーがでたら、エラー内容に記載されている場所に.cloudstack.iniを移動させて再度実行してみてください。

    $ cs listZones
    Config file not found. Tried /{Path to .cloudstack.ini}/.cloudstack.ini, /{Path to cloudstack.ini}/cloudstack.ini


    おわりに

    IDCFクラウドコンソール、CloudStack APIを用いた外部でボリュームアップロード方法をご紹介しました。
    IDCFクラウドへの移行等の際に是非ご活用ください。

    ユーザーによるIDCFクラウド使いこなしブログご紹介! 〜ワンコイン(500円)クラウド編〜

    クラウド ワンコイン ブログまとめ

    こんにちは&はじめまして!オンライン開発部インサイドセールス担当の諌山です。 オンライン経由でIDCFクラウドをご利用いただいているお客様へのご提案・ご案内を担当しています♪ 何かお困りごとがありましたら、お気軽にインサイドセールスグループ宛にお問合せください!   

    さて、先日2/1(月)と2/16(火)に日本経済新聞本誌で「時代は、ワンコインクラウド。」としてIDCFクラウドの全面広告を出稿したのですが、みなさんご覧いただけましたでしょうか?!   

    f:id:hisayama0904:20160222104254p:plain     

    こんなに "ワンコイン推し!" なのはいいのだけれど、実際に「ワンコイン=500円」でどこまで使い倒せるのか?! ユーザー様にブログで自慢していただきましたので、厳選した記事をいくつかご紹介させていただきます🎶ヽ(*´∀`)ノ    

        

    「ワンコイン=500円」クラウド使いこなしブログ まとめ

    「1周年」 -KEi’s Log

    f:id:hisayama0904:20160222135848p:plain

     http://31kish.meltaba.com/2015-11-10/

    こちらのユーザー様は1台でWebサーバー&メールサーバーを動かしてるようです。 Minecraft用のサーバーとしてご利用いただいているお客様も多く、ワンコインでも「パワフル」に使いこなしていただけているようです!   

    IDCFクラウドのCentOS7でSwapを使う -いなばメモ

    f:id:hisayama0904:20160224100313p:plain

     http://blog.1783.org/2015/05/idcfcloud-swap/

    先ほどの記事でもCPUの性能についてご意見いただいていますが、ワンコインクラウドのCPU(1コア)よりも性能が欲しい方はSwap領域を作成し駆使しているようです。CentOS7での作成方法を紹介いただいています。

    ※IDCFクラウドの標準機能ではSwap領域の提供はありません。   

    「IDCFクラウドで自分だけのHerokuを構築する」 -もくもくブログ

    f:id:hisayama0904:20160222140436p:plain

     http://blog.muuny-blue.info/c3daba8ba04565423e12eb8cb6237b46.html

    この方はDokkuをIDCFクラウドで構築し、Herokuからいくつかのアプリを乗せ替えて利用されているようです。

     IDCFクラウド借りました

    初めてご利用いただく方からよくご質問を受けるのが、仮想ルーターの設定で、FirewallとPort forwardingの概念。 このエントリーでは構成図をもとに、わかりやすく解説されていて、ありがたいです★またこちらでもSwap領域の作り方を伝授。(DokkuはDockerベースなのでSwap領域があったほうがよさそうとのこと。)

     IDCFクラウドの一番安いのでDokkuを使う

    DNSの設定も含めた構築手順の詳細を公開しています。さらにPythonのサンプルアプリで一緒にインストールしてみましょう!   

    法人での使いこなし術🎶

    個人ユーザー様の使いこなし術をご紹介しましたが、法人様でももちろん!使いこなしていただいています。

    まだAWSのみに頼って生きてるの?複数のクラウド利用で、大幅コストダウンした話 -Qiita: @appwatcher

    qiita.com

    この方は個人でご利用いただいていたあとに所属する法人様でもIDCFクラウドを採用いただいたようです。 他社のクラウドサービスを使ってサービスを立ち上げた後、ユーザー様が想定よりも増えてその分費用も増大に!(汗)嬉しい悲鳴ということでしょうか。。 そこで弊社サービスの特徴(ネットワーク費用の定額プラン)を活かした構成を組み直して1/10にコストを抑えたそうです。
    移設は3人/日程度というスピードで達成し、サーバー側はAnsibleのレシピを少し修正したくらいとか…!DBはデータアクセスをAPI化されたようですが、Goで実装していたため型の安全性が生きたようです。
    スピード移行のためには、やはり新規サービス立ちあげ時の設計がポイントのよう。「自分のサービス形態の特質に合わせて、ライブラリやサービスの境界を分離できるようにしておく」など、事前に検討しておくことをいくつかアドバイスされていますので、これから新規サービスで利用検討いただいている方はぜひご参考にしてみてください!

    マルチクラウドユーザーとしてのご意見や、一番苦労された部分も詳しく伺ってみたいです!
       

    まとめ

    いかがでしたか?? やはり個人ユーザーの方はゲームなどでのProxyサーバー、ご自身の開発環境にご利用いただいている場合が多いようですね。 まだまだ、IDCFクラウドを独自の方法で使いこなしているよ!という方もいらっしゃるかと思いますので、ぜひ教えてください! また次の機会にこちらでまとめさせていただきます!   


     ◆ 「ブログ書いたよ!」お問い合わせ先 ◆

      株式会社IDCフロンティア   オンライン開発部 インサイドセールスグループ   inquiry@idcf.jp


    ぜひぜひ、お待ちしておりますよーーー!!! では、またお会いしましょう〜!゚・:.。..。.:・゜(´∀`)。. .。.:・゜゚・*   

    ▼ ワンコインキャンペーン実施中! << 期間:2016年2月1日〜2016年3月16日まで >>

    www.idcf.jp

       

    関連記事

    Yahoo!ビッグデータインサイト + オープンソースre:dashで、 アクセスログ可視化ダッシュボードを作ってみた!

    Yahoo!ビッグデータインサイト ビッグデータ

    こんにちは!ビッグデータ戦略グループの朴です。以前、Yahoo!ビッグデータインサイト(以降、YBI)の基本的な使い方を解説した 「Yahoo!ビッグデータインサイトめちゃ楽ガイド」を紹介しました。
    めちゃ楽ガイドでは、データのインポート・分析・出力について解説しましたが、今回はその次のステップとして 「分析結果を可視化する」方法として、YBIとオープンソースBIツールre:dashを組み合わせてWebサイトのアクセスログを可視化するダッシュボードの作成方法を紹介します!

    f:id:jpark:20160224161620p:plain

                  re:dashのダッシュボード

    YBIは、大量のデータを収集・保存・分析できるプラットフォームサービスで、様々なツールとの連携性に優れています。 今回は、データの可視化に焦点を置いてre:dashと連携する方法を紹介します。

    re:dashはオープンソースのBIツールとして、様々なデータソースに対応しています。 クエリを設定しておき、その結果をデータリスト化やグラフ化してくれます。 YBIユーザーにとって、YBI専用のプラグインが用意されているのでYBIと連携しやすいことが大きなメリットです。

    (re:dashの公式サイトはこちら)
    re:dashについて詳しく知りたい方は上記の公式サイトをご参考ください。

    前置きが長くなりましたが、さっそくWebサイトのアクセスログ可視化ダッシュボードを作ってみましょう!

    ■前提条件

    • YBIのアカウントを持っている。
    • YBIの基本的なWeb UIを操作できる。
    • re:dash環境が構築されている。
    • 基本的なSQL文を書ける。

    re:dash環境の構築に時間がかかるかもしれません。このブログでは、re:dashのインストールに関する説明は省略しますが、詳しくは下記URLをご参照ください。m(__)m

    re:dashのインストール関してはこちら

    ■流れ

    Step 1. re:dashとYBIを繋ぐ
    Step 2. re:dashからYBIへクエリを発行する
    Step 3.クエリ結果をチャート化する
    Step 4.チャートをダッシュボードにアップロードする

    これから、手順の説明が長くなりますが、最後までやってみましょう!

    ■Step1. re:dashとYBIを繋ぐ

    Step1では、re:dashからYBIに繋げるための設定情報を記入して、YBIと繋ぎます。

    まず、re:dashにアクセスして、ログインしてください。

    f:id:jpark:20160224163839p:plain

    赤い枠の「Data Sources」をクリックします。

    f:id:jpark:20160224164731p:plain

    「Add Data Source」をクリックします。

    f:id:jpark:20160224164945p:plain

    下図のような入力画面が表示されます。
    YBIではTreasure Data社が提供するプラグインをそのまま使えるので、「Type」で「TreasureData」を選択します。

    f:id:jpark:20160224165012p:plain

    ● 入力項目

    • Name:自分がわかりやすいデータソース名を入力します。
    • Apikey:YBIのAPI Keyを入力します。
    • Database Name:「sample_datasets」を入力します。今回は、YBIに既に入っている
      アクセスログのサンプルデータを使います。
    • Endpoint:YBIのエンドポイントである「https://ybi.jp-east.idcfcloud.com/」を入力します。
    • Type:「presto」で入力します。デフォルトはhiveですが、今回はprestoを使います。
       (YBIでPrestoが利用できない場合には、hiveを入力します)

    これで、re:dashとYBIを繋ぐ設定が完了しました!すごく簡単ですよね?笑

    ■ Step 2. re:dashからYBIへクエリを発行する

    Step2では、re:dashでクエリを作成して、YBIのデータベース上にあるアクセスログの サンプルデータに対してクエリを発行します。 (YBIにある「sample_datasets」というデータベース内の「www_access」というテーブルのデータを使います)


    「New Query」をクリックします。

    f:id:jpark:20160224165640p:plain

    クエリ作成画面が表示されます。

    f:id:jpark:20160224165707p:plain

    早速クエリを書いてみましょう。
    時間毎のPage View数を集計する基本的なクエリを書いたら、「Execute」をクリックして
    クエリを実行します。

    下記のように、実行結果が表示されます。

    • 画面の上のクエリの名前を「Page View」で入力します。
    • スケジュール機能を追加します。今回は、毎日00:00時にクエリが実行されるように
      設定します。
    • 問題なければ、「Save」をクリックして保存します。

    f:id:jpark:20160224170656p:plain

    Step 3. クエリ結果をチャート化する。

    Step3では、実行したクエリの結果をチャート化して、ダッシュボードにアップロードします。

    「New Visualization」をクリックします。

    f:id:jpark:20160224171049p:plain

    チャートの種類は棒型、円型、折れ線型などいろいろ選べます。今回は、時間別のアクセス数推移をみるために、折れ線チャートを選びます。X軸に「hour」をY軸に「pv」を選択すると、下記のようなグラフが表示されます。問題なければ、「Save」をクリックします。

    f:id:jpark:20160224171137p:plain

    ■Step 4 チャートをダッシュボードにアップロードする

    Step4ではStep3で作成したチャートをダッシュボードにアップロードします。

    「New Dashboard」をクリックします。

    f:id:jpark:20160224171501p:plain

    ダッシュボードには、様々なチャートを一つの画面でまとめて表示することができます。今回は、Webサイトのアクセスに関するチャートをダッシュボードにまとめて表示するため、ダッシュボードの名前に「Website Analysis」と入力し、「Save」をクリックして保存します。

    f:id:jpark:20160224171550p:plain

    下図のような画面が表示されます。チャートをアップロードするために、「Add Widget」を
    クリックします。

    f:id:jpark:20160224171621p:plain

    チャートは作成したクエリに紐付いているので、Step2で作成したクエリである「Page View」を入力し、「Add to Dashboard」をクリックします。

    f:id:jpark:20160224171703p:plain

    ダッシュボードにチャートが追加されました。

    f:id:jpark:20160224171726p:plain

    「Page View」だけでは、寂しいので、時間毎のUU数、PVトップ10のページなどを 表示する
    チャートも追加してみました。

    f:id:jpark:20160224171744p:plain

    Webサイトのアクセス状況を把握するために、PV、UU、各PathのPV数という三つの チャートをダッシュボードにまとめて表示することができました。

    最後に、YBIにログインしてみます。 re:dashから発行したクエリが実行されたことが、YBI
    ダッシュボードからも確認することができます!

    f:id:jpark:20160224171813p:plain

    ■おわりに

    YBIとre:dashを使ってダッシュボードを構築する方法を紹介いたしました。 分析結果を可視化するための、初めのステップとして、YBIとの連携が簡単なオープンソースのre:dashを使ってみるのはいかがでしょうか。 データ分析結果の可視化について参考になれば幸いです。

    関連記事

    WindowsのイベントログをfluentdでYBIへインポートする (後編)

    Yahoo!ビッグデータインサイト データ分析 ビッグデータ

    ビッグデータ・ソリューションアーキテクトの高階(takashina)です。 大寒波、やっと北の方へ帰ってくれましたね。冬の初めに暖冬予想が出ていたのは何だったんだ..と思ってしまいます。都内の陽当たりの悪い路地では雪が凍ったまま残っています。なんでも沖縄や奄美でも雪が降ったとか、びっくりです。(◎_◎;) 最近の寒暖差で体調を崩してしまった方、ご自愛ください。

    さて、前回の記事に続いて、WindowsのイベントログをfluentdでYahoo!ビッグデータインサイト(以下「YBI」)へインポートする手順のご紹介 後編です。
    winevt_to_YBI

    前回の記事で、fluentdがWindowsサービスとして起動できるところまでを確認しました。 後編では下の図のように、集めたWindowsイベントログをYBIへインポートする手順を紹介します。
    winevttoYBI2

    前回のおさらい

    1. Rubyのインストール
    2. Gitのインストール
    3. fluentdのインストール
    4. fluentdの起動テスト
    5. fluentdのサービス登録
    6. サービスとして起動テスト

    fluentdで使うコンフィグファイルとログファイルは次のものを使っています。

    • コンフィグファイル: C:/fluent/conf/fluent.conf
    • ログファイル: C:/fluent/log/fluent.log

    7. Windowsイベントログを集める

    Windowsイベントログをfluentdで収集するための設定と試験を行います。 まずは必要になるfluentdのプラグインを2つインストールします。

    7-1. fluent-plugin-winevtlogのインストール

    fluentdは、様々なデータソースからプラグイン経由でデータをinputして、様々な宛先にプラグイン経由でデータをoutputするツールです。 今回は、Windowsイベントログをinputするのに使うfluentdのプラグインをインストールします。

    C:\>gem install fluent-plugin-winevtlog
    Fetching: win32-eventlog-0.6.5.gem (100%)
    Successfully installed win32-eventlog-0.6.5
    Fetching: fluent-plugin-winevtlog-0.0.3.gem (100%)
    Successfully installed fluent-plugin-winevtlog-0.0.3
    Parsing documentation for win32-eventlog-0.6.5
    unable to convert "\xE3" from ASCII-8BIT to UTF-8 for CHANGES, skipping
    Installing ri documentation for win32-eventlog-0.6.5
    Parsing documentation for fluent-plugin-winevtlog-0.0.3
    Installing ri documentation for fluent-plugin-winevtlog-0.0.3
    Done installing documentation for win32-eventlog, fluent-plugin-winevtlog after 0 seconds
    2 gems installed

    7-2. fluent-plugin-record-modifierのインストール

    これは、fluentdのフィルタプラグインの1つで、レコードの内容を修正することができるプラグインです。 日本語環境のWindowsであれば、イベントログはWindows-31Jの文字コードになりますが、YBIへインポートする際にUTF-8にしておくために、今回はこのプラグインを使用します。

    C:>gem install fluent-plugin-record-modifier
    Fetching: uuidtools-2.1.5.gem (100%)
    Successfully installed uuidtools-2.1.5
    Fetching: fluent-mixin-config-placeholders-0.3.1.gem (100%)
    Successfully installed fluent-mixin-config-placeholders-0.3.1
    Fetching: fluent-plugin-record-modifier-0.4.0.gem (100%)
    Successfully installed fluent-plugin-record-modifier-0.4.0
    Parsing documentation for uuidtools-2.1.5
    Installing ri documentation for uuidtools-2.1.5
    Parsing documentation for fluent-mixin-config-placeholders-0.3.1
    Installing ri documentation for fluent-mixin-config-placeholders-0.3.1
    Parsing documentation for fluent-plugin-record-modifier-0.4.0
    Installing ri documentation for fluent-plugin-record-modifier-0.4.0
    Done installing documentation for uuidtools, fluent-mixin-config-placeholders, fluent-plugin-record-modifier after 0 seconds
    3 gems installed

    なお今回は使いませんが、このプラグインでは、元々のレコードにはない項目をfluentdで追加したり、不要な項目を削除したりもできるようです。

    7-3. fluent.confの設定

    Windowsイベントログをfluentdで捕捉してoutputファイルに書き出せるかどうか、確認してみましょう。 fluent.confを下記のように設定します。

    <source>
      type winevtlog
      channel application,security
      pos_file C:/fluent/log/eventlog.pos
      read_interval 5
      tag winevt.raw
    </source>
    
    <match winevt.raw>
      type record_modifier
      char_encoding Windows-31J:utf-8
      tag winevt.filtered
    </match>
    
    <match winevt.filtered>
      type file
      path C:/fluent/test/output
      time_slice_format %Y%m%d_%H%M%S
      time_slice_wait 5s
    </match>

    上記設定内容を説明すると、sourceでinputをWindowsイベントログに指定し、ApplicationログとSecurityログを取得するようにしています。 次にmatch winevt.rawで、文字コードをWindows-31JからUTF-8へ変換しています。 最後にmatch winevt.filteredで、outputファイルへ書き出す指定をしています。

    設定が終わったら、管理ツールのサービスから「Fluentd Windows Service」を開始し、fluent.logのログファイルを確認しておきましょう。設定に問題がなければ以下のように表示されるはずです。

    2016-01-21 10:42:31 +0900 [info]: reading config file path="C:/fluent/conf/fluent.conf"
    2016-01-21 10:42:31 +0900 [info]: starting fluentd-0.12.15
    2016-01-21 10:42:31 +0900 [info]: spawn command to main (windows) : C:/Ruby22-x64/bin/ruby.exe 'C:/Ruby22-x64/bin/fluentd' -c C:/fluent/conf/fluent.conf -o C:/fluent/log/fluent.log -x fluentdwinsvc --no-supervisor
    2016-01-21 10:42:31 +0900 [info]: reading config file path="C:/fluent/conf/fluent.conf"
    2016-01-21 10:42:31 +0900 [info]: starting fluentd-0.12.15 without supervision
    2016-01-21 10:42:31 +0900 [info]: gem 'fluent-mixin-config-placeholders' version '0.3.1'
    2016-01-21 10:42:31 +0900 [info]: gem 'fluent-plugin-record-modifier' version '0.4.0'
    2016-01-21 10:42:31 +0900 [info]: gem 'fluent-plugin-winevtlog' version '0.0.3'
    2016-01-21 10:42:31 +0900 [info]: gem 'fluentd' version '0.12.15'
    2016-01-21 10:42:31 +0900 [info]: adding match pattern="winevt.raw" type="record_modifier"
    2016-01-21 10:42:35 +0900 [info]: adding match pattern="winevt.filtered" type="file"
    2016-01-21 10:42:35 +0900 [info]: adding source type="winevtlog"
    2016-01-21 10:42:35 +0900 [info]: using configuration file: 
    <ROOT> <source> type winevtlog channel application,security pos_file C:/fluent/log/eventlog.pos read_interval 5 tag winevt.raw </source> <match winevt.raw> type record_modifier char_encoding Windows-31J:utf-8 tag winevt.filtered </match> <match winevt.filtered> type file path C:/fluent/test/output time_slice_format %Y%m%d_%H%M%S time_slice_wait 5s buffer_path C:/fluent/test/output.* </match> </ROOT>

    7-4. イベントログテスト

    管理者権限でコマンドプロンプトを立ち上げて、Windowsのeventcreateコマンドでログを書き込んでみます。

    C:\>eventcreate /ID 999 /L Application /SO EvtTest /T Information /D "テストメッセージ"
    
    成功: 種類が 'Information' のイベントが、'Application' ログ内に、'EvtTest' をソースとして作成されました。
    
    C:\>

    上手く行くと、C:/fluent/test/配下のoutputファイルに下記のようなログが書き込まれます。
    09_eventlog_test
    確認できたらFluentd Windows Serviceを一旦停止しておきましょう。

    8. YBIへログ転送

    前後編に分かれた手順もあともう少し。YBIへWindowsイベントログを転送します。

    8-1. fluent-plugin-tdのインストール

    まずは、YBIへログ転送できるようにするために、Treasure Dataアウトプットプラグイン(fluent-plugin-td)をインストールします。

    C:>gem install fluent-plugin-td
    Fetching: httpclient-2.5.3.3.gem (100%)
    Successfully installed httpclient-2.5.3.3
    Fetching: td-client-0.8.77.gem (100%)
    Successfully installed td-client-0.8.77
    Fetching: fluent-plugin-td-0.10.28.gem (100%)
    Successfully installed fluent-plugin-td-0.10.28
    Parsing documentation for httpclient-2.5.3.3
    Installing ri documentation for httpclient-2.5.3.3
    Parsing documentation for td-client-0.8.77
    Installing ri documentation for td-client-0.8.77
    Parsing documentation for fluent-plugin-td-0.10.28
    Installing ri documentation for fluent-plugin-td-0.10.28
    Done installing documentation for httpclient, td-client, fluent-plugin-td after 6 seconds
    3 gems installed

    8-2. fluent.confの設定

    YBIへログ転送できるよう7-3で変更した設定をさらに変更します。 fluent.confを下記のように設定します。

    <source>
      type winevtlog
      channel application,security
      pos_file C:/fluent/log/eventlog.pos
      read_interval 5
      tag winevt.raw
    </source>
    
    <match winevt.raw>
      type record_modifier
      char_encoding Windows-31J:utf-8
      tag td.testdb.windows_eventlog
    </match>
    
    <match td.*.*>
      type copy
      <store>
        type file
        path C:/fluent/test/output
        time_slice_format %Y%m%d_%H%M
        time_slice_wait 5s
      </store>
      <store>
        type tdlog
        apikey xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        endpoint ybi.jp-east.idcfcloud.com
        auto_create_table
        buffer_type file
        buffer_path C:/fluent/buffer/ybi
        flush_interval 60s
        use_ssl true
      </store>
    </match>

    match td..が、YBIへログを転送する設定です。 今回は、YBIへログを送りつつ、ローカルのoutputファイルでもログ出力が確認できるように、type copyを使ってログを2箇所にstoreする設定をしています。 apikeyはYBIのWrite-Only API keyを使いましょう。 endpointを明記するのを忘れずに! インポート先となるYBI上のDBとテーブルは、td..で指定します。 上記例ではmatch winevt.rawの中でtag td.testdb.windows_eventlogと指定しているので、DB:testdb、テーブル:windows_eventlogがインポート先となります。

    設定が終わったら、管理ツールのサービスから「Fluentd Windows Service」を開始し、fluent.logのログファイルを確認しておきましょう。

    2016-01-21 12:21:50 +0900 [info]: reading config file path="C:/fluent/conf/fluent.conf"
    2016-01-21 12:21:50 +0900 [info]: starting fluentd-0.12.15
    2016-01-21 12:21:50 +0900 [info]: spawn command to main (windows) : C:/Ruby22-x64/bin/ruby.exe 'C:/Ruby22-x64/bin/fluentd' -c C:/fluent/conf/fluent.conf -o C:/fluent/log/fluent.log -x fluentdwinsvc --no-supervisor
    2016-01-21 12:21:51 +0900 [info]: reading config file path="C:/fluent/conf/fluent.conf"
    2016-01-21 12:21:51 +0900 [info]: starting fluentd-0.12.15 without supervision
    2016-01-21 12:21:51 +0900 [info]: gem 'fluent-mixin-config-placeholders' version '0.3.1'
    2016-01-21 12:21:51 +0900 [info]: gem 'fluent-plugin-record-modifier' version '0.4.0'
    2016-01-21 12:21:51 +0900 [info]: gem 'fluent-plugin-td' version '0.10.28'
    2016-01-21 12:21:51 +0900 [info]: gem 'fluent-plugin-winevtlog' version '0.0.3'
    2016-01-21 12:21:51 +0900 [info]: gem 'fluentd' version '0.12.15'
    2016-01-21 12:21:51 +0900 [info]: adding match pattern="winevt.raw" type="record_modifier"
    2016-01-21 12:21:54 +0900 [info]: adding match pattern="td.*.*" type="copy"
    2016-01-21 12:21:54 +0900 [info]: adding source type="winevtlog"
    2016-01-21 12:21:54 +0900 [info]: using configuration file: 
    <ROOT> <source> type winevtlog channel application,security pos_file C:/fluent/log/eventlog.pos read_interval 5 tag winevt.raw </source> <match winevt.raw> type record_modifier char_encoding Windows-31J:utf-8 tag td.testdb.windows_eventlog </match> <match td.*.*> type copy <store> type file path C:/fluent/test/output time_slice_format %Y%m%d_%H%M time_slice_wait 5s buffer_path C:/fluent/test/output.* </store> <store> type tdlog apikey xxxxxx endpoint ybi.jp-east.idcfcloud.com auto_create_table buffer_type file buffer_path C:/fluent/buffer/ybi flush_interval 60s use_ssl true </store> </match> </ROOT>

    8-3. YBIへイベントログ転送テスト

    さあ、いよいよ、YBIへログが転送できるかどうか、最後のテストをやっていきます。

    7-4と同様、Windowsのeventcreateコマンドでログを書き込んでみます。

    c:\>eventcreate /ID 999 /L Application /SO EvtTest /T Information /D "テストメッセージ"
    
    成功: 種類が 'Information' のイベントが、'Application' ログ内に、'EvtTest' をソースとして作成されました。
    
    c:\>

    outputファイルにログ出力を確認できたら、YBIでも確認してみましょう。
    10_ybiwebui
    出力できましたね!

    動作確認した環境まとめ

    今回、動作確認した環境をまとめて記載しておきます。

    • Windows Server 2012 R2 Std (64-bit)
    • Ruby 2.2.3 (x64)
    • Git 2.6.3 (64-bit)
    • Ruby gem
      • fluent-plugin-record-modifier (0.4.0)
      • fluent-plugin-td (0.10.28)
      • fluent-plugin-winevtlog (0.0.3)
      • fluentd (0.12.15)
      • msgpack (0.5.12)
      • td-client (0.8.77)

    終わりに

    2回に渡って、WindowsイベントログをYBIへインポートする手順を紹介しました。いかがでしたか?

    Windowsのイベントログをインポートできるようになると、例えばWindowsサーバのセキュリティログやアプリケーションログをYBIにためて分析に使ったり、warningのログを拾って対処をすぐにできるようにしたり、いろいろなログの活用方法が考えられそうです。 みなさんも、YBIによるログの収集と分析を試してみてください。

    Yahoo!ビッグデータインサイトが気になる方はこちらから!
    YBI

    それでは、ごきげんよう!

    参考記事

    今回の投稿作成にあたり、次の記事を参考にさせていただきました。感謝申し上げます。m( )m

    <関連記事>

    WindowsのイベントログをfluentdでYBIへインポートする (前編)

    Yahoo!ビッグデータインサイト データ分析 ビッグデータ

    ビッグデータ・ソリューションアーキテクトの高階(たかしな)です。 新年あけましておめでとうございます、ってもう月末だろが! もうすぐ豆まきだろうが!

    私の所属するビッグデータ戦略グループも発足から早一年が経ちました。 昨年は、おかげさまでたくさんのみなさんにビッグデータ分析基盤サービスの「Yahoo!ビッグデータインサイト」(略してYBI)を知っていただいたり利用していただいたりしたのですが、まだまだ認知向上が足りないなーと感じています。 もっともっと、YBIの良さやメリットを知っていただかなきゃあいけませんね。

    YBIは、fluentdを使ったデータインポートが非常にやりやすいソリューションなので、Linux系OS環境からのデータインポートは結構使われています。このようにOSSを使う場合、Windowsサーバーは置いてけぼりになってしまう事が多いですよね..。そのままだと意外と見づらいイベントログ、何か一括管理できるいい方法はないものか..? そんなWindowsサーバー管理者のみなさん、安心してください!インポートできますよ! 実は(と言うことでもないが)Windows環境からだってfluentdでインポートできるようになっているんです。
    winevt_to_YBI

    そこで今回はIDCFクラウド上に作ったWindows Server 2012 R2 Std (64-bit)のサーバーで、fluentdをサービスとして動作させ、Windowsイベントログをfluentdで収集し、YBIへインポートする手順をご紹介します。

    YBI関連でお客さんとお話ししている際に「Windowsのイベントログをインポートしたい」という声があり、Web上の記事から調べてみるとnxlogというソフトウェアを使う方法がありました。(fluentdの公式サイトでも紹介) また、fluentdがWindowsを正式サポートしたという記事も見つけました。そこで「fluentdだけでYBI(TD)へデータインポートできたらもっと便利だな」と考え、いろいろ試したのが今回の記事を書いたきっかけです。 この記事が悩まれている方の参考になれば嬉しいです。
    winevttoYBI1

    今回の記事、内容が長いので前後編の2回に分けます。
    前編は上の図の通り、必要なソフトウェアのインストールと、fluentdをWindowsサービスとして動かすまでの紹介です。

    1. Rubyのインストール

    まず、fluentdを動かすためにRubyをインストールします。
    http://rubyinstaller.org/downloads/

    ここから、「Ruby 2.2.3 (x64)」をダウンロードしてインストールします。 途中、「Rubyの実行ファイルへ環境変数PATHを設定する」にチェックしましょう。
    01_ruby_install

    続いて、上記リンクからDevKitをダウンロードして解凍します。
    ダウンロードするファイルは Devkit-mingw64-64-4.7.2-20130224-1432-sfx.exe
    ここでは、解凍先を「C:\ruby」にします。
    02_extract_to

    コマンドプロンプトを起動し、DevKitを解凍したフォルダへ移動して、次のコマンドを実行します。

    C:\Users\Administrator>cd C:\ruby
    C:\ruby> ruby dk.rb init
    
    Initialization complete! Please review and modify the auto-generated
    'config.yml' file to ensure it contains the root directories to all
    of the installed Rubies you want enhanced by the DevKit.

     

    「C:\ruby\config.yml」を開き、「- C:/Ruby22-x64」を追記します。
    03_ruby_configyml

    仕上げに次のコマンドを実行します。

    C:\ruby>ruby dk.rb install
    [INFO] Updating convenience notice gem override for 'C:/Ruby22-x64'
    [INFO] Installing 'C:/Ruby22-x64/lib/ruby/site_ruby/devkit.rb'

    これで、Rubyのインストールができました。 コマンドプロンプトは一旦閉じておきましょう。

    2. Gitのインストール

    Windows版のGitをダウンロードしてインストールします。
    http://www.git-scm.com/downloads
    ここから「Git-2.7.0-64-bit.exe」をダウンロードしてインストールします。 途中、「Use Git from the Windows Command Prompt」を選択します。それ以外はデフォルトのままでOKです。
    04_git_install

    Gitのインストールはこれだけです。

    3. fluentdのインストール

    次はfluentdのgemを作成して、インストールしていきます。コマンドプロンプトを立ち上げ直して、以下の通り作業していきます。

    C:\Users\Administrator>cd C:\
    
    C:\>git clone https://github.com/fluent/fluentd.git
    Cloning into 'fluentd'...
    remote: Counting objects: 14533, done.
    remote: Compressing objects: 100% (16/16), done.
    remote: Total 14533 (delta 6), reused 0 (delta 0), pack-reused 14515
    Receiving objects: 100% (14533/14533), 13.22 MiB | 5.53 MiB/s, done.
    Resolving deltas: 100% (8409/8409), done.
    Checking connectivity... done.

    fluentdをWindowsのサービスとして登録するためには、windowsブランチの内容が必要なので、ブランチを変えます。

    C:\>cd fluentd
    
    C:\fluentd>git checkout windows
    Branch windows set up to track remote branch windows from origin.
    Switched to a new branch 'windows'

    続いて、fluentdのgemを作っていきます。まずbundlerをgemでインストールします。

    C:\fluentd>gem install bundler
    Fetching: bundler-1.11.2.gem (100%)
    Successfully installed bundler-1.11.2
    Parsing documentation for bundler-1.11.2
    Installing ri documentation for bundler-1.11.2
    Done installing documentation for bundler after 7 seconds
    1 gem installed

    fluentdのbundle作業。

    C:\fluentd>bundle
    Fetching gem metadata from https://rubygems.org/.........
    Fetching version metadata from https://rubygems.org/..
    Resolving dependencies...
    Installing rake 10.5.0
    Installing cool.io 1.4.3 with native extensions
    Installing ffi 1.9.10
    Installing flexmock 1.3.3
    Installing http_parser.rb 0.6.0 with native extensions
    Installing json 1.8.3 with native extensions
    Installing msgpack 0.5.12 with native extensions
    Installing sigdump 0.2.3
    Installing string-scrub 0.0.5 with native extensions
    Installing thread_safe 0.3.5
    Installing win32-api 1.5.3
    Installing yajl-ruby 1.2.1 with native extensions
    Installing multi_json 1.11.2
    Installing parallel 1.6.1
    Installing power_assert 0.2.7
    Installing rr 1.1.2
    Installing simplecov-html 0.5.3
    Installing timecop 0.8.0
    Using bundler 1.11.2
    Installing win32-ipc 0.6.6
    Installing win32-service 0.8.7
    Installing tzinfo 1.2.2
    Installing windows-api 0.4.4
    Installing parallel_tests 2.2.2
    Installing test-unit 3.1.7
    Installing simplecov 0.6.4
    Installing win32-event 0.6.3
    Installing tzinfo-data 1.2015.7
    Installing windows-pr 1.2.4
    Installing test-unit-rr 1.0.5
    Using fluentd 0.12.15 from source at `.`
    Bundle complete! 9 Gemfile dependencies, 31 gems now installed.
    Use `bundle show [gemname]` to see where a bundled gem is installed.

    fluentd 0.12.15のgemを作成します。

    C:\fluentd>bundle exec rake build
    fluentd 0.12.15 built to pkg/fluentd-0.12.15.gem.

    そしてfluentdのgemをインストール!

    C:\fluentd>gem install pkg/fluentd-0.12.15.gem -no-ri -no-rdoc
    Successfully installed fluentd-0.12.15
    Parsing documentation for fluentd-0.12.15
    Installing ri documentation for fluentd-0.12.15
    Done installing documentation for fluentd after 4 seconds
    1 gem installed

    fluentdのgemがインストールできたら、パスの通っているフォルダ(ここではC:\Ruby22-x64\bin)へ必要なファイルをコピーしておきます。

    C:\fluentd>copy C:\Ruby22-x64\lib\ruby\gems\2.2.0\bin\fluent* C:\Ruby22-x64\bin
    C:\Ruby22-x64\lib\ruby\gems\2.2.0\bin\fluent-cat
    C:\Ruby22-x64\lib\ruby\gems\2.2.0\bin\fluent-cat.bat
    C:\Ruby22-x64\lib\ruby\gems\2.2.0\bin\fluent-debug
    C:\Ruby22-x64\lib\ruby\gems\2.2.0\bin\fluent-debug.bat
    C:\Ruby22-x64\lib\ruby\gems\2.2.0\bin\fluent-gem
    C:\Ruby22-x64\lib\ruby\gems\2.2.0\bin\fluent-gem.bat
    C:\Ruby22-x64\lib\ruby\gems\2.2.0\bin\fluentd
    C:\Ruby22-x64\lib\ruby\gems\2.2.0\bin\fluentd.bat
            8 個のファイルをコピーしました。

    インストール関連はここまでで終了、続いて動作テストをしていきましょう。

    4. fluentdの起動テスト

    まずは、インストールしたfluentdが動作するかどうか、サンプルのコンフィグを使って確認します。

    C:\>fluentd -c C:\/fluentd/example/in_forward.conf
    2016-01-21 09:48:36 +0900 [info]: reading config file path="C:\/fluentd/example/in_forward.conf"
    2016-01-21 09:48:36 +0900 [info]: starting fluentd-0.12.15
    2016-01-21 09:48:36 +0900 [info]: spawn command to main (windows) : C:/Ruby22-x64/bin/ruby.exe 'C:/Ruby22-x64/bin/fluentd' -c C:\/fluentd/example/in_forward.conf --no-supervisor
    2016-01-21 09:48:37 +0900 [info]: reading config file path="C:\/fluentd/example/in_forward.conf"
    2016-01-21 09:48:37 +0900 [info]: starting fluentd-0.12.15 without supervision
    2016-01-21 09:48:37 +0900 [info]: gem 'fluentd' version '0.12.15'
    2016-01-21 09:48:37 +0900 [info]: adding match pattern="test" type="stdout&quot;
    2016-01-21 09:48:37 +0900 [info]: adding source type="forward"
    2016-01-21 09:48:37 +0900 [info]: using configuration file: 
    <ROOT> <source> type forward </source> <match test> type stdout </match> </ROOT> 2016-01-21 09:48:37 +0900 [info]: listening fluent socket on 0.0.0.0:24224

    動作しましたね。Ctrl-cで終了しましょう。

    5. fluentdのサービス登録

    Windowsサービスとして登録します。 管理者権限で立ち上げたコマンドプロンプトから次のコマンドを実行します。

    C:\>fluentd --reg-winsvc i

    成功しても何も表示されません。 管理ツールのサービスで確認してみましょう。「Fluentd Windows Service」として登録されています。
    05_windows_service

    06_windows_service2

    ちなみに、サービス登録を削除したい場合は、管理者権限で立ち上げたコマンドプロンプトから

    C:\>fluentd --reg-winsvc u

    です。やはり成功しても何も表示されません。

    続いて、fluentdのオプションを登録していきます。 fluentdはC:\fluentd配下にインストールされています。ここから先の設定ファイルやログファイルは、C:\fluent配下に必要なフォルダを作成して行っていきます。

    C:\>mkdir fluent
    C:\>cd fluent
    C:\fluent>mkdir conf log test

    今回オプションで指定する内容は下記のとおりです。 ここから先、コンフィグファイルとログファイルは下記のものを使います。

    • コンフィグファイル: C:/fluent/conf/fluent.conf
    • ログファイル: C:/fluent/log/fluent.log

    オプション設定は次のコマンドで実行します。

    C:>fluentd --reg-winsvc-fluentdopt '-c C:/fluent/conf/fluent.conf -o C:/fluent/log/fluent.log'

    やっぱり成功しても何も表示されません。

    6. サービスとして起動テスト

    さて、Windowsサービスとしてfluentdが起動できるかどうか、テストしていきましょう。

    まず、コンフィグファイル(fluent.conf)を下記のように設定します。in_forwardで受け付けてファイルに書き出すだけの設定です。

    <source>
      type forward
    </source>
    
    <match **>
      type file
      path C:/fluent/test/output
      time_slice_format %Y%m%d_%H%M%S
      time_slice_wait 5s
    </match>

    管理ツールのサービスから「Fluentd Windows Service」を開始してみましょう。
    成功するとこうなります。
    07_windows_service3

    ログファイルにはこんなログが書き出されているはずです。

    2016-01-21 09:58:23 +0900 [info]: reading config file path="C:/fluent/conf/fluent.conf"
    2016-01-21 09:58:23 +0900 [info]: starting fluentd-0.12.15
    2016-01-21 09:58:23 +0900 [info]: spawn command to main (windows) : C:/Ruby22-x64/bin/ruby.exe 'C:/Ruby22-x64/bin/fluentd' -c C:/fluent/conf/fluent.conf -o C:/fluent/log/fluent.log -x fluentdwinsvc --no-supervisor
    2016-01-21 09:58:24 +0900 [info]: reading config file path=&quot;C:/fluent/conf/fluent.conf&quot;
    2016-01-21 09:58:24 +0900 [info]: starting fluentd-0.12.15 without supervision
    2016-01-21 09:58:24 +0900 [info]: gem 'fluentd' version '0.12.15'
    2016-01-21 09:58:24 +0900 [info]: adding match pattern=&quot;**&quot; type=&quot;file&quot;
    2016-01-21 09:58:24 +0900 [info]: adding source type=&quot;forward&quot;
    2016-01-21 09:58:24 +0900 [info]: using configuration file: 
    <ROOT> <source> type forward </source> <match **> type file path C:/fluent/test/output time_slice_format %Y%m%d_%H%M%S time_slice_wait 5s buffer_path C:/fluent/test/output.* </match> </ROOT> 2016-01-21 09:58:24 +0900 [info]: listening fluent socket on 0.0.0.0:24224

    設定に沿ってログが書き出されるかどうか、テストしてみましょう。コマンドプロンプトで次のコマンドを実行してみます。

    C:\>echo {"string":"Hello Fluentd Windows Service"} | fluent-cat test

    C:/fluent/testフォルダに、output.yyyyMMdd_HHmmss_0.logというファイルが作成され、次のようなログが書き出されているはずです。
    08_testlog
    OKならFluentd Windows Serviceを一旦停止しておきます。

    さあ、ここまででWindowsサーバーからfluentdでログ転送する準備が整いました。
    続いて、Windowsイベントログの収集に進みます..が記事が長~くなってきましたね。 今日の記事はここで終了し、次回に続きたいと思います。

    参考記事

    今回の投稿作成にあたり、次の記事を参考にさせていただきました。感謝申し上げます。m( )m

    coming soon!

    • 7. Windowsイベントログを集める
    • 8. YBIへログ転送

    それでは、ごきげんよう!

    Copyright © IDC Frontier Inc.