Nutanix Prism Proのお手軽オートメーション機能『X-Play』(クロスプレイ)

この記事はNutanix Advent Calendar 2019 2枚目の12/25分です🎄

今年のNutanix Advent Calendarはなんと4枚!
ご参加いただいた皆さま、ありがとうございました!
① adventar.org/calendars/4001
adventar.org/calendars/4014
adventar.org/calendars/4037
adventar.org/calendars/4475

これを踏まえて、1月にはNutanix Meetupを東京・大阪で行います!テーマはズバリ、『アドベントカレンダーお疲れさまでした!新年ライトニングトーク大会』です🎉

アドベントカレンダーを執筆いただいた皆さんに、
さらにLT登壇までしていたきます🙇

アドベントカレンダーを読んでいただいた方も、
ぜひお気軽にご参加ください!🍻🍕
東京・大阪どちらもNutanixオフィスのある場所での開催です。

Nutanix Meetup #48
https://nutanix.connpass.com/event/160285/

Nutanix Meetup #49 in Osaka
https://nutanix.connpass.com/event/160287/

さて、宣伝はここまでで↓が本題となります。

--------------------------
みなさん、自動化してますか?

自動化といえばCAPS(Chef, Ansible, Puppet, SaltStack)に代表される構成管理ツールを用いたInfrastructure as Code(IoC)が注目されていますね。

NutanixもCalmという、VMやアプリケーションのプロビジョニングおよび周辺オペレーションを自動化するためのツールを提供していますが、今回はよりお手軽なオートメーション機能である『X-Play』(クロスプレイ)について紹介します。

X-Playとは

X-Playは、Prism Centralに組込まれた「Codeless Task Automation」(コード記述不要のタスク自動化)を行うための機能です。
Codelessのため複雑な条件分岐を行うことはできませんが、あらかじめ定義された「アクション」(操作)を組み合わせて「プレイブック」と呼ばれる手順書のようなものを非常に簡単に作成できます。
またプレイブックには「トリガー」と呼ばれる、プレイブックの実行条件を設定でき、タスクを自動化することができます。
[補足]Prism Centralとは

前提条件

Prism Central: 5.11 以降
今回は、2019年12月24日時点の最新版である、Prism Central 5.11.2をベースに記述しています。
ハイパーバイザー: AHV, ESXi, Hyper-V(仮想マシンアクションを除く)
ライセンス: Prism Pro

トリガー

現時点でのトリガーは、[マニュアル]および[アラート]の2つだけです。

マニュアルトリガー

マニュアルトリガーは、Prism CentralのUI上から、手動でプレイブックを実行するためのトリガーです。

アラートトリガー

アラートトリガーは、Prism Central上でアラートが通知された時点でプレイブックを実行するためのトリガーです。
Prism Centralのアラートは、Prism Central自身が通知するものと、Prism Central管理配下のPrism Elementから転送されるものが存在しますが、両方に対応します。
[補足1]カスタムアラート
Prism Centralには、Prism Centralが取得している任意のメトリックを対象としたアラートを作成する機能があります。カスタムアラートはPrism Starterライセンスでも利用可能です。
[補足2]X-Stream
X-Playそのものではありませんが、アラートに関連する機能として、アプリケーション関連のメトリック収集機能(X-Stream)が現在開発中です。過去の.NEXT ConferenceではApplication Aware Sensorsと呼ばれていました。これまでのPrismでは、仮想HW、ハイパーバイザー、分散ストレージファブリック、物理HWなど、低いレイヤーの情報しか取得できませんが、X-Streamにより、ゲストOS上のアプリケーションの負荷や遅延などのメトリックでアラート作成が可能となり、X-Playの活用の幅が広がりそうです。

アクション

Prism Central 5.11.2 時点では下記の5カテゴリ、21個のアクションが存在します。

仮想マシンアクション

仮想マシンに対する操作を行います。
  • Power on VM
    仮想マシンの電源をオンにする。
  • Power off VM
    仮想マシンの電源をオフにする。ゲスト内からのシャットダウン(要Nutanix Guest Tools)、ACPIシャットダウン、強制オフが選択可能。
  • VM add CPU
    仮想マシンにvCPUを追加する。上限値が指定可能。
  • VM add Memory
    仮想マシンにメモリを追加する。上限値が指定可能。
  • VM Reduce CPU
    仮想マシンのvCPUを減らす。下限値が指定可能。仮想マシンは事前に電源オフが必要。
  • VM Reduce Memory
    仮想マシンのメモリを減らす。下限値が指定可能。仮想マシンは事前に電源オフが必要。
  • VM Snapshot
    仮想マシンのスナップショットを作成する。

なお、アクションを行う対象のVMは「アラートの対象となったVM」だけでなく、特定のVMを決め打ちすることも可能です。決め打ちは、仮想マシンアクションではあまり使うことが無さそうですが、後述の「実行アクション」ではVMに対してSSH/Powershellを実行できるので、そちらでは色々と活用できそうです。

通信アクション

任意のメッセージを外部に送信します。
  • Email
    Emailを送信する。後述のレポートアクションと組み合わせた場合、リソース需要予測レポートの添付が可能。
  • Slack
    Slackで指定したChannelにメッセージを送信する。
パラメータの埋め込み
送信するメッセージには、トリガーや先に実行されたアクションの情報、アクションの実行結果などを埋め込むことができます。例えば下のスクリーンショットは、[アラートトリガー]を元に[VM SSH]→[Slack]という2つのアクションを実行する際に、Slackアクションのメッセージに埋め込み可能なパラメータを表示したものです。
使用例としては、「CPU不足」のアラートが上がったVMに、SSHで"top -n 1"(CPU使用率の高いプロセスの一覧表示)を実行して、Alert Name、Creation Time(アラート作成時間)、Source Entity Name(VM名)、Standard Output(topコマンド実行結果表示)を運用監視メンバーのSlackチャンネルに送る、などが考えられます。

なお、ここではパラメータを通信アクションのメッセージに埋め込む、という例を紹介しましたが、パラメータの埋め込みは後述の実行アクションでも可能です。

アラートアクション

アラートに関連した操作を行います。
  • Acknowledge Alert
    アラートを確認済みにする。
  • Resolve Alert
    アラートを解決済みにする。
  • Send to ServiceNow
    アラートをServiceNowに送る。
    詳細はNutanixのEnterprise Cloud Solution ArchitectであるSho Uchidaさん(@shocnt)のQiita記事ServiceNowとNutanixの連携 その2 アラート連携をご覧ください。

レポートアクション

Prism Proのリソース需要予測レポートに関する操作を行います。
  • Generate Forcast Report
    リソース需要予測レポートを生成する。Prism Central内に保存するだけでなく、X-PlayのEmailアクションに添付して送信できる。

待機アクション

次のアクションを行うまでの待機を設定します。
  • Wait for Some Time
    指定した分数待機する。その後、次のアクションを実行するか、プレイブックを終了する(待機時間内であれば手動での再開が可能)か選択できる。
  • Wait Until Day of Month
    1か月以内の指定した日時(月は指定できず、日と時間のみ指定)まで待機する。その後、次のアクションを実行するか、プレイブックを終了する(待機時間内であれば手動での再開が可能)か選択できる。「その月の最終日」「その月の最終日の1日前」「その月の最終日の2日前」といった指定も可能。
  • Wait Until Day of Week
    1週間以内の指定した曜日の指定した時間まで待機する。その後、次のアクションを実行するか、プレイブックを終了する(待機時間内であれば手動での再開が可能)か選択できる。

実行アクション

任意の操作をリモートで実行します。
  • IP Address Powershell
    指定したIPアドレスに接続し、Powershellを実行する。Return Code, Standard Error, Standard Outputを他のアクションのパラメータとして使用可能。
  • VM Powershell
    指定したNutanix上のVMに接続し、Powershellを実行する。Return Code, Standard Error, Standard Outputを他のアクションのパラメータとして使用可能。
  • IP Address SSH
    指定したIPアドレスにSSH接続し、スクリプトを実行する。Return Code, Standard Error, Standard Outputを他のアクションのパラメータとして使用可能。
  • VM SSH
    指定したNutanix上のVMにSSH接続し、スクリプトを実行する。Return Code, Standard Error, Standard Outputを他のアクションのパラメータとして使用可能。
  • REST API
    指定したURLにREST APIを実行する。GET, PUT, POST, DELETEメソッドが使用可能。Response Status Code, Response Header, Response Bodyを他のアクションのパラメータとして使用可能。

デモ動画

YoutubeにあるX-Playのデモ動画を紹介します。
動画内で行っていることを箇条書きしているので、併せてご覧ください。

Nutanix X-Play

Nutanix Italiaが作成した動画です。Prism Central 5.11のPreviewバージョンなのでマニュアルトリガーがない?イタリア語聞き取れないです…。
  1. カスタムアラートを作成(I/O Bandwidth)
  2. Playbookの作成を開始
  3. アラートトリガーを設定
  4. Slackアクションを追加
  5. Playbookを保存
  6. sarコマンドでI/O負荷を生成
  7. PrismでI/O負荷が高くなったことを確認
  8. Slackにメッセージを受信したことを確認

Nutanix X-Play Add Memory(※準備編)

無音です。Nutanix KoreaのSEが作成した動画の模様。
  1. Playbookの作成を開始
  2. アラートトリガーを設定
    VM Memory High Usageを検知するカスタムアラートを使用
  3. VM Snapshotアクションを追加
    Snapshotの保持期間は1日に設定
  4. VM Add Memoryアクションを追加
    1回あたり2GiBずつ追加し、最大16GiBまでに設定
  5. Emailアクションを追加
  6. Acknowledge Alertアクションを追加
  7. Playbookを保存
  8. xplayというVMの現在のリソースを確認(メモリ4GiB)
  9. xplay VMにSSHでアクセスし、stressツールでメモリ使用率を上げる

Nutanix X-Play Add Memory Results(※結果編)

ひとつ上の準備編の続きです。
  1. Prism Centralで仮想マシン一覧を表示
  2. xplayというVMを選択し、アラートが1つ上がっていたことを確認
  3. xplayというVMのメモリ割り当てが6GiBに増えていることを確認
  4. アラートの内容を確認
  5. アラートがAcknowledged(確認済み)になっていることを確認
  6. Recovery Point(スナップショット)が作成されていることを確認

Nutanix X-Play Alert Integration with ServiceNow

ServiceNowとのインテグレーションの解説です。
  1. X-PlayデフォルトのSend to ServiceNowアクションをクローンし、一部のパラメータを入力済みにしたServiceNow用アクションを作成
  2. Playbookの作成を開始
  3. アラートトリガーを設定(Compression Disabled)
  4. 1で作成したServiceNow用アクションを追加
  5. Playbookを保存
  6. ServiceNow連携用のPlaybookをインポート
  7. ServiceNowの管理画面で、この時点ではNutanixに関するイベントルールが無いことを確認
  8. Nutanix対応用のXMLファイルをアップロード
  9. Nutanixに関するイベントルールが作成されたことを確認
  10. Incindent Rule(アラートによるインシデントの作成)を有効化
  11. stressツールでVMに負荷を掛け、Prism Centralのアラートを生成
  12. X-PlayによりアラートがServiceNowに渡され、インシデントが作成されたことを確認

まとめ

今回はPrism Central 5.11で追加されたX-Playについて紹介しました。つい先日、Nutanix Community Edition(CE)もAOS 5.11ベースにバージョンアップしました。CEではPrism Proの機能も無償で使えますので、Prism Centralを立てられるリソースがあれば、是非試してい頂ければ幸いです。

参考資料

おまけ: あったらいいなと思う機能(≒制限事項)

X-PlayはPrism Central 5.11で新規追加された機能であるため、まだまだ機能追加の余地があると思います。ここでは、あったらいいな、と思う機能(要するに今できないこと、の裏返しでもあります)をいくつか書いておきたいと思います。
実際に製品に搭載されることがあるかもしれないし、ないかもしれませんね。

カテゴリ機能との連動

Prism Centralには「カテゴリ」と呼ばれる仮想マシンの整理・分類機能があります。単にグループ分けするだけではなく、環境(本番かテスト環境か)、稼働させるアプリケーションのタイプ、OSのタイプ、あるいは自分で定義したものなど、多角的な分類が可能です。この機能があれば、特定のカテゴリのVMに対するプレイブックが作れるようになります。現状では、VMの監視を元にアラートトリガーを設定する場合「特定のVM」か「すべてのVM」という指定しかありませんので、カテゴリと連動できればもっと柔軟になると思います。

アラートやマニュアル以外のトリガー

イベント(ユーザーの操作)によるトリガーや、時刻によるトリガーが欲しいです。

REST APIのResponse Bodyのパース機能

NutanixのREST APIってResponse BodyがJSONで返ってくるのですが、X-Playではこれを解釈して必要な情報だけ使うような機能はありません。REST APIの返すJSONやXMLをパースしてくれれば、かなり複雑なこともできますよね。(それはもうスクリプト書けという説)

実行アクションにおける公開鍵認証

現状、ユーザー名/パスワード認証なので、公開鍵認証も使えると嬉しいなと思います。鍵の安全な管理を考慮するとRBACとの連携が必須ですね…。

コメント