【问题标题】:Web Server Monitoring via asp.net web page通过 asp.net 网页进行 Web 服务器监控
【发布时间】:2012-07-03 19:06:03
【问题描述】:

我想在网页上监控以下内容:

  • 总响应时间
  • 总字节数
  • 吞吐量(请求/秒)
  • 已使用内存
  • 硬盘空间和 IO 问题
  • 服务器 CPU 开销
  • 错误(按错误代码)
  • MSSQL 加载
  • IIS 错误

我为网络托管托管了一个小型服务器集群。我需要在 ASP.NET 中创建一个硬件视图,以尽可能接近实时快照。

我听说过 Spiceworks 或其他完成此任务的方法。我同意这些都是很棒的工具,但我想编写代码并保持简单。

这是我想出/找到的一些现有代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string[] logicalDrives = System.Environment.GetLogicalDrives();
            //do stuff to put it in the view.
        }
        protected static string ToSizeString(double bytes)
        {
            var culture = CultureInfo.CurrentUICulture;
            const string format = "#,0.0";

            if (bytes < 1024)
                return bytes.ToString("#,0", culture);
            bytes /= 1024;
            if (bytes < 1024)
                return bytes.ToString(format, culture) + " KB";
            bytes /= 1024;
            if (bytes < 1024)
                return bytes.ToString(format, culture) + " MB";
            bytes /= 1024;
            if (bytes < 1024)
                return bytes.ToString(format, culture) + " GB";
            bytes /= 1024;
            return bytes.ToString(format, culture) + " TB";
        }
        public static string ToApproximateString(this TimeSpan time)
        {
            if (time.TotalDays > 14)
                return ((int)(time.TotalDays / 7)).ToString("#,0.0") + " weeks";
            if (14 - time.TotalDays < .75)
                return "two weeks";
            if (time.TotalDays > 1)
                return time.TotalDays.ToString("#,0.0") + " days";
            else if (time.TotalHours > 1)
                return time.TotalHours.ToString("#,0.0") + " hours";
            else if (time.TotalMinutes > 1)
                return time.TotalMinutes.ToString("#,0.0") + " minutes";
            else
                return time.TotalSeconds.ToString("#,0.0") + " seconds";
        }
    }
} 

【问题讨论】:

  • 基本上想从网络服务器获取当前的 wmi 和 snmp 捕获信息并将它们显示到网页上。 Asp.net html 或最好的技术。
  • 所以我要找的是一个简单的页面,它可以解析事件日志或 wmi 并像 nagios 或新的 relic 类型服务一样显示它。我只希望它用于 localhost 服务器,以便我可以将它放在 default.aspx 页面上并查看条形图和图表,以便它可以发布给 IT 管理人员,以便他们对硬盘空间和内存使用以及 Sql 感觉更好处理时间和yada yada。 IT 管理人员不需要预打包的应用程序或服务,他们只需要简单的图表等可能带有 excel 或 csv 输出作为加分项。

标签: asp.net system monitoring


【解决方案1】:

性能计数器通过System.Diagnostics.PerformanceCounter 类公开。 Here 是 ASP.NET 的一些性能计数器。还有一个how-to

【讨论】:

    【解决方案2】:

    与 @Sumo 所说的类似,您需要使用来自 System.Diagnostics 命名空间的 Windows 性能计数器 (PC)。

    您的问题的部分问题是您对从 PC 的角度衡量的内容有点模糊。个人电脑非常具体且非常狭窄;他们测量一个非常详细的指标。您必须将您的要求转换为您想要的特定 Windows PC。

    你说你要测量:

    • 总响应时间
    • 总字节数
    • 吞吐量(请求/秒)
    • 使用 RAM
    • 硬盘空间
    • IO 问题
    • 服务器 CPU 开销
    • 错误(按错误代码)
    • MSSQL 加载

    您还应该参考http://technet.microsoft.com/en-us/library/cc776490(WS.10).aspx 上的 Windows Technet 参考(它是 W2K3,但它仍然适用于 W2K8/R2)。这将为您提供您正在寻找的所有性能计数器的广泛概述和解释。

    逐个运行:

    • 总响应时间

    据我所知,没有列出此内容的 ASP.NET PC。而且,无论如何,它可能对您没有意义,因为 ASP.NET 还将响应您可能不关心需要多长时间的各种请求(即以 .axd 结尾的任何请求)。我在项目中所做的是创建自定义 PC,但还有其他可用技术(例如使用自定义跟踪侦听器)。

    • 总字节数
    • 吞吐量(请求/秒)

    我相信这两种情况都有 PC,尽管我认为总字节数可能列在 Web 服务 类别下,而吞吐量可能是 ASP.NET 类别。

    • 已使用内存

    有一个内存类别,但您需要确定您是否正在寻找工作集大小、使用的物理 RAM 等。

    • 硬盘可用空间

    检查 LogicalDisk 类别

    • IO 问题

    这是什么意思?再次查看可用的 PC 以查看最相关的内容。

    • 服务器 CPU 开销

    您会在 处理器 类别下找到它

    • 错误(按错误代码)

    您可以获得抛出的错误总数,或抛出异常的速率,但如果您想收集 EventLog 中的条目,则需要使用 System.Diagnostics 命名空间中的 EventLog 类.

    • MSSQL 加载

    我没有找到 SQL Server PC 的参考概述,但 Brent Ozar 是一位专家,他有一个 PC 列表可供查看:http://www.brentozar.com/archive/2006/12/dba-101-using-perfmon-for-sql-performance-tuning/。对于 SQL Server 2008/R2,此列表可能没有太大变化。

    注意事项

    • 您可能需要确保运行 Web 应用程序的应用程序池的标识已添加到计算机的名为 Windows 性能监视器用户的用户组中。
    • 您只需打开您的柜台进行只读访问。
    • 性能计数器是组件,因此实现IDisposable。确保你 .Dispose() 他们(或者,更好的是,使用 using() 语句)。
    • 使用.NextValue() 方法获取您的值;几乎不需要使用.RawValue.NextSample()

    我不会为您提供每个计数器的确切名称,因为您必须真正了解每个计数器测量什么以及它对您有多大用处,并且只有您才能回答这个问题,这一点非常重要。实验。

    【讨论】:

      【解决方案3】:

      我建议使用New Relic 等分析服务。 .Net 使用页面在这里New Relic for .Net

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-14
        • 1970-01-01
        • 2014-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-24
        相关资源
        最近更新 更多