【问题标题】:how to get azure webrole to log all 404s如何让 azure webrole 记录所有 404
【发布时间】:2012-08-30 00:05:25
【问题描述】:

我一直在尝试让我的 MVC 项目使用 azure 进行日志记录,但到目前为止还没有取得多大成功。

我的ServiceConfiguration.Cloud.cscfg 文件中有一个诊断连接字符串,它指向我的 Blob 存储:

   ...
  <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.DiagnosticsConnectionString" value="**ConectionString**" />
</ConfigurationSettings>

我的web.config 已设置跟踪

    ...
    <tracing>
      <traceFailedRequests>
        <remove path="*"/>
        <add path="*">
          <traceAreas>
            <add provider="ASP" verbosity="Verbose" />
            <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
            <add provider="ISAPI Extension" verbosity="Verbose" />
            <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module" verbosity="Verbose" />
          </traceAreas>
          <failureDefinitions timeTaken="00:00:15" statusCodes="400-599" />
        </add>
      </traceFailedRequests>
    </tracing>
  </system.webServer>

我的WebRole.cs 中有以下内容

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.Diagnostics;
using Microsoft.WindowsAzure.ServiceRuntime;

namespace MvcWebRole1
{
    public class WebRole : RoleEntryPoint
    {
        public override bool OnStart()
        {
         // Get the factory configuration so that it can be edited
         DiagnosticMonitorConfiguration config = DiagnosticMonitor.GetDefaultInitialConfiguration();


         // Set scheduled transfer interval for infrastructure logs to 1 minute
         config.DiagnosticInfrastructureLogs.ScheduledTransferPeriod = System.TimeSpan.FromMinutes(1);

         // Specify a logging level to filter records to transfer

         config.DiagnosticInfrastructureLogs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;

         // Set scheduled transfer interval for user's Windows Azure Logs to 1 minute
         config.Logs.ScheduledTransferPeriod = System.TimeSpan.FromMinutes(1);


         DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.DiagnosticsConnectionString", config);

         //RoleEnvironment.Changing += this.RoleEnvironmentChanging;

         return base.OnStart();
        }
    }
}

但我没有看到任何诊断日志

mam 文件夹只包含一个MACommanda.xml 和一个MASecretvsdeploy 文件夹是空的,wad-control-container 有一个用于每个部署的文件。

我是否遗漏了什么/做错了什么?

我一直在尝试遵循 http://msdn.microsoft.com/en-us/library/windowsazure/gg433048.aspx 的指南,尤其是 http://channel9.msdn.com/learn/courses/Azure/Deployment/DeployingApplicationsinWindowsAzure/Exercise-3-Monitoring-Applications-in-Windows-Azure

更新:

我发现以下可能是问题的一部分

IIS7 日志未正确收集 - http://msdn.microsoft.com/en-us/library/hh134842

虽然这应该只说明 404 不工作,但故障定义为 15 秒,我的控制器操作中的 17 秒睡眠应该仍然被记录

【问题讨论】:

    标签: azure azure-storage azure-blob-storage azure-web-roles


    【解决方案1】:

    这是我最终能够在 Azure Web 角色上运行所有日志记录的方法:

    在 WebRole.cs 中包括以下内容:

     // Get the default initial configuration for DiagnosticMonitor.
            var config = DiagnosticMonitor.GetDefaultInitialConfiguration();
    
            // Filter the logs so that only error-level logs are transferred to persistent storage.
            config.DiagnosticInfrastructureLogs.ScheduledTransferLogLevelFilter = config.Logs.ScheduledTransferLogLevelFilter = 
                config.WindowsEventLog.ScheduledTransferLogLevelFilter = LogLevel.Verbose;
    
            // Schedule a transfer period of 30 minutes.
            config.DiagnosticInfrastructureLogs.ScheduledTransferPeriod = config.Logs.ScheduledTransferPeriod = config.WindowsEventLog.ScheduledTransferPeriod = 
                config.Directories.ScheduledTransferPeriod = config.PerformanceCounters.ScheduledTransferPeriod = TimeSpan.FromMinutes(1);
    
            // Specify a buffer quota.
            config.DiagnosticInfrastructureLogs.BufferQuotaInMB = config.Logs.BufferQuotaInMB = config.WindowsEventLog.BufferQuotaInMB = 
                config.Directories.BufferQuotaInMB = config.PerformanceCounters.BufferQuotaInMB = 512;
    
            // Set an overall quota of 8GB maximum size.
            config.OverallQuotaInMB = 8192;
    
            // WindowsEventLog data buffer being added to the configuration, which is defined to collect event data from the System and Application channel
            config.WindowsEventLog.DataSources.Add("System!*");
            config.WindowsEventLog.DataSources.Add("Application!*");
    
            // Use 30 seconds for the perf counter sample rate.
            TimeSpan perfSampleRate = TimeSpan.FromSeconds(30D);
    
            config.PerformanceCounters.DataSources.Add(new PerformanceCounterConfiguration()
            {
                CounterSpecifier = @"\Memory\Available Bytes",
                SampleRate = perfSampleRate
            });
    
            config.PerformanceCounters.DataSources.Add(new PerformanceCounterConfiguration()
            {
                CounterSpecifier = @"\Processor(_Total)\% Processor Time",
                SampleRate = perfSampleRate
            });
    
            config.PerformanceCounters.DataSources.Add(new PerformanceCounterConfiguration()
            {
                CounterSpecifier = @"\ASP.NET\Applications Running",
                SampleRate = perfSampleRate
            });
    
    
    
            // Start the DiagnosticMonitor using the diagnosticConfig and our connection string.
            DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString",config);
    
    
            return base.OnStart();
    

    在 system.WebServer 下的 web.config 中添加以下内容:

        <tracing>
      <traceFailedRequests>
        <remove path="*"/>
        <add path="*">
          <traceAreas>
            <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
            <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module" verbosity="Verbose" />
          </traceAreas>
          <failureDefinitions statusCodes="400-599" />
        </add>
      </traceFailedRequests>
    </tracing>
    

    在服务定义文件的web角色下添加以下内容:

     <LocalResources>
      <LocalStorage name="DiagnosticStore" sizeInMB="8192" cleanOnRoleRecycle="false"/>
    </LocalResources>
    

    这应该会启用您在 MVC 应用程序中的所有日志记录。

    【讨论】:

      【解决方案2】:

      您可以尝试从“failureDefinitions”节点中删除“timeTaken”属性吗?参考:http://msdn.microsoft.com/en-us/library/aa965046(v=VS.90).aspx

      【讨论】:

      • 现在正在尝试,等待部署。在我的控制器操作中,我有一个 sleep(17000),它应该根据 channel9 指南触发 timeTaken 日志记录,但根本看不到正在创建的文件夹
      【解决方案3】:

      通过查看 wad-control-container 中的相应文件来检查部署的诊断设置。

      我注意到,根据我的经验,您没有设置 DiagnosticInfrastructureLogs 或 Logs 的所有必需值,包括 bufferQuotaInMB 和 scheduleTransferLogLevelFilter。

      试试这个:

                   // Get the factory configuration so that it can be edited
               DiagnosticMonitorConfiguration config = DiagnosticMonitor.GetDefaultInitialConfiguration();
      
               config.DiagnosticInfrastructureLogs.bufferQuotaInMB = 512;
               config.DiagnosticInfrastructureLogs.ScheduledTransferPeriod = System.TimeSpan.FromMinutes(1D);
               config.DiagnosticInfrastructureLogs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;
      
               config.Logs.bufferQuotaInMB = 512;
               config.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;
               config.Logs.ScheduledTransferPeriod = System.TimeSpan.FromMinutes(1D);
      

      尝试开始。还要确保您已添加跟踪侦听器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-31
        • 1970-01-01
        • 1970-01-01
        • 2014-12-07
        • 2018-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多