采用Opserver来监控你的ASP.NET项目系列(二、监控SQL Server与Asp.Net项目)
前言
之前有過2篇關于如何監控ASP.NET core項目的文章,有興趣的也可以看看.
?ASP.NET Core之跨平臺的實時性能監控
ASP.NET Core之跨平臺的實時性能監控(2.健康檢查)
今天我們主要來介紹一下,如何使用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);
? }
這樣,異常也會記錄到存儲里面去了.
?
寫在最后
本篇到此結束,下篇介紹如何監控我們的服務器狀態
原文:http://www.cnblogs.com/GuZhenYin/p/8064860.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的采用Opserver来监控你的ASP.NET项目系列(二、监控SQL Server与Asp.Net项目)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用 dotnet core 和 Azu
- 下一篇: Orchard Core一分钟搭建ASP