使用 powershell,我尝试获取 azure webapp 日志文件并将它们复制到 azure 存储帐户容器,然后删除
$webAppName = "WA01"
$resourceGroupName = "RG01"
$storageAccountName = "SA01"
$containerName = "container01"
$numberOfDays = 90
# Generate Kudu API URL for log files
$kuduApiUrl = "https://${webAppName}.scm.azurewebsites.net/api/vfs/LogFiles/"
# Retrieve publishing profile for the Azure Web App
Write-Host "Retrieving publishing profile for $webAppName..."
$publishingProfile = Get-AzWebAppPublishingProfile -ResourceGroupName $resourceGroupName -Name $webAppName
# Parse publishing profile XML to get credentials
[xml]$publishingProfileXml = $publishingProfile
$publishingUserName = $publishingProfileXml.publishData.publishProfile[0].userName
$publishingPassword = $publishingProfileXml.publishData.publishProfile[0].userPWD
# Convert credentials to base64
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("${publishingUserName}:${publishingPassword}"))
Write-Host "Retrieving log files from $webAppName..."
$logFilesToBackup = (Invoke-RestMethod -Uri $kuduApiUrl -Headers @{Authorization=("Basic $base64AuthInfo")} -Method GET).Where({
$mtimeValue = $_.mtime.Split('.')[0] # Remove milliseconds
$mtimeValue = $mtimeValue.Substring(0, 19) # Remove time zone offset
[DateTime]::ParseExact($mtimeValue, "yyyy-MM-dd'T'HH:mm:ss", [System.Globalization.CultureInfo]::InvariantCulture) -lt $cutoffDate
})
# Perform backup actions...
Write-Host "Performing backup actions for $webAppName..."
foreach ($logFile in $logFilesToBackup) {
$logFileName = $logFile.name
$logFileUrl = $logFile.href
Write-Host "Backing up log file: $logFileName"
$blobName = "$webAppName/$($logFileUrl.Substring($logFileUrl.LastIndexOf("/") + 1))"
Start-AzStorageBlobCopy -SrcUri $logFileUrl -DestContainer $containerName -DestBlob $blobName -Context $storageAccountContext
}
# Perform deletion actions...
Write-Host "Deleting log files older than $numberOfDays days from $webAppName..."
foreach ($logFile in $logFilesToBackup) {
$logFileName = $logFile.name
Write-Host "Deleting log file: $logFileName"
Invoke-RestMethod -Uri $logFileUrl -Headers @{Authorization=("Basic $base64AuthInfo")} -Method DELETE
}
警告:忽略不匹配的源存储上下文。源 uri 为 https://wa01.scm.azurewebsites.net/api/vfs/LogFiles/kudu/,终点为 https://sa01.blob。 core.windows.net/.
Invoke-RestMethod : {"Message":"无法删除目录。它要么不为空,要么不允许访问。"}
目的是将文件和目录复制到存储帐户容器,并在复制后从 webapp 中删除
要将文件和目录复制到存储帐户容器,并在复制后使用 PowerShell 从 Web 应用程序中删除:
为了防止从 Kudu 应用日志文件复制日志文件时出现 URI 不匹配警告,最好将所有日志文件复制到本地路径以便于访问。下载后,您可以将其上传到blob存储容器。
详细脚本如下:
$webAppName = "appsjl"
$resourceGroupName = "xxx"
$storageAccountName = "newaccs"
$containerName = "latest"
$numberOfDays = 90
$kuduApiUrl = "https://${webAppName}.scm.azurewebsites.net/api/vfs/LogFiles/"
Write-Host "Retrieving publishing profile for $webAppName..."
$publishingProfile = Get-AzWebAppPublishingProfile -ResourceGroupName $resourceGroupName -Name $webAppName
[xml]$publishingProfileXml = $publishingProfile
$publishingUserName = $publishingProfileXml.publishData.publishProfile[0].userName
$publishingPassword = $publishingProfileXml.publishData.publishProfile[0].userPWD
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("${publishingUserName}:${publishingPassword}"))
Write-Host "Retrieving log files from $webAppName..."
$response = Invoke-RestMethod -Uri $uri -Headers $headers -Method GET
$dateTimeValues = $response | Where-Object { $_.mtime -ne $null } | ForEach-Object {
$mtimeValue = $_.mtime.Split('.')[0] # Remove milliseconds
[DateTime]::ParseExact($mtimeValue, "yyyy-MM-dd'T'HH:mm:ss", [System.Globalization.CultureInfo]::InvariantCulture)
}
下载到本地路径的脚本:
foreach ($logFile in $response) {
$logFileName = $logFile.name
$logFileUrl = $logFile.href
$localpath = "<localfilepath to download the logfiles>"
Invoke-WebRequest -Uri $logFileUrl -Headers $headers -OutFile $localpath
$blobName = "$webAppName/$logFileName"
$key = "xxxxSe6Q=="
$context = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $key
Set-AzStorageBlobContent -File $localpath -Container $containerName -Blob $blobName -Context $context
输出:
下载到本地文件夹路径:
存储块:
要删除它们,您使用的命令是合适的。确保所有参数都已正确给出并尝试执行相同的命令。
Set-AzStorageBlobContent