采用Opserver来监控你的ASP.NET项目系列(二、监控SQL Server与Asp.Net项目)

前言

之前有过2篇关于如何监控ASP.NET core项目的文章,有兴趣的也可以看看.

今天我们主要来介绍一下,如何使用Opserver监控我们的SQL Server 和ASP.NET项目的异常监控

监控效果如下:

SQL Server的:

ASP.NET异常情况的监控:

监控SQL Server

首先我们来讲解一下如何监控我们的SQL Server.

上篇内容我们已经提到过 Opeserver的项目有很多的配置文件.

我们找到我们的SQLSettings.example.json文件,改名为SQLSettings.json文件

修改其中的配置项如下:

/* Configuration for the SQL Server dashboard */
{
  "defaultConnectionString": "",
  "refreshIntervalSeconds": 30,
  "clusters": [
    {
      "name": "192.168.1.120",
      "refreshIntervalSeconds": 20,
      "nodes": [
        { "name": "192.168.1.121" },
        { "name": "192.168.1.122" },
        { "name": "192.168.1.123" }
      ]
    }
  ],
  "instances": [
    {
      "name": "实例名称",
      "connectionString": "数据库连接字符串",
      "refreshIntervalSeconds": 200
    }
  ]
}

解释一下其中的意义,参照如下:

defaultConnectionString  (默认的连接字符串,用于单台数据库监控)
refreshIntervalSeconds   (轮询数据库情况的刷新时间,如果不设置,默认为60秒)
instances (当有多台单独的数据库实例需要监控时候的数据库实例设置)
clusters (当你的数据库是集群部署的时候的设置)
后面的内容都一样,我就不一一解释了,多台数据库实例,可以自行在instances 中添加多个节点,集群就在clusters中加入节点地址即可

然后,我们直接运行OpSever项目,就可以观察到数据库的变化情况了.

监控ASP.NET项目的异常情况

下面我们来讲讲如何监控我们的ASP.NET项目异常的情况

1.我们需要在在web项目中通过nuget安装StackExchange.Exceptional组件(它依赖于dapper)

2.在web.config中的configSections节点下增加section节点 “Exceptional”,如下:

<configSections>
    <section name="Exceptional" type="StackExchange.Exceptional.Settings" />
  </configSections>

3.在web.config中增加Exceptional节点,如下:

<Exceptional applicationName="应用名称">

    <!--<ErrorStore type="Memory" />-->
    <!--连接opserver数据库时开启-->
    <ErrorStore type="存储类型" connectionString="连接字符串" />
  </Exceptional>

ErrorStore 错误存储有4种实现方式,Memory,JSON,SQL,MySQL,如下是官方的说明译文:

    <!--如果没有设置ErrorStore,将默认使用内存的形式来记录错误-->
    <!--<ErrorStore type="Memory" />-->
    <!-- 其他的存储类型, 相关的设置属性如下:
         - rollupSeconds:页面上异常的更新秒数,默认为600秒
         - backupQueueSize: 设置缓存多少错误,默认为1000条-->
    <!-- JSON:Size是设置Json存储的文件数量,默认为200-->
    <!--<ErrorStore type="JSON" path="~/Errors" size="200" />-->
    <!-- SQL: 只需要设置数据库连接字符串如下: -->
    <!--<ErrorStore type="SQL" connectionString="Server=.;Database=Exceptions;Uid=Exceptions;Pwd=myPassword!" />-->
    <!--<ErrorStore type="SQL" connectionStringName="MyConnectionString" />-->
    <!--你也可以设置为Mysql如下 -->
    <!--<ErrorStore type="MySQL" connectionString="Server=.;Database=Exceptions;Username=Exceptions;Pwd=myPassword!" />-->
    <!--<ErrorStore type="MySQL" connectionStringName="MyConnectionString" />-->

这里我们采用SQL的形式,直接存在数据库里.

4.修改web.config的system.webServer节点,添加新的handlers,modules配置如下:

<system.webServer>
 <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <add name="Exceptional" path="exceptions.axd" verb="POST,GET,HEAD" type="StackExchange.Exceptional.HandlerFactory, StackExchange.Exceptional" preCondition="integratedMode" />
    </handlers>
    <modules>
      <add name="ErrorLog" type="StackExchange.Exceptional.ExceptionalModule, StackExchange.Exceptional" />
    </modules>
  </system.webServer>

5.因为我这里采用的SQL存储,所以需要给数据库添加存储错误信息的表,SQL语句如下:

USE [OpServerTest]
GO

/****** Object:  Table [dbo].[Exceptions]    Script Date: 2016/11/16 16:28:56 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Exceptions](
    [Id] [bigint] IDENTITY(1,1) NOT NULL,
    [GUID] [uniqueidentifier] NOT NULL,
    [ApplicationName] [nvarchar](50) NOT NULL,
    [MachineName] [nvarchar](50) NOT NULL,
    [CreationDate] [datetime] NOT NULL,
    [Type] [nvarchar](100) NOT NULL,
    [IsProtected] [bit] NOT NULL,
    [Host] [nvarchar](100) NULL,
    [Url] [nvarchar](500) NULL,
    [HTTPMethod] [nvarchar](10) NULL,
    [IPAddress] [varchar](40) NULL,
    [Source] [nvarchar](100) NULL,
    [Message] [nvarchar](1000) NULL,
    [Detail] [nvarchar](max) NULL,
    [StatusCode] [int] NULL,
    [SQL] [nvarchar](max) NULL,
    [DeletionDate] [datetime] NULL,
    [FullJson] [nvarchar](max) NULL,
    [ErrorHash] [int] NULL,
    [DuplicateCount] [int] NOT NULL,
 CONSTRAINT [PK_Exceptions] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[Exceptions] ADD  DEFAULT ((0)) FOR [IsProtected]
GO

ALTER TABLE [dbo].[Exceptions] ADD  DEFAULT ((1)) FOR [DuplicateCount]
GO

6.最后回到OpServer项目修改ExceptionsSettings.example.json文件为ExceptionsSettings.json,并添加配置如下:

 { "stores": [ //异常日志存储位置
    {
      "name": "ExceptionDB",
      "queryTimeoutMs": 2000,
      "pollIntervalSeconds": 10,
      "connectionString": "错误存储的地址"
    }
  ]
}

7.想增加自定义的错误信息,可以编写如下代码:

 try
 {
                throw new Exception("Just a try/catch test");
 }
  catch (Exception ex)
  {
                // logged, but caught so we don‘t crash
                ErrorStore.LogExceptionWithoutContext(ex);
  }

这样,异常也会记录到存储里面去了.

写在最后

本篇到此结束,下篇介绍如何监控我们的服务器状态

时间: 2024-10-08 06:23:58

采用Opserver来监控你的ASP.NET项目系列(二、监控SQL Server与Asp.Net项目)的相关文章

Asp.Net MVC4开发二: Entity Framework在Asp.Net MVC4中的应用

ORM作为一种数据库访问机制已广泛地应用于各种项目当中,在.Net开发中,应用比较广泛的ORM框架大致有下面几个: 官方支持的有:Linq to SQL,Entity Framework.三方的有:NHibernate.前面介绍过Linq to SQL的应用,这篇介绍一下Entity Framework在Asp.Net MVC4中的应用. 首先用Visual Studio(2012或2013,其它版本需要安装Asp.Net MVC4)创建一个Asp.Net MVC4的项目,项目创建完成后会发现E

采用Opserver来监控你的ASP.NET项目系列(一、Opserver监控的简介与平台搭建)

原文:采用Opserver来监控你的ASP.NET项目系列(一.Opserver监控的简介与平台搭建) 前言 之前有过2篇关于如何监控ASP.NET core项目的文章,有兴趣的也可以看看. 今天我们主要来讲讲如何监控我们的ASP.NET项目. 首先我们来介绍一下,什么是Opserver,它是Stack Overflow(Stack Overflow是一个与程序相关的IT技术问答网站.用户可以在网站免费提交问题,浏览问题,索引相关内容,在创建主页的时候使用简单的HTML.在问题页面,不会弹出任何

Performance Monitor4:监控SQL Server的IO性能

SQL Server的IO性能受到物理Disk的IO延迟和SQL Server内部执行的IO操作的影响.在监控Disk性能时,最主要的度量值(metric)是IO延迟,IO延迟是指从Application创建IO请求,到Disk完成IO请求的时间延迟.如果物理Disk不能及时完成IO请求,跟不上请求负载的速度,那么SQL Server就容易出现性能问题.SQL Server内部在执行一些特定的操作时,会和Disk做读写交互,这也会影响物理硬盘响应SQL Server的IO请求的性能,使查询进程处

ASP.NET MVC3 系列教程 – 新的Layout布局系统

原文地址:http://www.cnblogs.com/highend/archive/2011/04/18/asp_net_mvc3_layout.html I:回忆MVC2当中MasterPage那些事 code: <!------------Begin--------------> <!-- Master文件 --> <%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPa

Asp.net MVC]Asp.net MVC5系列——布局视图

目录 系列文章 概述 布局视图 系列文章 [Asp.net MVC]Asp.net MVC5系列--第一个项目 [Asp.net MVC]Asp.net MVC5系列--添加视图 [Asp.net MVC]Asp.net MVC5系列--添加模型 [Asp.net MVC]Asp.net MVC5系列--从控制器访问模型中的数据 [Asp.net MVC]Asp.net MVC5系列--添加数据 [Asp.net MVC]Asp.net MVC5系列--在模型中添加验证规则 [Asp.net M

管理SQL Server AlwaysOn(5)——常规监控(1)——常规监控

本文属于管理SQL Server AlwaysOn 系列文章 前言: 前面几节提到了如何对AlwaysOn做常规管理,这一节和接下来的一节专门对"监控"进行解释和演示.管理和监控这两个词在很多时候是混淆的,但是我们大概也可以区分出来,比如我做备份,算管理,对错误.异常进行响应这也是管理,但是对错误.异常的捕获和通知DBA这就是监控了,而且监控有时候是不需要进行干预的,比如我监控磁盘空间,当空间充足的时候,我可以不管. 在日常的DBA工作中,我本人对监控的重视程度远大于所谓的管理,因为有

SQL Server监控全解析

SQL Server监控全解析 在SQL Server的日常管理中,让SQL Server高效运行,且性能良好,是DBA需要做的事.DBA需要了解数据库的日常运行情况,对性能进行分析和调优,需要对线上环境部署监控.那我们都需要监控哪些方面呢? SQL Server服务器的CPU.内存.IO.网络流量.缓存等资源性能怎么样,各个相关服务如SQL Server服务.SQL Server代理服务等是否正常运行,这些一般使用开源的监控软件Zabbix来设置告警,当然针对数据库服务器的特性,添加一些SQL

SQL Server中如何监控死锁(Deadlock)

SQL Server中如何监控死锁(Deadlock) 什么是死锁? 所谓死锁: 是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程. 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象:死锁. 在SQL Server中为了阻止死锁大量充斥在系统中,我们有一个死

ASP.NET Excel导入导出SQL Server整理(转)

一.Excel导入 在页面层添加FileUpload控件,控件位置:Standard里面,Calendar下面两个.设置其ID.<asp:FileUpload ID="inputFile" runat="server" /> 添加Button,btnUpload protected void btnUpload_Click(object sender, EventArgs e) { DataSet ds = GetExcelData(); InsertD