首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何清理蔚蓝的网页应用LogFiles目录?

如何清理蔚蓝的网页应用LogFiles目录?
EN

Stack Overflow用户
提问于 2018-10-14 08:28:38
回答 2查看 5K关注 0票数 3

我们的蔚蓝web应用服务有一个相当大的问题。突然之间,我们开始得到“磁盘离开空间”错误。当然,LogFiles目录很大。我们不知道如何清除这个目录。过了一段时间,没有找到任何推荐的方法,我们认为它只是日志文件,可能只是删除一些文件在那里是安全的。

通过kudu控制台,我们删除了一个转储文件日志文件/转储,还通过一个rm stdout_*.log命令删除了一堆stdout文件。令人震惊的是,这完全毁了我们的插槽!我们试图重新部署,但是我们得到了HTTP 503错误,而对于如何解决这个问题,我们并没有什么明显的发现。

幸运的是,我们删除了暂存槽上的这些文件,而不是生产,因此没有停机时间。我们结束了旋转一个全新的插槽,并在那里部署,然后删除前一个插槽。

不是一次很好的经历。有人能告诉我可能发生了什么吗?我们有一个非常简单的asp.net核心2.1应用程序。

删除日志文件真的会破坏一个插槽吗?!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-15 08:51:31

删除日志文件真的会搞乱一个插槽吗?

不是的。您可能会删除一些配置文件,这会导致插槽应用程序无法工作。

您可以使用以下代码删除Web。

代码语言:javascript
复制
$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

输出:

票数 1
EN

Stack Overflow用户

发布于 2019-12-17 21:48:43

解决这一问题的一种方法是创建一个CRON触发的网络作业,它每天或每周在上运行。Web运行在上,同样的App ,这意味着您可以使用简单的PowerShell脚本来删除由App创建的旧日志文件。下面是一个例子:

代码语言:javascript
复制
$LogFolder = "D:\home\site\wwwroot\App_Data\Logs";
$DaysToKeepLogsAround = 30;
Get-ChildItem -Path $LogFolder -Recurse -File | Where LastWriteTime  -lt  (Get-Date).AddDays(-$DaysToKeepLogsAround) | Remove-Item -Force;

我在Azure上也遇到了大量日志文件的存储问题,并决定在这个博客文章中更详细地记录这个过程:“使用Azure和PowerShell删除旧web应用程序日志”

Sidenote:一些日志库内置了对自动删除旧日志文件的支持,这些日志文件将实现与上述相同的功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52800853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档