前言

之前有过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);
}

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

写在最后

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

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

  1. 【ASP.NET Identity系列教程(一)】ASP.NET Identity入门

    注:本文是[ASP.NET Identity系列教程]的第一篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...

  2. 【ASP.NET MVC系列】浅谈jqGrid 在ASP.NET MVC中增删改查

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  3. 使用SQL Server存储ASP.NET Session变量

    创建和配置ASP.NET Session状态数据库 在基于NLB(网络负载平衡)环境下的ASP.NET Web应用程序开发,我们需要将Session存储在数据库中供多个Web应用程序调用,以下为配置方 ...

  4. [置顶] Asp.Net底层原理(二、写自己的Asp.Net框架)

    我们介绍过了浏览器和服务器之间的交互过程,接下来介绍Asp.net处理动态请求. 写自己的Asp.Net框架,我们不会引用System.Web这个程序集,我们只需要创建要给自己的类库,所以在接下来的程 ...

  5. 用ASP.NET/C#连接Access和SQL Server数据库

    连接Access 首先看一个例子代码片断:程序代码: ------------------------------------------------------------------------- ...

  6. 关于Asp.net超时,延长读取sql server数据库的超时时间!(已解决)

    昨天,接到客户反映说应用报“超时时间已到.在操作完成之前超时时间已过或服务器未响应”问题.从网上了一些资料,发现这个问题还是很普遍的.主要有以下两种解决方法: 第一种方法:在web.config中加上 ...

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

    ORM作为一种数据库訪问机制已广泛地应用于各种项目其中,在.Net开发中,应用比較广泛的ORM框架大致有以下几个: 官方支持的有:Linq to SQL.Entity Framework.三方的有:N ...

  8. SQL Server和ASP.NET的操作基本操作

    ado.net提供了丰富的数据库操作,这些操作可以分为三个步骤: 第一,使用SqlConnection对象连接数据库: 第二,建立SqlCommand对象,负责SQL语句的执行和存储过程的调用: 第三 ...

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

    前言 之前有过2篇关于如何监控ASP.NET core项目的文章,有兴趣的也可以看看. 今天我们主要来讲讲如何监控我们的ASP.NET项目. 首先我们来介绍一下,什么是Opserver,它是Stack ...

随机推荐

  1. 启动hadoop的命令

    start-all.sh 启动所有的Hadoop守护进程.包括NameNode. Secondary NameNode.DataNode.JobTracker. TaskTrack  stop-all ...

  2. Browsing contexts 浏览器上下文

    浏览上下文就是document object 呈现给用户的所在的环境   每一个标签或者窗口都包含一个浏览器上下文,包括iframe   frames      每一个browsing context ...

  3. Java GC算法 垃圾收集器

    GC算法 垃圾收集器 概述 垃圾收集 Garbage Collection 通常被称为"GC",它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. ...

  4. layui + jfinal 实现上传下载

    1.需要把jfinal的环境配置好 2.导入相关的库文件 layui的库文件 就是这两个文件需要导入到自己的页面 注意:jfinal总会把路径拦截,所以需要静态文件处理.本人不太懂.就网上找了下,说w ...

  5. robotframework自动化系列:新增流程

    刚接手项目的时候,要求所有流程在上线之前必须确保正向操作是正确的:这个时候又有新的模块需要测试,所以引入自动化测试是非常有必要的!通过对比,尝试使用RF进行自动化的回归测试. 测试中最常见的操作就是增 ...

  6. canvas画布实现手写签名效果

    最近项目中涉及到移动端手写签名的功能需求,将实现代码记录于此,供小伙伴们参考指摘哦~ HTML代码: <!--手写区--> <div class="mSign_signMa ...

  7. 使用git命令将本地项目上传到Gitlab上

    1.首先需要安装本地需要安装git 2.在gitlab上创建项目, 如下图, 点击右上角加号到项目创建页面, 填写项目名称, 选择项目访问权限, private为授权的组员才能访问. 3.打开项目源代 ...

  8. Java中断机制(interrupt)

    中断线程 在 run() 方法中,如果语句执行到了最会一句,或是遇到 return 方法,或是方法中出现了没有被捕获的异常,run() 方法将会执行结束.在java中,Thread中的interrup ...

  9. [转载] zookeeper 分布式锁服务

    转载自http://www.cnblogs.com/shanyou/archive/2012/09/22/2697818.html 分布式锁服务在大家的项目中或许用的不多,因为大家都把排他放在数据库那 ...

  10. JSF页面中使用js函数回调后台action方法

    最近遇到了一个问题就是在JSF页面中嵌入html页面,这个html页面中很多功能是使用js动态生成的,现在需要在js函数里想去调用JSF中action类method()方法并动态传送数据给后台进行处理 ...