はじめに
Build 2024 にあわせて、Log Analytics ワークスペースのレプリケーションがプレビューになりました。
https://learn.microsoft.com/ja-jp/azure/azure-monitor/logs/workspace-replication
あるリージョンの Log Analytics ワークスペースに書き込まれたデータを Azure 側で別リージョンの Log Analytics ワークスペースに非同期コピーする機能です。これまでは、Log Analytics ワークスペースに保存するデータをリージョン冗長しようとすると、データを書き込む側で複数のリージョンに書き込む必要がありました。送る側ではなく受け取る側で別リージョンにレプリケーションしてくれるとなると、ストレージアカウントの GRS の様に気軽にリージョン冗長を実現できます。
現時点で費用は発表されていません。ただし、プレビューの発表では次のように記載されているので、単純に2倍にはならなそうです。
Note that replication isn’t free of charge, but is much more affordable than dual homing (ingesting to two workspaces places on different regions) and is easier to manage and maintain. When you enable replication, your logs are effectively ingested to 2 different regions, and billing is done per replicated GB
Public Preview: Log Analytics Workspace Replication
プレビュー中ということもあり多くの制約事項はありますが、動作を理解するために実際に試してみました。
設定
ポータルからは設定できません。API を直接叩く必要があります。レプリケーションを true にして複製先リージョンを指定します。今回は eastus の Log Analytics ワークスペースを westus2 にレプリケーションします。
$body = @{
"properties" = @{
"replication"= @{
"enabled"= $true
"location"= "westus2"
}
}
"location"= "eastus"
} | ConvertTo-Json
$apiversion = "?api-version=2023-01-01-preview"
$resource = "/subscriptions/MY-SUB-ID/resourcegroups/loganarepli/providers/microsoft.operationalinsights/workspaces/la-eu3"
$id = $resource + $apiversion
$res = invoke-azrest -Path $id -Method Put -Payload $body
上手く行くと replication > provisioningState が EnableRequested になります。また、リソース自体の provisioningState が Updating になります。
($res.content | ConvertFrom-Json).properties.replication
enabled location provisioningState lastModifiedDate
------- -------- ----------------- -----------------
True westus2 EnableRequested 2024/06/05 5:31:29
しばし待つと、replication > provisioningState が Enabling を経て Succeeded になります。また、リソース自体の provisioningState も Succeeded になります。
$res = invoke-azrest -Path $id -Method GET
($res.content | ConvertFrom-Json).properties.replication
enabled location provisioningState lastModifiedDate
------- -------- ----------------- ----------------
True westus2 Succeeded 2024/06/05 5:31:29
この設定が完了すると、Log Analytics ワークスペースの ID と同じ名前のデータ収集エンドポイントが自動的に作成されます。
$ws = Get-AzOperationalInsightsWorkspace -ResourceGroupName loganarepli -Name la-eu3
$uniqueName = $ws.CustomerId -replace "-",""
Get-AzDataCollectionEndpoint -ResourceGroupName loganarepli -Name $uniqueName | Select-Object Name, FailoverConfigurationActiveLocation,FailoverConfigurationLocation,Kind,MetadataProvisionedByResourceId,SystemDataCreatedByType | fl *
Name : 0b30514a419e4455a442f23b92df1aa4
FailoverConfigurationActiveLocation : eastus
FailoverConfigurationLocation : {{
"location": "eastus"
}, {
"location": "westus2"
}}
Kind : SystemManaged
MetadataProvisionedByResourceId : /subscriptions/MY-SUB-ID/resourceGroups/loganarepli/providers/Microsoft.OperationalInsights/workspaces/la-eu3
SystemDataCreatedByType : Application
FailoverConfigurationLocation というプロパティが存在しているのが分かります。また、自動的に作成されたので SystemDataCreatedByType が Application であったり、どの Log Analytics ワークスペースによって作成されたかがわかるプロパティが存在していたりと、普段人間が作るデータ収集エンドポイントとはちょっと違います。
あとはこのデータ収集エンドポイントを、仮想マシンに紐づけるデータ収集ルールに関連付けます。仮想マシンにデータ収集エンドポイントを紐づけるのではなく、データ収集ルールにデータ収集エンドポイントを紐づける必要があります。
> Get-AzDataCollectionRule -ResourceGroupName loganarepli -name dcr-la-eu3 | Select-Object DataCollectionEndpointId
DataCollectionEndpointId
------------------------
/subscriptions/MY-SUB-ID/resourceGroups/loganarepli/providers/microsoft.insights/dataCollectionEndpoints/0b30514a419e4455a442f23b92df1aa4
動作確認
本来は Log Analytics の検索画面にレプリケーション先の Workspaces のデータを検索するトグルが出るはずなのですが、私の環境では表示されませんでした。なので、実際にレプリケーション先のリージョンに切り替えてみて、各種動作を確認します。
切り替え前の名前解決結果は次の通りです。確認対象の FQDN は次の3つです。
- データ収集エンドポイントの構成アクセスエンドポイント
- データ収集エンドポイントのログインジェストエンドポイント
- Log Analytics ワークスペースのログ取り込みエンドポイント
次のログの通り、いずれも EastUS に含まれるグローバル IP アドレスが返ってきています。
# データ収集エンドポイントの構成アクセスエンドポイント
> nslookup 0b30514a419e4455a442f23b92df1aa4-byxn-eastus.z1.handler.control.monitor.azure.com
サーバー: UnKnown
Address: 192.168.111.254
権限のない回答:
名前: amcs-prod-eus-1-handler.eastus.cloudapp.azure.com
Address: 20.49.109.88
Aliases: 0b30514a419e4455a442f23b92df1aa4-byxn-eastus.z1.handler.control.monitor.azure.com
eastus.handler.control.monitor.azure.com
amcs-prod-eus-handler.trafficmanager.net
> $res = Invoke-WebRequest https://azcheck.aimless.jp/ip/20.49.109.88
> ($res.content | ConvertFrom-Json).details
category name prefix
-------- ---- ------
BgpServiceCommunity Azure East US 20.49.104.0/21
ServiceTag AzureCloud 20.49.104.0/21
ServiceTag AzureCloud.eastus 20.49.104.0/21
ServiceTag AzureMonitor 20.49.109.80/28
# データ収集エンドポイントのログインジェストエンドポイント
> nslookup 0b30514a419e4455a442f23b92df1aa4-byxn-eastus.logs.z1.ingest.monitor.azure.com
サーバー: UnKnown
Address: 192.168.111.254
権限のない回答:
名前: gig-la-prod-cluster-eus-5-fe.eastus.cloudapp.azure.com
Address: 20.121.252.6
Aliases: 0b30514a419e4455a442f23b92df1aa4-byxn-eastus.logs.z1.ingest.monitor.azure.com
eastus.prod.la.ingest.monitor.core.windows.net
gig-la-prod-eastus.trafficmanager.net
> $res = Invoke-WebRequest https://azcheck.aimless.jp/ip/20.121.252.6
> ($res.content | ConvertFrom-Json).details
category name prefix
-------- ---- ------
BgpServiceCommunity Azure East US 20.121.0.0/16
ServiceTag AzureCloud 20.121.0.0/16
ServiceTag AzureCloud.eastus 20.121.0.0/16
# Log Analytics ワークスペースのログ取り込みエンドポイント
> nslookup 0b30514a-419e-4455-a442-f23b92df1aa4.ods.opinsights.azure.com
サーバー: UnKnown
Address: 192.168.111.254
権限のない回答:
名前: ipv4-eus-oi-ods-cses-f.eastus.cloudapp.azure.com
Address: 40.71.12.233
Aliases: 0b30514a-419e-4455-a442-f23b92df1aa4.ods.opinsights.azure.com
ods.trafficmanager.net
> $res = Invoke-WebRequest https://azcheck.aimless.jp/ip/40.71.12.233
> ($res.content | ConvertFrom-Json).details
category name prefix
-------- ---- ------
BgpServiceCommunity Azure East US 40.71.12.0/24
ServiceTag AzureCloud 40.71.0.0/16
ServiceTag AzureCloud.eastus 40.71.0.0/16
ServiceTag AzureMonitor 40.71.12.224/28
Log Analytics ワークスペースをフェイルオーバします。現時点でフェイルオーバは API 直叩きです。指定するリソース ID はレプリケーション元の Log Analytics ワークスペースの ID ではなく、レプリケーション先のリージョンを含む ID になります。
> $apiversion = "?api-version=2023-01-01-preview"
> $resource = "/subscriptions/MY-SUB-ID/resourcegroups/loganarepli/providers/microsoft.operationalinsights/locations/westus2/workspaces/la-eu3"
> $id = $resource + "/failover" + $apiversion
> invoke-azrest -Path $id -Method POST
フェイルオーバはアクティビティログにしっかり記録されます。Log Analytics ワークスペースとデータ収集エンドポイントに対するアクションが記録されました。
EventTimestamp : 2024/06/05 8:26:46
EventName : Begin request
Status : Started
OperationName : microsoft.operationalinsights/locations/workspaces/failover/action
ResourceId : /subscriptions/MY-SUB-ID/resourcegroups/loganarepli/providers/microsoft.operationalinsights/locations/westus2/workspaces/la-eu3
EventTimestamp : 2024/06/05 8:26:48
EventName : End request
Status : Accepted
OperationName : microsoft.operationalinsights/locations/workspaces/failover/action
ResourceId : /subscriptions/MY-SUB-ID/resourcegroups/loganarepli/providers/microsoft.operationalinsights/locations/westus2/workspaces/la-eu3
EventTimestamp : 2024/06/05 8:26:51
EventName : Begin request
Status : Started
OperationName : Trigger failover on a data collection endpoint
ResourceId : /subscriptions/MY-SUB-ID/resourcegroups/loganarepli/providers/microsoft.insights/datacollectionendpoints/0b30514a419e4455a442f23b92df1aa4
EventTimestamp : 2024/06/05 8:26:52
EventName : End request
Status : Succeeded
OperationName : Trigger failover on a data collection endpoint
ResourceId : /subscriptions/MY-SUB-ID/resourcegroups/loganarepli/providers/microsoft.insights/datacollectionendpoints/0b30514a419e4455a442f23b92df1aa4
EventTimestamp : 2024/06/05 8:27:09
EventName : End request
Status : Succeeded
OperationName : microsoft.operationalinsights/locations/workspaces/failover/action
ResourceId : /subscriptions/MY-SUB-ID/resourcegroups/loganarepli/providers/microsoft.operationalinsights/locations/westus2/workspaces/la-eu3
切り替えた後の DNS 名前解決結果は次の通りです。データ収集エンドポイントのログインジェストエンドポイントと Log Analytics ワークスペースのログ取り込みエンドポイントが westus2 のグローバル IP アドレスに切り替わっていることが分かります。データ収集エンドポイントの構成アクセスエンドポイントは切り替わらないようです。
# データ収集エンドポイントの構成アクセスエンドポイント
> nslookup 0b30514a419e4455a442f23b92df1aa4-byxn-eastus.z1.handler.control.monitor.azure.com
サーバー: UnKnown
Address: 192.168.111.254
権限のない回答:
名前: amcs-prod-eus-1-handler.eastus.cloudapp.azure.com
Address: 20.49.109.88
Aliases: 0b30514a419e4455a442f23b92df1aa4-byxn-eastus.z1.handler.control.monitor.azure.com
eastus.handler.control.monitor.azure.com
amcs-prod-eus-handler.trafficmanager.net
> $res = Invoke-WebRequest https://azcheck.aimless.jp/ip/20.49.109.88
> ($res.content | ConvertFrom-Json).details
category name prefix
-------- ---- ------
BgpServiceCommunity Azure East US 20.49.104.0/21
ServiceTag AzureCloud 20.49.104.0/21
ServiceTag AzureCloud.eastus 20.49.104.0/21
ServiceTag AzureMonitor 20.49.109.80/28
# データ収集エンドポイントのログインジェストエンドポイント
> nslookup 0b30514a419e4455a442f23b92df1aa4-byxn-eastus.logs.z1.ingest.monitor.azure.com
サーバー: UnKnown
Address: 192.168.111.254
権限のない回答:
名前: gig-la-prod-cluster-wus2-5-fe.westus2.cloudapp.azure.com
Address: 20.99.187.20
Aliases: 0b30514a419e4455a442f23b92df1aa4-byxn-eastus.logs.z1.ingest.monitor.azure.com
westus2.prod.la.ingest.monitor.core.windows.net
gig-la-prod-westus2.trafficmanager.net
> $res = Invoke-WebRequest https://azcheck.aimless.jp/ip/20.99.187.20
> ($res.content | ConvertFrom-Json).details
category name prefix
-------- ---- ------
BgpServiceCommunity Azure West US 2 20.99.128.0/17
ServiceTag AzureCloud 20.99.128.0/17
ServiceTag AzureCloud.westus2 20.99.128.0/17
# Log Analytics ワークスペースのログ取り込みエンドポイント
> nslookup 0b30514a-419e-4455-a442-f23b92df1aa4.ods.opinsights.azure.com
サーバー: UnKnown
Address: 192.168.111.254
権限のない回答:
名前: ipv4-wus2-oi-ods-cses-c.westus2.cloudapp.azure.com
Address: 13.66.147.148
Aliases: 0b30514a-419e-4455-a442-f23b92df1aa4.ods.opinsights.azure.com
wus2-oi-ods.trafficmanager.net
> $res = Invoke-WebRequest https://azcheck.aimless.jp/ip/13.66.147.148
> ($res.content | ConvertFrom-Json).details
category name prefix
-------- ---- ------
BgpServiceCommunity Azure West US 2 13.66.146.0/23
ServiceTag AzureCloud 13.66.128.0/17
ServiceTag AzureCloud.westus2 13.66.128.0/17
ServiceTag AzureMonitor 13.66.147.144/28
フェイルバックします。こちらも現時点では API 直叩きです。指定するリソース ID はフェイルオーバ後にレプリケーション先になっている eastus の Log Analytics ワークスペースになります。
$apiversion = "?api-version=2023-01-01-preview"
$resource = "/subscriptions/MY-SUB-ID/resourcegroups/loganarepli/providers/microsoft.operationalinsights/workspaces/la-eu3"
$id = $resource + "/failback" + $apiversion
invoke-azrest -Path $id -Method POST
フェイルバック後の名前解決結果は次の通りです。 EastUS に含まれるグローバル IP アドレスにもどっていることが分かります。
> nslookup 0b30514a419e4455a442f23b92df1aa4-byxn-eastus.z1.handler.control.monitor.azure.com
サーバー: UnKnown
Address: 192.168.111.254
権限のない回答:
名前: amcs-prod-eus-1-handler.eastus.cloudapp.azure.com
Address: 20.49.109.88
Aliases: 0b30514a419e4455a442f23b92df1aa4-byxn-eastus.z1.handler.control.monitor.azure.com
eastus.handler.control.monitor.azure.com
amcs-prod-eus-handler.trafficmanager.net
> $res = Invoke-WebRequest https://azcheck.aimless.jp/ip/20.49.109.88
> ($res.content | ConvertFrom-Json).details
category name prefix
-------- ---- ------
BgpServiceCommunity Azure East US 20.49.104.0/21
ServiceTag AzureCloud 20.49.104.0/21
ServiceTag AzureCloud.eastus 20.49.104.0/21
ServiceTag AzureMonitor 20.49.109.80/28
> nslookup 0b30514a419e4455a442f23b92df1aa4-byxn-eastus.logs.z1.ingest.monitor.azure.com
サーバー: UnKnown
Address: 192.168.111.254
権限のない回答:
名前: gig-la-prod-cluster-eus-5-fe.eastus.cloudapp.azure.com
Address: 20.121.252.6
Aliases: 0b30514a419e4455a442f23b92df1aa4-byxn-eastus.logs.z1.ingest.monitor.azure.com
eastus.prod.la.ingest.monitor.core.windows.net
gig-la-prod-eastus.trafficmanager.net
> $res = Invoke-WebRequest https://azcheck.aimless.jp/ip/20.121.252.6
> ($res.content | ConvertFrom-Json).details
category name prefix
-------- ---- ------
BgpServiceCommunity Azure East US 20.121.0.0/16
ServiceTag AzureCloud 20.121.0.0/16
ServiceTag AzureCloud.eastus 20.121.0.0/16
> nslookup 0b30514a-419e-4455-a442-f23b92df1aa4.ods.opinsights.azure.com
サーバー: UnKnown
Address: 192.168.111.254
権限のない回答:
名前: ipv4-eus-oi-ods-cses-b.eastus.cloudapp.azure.com
Address: 20.42.73.204
Aliases: 0b30514a-419e-4455-a442-f23b92df1aa4.ods.opinsights.azure.com
ods.trafficmanager.net
> $res = Invoke-WebRequest https://azcheck.aimless.jp/ip/20.42.73.204
> ($res.content | ConvertFrom-Json).details
category name prefix
-------- ---- ------
BgpServiceCommunity Azure East US 20.42.0.0/17
ServiceTag AzureCloud 20.42.0.0/17
ServiceTag AzureCloud.eastus 20.42.0.0/17
ServiceTag AzureMonitor 20.42.73.128/25
フェイルバックもしっかりアクティビティログに記録されます。
EventTimestamp : 2024/06/05 10:47:42
EventName : Begin request
Status : Started
OperationName : microsoft.operationalinsights/workspaces/failback/action
ResourceId : /subscriptions/MY-SUB-ID/resourcegroups/loganarepli/providers/microsoft.operationalinsights/workspaces/la-eu3
EventTimestamp : 2024/06/05 10:47:43
EventName : End request
Status : Accepted
OperationName : microsoft.operationalinsights/workspaces/failback/action
ResourceId : /subscriptions/MY-SUB-ID/resourcegroups/loganarepli/providers/microsoft.operationalinsights/workspaces/la-eu3
EventTimestamp : 2024/06/05 10:47:44
EventName : Begin request
Status : Started
OperationName : Trigger failback on a data collection endpoint
ResourceId : /subscriptions/MY-SUB-ID/resourcegroups/loganarepli/providers/microsoft.insights/datacollectionendpoints/0b30514a419e4455a442f23b92df1aa4
EventTimestamp : 2024/06/05 10:47:44
EventName : End request
Status : Succeeded
OperationName : Trigger failback on a data collection endpoint
ResourceId : /subscriptions/MY-SUB-ID/resourcegroups/loganarepli/providers/microsoft.insights/datacollectionendpoints/0b30514a419e4455a442f23b92df1aa4
EventTimestamp : 2024/06/05 10:48:03
EventName : End request
Status : Succeeded
OperationName : microsoft.operationalinsights/workspaces/failback/action
ResourceId : /subscriptions/MY-SUB-ID/resourcegroups/loganarepli/providers/microsoft.operationalinsights/workspaces/la-eu3
どちらの Log Analytics にクエリを実行したかは、診断ログで出力される LAQueryLogs の WorkspaceRegion に記録されます。8:26に westus2 にフェイルオーバ、10:47に eastus にフェイルバックしていますので、フェイルオーバ中のクエリがフェイルオーバ先の westus2 で実行されていることを確認できます。
> $query = 'LAQueryLogs | where _ResourceId == "/subscriptions/MY-SUB-ID/resourcegroups/loganarepli/providers/microsoft.operationalinsights/workspaces/la-eu3" | project TimeGenerated, QueryText,WorkspaceRegion | where QueryText contains "Heartbeat" | sort by TimeGenerated asc'
> $res = Invoke-AzOperationalInsightsQuery -WorkspaceId 3f570f54-9093-4fba-8828-cab36f1edc66 -Query $query
> $res = ($res.Results | Convertto-Json).replace("\n","") | ConvertFrom-Json -Depth 100
> $res | Where-Object {$_.QueryText -eq "Heartbeat"}
TimeGenerated QueryText WorkspaceRegion
------------- --------- ---------------
2024/06/05 7:35:58 Heartbeat eastus
2024/06/05 7:56:48 Heartbeat eastus
2024/06/05 7:57:53 Heartbeat eastus
2024/06/05 8:01:14 Heartbeat eastus
2024/06/05 8:16:56 Heartbeat eastus
2024/06/05 8:17:54 Heartbeat eastus
2024/06/05 10:37:01 Heartbeat westus2
2024/06/05 10:37:04 Heartbeat westus2
2024/06/05 10:38:08 Heartbeat westus2
2024/06/05 10:38:45 Heartbeat westus2
2024/06/05 10:48:55 Heartbeat eastus
まとめ
パブリックプレビューになった Log Analytics ワークスペースのレプリケーションを試しました。レプリケーション先のリソースを自分で管理する必要はなく、Azure 側が DNS レベルで自動的に切り替えてくれるので、気軽に使えそうです。現時点では Application insight や VM Insight など高頻度で利用する機能がサポートされていないので、GA までにはサポートされるとありがたいです。
Note
- 当サイトは個人のブログです。このブログに示されている見解や意見は個人的なものであり、所属組織の見解や意見を表明するものではありません。
- 公開情報を踏まえて正確な情報を掲載するよう努めますが、その内容の完全性や正確性、有用性、安全性、最新性について一切保証しません。
- 添付文章やリンク先などを含む本サイトの内容は作成時点でのものであり、予告なく変更される場合があります。