December, 2012 - フィールドSEあがりの安納です - Site Home - TechNet Blogs

フィールドSEあがりの安納です

Microsoft Evangelist -- Junichi Anno

December, 2012

  • 【PowerShell】仮想マシンのリソース使用量を計測する

    ※この投稿は、PowerShell Adcent Calender 2012 に参加しています!

    Hyper-V 上の仮想マシンが使用しているリソースを計測するにはパフォーマンスモニターを使用することができました。

    Measuring Performance on Hyper-V
    http://technet.microsoft.com/ja-jp/library/cc768535(v=bts.10).aspx

    しかし、パフォーマンスモニターの利用になれた方であればまだしも、通常は使用するカウンターの選定など、ちょっと面倒な面も否めません。

    そこで、Windows Server 2012、Windows 8 に実装されている Hyper-V では、ゲスト OS のリソース使用量を容易に計測できる Windows PowerShell コマンドレットが用意されました。Measure-VM です。

    パフォーマンスモニターが仮想マシンの正常性を計測することを主目的としていたのに対し、このコマンドレットの主な目的は「課金」です。例えば、ホスティングを担当する企業による利用を想定しています。

    Measure-VM コマンドレットを使用すると以下の数値を取得することができます。

    • CPUの平均使用量(MHz)
    • メモリの平均使用量(MB)
    • メモリの最大使用量(MB)
    • メモリの最少使用量(MB)
    • ネットワーク(送信)の総使用量(MB)
    • ネットワーク(受信)の総使用量(MB)
    • ディスクの使用量(MB)

    ここで、CPUの「使用率」ではなく「使用量」であることに注意してください。先にも書いた通り、Mesure-VM の主目的は「課金」です。よって、CPU の使用では意味がありません。なぜならば、使用している物理マシンによって使用率が変わる可能性が大きいからです。よって、Mesure-VM は使用率ではなく実際にゲスト OS が使用した CPU の使用量を MHz で出力するように設計されています。

    ネットワークについても同様です。帯域の使用率ではなく、実際に送受信したデータ量を算出してることに注意してください。

    いずれも、計測を開始してから Measure-VM コマンドレットを実行した瞬間までを計測します。

    では使ってみましょう。

    <計測開始>

    計測を開始するには、ゲストOS のメータリング機能を有効にする必要があります。以下はゲストOS Server1 に対してメータリングを有効にしています。

    Get-VM -Name Server1 | Enable-VMResourceMetering

    または

    Enable-VMResourceMetering –Name Server1

    <使用量の出力>

    Enable-VMResourceMetering を実行してからの使用率が出力するには Measure-VM コマンドレットを使用します。以下はその出力例です。

    PS C:\windows\system32> Measure-VM -Name server1

    VMName  AvgCPU(MHz) AvgRAM(M) MaxRAM(M) MinRAM(M) TotalDisk(M) NetworkInbound(M) NetworkOutbound(M)
    ------  ----------- --------- --------- --------- ------------ ----------------- ------------------
    Server1 3           1000      1000      1000      130048       178               112
                  

    <使用量のリセット>

    特定の時間間隔の使用量を出力するには、いったん前回までの使用量をリセットする必要があります。そのために Reset-VMResourceMetering コマンドレットが用意されています。以下のように入力することで、ゲストOS Server1 の使用量がいったんリセットされ、0から再計測が始まります。

    Reset-VMResourceMetering –Name Serevr1

    では、これらを使用して実際にゲストOSのコストを計測するにはどうしたらよいでしょう?

    例えば、以下のようなスクリプトを作成します。

    $VMName = "Server1"
    Calculate-VMCost($VMName)

    function Calculate-VMCost($VMName)
    {

        #ベースコストを設定
        $BaseCost = 50

        #各要素の単位コストを設定(例)
        $MemoryCostPerGB = 20
        $ProcessosCostPerGHz = 30
        $IncomingNetworkCostPerGB = 10
         $OutgoingNetworkCostPerGB = 30

        # 前回の取得から現時点までののリソース使用量を取得
        $ChargebackData = Measure-VM $VMName

        #ここまでの計測をリセット
        Get-VM $VMName | Reset-VMResourceMetering

        #ベースコスト
        $VMCost = $BaseCost

        #コストにメモリ使用コストを加える
        $VMCost += $ChargebackData.AverageMemoryUsage * $MemoryCostPerGB / 1024

        #コストにCPU使用量を加える
        $VMCost += $ChargebackData.AverageProcessorUsage * $ProcessosCostPerGHz / 1024

        #ネットワーク受信量を算出
        $IncomingExternalTraffic = $data.NetworkMeteredTrafficReport | `
            ? { ($_.Direction -eq "Inbound" ) -and ($_.RemoteAddress -eq "*.*")}

        #ネットワーク送信量を算出
        $OutgoingExternalTraffic = $data.NetworkMeteredTrafficReport | `
            ? { ($_.Direction -eq "Outbound") -and ($_.RemoteAddress -eq "*.*")}

        #コストにネットワークこすとを加える
        $VMCost += $IncomingExternalTraffic.TotalTraffic * $IncomingNetworkCostPerGB / 1024
        $VMCost += $OutgoingExternalTraffic.TotalTraffic * $OutgoingNetworkCostPerGB / 1024

        $VMCost
    }

    こうしたスクリプトを使用することで、ゲストOSのコストを総合的に判断し課金額の算出に利用することができます。

    (参考)

    Hyper-V リソース メータリングに関するテクニカル プレビュー
    http://technet.microsoft.com/ja-jp/library/hh831661.aspx

    Enable-VMResourceMetering
    http://technet.microsoft.com/ja-jp/library/hh848481.aspx

    Introduction to Resource Metering
    http://blogs.technet.com/b/virtualization/archive/2012/08/16/introduction-to-resource-metering.aspx

  • 【IDM】Active Directory Federation Service 2.1 の新機能

    ※この投稿は Office 365 Advent Clendar 2012 に参加しています。

    軽い話題ですんません。

    私の大好きな Active Directory Federation Service 2.0 は、Office 365 の爆発的人気に伴い、今ではすっかりフィールドに浸透しました。もう、「AD FS なんて知らない、聞いたことない」という方はいらっしゃらないでしょう。

    そんな中、いまひそかに熱い注目を集めているのが Windows Server 2012 に標準実装された Active Directory Federation Service 2.1 です。新しい Hyper-V や Failover Cluster の陰に隠れて目立たないことこの上ないですが、地味ながら確実に進化しています。

    Active Directory フェデレーション サービス(2.1)の概要
    http://technet.microsoft.com/ja-jp/library/hh831502.aspx

    上記サイトにも書かれている通り、AD FS 2.1 の新機能として3つが挙げられています。

    • 役割の1つとしてサーバーマネージャーまたは PowerShell でインストールできるようになった
    • AD FS 役割をインストールすれば、add-pssnapin をすることなくコマンドレットが使用できる
    • Kerberos チケットからクレームを取得できるようになった

    ここで大いに気になるのは 3 つ目です。「Kerberos チケットからクレームを取得する」とはどういうことでしょう?そして、どんな効用があるのでしょうか?

    (参考)Using AD DS Claims with AD FS(英語)
    http://technet.microsoft.com/ja-jp/library/hh831504.aspx

    上記英語サイトにも書かれている通り、Windows Server 2012 の Active Directory には大きく分けて2種類の「クレーム」が存在しています。

    1. Kereros チケットに格納されているクレーム。これは AD DS によって発行されたものです。
    2. SAMLトークンに格納されているクレーム。これは AD FS によって発行されたものです、

    基本的に、AD FS 2.0 から見れば Kerberos チケットは「ユーザーが AD DS に認証された証」であり、AD FS が Kerberos チケットからクレームとして得られるのは、ユーザーの SID およびユーザーが所属するグループの SID でした。

    AD FS 2.0 ではその他に、AD DS や AD LDS および SQL Server に格納された情報をクレームとして収集し SAML トークンに変化することができました。

    しかし、その対象は「ログオンしているユーザー」をキーとしたものであり、例えばログオンしているデバイスに関する情報を収集することができませんでした。そのため、「ログオンしているコンピューターによってアクセスを制御する」ことが難しかったのです。

    そんな中、革命ともいえる新たな機能が Windows Server 2012 に実装されました。それが Dynamic Access Control(ダイナミックアクセス制御)です。この機能は、Kerberos チケットにユーザーやグループ、そしてユーザーがログオンしているデバイスの属性をクレームとして格納し、それらの情報とファイルサーバーの ACL を比較することで、アクセスの可否を判断する機能です。従来のグループベースの静的なアクセス制御と異なり、日々変化するユーザーやデバイスの属性にダイナミックに対応できることから、新しいアクセス制御方式として注目されています。

    ※ただし、グループポリシーで「複合認証」を有効にする必要があり、これは Windows 8/Windows Server 2012/Windows RT でのみサポートされています

    そして、この機能は AD FS 2.1 にとっても大きな革命なのです。

    先に書いたように、AD FS 2.1 では、Kerberos チケットに格納されているクレームを読み取ることができるようになりました。

    つまり、AD DS 側のダイナミックアクセス制御でデバイスポリシーが設定されており、かつ AD FS 側で Kerberos チケットからクレームを受け取るための要求規則が書かれていれば、ユーザーの属性だけでなくログオンしているデバイスの属性をもとに、クレームベースのアプリケーションに対するアクセス制御が行えるようになる。。。というわけです。

    AD DS 発行の要求が AD FS と連携するしくみ

    これは、今後、Office 365 ユーザーにとっても期待の大きな機能であるはずです。

    。。。。とはいえ、具体的な設定に関する解説がどこにも掲載されていないため、これについては追ってまとめたいと思います。

    また、ダイナミックアクセス制御についても、結構複雑なテクノロジーとうこともあって使ったことがある方は少ないと思います。こちらも概念を含めてまとめていきたいと思いますのでご期待ください。

  • 【IAM】ダイナミックアクセス制御(DAC)を理解するための解説&演習手順書

    以前、以下の投稿をしました。

    http://blogs.technet.com/b/junichia/archive/2012/12/10/3539674.aspx

    ダイナミックアクセス制御はとても面白いテクノロジーなのですが、かなり複雑なので手を付けている方は少ないのではないでしょうか。

    そこで、現在実施しているハンズオンセミナーで使用している資料から、ダイナミックアクセス制御の部分を抜粋して公開しました。

    解説編と演習編に分かれています。

    演習環境はシンプルで、以下の2つの仮想マシンを用意していただければOKです。

    • ドメインコントローラーが構成された Windows Server 2012(フルインストール)
    • ドメインのメンバーとなっている Windows Server 2012(フルインストール)

    細かな設定は必要ありません。すべて演習の中で一から構築していきます。

    Windows 8 の Hyper-V でも問題なく演習できます。

    是非、社内の勉強会等でも活用してください!

    Dynamic Access Control 解説編

    Dynamic Access Control 演習編