*

Ceilometer によるメータリング機能の導入 ~ Swiftによるオブジェクトストレージシステムの構築(11)

公開日: 最終更新日:2014/07/29  |  By  |  Ceilometer, Keystone, Object Storage, Swift

by You Yamagata 2013.10.18

(Swift関連の記事の一覧は インデックス をご覧ください)

前回の記事から大分時間が経ってしまいましたが今回は Swift に メータリング機能を取り入れるために OpenStack Ceilometer を組み込みます。
いつものようにサーバ1台に Swift, Keystone, Ceilometer のすべてのコンポーネントをインストールする方法を取ります。

前回では Grizzly版を使い構築しましたが、今月Havana版がリリースされましたので Havana版を使ってインストールします。
CloudArchive ではすでに havana のリポジトリが公開されていますのでこちらを利用して構築します。

1. OpenStack Ceilometer とは?

OpenStack Ceilometer は OpenStack のプロジェクトの一つで各リソースの使用状況を記録する”メータリング機能”を提供します。Grizzly 版では Incubated Project でしたが Havana から Integrated Project に昇格しました。

Ceilometer を導入することで課金の仕組みを実現するのに必要なメータリング情報を収集できるようになります。


Swift で収集可能なメータリング情報は以下になります。

カウンタ名 説明 単位
storage.objects オブジェクト数
storage.objects.size 総容量 Byte
storage.objects.containers コンテナ数
storage.objects.incoming.bytes アップロードバイト数 Byte
storage.objects.outgoing.bytes ダウンロードバイト数 Byte
storage.api.request API リクエスト数

Ceilometer のアーキテクチャについての説明は、開発者用のドキュメントで解説されています。
Swift のメータリング情報の収集には以下のプログラムが利用されます。

  • ceilometer-agent-central … ポーリングによりメータリング情報を収集します。
  • swift 用 middleware … swift の API アクセス時にメータリング情報を収集します。
  • ceilometer-collector … agent-central 等が収集した情報をデータストアに格納します。
  • ceilometer-api … API リクエストを処理します。
  • MySQL … メータリング情報の格納先になります。なお ceilometer では MongoDB, SQLAlchemy に対応した RDBMS など複数のデータストアに対応しています。
  • RabbitMQ … ceilometer の各プロセスの RPC として利用されます。 Ceilometer では RabbitMQ 以外に Apache Qpid や ZeroMQにも対応しています。

2. インストール

今回も対象 OSは Ubuntu 12.0.4 LTSです。筆者は最新の 12.04.3 で動作確認をしています。
OpenStack のパッケージは CloudArchiveの Havana 用のリポジトリを使います。
インストール用のサーバは仮想環境のもので構いませんがメモリは 2GB以上用意してください。
手順は前回に紹介したやり方から少し変更しています。
librarian-chef によりサードパーティの cookbook を利用するとともに、knife-solo により cookbook の適用を行います。

2.1. RubyGems & git のインストール

> sudo apt-get update
> sudo apt-get install rubygems
> sudo apt-get install git

2.2. chef関連ツール のインストール

> sudo gem install chef
> sudo gem install librarian-chef
> sudo gem install  knife-solo
今回の cookbook では librarian-chef を使い、いくつかの外部cookbook を利用しています。また knife-solo を利用します。

2.3. Swift & Keystone & Ceilometer のインストール

> git clone -b release04_havana+keystone+ceilometer git://github.com/yoyama/chef-swift-recipes.git  
> cd chef-swift-recipes  
> knife solo cook <user>@localhost -i <ssh_private_key> 2>&1 |tee /tmp/chef.log 

git で chef cookbook を取得し、 knife solo によりインストールを行います。

knife solo を実行する前に、ssh の公開鍵の作成を行い、localhostにssh でログインできるように設定してください。秘密鍵はパスフレーズ無しにしておくとパスフレーズを繰り返し入力する必要がありません。
また実行するuser が sudo を実行できるように設定をしてください。
なお NOPASSWD で sudo が実行できるように設定をすると実行時にパスワード入力の要求がなくなります。

※knife solo はローカルにある cookbook をリモートサーバで適用するためのツールですが、今回は knife solo を実行するサーバとインストール先が同じサーバなので localhost に対して実行します。

このレシピではデフォルトで swift/keystone は ローカルからのアクセスのみが可能となっています。ネットワーク経由で接続する場合は 7行目のように default.rb (属性情報) を以下のように編集してください。

...  
default[:swift][:proxy_host]= "<IPaddress>"  
...  
default[:keystone][:ks_auth_host_external] = '<IPaddress>'  
...   
default[:ceilometer][:cm_api_host] = '<IPaddress>'

 

2.4 Keystone の動作確認

前回までは手動で初期化を行っていましたが今回からレシピ内で処理するようにしましたのでここでは動作確認だけします。
まずは root になり、 keystone_init ディレクトリに移動します。

> sudo su -  
# cd keystone_init  
認証のための環境変数を設定して keystone CLI でアクセスします。
root@ubuntu:~/keystone_init# . .keystone_rc  
root@ubuntu:~/keystone_init# keystone user-list  
+----------------------------------+------------+---------+-------+  
|                 id               |     name   | enabled | email |  
+----------------------------------+------------+---------+-------+  
| af56f97024204af4828d6a3e5290c6a1 |    admin   |  True   |       |  
| 1853520f9cda45f5b0284c523fcff412 | ceilometer |  True   |       |  
| e0a6d81eab5f4ab9b0144c59c04fde6a |     ec2    |  True   |       |  
| f0f1e42a9def43dc8d140630d37545ae |   glance   |  True   |       |  
| a6b9fcabcee346bf8823e071160c5ba3 |    nova    |  True   |       |  
| b9c1755cc375436ebd68b99a40f6e864 |    swift   |  True   |       |  
+----------------------------------+------------+---------+-------+  
root@ubuntu:~/keystone_init# keystone tenant-list  
+----------------------------------+---------+---------+  
|             id                   |   name  | enabled |  
+----------------------------------+---------+---------+  
| e363d6d6b65d4196add36acc7aa03991 |   demo  |  True   |  
| 90cc423d9109483f926ce9908e20832b | service |  True   |  
+----------------------------------+---------+---------+  
   
問題が無ければ実際に認証処理を試します。
# ./get_token.sh  
...  
{  
  "access": {  
    ....  
    "serviceCatalog": [  
      ....  
      {  
        "endpoints": [  
           {  
             "adminURL": "http://10.10.10.193:8080/v1",  
             "id": "7c0db41a35e449caa26ec52d584adb5f",  
             "internalURL": "http://10.10.10.193:8080/v1/AUTH_a7708511f2fc40909634ce1c176600c2",  
             "publicURL": "http://10.10.10.193:8080/v1/AUTH_a7708511f2fc40909634ce1c176600c2",  
             "region": "RegionOne"  
           }  
         ],  
         "endpoints_links": [],  
         "name": "swift",  
         "type": "object-store"  
       },  
       ....  
     ],  
     "token": {  
       "expires": "2013-05-03T07:41:24Z",  
       "id": "f85a3ab610124dcc84666d8bb2360112",  
       "issued_at": "2013-05-02T07:41:24.921769",  
       "tenant": {  
         "description": "Default Tenant",  
         "enabled": true,  
         "id": "a7708511f2fc40909634ce1c176600c2",  
         "name": "demo"  
       }  
     },  
     "user": {  
       "id": "d4323669c1f9460ba8252a69385803ce",  
       "name": "admin",  
       "roles": [  
         {  
           "name": "admin"  
         }  
       ],  
       "roles_links": [],  
       "username": "admin"  
     }  
   }  
 }                      
   

上記のようにJSON形式で正しく認証トークン及び情報が取得できればKeystone の動作確認は完了です。

2.5 Swift の起動・動作確認

それでは Swift のシステムを起動して swift CLI でアクセスします。

> sudo /usr/bin/swift-init all restart  
  ...
> swift -V 2.0 -A http://localhost:5000/v2.0 -U demo:admin -K abcd01234 stat  
  Account: AUTH_a7708511f2fc40909634ce1c176600c2  
Containers: 0  
  Objects: 0  
   Bytes: 0  
  
swift CLI のオプション指定は以下の通りです。
 -V 2.0 により認証が Keystone であることを指定します。
Keystone は 5000番port で listen しています。また URL は /v2.0 を指定します。
-U <Account>:<User>  -K <Key> は従来通りです。Keystone におけるテナント(プロジェクト)が Swift のアカウントになります。

3. Keystone の操作

ここでは keystone の CLI を使いアカウント:ユーザ test:tester を使えるようにテナント、ユーザの追加、並びに role の設定について説明します。

まず  root になり .keystone_rc により環境変数を設定します。

> sudo su -  
> cd keystone_init  
> . .keystone_rc  

テナント test を作成します。

# keystone tenant-create --name test  
+-------------+----------------------------------+  
|  Property   |       Value                      |  
+-------------+----------------------------------+  
| description |                                  |  
|  enabled    |        True                      |  
|   id        | 7cc79d03d9f542a9ab7090a0dc59ec6f |  
|   name      |        test                      |  
+-------------+----------------------------------+  
ユーザ tester を作成します。
# keystone user-create --name tester --pass testing  
+----------+----------------------------------+  
| Property |             Value                |  
+----------+----------------------------------+  
| email    |                                  |  
| enabled  |             True                 |  
|   id     | 9925613736f041e59e9c978bef4c0c21 |  
|   name   |             tester               |  
| tenantId |                                  |  
+----------+----------------------------------+  
 

ロール Member を確認します。

# keystone role-get Member  
+----------+----------------------------------+  
| Property |                Value             |  
+----------+----------------------------------+  
|  id      | 71708dd33ebd4471b5a5ded75fb6d729 |  
|  name    |             Member               |  
+----------+----------------------------------+  
最後に tester:test にロール Member を割り当てます。
–user/–role/–tenant の指定は id で行います。
# keystone user-role-add --user 9925613736f041e59e9c978bef4c0c21 --role 71708dd33ebd4471b5a5ded75fb6d729 --tenant 7cc79d03d9f542a9ab7090a0dc59ec6f
実際にアクセスして確認します。
> swift -V 2.0 -A http://localhost:5000/v2.0 -U test:tester -K testing stat  
  Account: AUTH_7cc79d03d9f542a9ab7090a0dc59ec6f  
Containers: 0  
  Objects: 0  
   Bytes: 0  
上記のように test:tester で swift にアクセスできるようになりました。
アカウント名は AUTH_<tenant_id> になっています。
なお、これ以後にアカウントを追加する場合は Member ロールの作成は必要ありません。
user-role-add を呼ぶときに既存のMemberロールのIDを指定してください。

4. Ceilometer の操作

さていよいよ今回新しく導入した Ceilometer を見ていきます。
Ceilometer は swift や keystone と同様に CLI が提供されています。
まずは meter-list コマンドを実行してみます。

> ceilometer --os-auth-url http://localhost:5000/v2.0 --os-username tester --os-tenant-name test --os-password testing meter-list  
+----------------------------+-------+-----------+----------------------------------+---------+----------------------------------+  
| Name                       | Type  |   Unit    | Resource ID                      | User ID | Project ID                       |  
+----------------------------+-------+-----------+----------------------------------+---------+----------------------------------+  
| storage.api.request        | delta | request   | 74dcdc6996f74d0a8a3cfcded2c58b9b | None    | 74dcdc6996f74d0a8a3cfcded2c58b9b |  
| storage.objects            | gauge | object    | 74dcdc6996f74d0a8a3cfcded2c58b9b | None    | 74dcdc6996f74d0a8a3cfcded2c58b9b |  
| storage.objects.containers | gauge | container | 74dcdc6996f74d0a8a3cfcded2c58b9b | None    | 74dcdc6996f74d0a8a3cfcded2c58b9b |  
| storage.objects.size       | gauge | B         | 74dcdc6996f74d0a8a3cfcded2c58b9b | None    | 74dcdc6996f74d0a8a3cfcded2c58b9b |  
+----------------------------+-------+-----------+----------------------------------+---------+----------------------------------+  

表示結果はそれまでの稼働状況で多少異なってきますので気にしないで下さい。
上記のような感じの結果が取れれば問題ありません。

meter-list コマンドは現在データとして格納されているカウンタの一覧を返します。
各項目は以下になります

  • Name … カウンタ名
  • Type … カウンタの種類。Gauge(ゲージ)、Delta(差分)、Cumulative(累積)があります。
  • Unit … カウンタの単位です。B は byte です。
  • Resrouce ID .. そのメータリングのデータがどのリソースに属しているかを表します。Swift では Resource ID は Project ID になります。

次に sample-list コマンドを実行します。 sample-list コマンドは特定のカウンタのデータを返すコマンドです。

> ceilometer --os-tenant-name test --os-username tester --os-password testing --os-auth-url http://localhost:5000/v2.0 sample-list \
 -m storage.api.request  
+----------------------------------+---------------------+-------+--------+---------+---------------------+  
| Resource ID                      | Name                | Type  | Volume | Unit    | Timestamp           |  
+----------------------------------+---------------------+-------+--------+---------+---------------------+  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-08T02:22:18 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:10 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:10 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:10 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:37 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:37 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:37 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:40 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:40 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:41 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:42 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:42 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:42 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:56 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:57 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:57 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:57 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:57 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:57 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:46:00 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:46:00 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:46:00 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:46:04 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:46:05 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:46:05 |  
+----------------------------------+---------------------+-------+--------+---------+---------------------+  

sample-list コマンドにオプション -m オプションを指定し storage.api.request のデータを取得します。

オプション -q <query> によりデータの絞り込みも可能です。

> ceilometer --os-tenant-name test --os-username tester --os-password testing --os-auth-url http://localhost:5000/v2.0 \
 sample-list -m storage.api.request -q 'timestamp>=2013-10-18T06:45:00;timestamp<2013-10-18T06:45:30'  
+----------------------------------+---------------------+-------+--------+---------+---------------------+  
| Resource ID                      | Name                | Type  | Volume | Unit    | Timestamp           |  
+----------------------------------+---------------------+-------+--------+---------+---------------------+  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:10 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:10 |  
| 74dcdc6996f74d0a8a3cfcded2c58b9b | storage.api.request | delta | 1.0    | request | 2013-10-18T06:45:10 |  
+----------------------------------+---------------------+-------+--------+---------+---------------------+  

上記では 2013-10-18T06:45:00 ~ 2013-10-18T06:45:30 の間のデータを取得しています。


statistics コマンドを使えば集計情報を見ることもできます。

>ceilometer --os-tenant-name test --os-username tester --os-password testing --os-auth-url http://localhost:5000/v2.0 \
 statistics -m storage.api.request -q 'timestamp>=2013-10-18T06:45:00;timestamp<2013-10-18T06:47:00'  
+--------+---------------------+---------------------+-------+-----+-----+------+-----+----------+---------------------+---------------------+  
| Period | Period Start        | Period End          | Count | Min | Max | Sum  | Avg | Duration | Duration Start      | Duration End        |  
+--------+---------------------+---------------------+-------+-----+-----+------+-----+----------+---------------------+---------------------+  
| 0      | 2013-10-18T06:45:10 | 2013-10-18T06:46:05 | 24    | 1.0 | 1.0 | 24.0 | 1.0 | 55.0     | 2013-10-18T06:45:10 | 2013-10-18T06:46:05 |  
+--------+---------------------+---------------------+-------+-----+-----+------+-----+----------+---------------------+---------------------+  

上記の例では storage.api.request カウンタの 2013-10-18T06:45:00~2013-10-18T06:47:00 の期間の集計情報です。

Ceilometer は Havana版 から集計データに基づきアラームをあげる機能がつきました。
例えば特定のカウンタの状況に基づいてアラームを挙げることができるようです。
私の方ではまだ確認できていませんが、詳しくはこちらを参照してください。

以上簡単ですが Swift + Keystone + Ceilometer の構築について説明しました。

関連記事

no image

サーバ1台での構築(Grizzly版) ~ Swiftによるオブジェクトストレージシステムの構築(7)

by You Yamagata 2013.04.17(Swift関連の記事の一覧はこちらをご覧くださ

記事を読む

no image

Keystone認証の利用 ~ Swiftによるオブジェクトストレージシステムの構築(9)

by You Yamagata 2013.05.13 (Last updated 2013

記事を読む

519RhQeJZML._SL500_AA300_

OpenStack Swift 書籍の出版のお知らせ

by You Yamagata 2014.04.02山縣です。 この度、インプレスR&D社よ

記事を読む

no image

Swift のグローバルクラスタ (3) Icehouse 開発版でのテスト結果

2014.4.14 by You Yamagata 山縣です。 前回・前々回でグローバルクラスタ対応

記事を読む

no image

CLIによるSwiftへのアクセス(前編) ~ Swiftによるオブジェクトストレージシステムの構築(3)

by yamagata 2013/1/30(Swift関連の記事の一覧はこちらをご覧ください)(2/

記事を読む

no image

Pythonライブラリによる Swift の操作 ~ Swiftによるオブジェクトストレージシステムの構築(6)

by Yamagata 2013.03.14(Swift関連の記事の一覧はこちらをご覧ください)前回

記事を読む

no image

Swift 1.11.0 CHANGELOG の翻訳

by You Yamagata 2013.1.23(Swift関連の記事の一覧は インデッ

記事を読む

affinity_swift-get-node

Swift のグローバルクラスタ(2) affinity の設定

Swift のグローバルクラスタ(2) affinity 山縣です。Havana 版(1.10.0)

記事を読む

no image

API による Swift の操作 ~ Swiftによるオブジェクトストレージシステムの構築(5)

by Yamagata 2013.2.25(Swift関連の記事の一覧はこちらをご覧ください)前回

記事を読む

no image

INDEX: OpenStack Swift

by You Yamagata 2014.4.15Swiftによるオブジェクトストレージシステムの構

記事を読む

no image

ビットアイル総合研究所は、クラウド技術に関する調査&研究を通して、社会と会社に寄与していくことを目的に、ビットアイル・エクイニクスの企業内研究所として2011年8月に設立されました。

openstack-figure1-2x
COHO DataStream のCinder連携

OpenStack Cinder のストレージバックエンドとしてはCe

blog-ocata
Jujuで Ocataを含む様々なバージョンのOpenStack をデプロイする方法

祝OpenStack Ocata リリース!! ということで、早速デプ

newton
Juju Manual Cloud で OpenStack 環境構築

本当にご無沙汰しております。 この投稿はOpenStack Adve

top
HACK! THE Juju/MAAS

6/8~6/10まで幕張メッセで開催されたInterop 2016。皆

dpdk
OpenStack OVS VXLAN ネットワークの高速化

少し前の話になりますが、3月2日に開催された 日本仮想化技術株式会社様

→もっと見る

PAGE TOP ↑