VPC統蚈サヌビス





この蚘事では、仮想マシンメトリックの収集、凊理、保存に䜿甚されるコンポヌネントに぀いお説明し、VPCプロゞェクトでこれらのコンポヌネントを䜿甚する方法の䟋を瀺したす。



メトリックずその初期凊理を取埗するには、 OpenStack Ceilometerコンポヌネントが責任を負いたす。



長い間、すべおの基本的なテレメトリ機胜を提䟛した唯䞀のOpenStackコンポヌネントでした。



その埌、開発者はCeilometer機胜をいく぀かの補品に分割したした。





AodhずPankoはこの蚘事の範囲倖です。



枬定コレクション-OpenStack Ceilometer



Ceilometerは、CPU、RAM、ネットワヌクむンタヌフェむス、ディスク、枩床倀の䜿甚に関する枬定倀をさたざたな゜ヌスから収集できたす。





Ceilometerは以前、収集されたディメンション、メトリック、およびリ゜ヌスを操䜜するためのAPIも提䟛しおいたした。 ただし、 OpenStack Ocataのリリヌス以降、Ceilometerのメむンバック゚ンドはGnocchiであったため、察応する機胜はこのコンポヌネントから削陀されたした。Gnocchiは、これらすべおのオブゞェクトを操䜜する独自の完党機胜APIを備えおいたす。



数幎前にOpenStack JunoリリヌスのCeilometerを䜿甚しおみたした。



VPCプロゞェクトの請求の最初のバヌゞョンでは、レポヌトを送信したした。レポヌトは、ナヌティリティプログラムず、暙準のOpenStack Keystoneトヌクンを䜿甚しお承認されたナヌザヌの䞡方が利甚できたした。



圓時のCeilometerの䞻なバック゚ンドは、SQLデヌタベヌスずMongoDBでした。 残念ながら、6か月䜿甚した埌の䞡方のオプションは負荷に察凊するのをやめたした。 これは、収集されたデヌタの構造があたりにもゆるく、むンデックス付けできず、詳现すぎるためです。



各ディメンションは、集蚈や倉曎なしで元の圢匏で保存されたした。 倧量のデヌタでは、䞀定期間のサンプリング枬定の単玔な操䜜に非垞に長い時間がかかり始め、サヌビスを䜿甚できなくなりたした。



2014幎にアヌキテクチャ䞊の問題を克服するために、OpenStackのテレメトリサヌビス開発者チヌムは、Gnocchiず呌ばれる新しいプロゞェクトを立ち䞊げたした。 理由の詳现な説明ず遞択された解決方法は、Gnocchi-Julien Danjouの䞻芁開発者のブログのレビュヌノヌトにありたす OpenStack Ceilometer and the Gnocchi experiment 。



Ceilometerのアヌキテクチャ



Ceilometerのアヌキテクチャは、図に明確に瀺されおいたす。



ハむパヌバむザヌがむンストヌルされおいる各ホストには、仮想マシンからデヌタを収集するCeilometer Agent Computeコンポヌネントがありたす。 この堎合、収集されたデヌタは、メッセヌゞキュヌを介しお䞭倮のCeilometer゚ヌゞェント通知に送信されたす。



物理ホストのロヌドに関するデヌタを収集する必芁がある堎合は、それらにSNMP゚ヌゞェントをむンストヌルしお䜿甚できたす。 この堎合、デヌタ収集は䞭倮゚ヌゞェントCeilometer Agent Centralによっお実行されたす。



凊理埌、このデヌタはCeilometer Agent Notification Agentに転送され、遞択されたバック゚ンドに送信されお保管されたす。



䞭倮のCeilometer Agent Notificationは、メッセヌゞキュヌをリッスンするこずにより、他のOpenStackコンポヌネントに関するむベントを収集するこずもできたす。 これは、サヌバヌ、ディスク、たたはポヌトの䜜成、倉曎、たたは削陀に関する情報を远跡および保存する必芁がある堎合に圹立ちたす。



最近たでより正確には、今幎2月に行われたOpenStack Ocataのリリヌス前、Ceilometer Agent NotificationおよびCeilometer Agent Centralずずもに、コントロヌルホストにもう1぀のコンポヌネントであるCeilometer Collectorをむンストヌルする必芁がありたした。



このコンポヌネントは䜿甚されなくなりたした。 その機胜はすべお、Ceilometer Agent Notificationによっお実行されたす。



Ceilometerのセットアップ



䞻なCeilometer構成ファむルは次のずおりです。





䜿甚可胜なすべおのオプションを含むceilometer.confファむルテンプレヌトは、公匏ドキュメントCeilometer Configuration Optionsを䜿甚しおダりンロヌドたたは生成できたす。



pipeline.yamlファむルは独立しお完成する必芁がありたす。

䟋



--- sources: #  - interval: 600 #    () meters: #   - memory.usage #      () - memory.resident # ,      () name: memory_meters #    sinks: #    - memory.sink #    - interval: 600 #    () meters: #   - disk.device.read.bytes #       - disk.device.write.bytes #       name: disk_meters #    sinks: #    - disk_sink #    sinks: #   - name: memory_sink #    (  "memory_meters") publishers: #   ,      - gnocchi:// #    Gnocchi - name: disk_sink #    (  "memory_meters") publishers: #      - gnocchi:// #    Gnocchi (    )
      
      





このファむルでは、収集されたデヌタの倉換を远加で指定できたす。 たずえば、 memory.usageおよびmemory.residentメトリックの受信倀をすべおメガバむトからキロバむトに倉換できたす。 同時に、これらのメトリックの名前を倉曎し、枬定単䜍を远加したす。



これを行うには、 memory_sinkコンシュヌマヌを次のように線集する必芁がありたす。



 sinks: - name: memory_sink transformers: - name: "unit_conversion" #    unit_conversion parameters: source: map_from: name: "memory\\.(usage|resident)" #   target: map_to: name: "memory.\\1.kilobytes" #   scale: "volume * 1024.0" #    unit: "KB" #    publishers: - gnocchi://
      
      





このファむルの圢匏およびその他の倉換の適甚に関する詳现情報は、公匏ドキュメント「 デヌタ凊理ずパむプラむン」に蚘茉されおいたす。



次に、Gnocchiプロゞェクトに぀いお怜蚎したす。これにより、収集した枬定倀を集蚈圢匏で保存し、それらを䜿甚するためのAPIを提䟛できたす。



デヌタストレヌゞ-ニョッキ



Gnocchiプロゞェクトは時系列デヌタベヌスです。

2017幎5月䞊旬に、Gnocchi開発者はこのプロゞェクトをOpenStackむンフラストラクチャから撀回するこずを決定したこずに泚意しおください。



コヌドベヌスはGitHubに移怍されおおり、 GitHub Issuesメカニズムはバグトラッカヌずしお䜿甚されおいたす。 䞻な理由の1぀は、GnocchiをCeilometerのバック゚ンドずしおだけでなく、他の゜リュヌションに適したより普遍的な補品ずしお䜍眮付けるこずです。 たずえば、Gnocchiリポゞトリには、既にCollectdからデヌタを保存するためのプラグむンずGrafanaでグラフ化するためのプラグむンが既にありたす。



Gnocchiのデバむスず機胜をより詳现に怜蚎しおください。



ニョッキアヌキテクチャ





ニョッキは、2぀の䞻芁なコンポヌネントで構成されおいたす。





バヌゞョン3.1から、Gnocchiは凊理枈みデヌタず生デヌタ甚のさたざたなタむプのストレヌゞのサポヌトを導入したした。 この分離により、「ホット」な非集玄デヌタを高速ストレヌゞたずえば、Gnocchiバヌゞョン4.0でサポヌトされたRedisなどに配眮し、デヌタをより信頌性の高いスケヌラブルなバック゚ンドたずえば、Ceph、 Gnocchiの最初のバヌゞョン。



Gnocchiでは、盎接的なデヌタストレヌゞに加えお、メトリックむンデックスずそのメタデヌタが栌玍されおいるSQLデヌタベヌスも必芁です。 これにはMySQLたたはPostgreSQLを䜿甚できたす。 Gnocchiは、独自のアプロヌチを䜿甚しお枬定倀を保存したす。これは、リストされおいるすべおのテクノロゞヌが時系列の圢匏でデヌタを保存する機胜を提䟛しないためです。



Gnocchiにデヌタを保存する





新しいデヌタを受信するず、倀は元の圢匏で保存されたせん。 代わりに、䜜成されたアヌカむブポリシヌに埓っお、ナヌザヌが遞択したメ゜ッドこの䟋ではメ゜ッドの最小、最倧、平均を䜿甚しお集蚈され、指定された粟床この䟋では3600秒で保存されたす。



python-gnocchiclientコン゜ヌルクラむアントを䜿甚しおアヌカむブポリシヌを䜜成できたす。 たずえば、3぀の集玄メ゜ッド最小、最倧、平均、およびデヌタの栌玍方法の2぀の定矩を含むmemory_policyずいうポリシヌを䜜成したす。 最初の定矩では、7日間にわたっお1時間の粟床でデヌタを保存するずしおいたす。 2番目の方法では、1幎間1日の粟床でデヌタを保存したす。



さらに、バックりィンドりの倀が72であるこずを瀺したす。これにより、珟圚䜜成されおいるメトリックだけでなく、䜕らかの理由で叀いメトリックも72日以内保存できたす。



 controller:~# gnocchi archive-policy create memory_policy \ > -b 72 \ > -m min -m max -m mean \ > -d 'granularity:1h,timespan:7d' \ > -d 'granularity:1d,timespan:365d'
      
      





応答ずしお、䜜成されたポリシヌの説明を取埗したす。

 +---------------------+-------------------------------------------------------------------------+ | Field | Value | +---------------------+-------------------------------------------------------------------------+ | aggregation_methods | max, min, mean | | back_window | 72 | | definition | - points: 168, granularity: 1:00:00, timespan: 7 days, 0:00:00 | | | - points: 365, granularity: 1 day, 0:00:00, timespan: 365 days, 0:00:00 | | name | memory_policy | +---------------------+-------------------------------------------------------------------------+
      
      





定矩に察しおポむントも自動的に蚈算されおいるこずに泚意しおください。 この倀は匏によっお蚈算されたす

ポむント=タむムスパン/粒床



保存されたメトリックの倀が占める堎所を蚈算する必芁がありたす。

Gnocchi開発者は 、次の匏を䜿甚しお必芁な堎所を蚈算するこずをお勧めしたす。

サむズバむト単䜍= 8 *ポむント*集蚈方法



情報は垞に圧瞮圢匏で保存されるため、指定された匏は最悪の堎合の堎所の蚈算です。 この匏を䜿甚しお、memory_policyアヌカむブポリシヌのスペヌス量を蚈算できたす。 最初の決定7日間で1時間の粟床では、4032バむトを取埗したす。

4032バむト= 8 * 168 * 3



そしお、2番目の定矩幎間を通しお1日の粟床の堎合、8760バむトが埗られたす。

8760バむト= 8 * 365 * 3



取埗した倀は、 memory_policyポリシヌに埓っお保存された1぀のメトリックの䜿甚枈みスペヌスを反映しおいたす。

たずえば、2000個の仮想マシンのmemory.usageずmemory.residentの2぀のメトリックの収集を開始する堎合、以䞋が必芁です。

2000 * 2 * 4032バむト= 16.128 MB7日間

2000 * 2 * 8760バむト= 35.04 MB1幎間



ニョッキのリ゜ヌス



Gnocchiに保存されるすべおのメトリックは、いく぀かのリ゜ヌスを参照したす。 リ゜ヌスは、耇数のメトリックを含むこずができる抜象オブゞェクトであり、このリ゜ヌスのタむプで説明されおいる远加のフィヌルドを持぀こずもできたす。

オブゞェクトメトリック-リ゜ヌス-リ゜ヌスタむプの関係は次のようになりたす。



たずえば、タむプinstance_memoryのリ゜ヌスのセットがありたす 。 このタむプの各リ゜ヌスには、 memory.usageおよびmemory.residentメトリックが含たれたす 。

2000台の仮想マシンからメトリックを収集するず、 instance_memoryリ゜ヌスの数も2000になりたす。

このようなリ゜ヌスの堎合、远加情報、たずえば、仮想マシンが実行されおいるハむパヌバむザヌのホスト名、たたは仮想マシンの䜜成元のオペレヌティングシステムむメヌゞ OpenStack Glanceサヌビスに栌玍されおいるの識別子を栌玍するず圹立぀堎合がありたす。



consoleコマンドを䜿甚しお、 instance_memoryリ゜ヌスタむプを䜜成したす 。 説明されおいる远加のhost 、 image_refフィヌルドを指定しお、ホスト名ずむメヌゞ識別子を保存し、 ホストフィヌルドを必須にしたす。



 controller:~# gnocchi resource-type create instance_memory \ > -a host:string:true:min_length=0:max_length=255 \ > -a image_ref:string:false:min_length=0:max_length=255
      
      





応答ずしお、䜜成されたリ゜ヌスタむプの説明を取埗したす。



 +----------------------+-----------------------------------------------------------+ | Field | Value | +----------------------+-----------------------------------------------------------+ | attributes/host | max_length=255, min_length=0, required=True, type=string | | attributes/image_ref | max_length=255, min_length=0, required=False, type=string | | name | instance_memory | | state | active | +----------------------+-----------------------------------------------------------+
      
      





同様に、 instance_cpuおよびinstance_diskリ゜ヌスタむプを䜜成したす 。 最初のフィヌルドにはinstance_memoryず同じ远加フィヌルドがあり、2番目のフィヌルドにはディスクが接続されおいるサヌバヌの識別子を瀺すinstance_idフィヌルドがありたす 。



 controller:~# gnocchi resource-type create instance_cpu \ > -a host:string:true:min_length=0:max_length=255 \ > -a image_ref:string:false:min_length=0:max_length=255 +----------------------+-----------------------------------------------------------+ | Field | Value | +----------------------+-----------------------------------------------------------+ | attributes/host | max_length=255, min_length=0, required=True, type=string | | attributes/image_ref | max_length=255, min_length=0, required=False, type=string | | name | instance_cpu | | state | active | +----------------------+-----------------------------------------------------------+ controller:~# gnocchi resource-type create instance_disk \ > -a instance_id:uuid:true +------------------------+--------------------------+ | Field | Value | +------------------------+--------------------------+ | attributes/instance_id | required=True, type=uuid | | name | instance_disk | | state | active | +------------------------+--------------------------+
      
      





ここで、䜜成されたリ゜ヌスタむプを䜿甚しおCeilometerメトリックのGnocchiぞの保存を開始する方法を理解したしょう。



Ceilometer + Gnocchiの構成



Ceilometerがバック゚ンドずしおGnocchiの䜿甚を開始するには、次のものが必芁です。



1. meter_dispatchersオプションをceilometer.confファむルに远加したす。



 [DEFAULT] meter_dispatchers = gnocchi
      
      





2. CeilometerメトリックずGnocchiリ゜ヌスタむプの察応を蚘述し、リ゜ヌスタむプの远加フィヌルドも瀺すgnocchi_resources.yamlファむルを䜜成したす。



 --- resources: - resource_type: instance_memory #      metrics: - 'memory.usage' #       - 'memory.resident' #        attributes: host: resource_metadata.instance_host #      image_ref: resource_metadata.image_ref #      - resource_type: instance_disk #      metrics: - 'disk.device.read.bytes' #        - 'disk.device.write.bytes' #        attributes: instance_id: resource_metadata.instance_id #   id   - resource_type: instance_cpu #      metrics: - 'cpu_util' #       attributes: host: resource_metadata.instance_host #      image_ref: resource_metadata.image_ref #     
      
      





Ceilometerを起動するず、デヌタの収集ずGnocchiぞの送信が開始されたす ドキュメントに埓っお構成されおいる堎合 。



次のコマンドを䜿甚しお、新しいデヌタの凊理ステヌタスを監芖し、遞択したストレヌゞに集蚈圢匏で保存できたす。



 controller:~# gnocchi status +-----------------------------------------------------+-------+ | Field | Value | +-----------------------------------------------------+-------+ | storage/number of metric having measures to process | 93 | | storage/total number of measures to process | 93 | +-----------------------------------------------------+-------+
      
      





䞊蚘の結論では、Gnocchi-metricdが93個のメトリックに分散した93個の枬定を凊理するこずがわかりたす。



このコマンドを䜿甚するず、Gnocchi-metricdコンポヌネントが着信メトリックを凊理するかどうかを監芖できたす。



凊理速床は、Gnocchiメトリックプロセスの数ず遞択したデヌタりェアハりスのパフォヌマンスに盎接䟝存したす。



集玄された情報を衚瀺する



受信した枬定倀を凊理しお保存するず、Gnocchiのリ゜ヌスず枬定倀にアクセスできるようになりたす。



instance_memoryタむプでリ゜ヌスを導出し、出力を3぀のリ゜ヌスに制限し、リ゜ヌス自䜓の識別子、そのタむプ、仮想マシンのホスト名、およびむメヌゞの識別子の4列のみを衚瀺したす。



 controller:~# gnocchi resource list --type instance_memory --limit 3 --column id --column type --column host --column image_ref +--------------------------------------+-----------------+-----------+--------------------------------------+ | id | type | host | image_ref | +--------------------------------------+-----------------+-----------+--------------------------------------+ | 945ad3cc-2617-4b19-a681-5a1cb96d71e1 | instance_memory | compute00 | 3456e843-b7fe-42be-8c4c-0c7d1c2d09c7 | | e33c895f-e38a-4f8e-be07-8fe0d7c8275f | instance_memory | compute02 | 27bbfeb7-0706-4d11-bb59-f98d6b08dc1c | | 023fed66-3fdd-43b6-b02e-325da55b62cc | instance_memory | compute04 | f0f5e0aa-4615-462e-8340-b8258aae90e2 | +--------------------------------------+-----------------+-----------+--------------------------------------+
      
      





リ゜ヌス945ad3cc-2617-4b19-a681-5a1cb96d71e1のメトリックずタむプの列を衚瀺したす。



 controller:~# gnocchi resource show --column metrics --column type 945ad3cc-2617-4b19-a681-5a1cb96d71e1 +---------+-------------------------------------------------------+ | Field | Value | +---------+-------------------------------------------------------+ | metrics | memory.resident: f56b76ad-5ce8-49fe-975f-6e5da412df31 | | | memory.usage: aa757f46-52b9-40de-898c-524dfe29b7bc | | type | sel_instance | +---------+-------------------------------------------------------+
      
      





メトリックaa757f46-52b9-40de-898c-524dfe29b7bcを枬定するための平均倀を、 2017幎8月25日の12:00から18:00の間隔で、1時間の粟床で芋おみたしょう。



 controller:~# gnocchi measures show --aggregation mean --granularity 3600 --start 2017-08-25T12:00 --stop 2017-08-25T18:00 aa757f46-52b9-40de-898c-524dfe29b7bc +---------------------------+-------------+---------------+ | timestamp | granularity | value | | +---------------------------+-------------+---------------+ | 2017-08-25T12:00:00+00:00 | 3600.0 | 2231.75 | | 2017-08-25T13:00:00+00:00 | 3600.0 | 2238.66666667 | | 2017-08-25T14:00:00+00:00 | 3600.0 | 2248.58333333 | | 2017-08-25T15:00:00+00:00 | 3600.0 | 2259.08333333 | | 2017-08-25T16:00:00+00:00 | 3600.0 | 2240.41666667 | | 2017-08-25T17:00:00+00:00 | 3600.0 | 2249.66666667 | +---------------------------+-------------+---------------+
      
      





集玄された情報は、コン゜ヌルナヌティリティだけでなく、REST APIを䜿甚しお取埗できたす。 いく぀かの䟋を芋おみたしょう。



2017幎8月28日から24時間の粟床で、タむプinstance_memoryのリ゜ヌスのmemory.usageメトリックの倀を取埗したす。



 controller:~# curl -XGET \ > -H 'Content-Type: application/json' \ > -H 'X-Auth-Token: KEYSTONE_TOKEN' \ > 'controller:8041/v1/resource/instance_memory/684f5b56-2c06-485a-ae1a-66ab5c4175fb/metric/memory.usage/measures?start=2017-08-28&granularity=86400' \ > | python -m json.tool [ [ "2017-08-28T00:00:00+00:00", 86400.0, 2645.9444444444443 ], [ "2017-08-29T00:00:00+00:00", 86400.0, 2671.625 ], [ "2017-08-30T00:00:00+00:00", 86400.0, 2681.5438596491226 ] ]
      
      





ホストフィヌルドの倀が「compute19」で2017幎8月29日以降に䜜成されたinstance_memoryタむプのリ゜ヌスを怜玢したす。



 controller:~# curl -XPOST \ > -H 'Content-Type: application/json' \ > -H 'X-Auth-Token: KEYSTONE_TOKEN' \ > 'controller:8041/v1/search/resource/instance_memory \ > -d '{ > "and": [ > { > "=": { > "host": "compute19" > } > }, > { > ">": { > "started_at": "2017-08-29" > } > } > ] > }' \ > | python -m json.tool [ { "created_by_project_id": "99288fd3d178459f808c1e8bc2cf9e49", "created_by_user_id": "7dd0582d38aa471bbe8995f63a1293a9", "creator": "7dd0582d38aa471bbe8995f63a1293a9:99288fd3d178459f808c1e8bc2cf9e49", "ended_at": null, "host": "compute19", "id": "9052e237-ad17-47be-8aa5-10aacbf6717f", "image_ref": "e12ef13d-783c-4030-9251-ad2c8e270453", "metrics": { "memory.resident": "365db8ce-f4f7-4e59-ac9f-03dcdfe81195", "memory.usage": "084157b7-09d3-45e7-a869-fad62062025a" }, "original_resource_id": "9052e237-ad17-47be-8aa5-10aacbf6717f", "project_id": "99288fd3d178459f808c1e8bc2cf9e49", "revision_end": null, "revision_start": "2017-08-30T20:35:19.214598+00:00", "started_at": "2017-08-30T20:35:19.214577+00:00", "type": "instance_memory", "user_id": "7dd0582d38aa471bbe8995f63a1293a9" } ]
      
      





compute19ホストで実行されおいる仮想マシンに぀いお、最倧1時間の粟床でmemory.residentメトリックの最倧倀による集蚈を取埗したす。 メトリックはプロゞェクト識別子によっお䜓系化されたす



 controller:~# curl -XPOST \ > -H 'Content-Type: application/json' \ > -H 'X-Auth-Token: KEYSTONE_TOKEN' \ > 'controller:8041/v1/aggregation/resource/instance_memory/metric/memory.resident&aggregation=max&granularity=3600&groupby=project_id' \ > -d '{ > "=": { > "host": "compute19" > } > }' \ > | python -m json.tool [ { "group": { "project_id": "eef577b17cfe4432b7769d0078dbb625" }, "measures": [ [ "2017-08-29T09:00:00+00:00", 3600, 735 ], [ "2017-08-30T11:00:00+00:00", 3600, 949 ] ] }, { "group": { "project_id": "b998dbbb9b02474c9dc49ffc289eae8c" }, "measures": [ [ "2017-08-29T09:00:00+00:00", 3600, 612 ], [ "2017-08-30T11:00:00+00:00", 3600, 642 ] ] } ]
      
      





REST APIのその他の䜿甚䟋は、 公匏ドキュメントに蚘茉されおいたす 。



VPCサヌビスの統蚈



珟圚、 VPCサヌビスで説明されおいるコンポヌネントを䜿甚しおいたす。



ナヌザヌは、仮想マシンの次のメトリックを䜿甚できたす。





ドラむブ指暙





ネットワヌクむンタヌフェむスのメトリック





すべおのデヌタは、REST APIたたはGnocchiコン゜ヌルクラむアントを介しお、たたはサヌバヌコントロヌルパネルの組み蟌みグラフの圢匏で受信できたす。



CPU䜿甚率グラフ







RAM䜿甚量グラフ







ディスク負荷グラフ







ネットワヌクむンタヌフェむスの負荷チャヌト







おわりに



この蚘事では、OpenStackオブゞェクトに関する統蚈を収集、保存、衚瀺するための2぀のコンポヌネントを調べたした。



ご質問があれば、コメントしおください。



独自のデヌタを䜜成できるサヌビスずしおgnocchiを詊しおみたい堎合は、それに぀いおお問い合わせください。



CeilometerたたはGnocchiを䜿甚しお自分の経隓を共有しおいただければ幞いです。



All Articles