你有正在运行StreamInsight主机(StreamInsightHost.exe)吗?或者你有什么应用正宿主于StreamInsight引擎中吗?如果有的话,你可能想知道管理员该怎样获得其管理信息或者访问StreamInsight引擎中的元数据。你可能没法每次都仅仅为查看诊断信息,而在Microsoft Visual Studio中构建一个完整的应用程序。这里脚本所具有的功能刚好能够发挥作用,因为它们能够帮助你自动化管理任务。
Powershell工具正是那些场景中的主角,不仅如此,它对于StreamInsight也能够很好的工作。Powershell能够让你不需要在Visual Studio中编写完整应用的情况下,就能够执行管理任务。此外,它也会因为可以构建强大脚本而备受青睐。下面显示了在运行ObjectModel 样例应用程序时,使用PowerShell 2.0从StreamInsight主机中获取诊断视图的具体步骤。在文末你可以找到基于ObjectModel样例的代码。
目前它已经可以工作于CTP2版本中了——享受它吧!(译者注:这篇博文发表于2009年11月StreamInsight CTP Refresh发布之前)
PS C:\> [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.ComplexEventProcessing")
GAC Version Location
--- ------- --------
True v2.0.50727
C:\Windows\assembly\GAC_MSIL\Microsoft.ComplexEventProcessing\10.0.0.0__89845dcd8080cc9…
上面的第一步将StreamInsight客户端API加载进入了PowerShell。正如你所看到的,StreamInsight已经安装在了机器上,而我们是从GAC中找到了它的程序集。
PS C:\> $server = [Microsoft.ComplexEventProcessing.Server]::Connect("http://localhost/StreamInsight")
通过这一步,我们建立与运行中的StreamInsight主机进程的链接(确保服务已经启动),并将该链接存储在了server对象中。现在让我们看一下server对象中有哪些成员:
PS C:\> $server | gm
TypeName: Microsoft.ComplexEventProcessing.Server
Name MemberType Definition
---- ---------- ----------
ClearDiagnosticSettings Method System.Void ClearDiagnosticSettings(System.Uri name)
CreateApplication Method Microsoft.ComplexEventProcessing.Application CreateApplication(string name)
CreateManagementService Method Microsoft.ComplexEventProcessing.ManagementService.IManagementService CreateManag...
Dispose Method System.Void Dispose()
Equals Method bool Equals(System.Object obj)
GetDiagnosticSettings Method Microsoft.ComplexEventProcessing.DiagnosticSettings GetDiagnosticSettings(System....
GetDiagnosticView Method Microsoft.ComplexEventProcessing.DiagnosticView GetDiagnosticView(System.Uri name)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
SetDiagnosticSettings Method System.Void SetDiagnosticSettings(System.Uri name, Microsoft.ComplexEventProcessi...
ToString Method string ToString()
Applications Property System.Collections.Generic.IDictionary`2[[System.String, mscorlib, Version=2.0.0....
IsEmbedded Property System.Boolean IsEmbedded {get;}
可以看到获取诊断视图的函数(GetDiagnosticView)也在上面的列表中。调用它可以获得事件管理对象,并从主机中管理状态:
PS C:\> $dv = $server.GetDiagnosticView("cep:/Server/EventManager")
PS C:\> $dv
Key Value
--- -----
All Events Count 19
All Events Memory (bytes) 249856
PS C:\> $dv = $server.GetDiagnosticView("cep:/Server/PlanManager")
PS C:\> $dv
Key Value
--- -----
Query Count 14
Stream Count 50
Operator Count 38
由于我们正在运行ObjectModel样例,我们也可以获得交通传感器查询(traffic sensor query)的状态:
PS C:\> $dv = $server.GetDiagnosticView("cep:/Server/Application/ObjectModelSample/Query/TrafficSensorQuery")
PS C:\> $dv
Key Value
--- -----
Query State Suspended
Start Time 9/22/2009 5:34:02 PM
End Time 9/22/2009 5:34:03 PM
Stream Count 0
Operator Count 0
Total Incoming Event Count 553
Total Consumed Event Count 553
Total Produced Event Count 192
Total Outgoing Event Count 192
Last Incoming Event System Time 9/22/2009 5:34:02 PM
Last Consumed Event System Time 9/22/2009 5:34:02 PM
Last Produced Event System Time 9/22/2009 5:34:03 PM
Last Outgoing Event System Time 9/22/2009 5:34:03 PM
Total Consumed Events Latency (milliseconds) 14527.833
Total Produced Events Latency (milliseconds) 62457.0953
Total Outgoing Events Latency (milliseconds) 63553.2049
Last Produced CTI Timestamp 12/31/9999 11:59:59 PM
Stream Event Count 0
Stream Memory Including Events (bytes) 0
Operator Index Event Count 0
Operator Event Memory (bytes) 0
Operator Index Memory (bytes) 65870
Total Number of Times Operator Scheduled 708
Total Operator CPU Usage (milliseconds) 670
这个诊断视图列出了许多有用的东西。你可以从StreamInsight帮助文件中查询关于某个操作中单个元素的详细讨论。我经常查询的一些字段是事件总数以及最后一个CTI的时间戳,它们都是判断我的系统活动情况的关键指标。
正如上面提到的,这个例子假定查询正运行在一个暴露Web 服务端点的StreamInsight服务器上。有两个方法可以在样例中做到:
- 暴露内嵌服务器的Web服务。我们将在单独的博文中讨论这个问题;
-
使用StreamInsightHost.exe。
想要在一个单独的StreamInsight主机而不是内嵌服务器中运行ObjectModel样例,你需要作出少量的调整。这些调整的步骤包含在了样例包的README.txt文件中。附带的是修改后的ObjectModel.cs文件完整代码。注意你需要在代码中编辑输入的csv文件的路径。
评论:这篇翻译的博文年代有点久远,不过上面的PowerShell代码目前均可以对StreamInsight 1.1和1.2进行操作。另外,ObjectModel中需要用来的输入输出适配器和csv文件可以从 产品样例中找到。