Как очистить директорию LogFiles лазурного веб-приложения? - PullRequest
0 голосов
/ 14 октября 2018

У нас была довольно большая проблема с нашим сервисом веб-приложений Azure.Внезапно мы начали получать ошибки «диск из пространства».Конечно же, каталог LogFiles был огромен.Мы не были уверены, как очистить этот каталог.Через некоторое время, не найдя ни одного рекомендованного способа сделать это, мы решили, что это просто файлы журнала, и, вероятно, было безопасно просто удалить несколько файлов там.

Через консоль kudu powershell мы удалилидамп файла LogFile / dumps, и мы также удалили кучу файлов стандартного вывода с помощью команды rm stdout_*.log.Шокирующе это полностью испортило наш слот!Мы попытались выполнить повторное развертывание, но получили ошибки HTTP 503, и для нас не было ничего очевидного в том, как это исправить.

К счастью, мы удаляли эти файлы в промежуточном слоте, а не в производстве, поэтому не было простоев.Мы закончили вращение нового слота и развертывание там, а затем удалили предыдущий слот.

Не очень хороший опыт наверняка.Может ли кто-нибудь просветить меня о том, что могло случиться?У нас довольно простое приложение asp.net core 2.1.

Может ли удаление файлов журнала действительно испортить слот ???!

1 Ответ

0 голосов
/ 15 октября 2018

Может ли удаление файлов журнала действительно испортить слот?

Нет.Вы можете удалить файл конфигурации, из-за которого приложение слота не работает.

Вы можете использовать следующий код для удаления файла журнала веб-приложения.

$resourceGroupName="xxx"
$webAppName="xxxx"
$slotName="xxxxx"
function Get-AzureRmWebAppPublishingCredentials($resourceGroupName, $webAppName, $slotName = $null){
    if ([string]::IsNullOrWhiteSpace($slotName)){
        $resourceType = "Microsoft.Web/sites/config"
        $resourceName = "$webAppName/publishingcredentials"
    }
    else{
        $resourceType = "Microsoft.Web/sites/slots/config"
        $resourceName = "$webAppName/$slotName/publishingcredentials"
    }
    $publishingCredentials = Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroupName -ResourceType $resourceType -ResourceName $resourceName -Action list -ApiVersion 2015-08-01 -Force
    Write-Host $publishingCredentials   
    return $publishingCredentials
}

function Get-KuduApiAuthorizationHeaderValue($resourceGroupName, $webAppName, $slotName = $null){
    $publishingCredentials = Get-AzureRmWebAppPublishingCredentials $resourceGroupName $webAppName $slotName
    Write-Host $publishingCredentials.Properties.PublishingUserName
    Write-Host $publishingCredentials.Properties.PublishingPassword
    return ("Basic {0}" -f [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $publishingCredentials.Properties.PublishingUserName, $publishingCredentials.Properties.PublishingPassword))))
}

function Delete-WebAppLogFiles($resourceGroupName, $webAppName, $slotName = ""){

    $apiAuthorizationToken = Get-KuduApiAuthorizationHeaderValue $resourceGroupName $webAppName $slotName
    if ($slotName -eq ""){
        $apiUrl = "https://$webAppName.scm.azurewebsites.net/api/command"
    }
    else{
        $apiUrl = "https://$webAppName`-$slotName.scm.azurewebsites.net/api/command"
    }

    $apiCommand = @{
        #command='del *.* /S /Q /F'
        command = 'powershell.exe -command "Remove-Item -path d:\\home\\LogFiles\\* -recurse"'
        dir='d:\\home\\LogFiles'
    }

    Write-Output $apiUrl
    Write-Output $apiAuthorizationToken
    Write-Output $apiCommand
    Invoke-RestMethod -Uri $apiUrl -Headers @{"Authorization"=$apiAuthorizationToken;"If-Match"="*"} -Method POST -ContentType "application/json" -Body (ConvertTo-Json $apiCommand)

}

Delete-WebAppLogFiles $resourceGroupName $webAppName $slotName

Вывод: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...