3

我一直在尝试让我的 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();
        }
    }
}

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

Azure Blob 存储的屏幕截图

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

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

4

3 回答 3

2

以下是我最终能够让所有日志记录在 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 应用程序中的所有日志记录。

于 2012-09-13T23:43:46.027 回答
0

通过查看 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);

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

于 2012-09-05T13:35:25.287 回答
0

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

于 2012-09-05T10:15:14.307 回答