Citrix DaaS™

ローカルホストキャッシュ可視化ツール

この記事では、Citrixローカルホストキャッシュ環境の可視性を提供するPowerShellベースのソリューションであるローカルホストキャッシュ(LHC)リアルタイム可視化ツールについて説明します。このツールを使用すると、Cloud Connectorの健全性を監視し、LHCモード中の選出されたリーダーを特定し、強制停止モードを制御し、イベントログを照会してLHCの動作をトラブルシューティングできます。

概要

ローカルホストキャッシュ(LHC)リアルタイム可視化ツールは、Citrixローカルホストキャッシュ環境の可視性を提供する包括的なPowerShellベースのソリューションです。Cloud ConnectorからアクセスできるコマンドラインインターフェイスとシンプルなGUIの両方を提供し、次のことを可能にします。

  • ゾーンまたはリソースの場所にあるCloud Connectorを検出する。
  • LHCモード中に選出されたリーダーを特定する。
  • ゾーンまたはリソースの場所にあるすべてのCloud Connectorで強制停止モードを有効または無効にする。
  • 特定のプロバイダーとイベントIDからイベントログを照会する。
  • 選出されたリーダーでBroker PowerShellコマンドを実行する。

前提条件

ローカルホストキャッシュ可視化ツールを展開して実行する前に、環境が次のシステム要件、権限、およびファイル要件を満たしていることを確認してください。

システム要件

  • Windows Server 2016 またはそれ以降
  • PowerShell 5.1以降
  • Citrix Cloud Connector™で実行する必要があります
  • 必要なサービス:
    • シトリックス高可用性サービス
    • シトリックス ConfigSync サービス

権限

  • ローカルマシンでの管理者権限
  • ゾーン内のすべてのCloud Connectorに対するリモートPowerShell実行権限
  • すべてのCloud Connectorへのネットワーク接続

必要なファイル

  • LHCVisibilityTool.ps1 - コアPowerShellモジュール
  • LHCVisibilityToolGUI.ps1 - GUIアプリケーション
  • HighAvailabilityServiceControl.psm1 - Citrix HA Service Controlモジュール

GUI PowerShellスクリプトは次の場所にあります:

C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts
<!--NeedCopy-->

はじめに

ツールを実行する前に、次のいずれかのオプションを使用してPowerShell実行ポリシーを設定します:

  • オプション1: RemoteSigned (より制限的):

     Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
     <!--NeedCopy-->
    
  • オプション2:現在のセッションのみ(一時的):

     Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
     <!--NeedCopy-->
    

注:

実行ポリシーを変更するには、PowerShellを管理者として実行する必要がある場合があります。ユーザーレベルの権限しかない場合は、-Scope CurrentUserを使用してください。

GUIアプリケーションを介してツールを使用する

GUIは、Cloud Connectorの検出、停止モードの制御、イベントログのクエリ、およびブローカーコマンドの実行のためのタブ付きインターフェイスを提供します。ツールを起動したら、タスクを選択してその手順に進みます。

GUIを起動する

cd "C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts"
.\LHCVisibilityToolGUI.ps1
<!--NeedCopy-->

LHC可視化ツールGUIの起動

このツールは、下部に永続的なステータスバーを備えた3タブレイアウトを使用します。

3タブレイアウトとウィンドウ下部の永続的なステータスバー

ステータスバーはウィンドウの下部に表示され、次の情報が含まれます。

項目 説明
操作ステータス(左) 現在の操作、または「準備完了」
HAモードステータス コネクタごとのドットインジケータ(最大5つ表示。「+N more」は省略された場合)。ホバーツールチップに完全なリストが表示されます。
最終更新 最後のHA状態の更新が成功したときのタイムスタンプ
ログの表示 セッションログファイルをメモ帳で開きます

ステータスバーは、HA状態を示すために次の色を使用します。

状態
WorkingNormally
PendingHA ゴールデンロッド
PendingRecovery オレンジ
InitialHA
ExtendedHA
不明 / 到達不能 グレー

Cloud Connector を検出してリーダーを特定する

System Status & Control タブで、Discover and Identify Leader をクリックします。このツールは、ゾーン内のすべての Cloud Connector の中から選出されたリーダーを、次の方法で自動的に検出して表示します。

  • イベントログ分析 (イベント ID 3504)
  • レジストリの PeerStatus および IsElected 情報
  • ローカルサービス検証

システムステータスと制御タブ

強制停止モードの制御

システムステータスと制御タブで、停止モードコントロールを使用してゾーン全体のHAモードを管理します。

  • 強制停止モードを有効にする:
    • ゾーン内のすべてのCloud Connectorを強制的にHAモードにします
    • ブローカリングにローカルホストキャッシュを使用します
    • LHCデータベースの同期が必要です
  • 強制停止モードを無効にする:
    • システムを通常の操作に戻します
    • 利用可能になったときにプライマリサイトに再接続します

警告:

これらのアクションは、ゾーン内のすべてのCloud Connectorに影響します。

イベントログのクエリと追跡

イベントログクエリタブで、次のクエリパラメータを設定します。

  • ターゲット: 次の中から選択します。
    • すべてのCloud Connector
    • 選出されたリーダーのみ
    • 特定のコンピューター (FQDNを入力)
  • プロバイダー名: カスタムプロバイダーを選択または入力します。
    • Citrix 高可用性サービス
    • Citrix ConfigSync サービス
    • Citrix Broker サービス
  • イベントID: コンマ区切りのリスト (例: 3502,3503,3506)
  • 時間範囲: オプションで開始時刻と終了時刻でフィルターします
  • 最大イベント数: コンピューターごとに取得するイベントの最大数 (デフォルト: 100)

イベントを操作するには、次のボタンを使用します。

  • イベントのクエリ: 構成されたクエリパラメーターを使用してイベントログをクエリします。
  • 過去のHAイベント: 構成されたクエリパラメーターからLHCの開始と終了の境界 (イベント3502、3503、3508) を見つけ、概要を示すために終了サマリーイベントを表示します。
  • イベントのクリア: イベントリスト、詳細パネル、および追跡状態をクリアします。
  • レポートのエクスポート: GUIでクエリされたイベントから統計を作成し、テキストファイルとして保存します。(イベント統計の表示ボタンからの出力を使用します。)

イベントログクエリタブ(/en-us/citrix-daas/media/lhc-visibility-tool-event-log-query.png)

ライブトラッキングは次のように動作します。

  • ライブトラッキングは、LHCがアクティブな間、120秒ごとに新しい概要イベントを監視します。
  • ライブトラッキングが開始されると、イベント3502を参照してLHCモードの開始時刻を決定し、開始以降に発生したすべてのイベントを一覧表示します。
  • ライブトラッキングは、手動で停止することも、LHCモードが終了したときに自動的に停止することもできます。

下のセクションには、主に2つのビューがあります。

  • 左パネル:
    • イベントは、主要な詳細(イベント番号、時刻、ID、種類)とともに時系列で一覧表示されます。
    • 各イベントは、イベントID参照に従って、その種類に基づいて色で視覚的に区別されます。
    • イベントを選択すると、そのイベントに関する詳細情報が表示されます。
  • 右パネル: 2つの表示オプションにより、選択したイベントの統計概要と詳細情報を切り替えることができます。
    • イベント詳細の表示: 選択したイベントの包括的な詳細。
    • イベント統計の表示: HAモードイベントを要約した統計。これには、表形式のメトリックと概要イベント(3507)からのASCII棒グラフが含まれます。

次の画像は、イベント詳細ビューを示しています。

イベント詳細ビュー

次の図は、イベント統計ビューを示しています:

イベント統計ビュー

参照: HAおよびConfigSyncイベントID

以下のセクションでは、プロバイダーごとの一般的なイベントIDを一覧表示します。

Citrix高可用性サービス:

イベントID 説明
3502 HAモードに入りました (選出されたブローカー)
3503 HAモードを終了しました (通常の操作が再開されました)
3506 HAモードに入りました (非選出ブローカー)
3507 定期的なHAモードの概要 (選出されたブローカー)
3508 HAモードの概要の終了 (選出されたブローカー)

Citrix ConfigSyncサービス:

イベントID 説明
503 同期プロセスが開始されました
504 同期が正常に完了しました
505 同期に失敗しました
507 HAモードのため同期が中止されました
510 設定データが受信されませんでした
517 プライマリブローカーとの通信に問題があります
518 ConfigSyncが中止されました(HAサービスが実行されていません)

ブローカーコマンドの実行

Broker Commandsタブには、以下の定義済みコマンドがあります。

  • Get-BrokerMachine: VDA/マシン情報を取得します
  • Get-BrokerSession: アクティブなセッションを取得します
  • Get-BrokerDesktopGroup: デリバリーグループを取得します
  • Get-BrokerCatalog: マシンカタログを取得します
  • Get-BrokerApplication: 公開アプリケーションを取得します

ブローカーコマンドタブ

ヒント:

フィルターテキストボックスを使用して、すべての文字列列を同時に検索し、結果内の特定の項目を見つけます。

カスタムコマンドを実行するには:

  1. コマンドを入力します。例: Get-BrokerMachine -MaxRecordCount 2
  2. 必要に応じて、返すプロパティを(コンマ区切りで)指定します。
  3. [Execute] をクリックします。

カスタムコマンド

注:

ブローカーコマンドは、次の場合にLHCデータベースから最新の情報を提供します。

  • システムがLHCモードである。
  • 選出されたリーダーが特定されている。
  • LHCデータベースが利用可能である。

セッションログを表示する

現在のセッションログを開くには、ステータスバーの [View Log] をクリックします。ログはメモ帳で開きます。

各セッションは%TEMP%\LHCVisibilityTool_<yyyyMMdd_HHmmss>.logにログファイルを作成します。メッセージは色分けされてホストコンソールにも書き込まれます。

コマンドラインからツールを使用する

GUIに加えて、PowerShellからツールを直接実行することもできます。モジュールをインポートした後、以下のコマンドを使用して各タスクを実行します。タスクを選択して、そのコマンドに移動します。

コマンドラインツールを起動する

cd "C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts"
. .\LHCVisibilityTool.ps1
<!--NeedCopy-->

Cloud Connector を検出する

$connectors = Get-CloudConnectorsInZone
$connectors | ForEach-Object { Write-Host $_ }
<!--NeedCopy-->

選出されたリーダーを特定する

$leader = Get-ElectedLeader
Write-Host "Elected Leader: $leader"
<!--NeedCopy-->

停止状態を取得する

$states = Get-OutageState
foreach ($connector in $states.Keys) {
    Write-Host "$connector : $($states[$connector].State)"
}
<!--NeedCopy-->

イベントログを照会する

すべての Cloud Connector で HA イベントを照会します。

$results = Get-LHCEventLogs -EventID @(3502, 3503, 3506) `
    -ProviderName "Citrix High Availability Service" `
    -StartTime (Get-Date).AddDays(-7) `
    -EndTime (Get-Date) `
    -MaxEvents 100

# Display results
foreach ($computer in $results.Keys) {
    Write-Host "`n=== $computer ==="
    if ($results[$computer].Success) {
        $results[$computer].Events | Format-Table TimeCreated, Id, Message -AutoSize
    } else {
        Write-Host "ERROR: $($results[$computer].Error)" -ForegroundColor Red
    }
}
<!--NeedCopy-->

選出されたリーダーのみを照会します。

$results = Get-LHCEventLogs -ComputerName "ElectedLeader" `
    -EventID @(3507) `
    -ProviderName "Citrix High Availability Service" `
    -MaxEvents 50
<!--NeedCopy-->

特定のコンピューターを照会します。

$results = Get-LHCEventLogs -ComputerName "CC-01.domain.com" `
    -EventID @(503, 504, 505) `
    -ProviderName "Citrix ConfigSync Service"
<!--NeedCopy-->

ブローカーコマンドを実行する

すべてのマシンを取得:

$machines = Invoke-BrokerCommand -Command "Get-BrokerMachine" `
    -Properties @("MachineName", "RegistrationState", "SessionCount")
$machines | Format-Table -AutoSize
<!--NeedCopy-->

アクティブなセッションを取得:

$sessions = Invoke-BrokerCommand -Command "Get-BrokerSession" `
    -Properties @("UserName", "MachineName", "SessionState")
$sessions | Format-Table -AutoSize
<!--NeedCopy-->

パラメーターを指定してカスタムコマンドを実行:

$params = @{
    MaxRecordCount = 10
}
$results = Invoke-BrokerCommand -Command "Get-BrokerMachine" `
    -Parameters $params `
    -Properties @("MachineName", "DesktopGroupName")
<!--NeedCopy-->

停止モードを制御する

すべてのCloud Connectorで強制停止モードを有効にする:

$results = Set-LHCOutageMode -Enable

# Check results
foreach ($connector in $results.Keys) {
    $status = if ($results[$connector].Success) { "SUCCESS" } else { "FAILED" }
    Write-Host "$connector : $status"
    if (-not $results[$connector].Success) {
        Write-Host "  Error: $($results[$connector].Error)" -ForegroundColor Red
    }
}
<!--NeedCopy-->

強制停止モードを無効にする:

$results = Set-LHCOutageMode

# Check results
foreach ($connector in $results.Keys) {
    $status = if ($results[$connector].Success) { "SUCCESS" } else { "FAILED" }
    Write-Host "$connector : $status"
}
<!--NeedCopy-->

トラブルシューティング

ツールに関する問題をトラブルシューティングするには、次の一般的なプロセスに従ってください:

  1. アプリケーションイベントログで詳細なエラーメッセージを確認します。
  2. すべての前提条件が満たされていることを確認します。
  3. 次の表の一般的な問題と、この記事の後半で説明されているベストプラクティスを確認します。
  4. ローカルホストキャッシュと、DaaSの回復性に悪影響を与える可能性のある一般的な誤構成を回避するテクニカルブリーフを参照してください。

次の表に、ツールを使用する際に発生する可能性のある一般的な問題と、その推奨される解決策を示します。

問題 解決策
Cloud Connector が見つかりません

  1. Cloud Connector 上で実行していることを確認します。
  2. Get-Service CitrixHighAvailabilityService, CitrixConfigSyncService を使用して、必要なサービスが実行されていることを確認します。
  3. レジストリキー HKLM:\SOFTWARE\Citrix\Broker\Service\State\LHC を確認します。
選出されたリーダーを特定できません
  1. アプリケーションログでイベント ID 3502 を確認します。
  2. すべての Cloud Connector への接続を確認します。
Broker コマンドが失敗しました


  1. システムが HA モードであることを確認します。
  2. 選出されたリーダーが特定されていることを確認します。
  3. LHC データベースが同期されていることを確認します。
  4. HighAvailabilityServiceControl.psm1 が存在することを確認します。
リモート実行エラー

  1. Test-WSMan -ComputerName <CloudConnectorFQDN> を使用して、すべての Cloud Connector で WinRM が有効になっていることを確認します。
  2. ファイアウォール規則で PowerShell リモート処理が許可されていることを確認します。
  3. 管理者権限があることを確認します。
イベントログクエリが結果を返さない

  1. 選択したプロバイダーのイベント ID が正しいことを確認します。
  2. 時間範囲に予期されるイベントが含まれていることを確認します。
  3. イベントログのサイズ制限によって古いイベントが上書きされていないことを確認してください。

ベストプラクティス

このツールを最大限に活用し、Local Host Cache環境を安全に運用するために、以下のベストプラクティスに従ってください。

定期的な監視

  • Discover Cloud ConnectorsIdentify Elected Leader を定期的に実行します。
  • 同期の問題については、ConfigSync イベント (503、504、505) を監視してください。

イベントログの分析

  • 過去7日間のHAイベントをクエリして、障害パターンを把握します。
  • HAモード中にイベントID 3507を探して、詳細な統計情報を確認します。

ブローカーコマンド

  • 選出されたリーダーでのみ実行します。
  • パフォーマンスを向上させるために、プロパティの選択を制限します。
  • 大規模な環境では、MaxRecordCount パラメーターを使用します。

障害モード

  • 強制障害モードは、テストまたは計画メンテナンスの場合にのみ使用してください。
  • 有効にする前に、LHCデータベースが同期されていることを常に確認してください。
  • プライマリ接続が復元されたら、強制停止モードを無効にします。

セキュリティ

  • 可能な場合は、最小特権アカウントで実行します。
  • リモート実行にはセキュアなチャネルを使用します。
  • 停止モードの変更を監査します。

以下の例では、出力を保持するためにC:\Reportsにフォルダーを作成済みであることを前提としています。

例 1: 日次HAモードレポート

# Import module
. "C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts\LHCVisibilityTool.ps1"

# Discover environment
$connectors = Get-CloudConnectorsInZone
Write-Host "Found $($connectors.Count) Cloud Connectors"

# Check HA status
$leader = Get-ElectedLeader
if ($leader) {
    Write-Host "System is in HA mode. Elected leader: $leader"

    # Get HA summary events from elected leader
    $events = Get-LHCEventLogs -ComputerName "ElectedLeader" `
        -EventID @(3507, 3508) `
        -ProviderName "Citrix High Availability Service" `
        -StartTime (Get-Date).AddHours(-24) `
        -MaxEvents 100

    # Export to file
    $events[$leader].Events | Select-Object TimeCreated, Id, LevelDisplayName, Message | Export-Csv -Path "C:\Reports\HA-Status-$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation
} else {
    Write-Host "System is in normal operations mode"
}
<!--NeedCopy-->

例 2: すべてのコネクタでConfigSyncステータスを確認する

. "C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts\LHCVisibilityTool.ps1"

$results = Get-LHCEventLogs -ComputerName "All" `
    -EventID @(503, 504, 505) `
    -ProviderName "Citrix ConfigSync Service" `
    -StartTime (Get-Date).AddHours(-6) `
    -MaxEvents 10

foreach ($computer in $results.Keys) {
    $lastEvent = $results[$computer].Events | Sort-Object TimeCreated -Descending | Select-Object -First 1
    $status = switch ($lastEvent.Id) {
        503 { "In Progress" }
        504 { "Success" }
        505 { "Failed" }
    }
    Write-Host "$computer - Last Sync: $($lastEvent.TimeCreated) - Status: $status"
}
<!--NeedCopy-->

例 3: HAモード中のセッション数を取得する

. "C:\Program Files\Citrix\Broker\Service\LHCVisibilityToolScripts\LHCVisibilityTool.ps1"

# Ensure we have an elected leader
$leader = Get-ElectedLeader
if ($leader) {
    # Get all sessions
    $sessions = Invoke-BrokerCommand -Command "Get-BrokerSession"
    Write-Host "Total Sessions: $($sessions.Count)"

    # Group by state
    $sessionsByState = $sessions | Group-Object SessionState
    foreach ($group in $sessionsByState) {
        Write-Host "  $($group.Name): $($group.Count)"
    }
} else {
    Write-Host "Not in HA mode - cannot query sessions from LHC"
}
<!--NeedCopy-->

高度なシナリオ

以下のシナリオでは、複数のツール機能をスクリプトに組み合わせて、停止テストの自動化や過去のHAモードデータのエクスポートなど、より複雑な操作を実行します。

停止テストを自動化する

# Enable outage mode
Write-Host "Enabling forced outage mode..."
$enableResults = Set-LHCOutageMode -Enable
$allEnabled = $enableResults.Values | Where-Object { -not $_.Success }
if ($allEnabled) {
    Write-Host "WARNING: Some connectors failed to enable outage mode - aborting test" -ForegroundColor Yellow
    return
}
Start-Sleep -Seconds 30

# Verify elected leader
$leader = Get-ElectedLeader
Write-Host "Elected leader: $leader"

# Test brokering
$machines = Invoke-BrokerCommand -Command "Get-BrokerMachine" -Properties @("MachineName", "RegistrationState")
Write-Host "Retrieved $($machines.Count) machines"

# Disable outage mode
Write-Host "Disabling forced outage mode..."
$disableResults = Set-LHCOutageMode
<!--NeedCopy-->

HAモード履歴のエクスポート

$haEvents = Get-LHCEventLogs -ComputerName "All" `
    -EventID @(3502, 3503) `
    -ProviderName "Citrix High Availability Service" `
    -StartTime (Get-Date).AddDays(-30) `
    -MaxEvents 1000

$report = foreach ($computer in $haEvents.Keys) {
    if (-not $haEvents[$computer].Success) { continue }
    foreach ($event in $haEvents[$computer].Events) {
        [PSCustomObject]@{
            Computer  = $computer
            EventID   = $event.Id
            EventType = if ($event.Id -eq 3502) { "Entered HA Mode" } else { "Exited HA Mode" }
            Time      = $event.TimeCreated
        }
    }
}
$report | Sort-Object Time | Export-Csv -Path "C:\Reports\HA-History.csv" -NoTypeInformation
<!--NeedCopy-->
ローカルホストキャッシュ可視化ツール