随着公司业务系统之间的数据交换越来越多,系统间的整合越来越复杂,伴随而来的问题也越来越多,给运行维护,客服人员带来的很大压力。目前我们首先要解决的问题是快速定位问题发生的系统和异常信息,第一时间收集到系统必要异常信息和审计信息,第一时间反馈给运行维护和客服人员,第一时间让相关人员做出相应的处理。
本方案将大致分3个阶段实施
第一部分:将传输各个节点的异常信息采集到公共平台,通过一个Web界面提供客服人员查询和定位问题,并且可以实现邮件通知功能,计划一周内完成并交付使用。
第二部分:Web查询平台加入简单的协作和事件跟踪功能,计划一周内完成
第三部分:效果好的话,可以陆续将其他口岸通系统,EDAP等系统的日志采集到平台实现统一维护,并且进一步收集客服这边的需求逐步的完善和加强。
尽管目前的方案还不能完全上述解决,但只希望用最快的速度和最低成本能为客服和维护人员提供一定的帮助。
本方案使用微软企业库日志应用程序块(以下称Logging application block),实现对每个系统的日志采集,通过MSMQ的发式发送到一个功能平台,公共平台利用企业库提供的MSMQ Distributor服务收集到业务系统的日志后保存到SQL数据库中,系统维护人员使用IE进行浏览和跟踪问题。
总体实施技术方案如图表1
MSMQ logging application block收集日志架构如图表 1
图表 1
Logging application block是微软patterns & practices Team发布的一个应用程序块,是一个经过实践检验的产品
使用logging application block规范和统一了开发过程对系统异常信息的处理
快速开发,对程序员不需要知道过多底层操作,一切皆可灵活配置
对于不同的应用客户端系统需要定义不同规则和必要的信息区分。
LogEntry结构
Name |
Description |
Default |
|
ActivityId |
Tracing activity id |
默认 |
|
ActivityIdString |
Tracing activity id as a string to support WMI Queries |
默认 |
|
AppDomainName |
The AppDomain in which the program is running |
系统势力名称 |
|
Categories |
Category name used to route the log entry to a one or more trace listeners. |
|
|
CategoriesStrings |
Category names used to route the log entry to a one or more trace listeners. This readonly property is available to support WMI queries |
默认 |
|
ErrorMessages |
Gets the error message with the LogEntry |
捕获的异常或是审计信息 |
|
EventId |
Event number or identifier. |
默认 |
|
ExtendedProperties |
Dictionary of key/value pairs to record. |
扩展的属性,可以根据应用中需要查询或判断的信息自己定义 |
|
LoggedSeverity |
Gets the string representation of the Severity enumeration. |
||
MachineName |
Name of the computer. |
默认 |
|
ManagedThreadName |
The name of the .NET thread. |
默认 |
|
Message |
Message body to log. Value from ToString() method from message object. |
捕获的异常或是审计信息 |
|
Priority |
Importance of the log message. Only messages whose priority is between the minimum and maximum priorities (inclusive) will be processed. |
优先级 |
|
ProcessId |
The Win32 process ID for the current running process. |
默认 |
|
ProcessName |
The name of the current running process. |
默认 |
|
RelatedActivityId |
Related activity id |
默认 |
|
Severity |
Log entry severity as a Severity enumeration. (Unspecified, Information, Warning or Error). |
信息,警告,错误 |
|
TimeStamp |
Date and time of the log entry message. |
默认 |
|
TimeStampString |
Read-only property that returns the timeStamp formatted using the current culture. |
默认 |
|
Title |
Additional description of the log entry message. |
系统描述 |
|
Win32ThreadId |
The Win32 Thread ID for the current thread. |
默认 |
NO |
扩展属性 |
值 |
描述 |
1 |
采集系统异常和审计信息通过msmq发送到平台。
日志采集通过企业库Logging application block实现。
.Net Framework 2.0以上
Enterprise Library 4.0 - May 2008
Microsoft.Practices.ObjectBuilder2.dll
Microsoft.Practices.EnterpriseLibrary.Logging.dll
Microsoft.Practices.EnterpriseLibrary.Common.dll
对于企业端传输的配置 Category Source(分类)名称统一使用CTS,同时使用Msmq TraceListener将日志发送到平台,和使用EventLog TraceListener写入本地的系统事件日志中,对于msmq TraceListener 需要使用Binary Formatter进行序列化
打开配置控制台
修改或是创建一个应用程序配置文件,新增Logging application block
新建一个msmq trace listener
配置msmq队列属性
将msmq tracelistener附加到Category Source下的General下
建议在每个客户端应用调用Logging application block的Logger.Write()方法前自己先对Logger和LogEntry进行一次封装
收集各系统发送过来的消息并且保存到数据和发送邮件通知给相关人员。
.Net Framework 2.0以上
Enterprise Library 4.0 - May 2008
Microsoft.Practices.ObjectBuilder2.dll
Microsoft.Practices.EnterpriseLibrary.Logging.dll
Microsoft.Practices.EnterpriseLibrary.Common.dll
Microsoft.Practices.EnterpriseLibrary.Logging.Database.dll
Microsoft.Practices.EnterpriseLibrary.Data.dll
运行源代码目录下E:\EntLib4Src\Blocks\Logging\Src\DatabaseTraceListener\Scripts 运行CreateLoggingDb.cmd 安装数据库
打开Visual Studio命令行工具,切换到目录(默认的企业库安装路径)C:\Program Files\Microsoft Enterprise Library 4.0 - May 2008\Bin下,运行如下命令:
installutil /i MsmqDistributor.exe
修改配置,打开安装目录下MsmqDistributor.exe.Config 文件,修改接收队列的路径
新增一个Data access application block,新增一个Database trace listener然后将database trace listener挂到要接收的分类下面。
分类查询日志信息,发现问题
加入对异常的处理结果和统计功能