继前一篇文章[性能监视应用]如何在AD架构中收集性能监视数据至SQL Server完成后,接下来要做什么呢? 除了做性能的记录以外,更重要的是要如何应用这些资讯呢?因此,它的综合应用中,我们把目标放到设备可用度的性能监视上,在收集回来的数据中包含有LOG进来的时间,机器名称、性能指针名称、性能指针,透过收录回来的数据,结合Visio的连结数据至图示功能,将性能与网络架构图或是机架图...
继前一篇文章[性能监视应用]如何在AD架构中收集性能监视数据至SQL Server完成后,接下来要做什么呢? 除了做性能的记录以外,更重要的是要如何应用这些资讯呢?因此,它的综合应用中,我们把目标放到设备可用度的性能监视上,在收集回来的数据中包含有LOG进来的时间,机器名称、性能指针名称、性能指针,透过收录回来的数据,结合Visio的连结数据至图示功能,将性能与网络架构图或是机架图,透过结合图示功能,除了指针数据以外,还可以再结合颜色来加强资讯的敏感层度,接下来,我们将数据整理一下,将收录到SQL中的性能监视数据连结至Visio现有的架构图,最后也可以透过SharePoint的Visio Service将绘制好的图型资讯汇直接于企业内部站台中显示,更方便管理者检视。
SQL数据结构及目的说明
首先,我们再来了解一下性能监视器转导到SQL的数据架构,在性能监视器转到SQL存放时,会自动的产生三个数据表:CounterData(性能数据记录)、CounterDetails(性能计数器数据)、DisplayToID(性能分组数据)
CounterData内的字段说明下:
GUID: GUID for this data set. Use this key to join with the DisplayToID table.
CounterID: Identifies the counter. Use this key to join with the CounterDetails table.
RecordIndex: The sample index for a specific counter identifier and collection GUID. The value increases for each successive sample in this log file.
CounterDateTime: The time the collection was started, in UTC time.
CounterValue: The formatted value of the counter. This value may be zero for the first record if the counter requires two sample to compute a displayable value.
FirstValueA: Combine this 32-bit value with the value of FirstValueB to create the FirstValue member of PDH_RAW_COUNTER. FirstValueA contains the low order bits.
FirstValueB: Combine this 32-bit value with the value of FirstValueA to create the FirstValue member of PDH_RAW_COUNTER. FirstValueB contains the high order bits.
SecondValueA: Combine this 32-bit value with the value of SecondValueB to create the SecondValue member of PDH_RAW_COUNTER. SecondValueA contains the low order bits.
SecondValueB: Combine this 32-bit value with the value of SecondValueA to create the SecondValue member of PDH_RAW_COUNTER. SecondValueB contains the high order bits.
CounterDetails内的字段说明如下:
CounterID: A unique identifier in the database that maps to a specific counter name text string. This field is the primary key of this table.
MachineName: The name of the computer that logged this data set.
ObjectName: The name of the performance object.
CounterName: The name of the counter.
CounterType: The counter type. For a list of counter types and their formulas, see the Counter Types section of the Windows Server 2003 Deployment Kit.
DefaultScale: The default scaling to be applied to the raw performance counter data.
InstanceName: The name of the counter instance.
InstanceIndex: The index number of the counter instance.
ParentName: Some counters are logically associated with others, and are referred to as parents. For example, the parent of a thread is a process and the parent of a logical disk driver is a physical drive. This field contains the name of the parent. Either the value in this field or the ParentObjectID field identifies a specific parent instance. If the value in this field is NULL, the value in the ParentObjectID field must be checked to identify the parent. If the values in both fields are NULL, the counter does not have a parent.
ParentObjectID: The unique identifier of the parent. The value in either this field or the ParentName field identifies a specific parent instance. If the value in this field is NULL, the value in the ParentName field must be checked to identify the parent.
DisplayToID内的字段说明下:
GUID: Unique identifier generated for a log. This field is the primary key of this table.
RunID: Reserved for internal use.
DisplayString: Name of the log file as displayed in the System Monitor.
LogStartTime: Time the logging process started in yyyy-mm-dd hh:mm:ss:nnn format.
LogStopTime: Time the logging process stopped in yyyy-mm-dd hh:mm:ss:nnn format. Multiple log files with the same DisplayString value can be differentiated by using the value in this and the LogStartTime fields. The values in the LogStartTime and LogStopTime fields also allows the total collection time to be accessed quickly.
NumberOfRecords: Number of samples stored in the table for each log collection.
MinutesToUTC: Value used to convert the row data stored in UTC time to local time.
TimeZoneName: Name of the time zone where the data was collected. If you are collecting or have relogged data from a file collected on systems in your own time zone, this field will state the location.
以上的数据供有耐心的乡民们啃,如果你是和Jason一样,一秒钟几十万上下(印尼盾)的话,那么我们珍惜一下时间,我们拉几个重点来做说明就好:
CounterID:连结CounterData及CounterDetails数据表的主键。
CounterData.CounterDateTime:性能记录收录的时间。
CounterData.CounterValue:性能记录所收录到的值。
CounterDetails.MachineName: 收录性能的用户端机器名称
CounterDetails.ObjectName: 收录性能的对象(分类)名称
CounterDetails.CounterName: 收录性能的计数器名称
当然,做一个环境,总是要有一些假设目的,由于性能计数器是每隔15秒钟会回传一次所设定的性能监视数据,因此,我们将此记录时间及性能监视单中的ProcessorProcessor time值拿来做为主要指针。我们假设了下列三种规范:
规则 说明 时间响应 超过3分钟没有数据响应,主机底色更换为黑色。 CPU使用率 CPU处理时间介于50~80,主机底色更换为黄色。 CPU处理时间介于80~100,主机底色更换为红色。 标示标签 CPU以数据横条来表CPU的使用率。 逾时回报的数据显示于数据标签上。为了使数据可以符合上述的条件,我们将数据库中的数据建立一个检视表。
建立检视表
建立检视表是希望限制存取者的所能观看的数据,为了使数据正确的呈现,我们设定了两个门槛,第一个门槛是View中必须将所有机器列出,不论是没有数据值输入的机器亦必须列出,以做为Visio连结数据时唯一视别的数据。第二个门槛则是必须将每台机器最后一笔写入到数据库中的数据列出来,并且所有数据都只呈现一笔。为使达成这个目的,Jason土法炼钢透过子查询+Join写出这个View:
SELECT h.MachineName, ct.logtime, ct.CounterValue, DATEDIFF(n, CONVERT(char(19), ct.logtime, 120), GETDATE()) AS diffminute FROM dbo.CounterDetails AS h LEFT OUTER JOIN (SELECT lt.CounterID, lt.logtime, d.CounterValue FROM dbo.CounterData AS d INNER JOIN (SELECT CounterID, MAX(CounterDateTime) AS logtime FROM dbo.CounterData GROUP BY CounterID) AS lt ON d.CounterID = lt.CounterID AND d.CounterDateTime = lt.logtime) AS ct ON ct.CounterID = h.CounterID WHERE (h.ObjectName = ‘processor‘) ORDER BY ct.logtime DESC
最内圈的子查询是列出最后一笔数据时间与主要ID,第二圈的子查询则是将时间与最后一笔的性能计数数据拉出,最后就是列出所有电脑名称,并且将现在的时间算出与数据库中的记录时间间隔多少分钟,完成之后,我们就可以得到下面的画面:(共收集到三台电脑的数据,并且是以Processor做过滤条件,找到最后一笔响应时间及性能数据。)
连结数据
接下来,我们在Visio中,依照我们所建立出来的数据,拉出三种不同的icon表示不同的主机
接下来点下数据页签再点选‘连结数据至图型’功能按钮。
选择‘其它OLEDB或ODBC数据来源’
直接选择ODBC DSN。
在系统中已经有建立了不少的ODBC连线数据,在此选择我们自已建立的Perf_Log。
为了让我们方便,已经有建立了一个View,我将它命名为Perf_Log_View。
接下来输入一个好记的名称,Jason直接按下一步。
接下来因为我们必须让SQL执行原有的验证方式,在此设定将密码保存文件中。
完成后,再次确认路径。
接下来在数据集的部分,直接点选下一步。
默认值是DIFFMINUTE,Jason将它改变成为机器名称会比较没有冲突,建议将工作分散 。
完成后点选下一步就会看到了!
此时我们看下面有三笔以内部电脑名称数据被列出来,接下来就必须把图型和数据的连结连结好
连结好了如同下图所示:
接下来一一连起来,即完成本部分的目的。
设定醒目资讯
首先点选一台设备,并指定新的数据图型(数据->数据图形->新增新数据图型。)
接下来点选新增项目。
将数据面位改变成为Dirffminmute。
选择显示为‘文字’、文字注标,最后为了让使用者可用到,因此在标岁处输入‘失联时间’。
完成后接着,将填色也考量进来。
这次选择Diffminute并且选择色彩组,以做为宕机时超过三分钟没有将性能数据推到管理者画面中呈现黑色底图。
因此,在值1设定为3分钟,另一个值则是999999999,n个九。
完成后,再新增项目
这次以CounterValue来达成CPU的示意
并修改标签,指定一个看得懂的。
接下来再完成CPU要求的颜色区域
相同,为了满跑80~100要显示成红色那个颜色,50~80为黄色。
完成后,接下来就直接存档
它会询问你是否要套用。
接下来将所有的设备更换成为新建立的数据图形
接下来,我们必须让它可以自动重新整理,因此在数据列上按右键,即有一个设定重新整点,我们指定成为1分钟/
成果
呼~~!展示的成果如下所示,如以将iTop-APP失联时间超过3分钟了,钱也花在刀口上,这个案例是Jason另一位伙伴讨论出来,其中包含了很多的瓶颈,希望大家看到这个题目可以有更多的议题产生!
下图表示为iTop-Web 使用超过60%的CPU,颜色被改成黄色,但是离线超过三分钟的,则是自动补满成为黑色即可。
参考数据:
新增导入的数据到图形 http://office.microsoft.com/zh-tw/visio-help/HA010131383.aspx
一点通 - 如何连结多个异质性的外部数据至 Visio 图形 http://support.microsoft.com/kb/981220/zh-tw
特别感谢:
特别感谢王仲麒老师指导数据收集及连结Visio之相关问题,再次感谢!
王仲麒老师个人博客 http://www.dotblogs.com.tw/areswang/
Anything keeps Availability.
Anywhere keeps Integrity.
Anytime keeps Confidentiality.
keep A.I.C. = Information Security
原文:大专栏 [性能监视应用]如何将性能监视数据以Visio建立设备可用灯号及指针