株式会社ネットワールドのエンジニアがお届けする技術情報ブログです。
各製品のエキスパートたちが旬なトピックをご紹介します。

簡単!CloudWatchでWorkSpacesのダッシュボードを自作して運用を効率化してみよう

皆様こんにちは。SEの小池と申します。

2024年4月1日のプレスリリースの通り、弊社はAmazon Web Serviceの取り扱いを始めました!!

弊社でAWSを取り扱っていることを少しでも周知したい・・・そんな魂胆からこの記事では 簡単にCloudWatchでWorkSpacesのダッシュボードを自作する方法 を紹介いたします。

CloudWatchのダッシュボード作成は意外と簡単です!
この記事を参考に、自社のWorkSpacesの運用に効果的なダッシュボードを是非作成してみてください!

本記事の対象の方

  • CloudWatchでWorkSpacesのダッシュボードを自作してみたいとお考えの方。
  • WorkSpacesに限らず、CloudWatchで自作するダッシュボードに少しでもご興味がおありの方。

事前ご連絡事項

  • 本記事の操作説明と画面ショットはAWSのコンソールを日本語にした状態で説明しております。それ以外の言語をご利用の方は適宜読み替えてください。
  • 本記事は 2024/05/02 時点の情報をもとに記載しております。この日より後に発生した機能の追加や変更については言及しておりません。ご了承ください。
  • 本記事ではCloudWatch、CloudTrail、Amazon EventBridge を利用いたします。サービスの利用料金については記事内で言及しておりません。利用料金については公式のAWS料金見積りツール 等を用いてご確認いただけますようお願い申し上げます。
  • 本記事では、自作ダッシュボードを共有する行為については言及しておりません。自作ダッシュボードを他者と共有する場合に必要になる権限はダッシュボードに表示している情報に依存するため、ご利用者様にてご確認いただけますようお願い申し上げます。
  • 本記事に掲載されている情報は正確性・安全性を保証するものではありません。本記事の情報を利用することによって発生した損失や損害については、一切の責任を負いかねます。

今回のブログのゴール

このブログのゴールはこちらです。


今回のゴール
  • CloudWatchでWorkSpacesのダッシュボードを自作する (下図参照) 。

"簡単" に作成するために・・・

出来るだけ 簡単 にダッシュボードを自作するため、以下の方針で進めます。

簡単にダッシュボードを作るための方針
  • 自動ダッシュボードのウィジェットを可能な限り流用する。

  • Java Script 及び Python を用いたカスタム ウィジェットは使わない。

この手順を開始する前に・・・

  • この手順はCloudTrailが有効になっていることが前提となります。
  • この手順で作成するダッシュボードは、WorkSpacesに存在する全ディレクトリの情報をまとめて表示しています。複数のディレクトリが存在する場合はご注意ください。
  • この手順を実行するために必要な権限は下記の通りです。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:ListDashboards",
                "cloudwatch:ListMetrics",
                "cloudwatch:GetDashboard",
                "cloudwatch:GetMetricData",
                "cloudwatch:PutDashboard",
                "logs:DescribeLogGroups",
                "logs:CreateLogGroup",
                "logs:PutLogEvents",
                "logs:CreateLogStream",
                "logs:GetLogEvents",
                "events:ListRules",
                "events:PutRule",
                "events:PutTargets"
            ],
            "Resource": "*"
        }
    ]
}

Step1. 自作ダッシュボードの構成を考える

最初に、自作するダッシュボードにどういった内容を含めるべきか検討しておきます。
このブログでは以下の内容を確認できるダッシュボードを作成してみようと思います。

WorkSpaces の全体的な健全性と使用状況
  • プロビジョニングされた WorkSpaces の総数
  • ステータスが Running の WorkSpaces の数
  • ステータスが Stop の WorkSpaces の数
  • ステータスが Unhealty の WorkSpaces の数
  • ステータスが Maintenance の WorkSpaces の数
  • WorkSpaces のパフォーマンス
  • CPUの使用率 (平均)
  • メモリの使用率 (平均)
  • ユーザーボリュームのディスク使用率 (平均)
  • ルートボリュームのディスク使用量 (平均)
  • WorkSpaces の作成履歴、削除履歴
  • WorkSpaces 作成ログ
  • WorkSpaces 削除ログ
  • 上記の11項目を確認できるダッシュボードを 簡単 に作成していきます!

    Step2. ダッシュボードの見出しを作る

    まず、ダッシュボードの見出しを作ってみましょう。
    見出しを作ることで、WorkSpacesのダッシュボードであることを確認することはもちろん、運用フロー、有事の際の連絡先、直近に予定されているメンテナンス等の情報を共有することも可能になります。

    AWSのコンソールから [CloudWatch] を開き、[ダッシュボード] > [カスタムダッシュボード] タブ > [ダッシュボードの作成] をクリックします。

    任意のダッシュボード名を付与し、[ダッシュボードの作成] をクリックします。

    自動的にウィジェット追加の画面が表示されるので、[その他のコンテンツタイプ] > [テキスト/画像...] を選択し、[次へ] をクリックします。

    テキスト/画像ウィジェットの編集画面になるので、マークダウン書式で任意の文字を記載してください。
    記載後、[ウィジェットを追加] をクリックします。
    参考 : Using Markdown in the Console - AWS Management Console

    このブログでは以下のように記載しました。ただしロゴマークのURLは伏せております。

    # 自作する! WorkSpacesダッシュボード
    ディレクトリ `corp.amazonworkspaces.com` のサンプルダッシュボード。  
    CloudWatch のメトリクスを使って、お手軽に運用に使えるウェジットを作ってみます。  
    
    ###  テキストウェジット
    マークダウン書式で任意文字列を表示できます。  
    対応フローや連絡先を書くと良いかもしれません。  
    画像も表示可能なので、企業ロゴなどを表示することも可能です。  
    ![NetWorldロゴ](https://cdn-ak.f.st-hatena.com/images/fotolife/xxx.png "NetWorldロゴ")  
    

    追加されたウィジェットのサイズを調節します。

    同じように、カテゴリのヘッダー部分のテキストウィジェットも作ります。
    ダッシュボード画面の右上の [+] からウィジェットを追加することができます。

    [その他のコンテンツタイプ] > [テキスト/画像...] を選択し、[次へ] をクリックします。

    先ほどと同じ要領で任意の文字列をマークダウン書式で記載し、[ウィジェットを追加] をクリックします。

    同じ手順で、必要なカテゴリの見出しを作成します。
    作成し終わったら画面右上の [保存] をクリックします。これ以降、手順の中で保存する工程は割愛致しますので、都度保存をお願い致します。
    もし自動保存が ON になっている場合は、[保存] ボタンはグレーアウトしているのでクリック不要です。

    Step3. 自動ダッシュボードから必要なウィジェットをコピーする

    自動生成されたWorkSpacesのダッシュボードから必要なウィジェットをコピーし、カスタムダッシュボードに追加していきます。

    [ダッシュボード] > [自動ダッシュボード] > [WorkSpaces] を開きます。

    必要な情報が載っているウィジェットを探し、三点リーダーから [ダッシュボードに追加] をクリックします。
    このブログでは例として、プロビジョニングされたWorkSpacesの総数のウィジェット ( Total provisioned WorkSpaces (count) ) をコピーします。

    [ダッシュボードの選択] で、先ほど作成したカスタムダッシュボードを指定します。
    次に、[ウィジェットタイトルのカスタマイズ] に表示されている文字列を同義の日本語に変更します。
    最後に、[ダッシュボードに追加] をクリックします。

    先ほど作成したカスタムダッシュボードに自動遷移します。
    追加されたウィジェットをドラッグアンドドロップで任意の場所に移動させ、サイズを調整します。

    この状態だと、凡例が英語のままとなっています。
    凡例を日本語にしたい場合は、ウィジェットの三点リーダーから [編集] をクリックします。

    [グラフ化したメトリクス] タブを開き、[ラベル] 欄の文言を日本語に変更します。
    変更後、[ウィジェットの更新] をクリックします。

    同じ要領で、以下の値を示すウィジェットを自動ダッシュボードからコピーします。

    表1. 自作ダッシュボードの要件と、それを満たすコピー元ウィジェットの名前
    自作ダッシュボードの要件コピー元ウィジェット名
    プロビジョニングされた WorkSpaces の総数Total provisioned WorkSpaces (count)
    ステータスが Running のWorkSpaces の数Running (count)
    ステータスが Stop の WorkSpaces の数Stopped (count)
    ステータスが Unhealthy の WorkSpaces の数Unhealthy (count)
    ステータスが Maintenance の WorkSpaces の数Under maintenance (count)
    CPUの使用率 (平均) CPU usage (average)
    メモリの使用率 (平均) Machine memory usage (average)
    ユーザーボリュームのディスク使用率 (平均) User volume disk space usage (average)
    ルートボリュームのディスク使用率 (平均) Root volume disk space usage (average)

    同じ要領で、ウィジェットの位置とサイズを調節し、ウィジェット名を日本語化したものがこちらです!
    端折り方が料理番組みたいになってしまいすみません。。

    自動ダッシュボードにあるウィジェットをコピーするだけでも、下記の赤字になっている情報を表示することができます。
    あれ?なんかもう自動ダッシュボードだけでよい気が・・・そ、そんなことない!!!はず・・・。

    WorkSpaces の全体的な健全性と使用状況
  • プロビジョニングされた WorkSpaces の総数
  • ステータスが Running の WorkSpaces の数
  • ステータスが Stop の WorkSpaces の数
  • ステータスが Unhealty の WorkSpaces の数
  • ステータスが Maintenance の WorkSpaces の数
  • WorkSpaces のパフォーマンス
  • CPUの使用率 (平均)
  • メモリの使用率 (平均)
  • ユーザーボリュームのディスク使用率 (平均)
  • ルートボリュームのディスク使用量 (平均)
  • WorkSpaces の作成履歴、削除履歴
  • WorkSpaces 作成ログ
  • WorkSpaces 削除ログ
  • タイトルを日本語にするだけで、利用しやすそうな雰囲気のダッシュボードになってまいりました。
    次の手順では、コピーしてきたウィジェットに少しだけ手を加えて、より運用に適したダッシュボードを作っていきます。

    Step4. グラフ上に 許容域/警戒域/危険域 を表現する

    作成したウィジェットのうち、"○○の平均" を示すウィジェットに対して 許容域 / 警戒域 / 危険域 を視認しやすいように変更を加えます。 (下図参照) 。
    これにより、異常値を一目で見分けることができます。

    例として、CPUの使用率 (平均) のウィジェットを編集していきます。
    まず、編集対象のウィジェットの三点リーダーから [編集] をクリックします。

    [オプション] タブを開き、[水平注釈/しきい値] > [水平注釈の追加] をクリックします。

    まず、危険域の設定をしてみましょう。 "色" を任意に設定し、"ラベル" に危険域であることを示す文字列を設定します。
    続いて、"値" に危険域と判定する値を入力します。
    続いて、"フィル" で [上回る] を指定します。

    同じ要領で警戒域と許容域を設定します。このブログでは、CPUの使用率 (平均) のウィジェットに以下のように設定しました。

    表2. CPUの使用率 (平均) のウィジェットに設定した許容域/警戒域/危険域
    設定域ラベルフィル
    危険域使用率 : 高90上回る
    警戒域オレンジ使用率 : やや高70上回る
    許容域許容範囲70下回る

    ]

    今回のように "○○の使用率" であれば垂直方向の最低値を "0" 、最高値を "100" にするとより見やすくなります。と多分思います。
    現在開いている [オプション] タブにある [左のY軸] > [制限] にて、[最小] を 0、[最大] を 100 にします。

    設定が終わったら、[ウィジェットの更新] をクリックします。

    下図の左上のグラフのように、許容域/警戒域/危険域が視覚的に表示されるようになります。

    同じ要領で、”○○の平均" のウィジェットに許容域/警戒域/危険域を設定します。
    このブログでは以下のウィジェットに許容域/警戒域/危険域を設定しました。

    • CPUの使用率 (平均)
    • メモリの使用率 (平均)
    • ユーザーボリュームのディスク使用率 (平均)
    • ルートボリュームのディスク使用量 (平均)

    ここまでくると、かなり本格的っぽく見える自作ダッシュボードとなってまいりましたね!
    そ、そうでもないですか・・・?

    次のステップでは、WorkSpacesの作成と削除のログを表示するウィジェットを追加します。

    Step5. WorkSpaces の作成と削除ログのウィジェットを作る

    自動ダッシュボードからウィジェットをそのままコピーするだけだと味気ないので、WorkSpacesの作成と削除のログをウィジェットで確認できるようにしてみましょう!

    具体的には、WorkSpacesの作成時と削除時に発生するCloudTrailのログをCloudWatchのログストリームに出力するように設定し、そのストリームにあるログデータをダッシュボードに表示させます。

    では、最初にWorkSpacesの作成時と削除時に発生するログをCloudWatchのログストリームに出力する設定をします。コンソールで [Amazon EventBridge] のページを開き、[バス] > [ルール] > [ルールを作成] をクリックします。

    "名前" と "説明 - オプション" に任意の文字列を設定します。他の項目はデフォルト値のまま、[次へ] をクリックします。

    "イベントソース"、"サンプルイベント - オプション"、"作成のメソッド" は全てデフォルト値のままとします。"イベントパターン" に下記の通り設定します。

    • イベントソース : AWSのサービス
    • AWSのサービス : WorkSpaces
    • イベントタイプ : AWS API Call via CloudTrail
    • イベントタイプの仕様1 : 特定のオペレーション

    [特定のオペレーション] の1つ目に、WorkSpaces作成時のイベント名である CreateWorkspaces を指定します。続けて[追加] をクリックし、WorkSpaces削除時のイベント名である TerminateWorkspaces を指定します。設定が完了したら、[次へ] をクリックします。

    "ターゲット1" に下記の通り設定します。

    • ターゲットタイプ : AWSのサービス
    • ターゲットを選択 : CloudWatch ロググループ
    • ロググループ : "/aws/events/" を選択し、新規のロググループ名を入力。
    設定後、[次へ] をクリックします。

    タグを任意に設定し、[次へ] をクリックします。

    内容を確認し、[ルールの作成] をクリックします。ここまででWorkSpaces作成時と削除時のログがCloudWatch ログストリームに出力されるようになりました。

    次に、CloudWatchのロググループに出力されたログを参照するウィジェットを作っていきます。
    コンソールで自作ダッシュボードを表示し、右上の [+] をクリックします。

    データソースは [CloudWathc] 、データ型は [ログ] 、ウィジェットのタイプは [ログテーブル] を選択し、[次へ] をクリックします。

    "ログのインサイト" で先ほど作成したロググループを指定します。

    クエリ欄に以下のように指定します。このクエリはWorkSpaces作成のログ用のクエリです。

    fields @timestamp, @message
    | filter detail.eventName = "CreateWorkspaces"
    | display @timestamp, detail.eventName, detail.requestParameters.workspaces.0.userName, detail.responseElements.pendingRequests.0.workspaceId
    | limit 100
    

    • 1行目 : ログのtimestampフィールドとmessageフィールドを選択します。
    • 2行目 : detail.eventNameの値がCreateWorkspacesのログだけフィルターします。
    • 3行目 : 表示する項目をカンマ区切りで4つ指定しています。
      • detail.requestParameters.workspaces.0.userNameはディレクトリとユーザー名です。<ディレクトリ名>/<ユーザー名>という形で表示されます。
      • detail.responseElements.pendingRequests.0.workspaceIdはワークスペースIDです。
    • 4行目 : クエリ結果の表示を最大100個に指定しています。

    [クエリの実行] をクリックし、エラーが出ないことを確認します。なお、この時点では1行もログがヒットしない可能性が有りますが、とりあえずエラーが出ないことを確認してください。

    画面上部の [ウィジェットの作成] をクリックします。

    自作ダッシュボードの一番下に、ロググループのウィジェットが追加されているので、必要に応じて位置とサイズを調節してください。

    追加したウィジェットのタイトルを変更しましょう。タイトルの右横の鉛筆マークをクリックすることでタイトルを変更できます。このブログでは "WorkSpaces 作成の簡易履歴 (直近:100個, eventname = CreatedWorkspaces) ” としました。

    WorkSpaces作成ログのウィジェットが作成出来たので、同じ手順でWorkSpaces削除ログのウィジェットも追加します。削除ログのクエリは以下の通りです。

    fields @timestamp, @message
    | filter detail.eventName = "TerminateWorkspaces"
    | display @timestamp, detail.eventName, detail.userIdentity.arn, detail.requestParameters.terminateWorkspaceRequests.0.workspaceId
    | limit 1000
    

    • 1行目 : ログのtimestampフィールドとmessageフィールドを選択します。
    • 2行目 : detail.eventNameの値がTerminateWorkspacesのログだけフィルターします。
    • 3行目 : 表示する項目をカンマ区切りで4つ指定しています。
      • detail.userIdentity.arnは削除のアクションを実行したユーザーのARNです。<ARN>/<IAMユーザー名>という形で表示されます。
      • detail.requestParameters.terminateWorkspaceRequests.0.workspaceIdはワークスペースIDです。
    • 4行目 : クエリ結果の表示を最大100個に指定しています。

    これで最初に検討した情報がすべて表示されたダッシュボードが完成しました!!!

    最後に

    この度はブログをお読みいただき誠にありがとうございました。

    今回のブログは下記のゴールを設定していましたが、皆様いかがでしたでしょうか。


    今回のゴール
    • CloudWatchでWorkSpacesのダッシュボードを自作する。

    筆者がはじめて CloudWatch でダッシュボードを自作したのは、実は2023年の秋に開催されたre:Invent のとあるワークショップでした。

    「難しいのかな。。自分だけ置いてけぼりにならないかな。。」と思いながら恐る恐る早朝に (脅威のAM8:00開始) ワークショップ会場へ行きました。

    実際にワークショップを開始したところ、意外なほどに簡単 且つ 有用そうなダッシュボードが完成したので「これ、ウィジェットのタイトルを日本語にするだけでも十分運用に使えるのでは?」と思った覚えがあります。

    re:Invent 2023 から随分と時間が空いてしまいましたが、AWSのブログを書くとしたら最初はこのネタ (自作ダッシュボード) にしようと前から思っていたので、今回この記事で紹介することができてとてもうれしいです。

    この記事がAWSをお使いの方の一助となれば幸いにございます。