Logstash 从 sp_executesql 中提取值
Logstash extracting values from sp_executesql
我们正在跟踪 SQL 服务器程序超时并将其发送到 Elasticsearch,这样我们就可以在 Kibana 中将它们可视化以发现问题。
我们的一些 SQL 查询已参数化并使用 sp_executesql
。
是否可以从查询中提取其参数及其值?
例如:
EXEC sp_executesql N'EXEC dbo.MySearchProcedure @UserId=@p0,@SearchPhrase=@p1'
, N'@p0 int,@p1 nvarchar(max)'
, @p0 = 11111
, @p1 = N'denmark';
并从中得到这个结果:
{
"Procedure": "dbo.MySearchProcedure",
"Statement": "exec sp_executesql N'exec Search.GetAnalysisResultsListTextSearch @SubscriberId=@p0,@SearchTerms=@p1,@SortType=@p2',N'@p0 int,@p1 nvarchar(max) ,@p2 int',@p0=47594,@p1=N'denmark',@p2=0",
"Parameters": {
"UserId": 11111,
"SearchPhrase": "denmark"
}
}
听起来像是 ruby{} 过滤器的工作。首先,在查询中找到所有键=值对(@userid=@p0,可能使用 ruby 的 scan 功能),然后找到赋值(@p0=1234,再次使用扫描) ,然后创建一个将两者结合起来的新字段 (userid=1234)。在 ruby 过滤器中:
event['userid'] = '1234'
我们正在跟踪 SQL 服务器程序超时并将其发送到 Elasticsearch,这样我们就可以在 Kibana 中将它们可视化以发现问题。
我们的一些 SQL 查询已参数化并使用 sp_executesql
。
是否可以从查询中提取其参数及其值?
例如:
EXEC sp_executesql N'EXEC dbo.MySearchProcedure @UserId=@p0,@SearchPhrase=@p1'
, N'@p0 int,@p1 nvarchar(max)'
, @p0 = 11111
, @p1 = N'denmark';
并从中得到这个结果:
{
"Procedure": "dbo.MySearchProcedure",
"Statement": "exec sp_executesql N'exec Search.GetAnalysisResultsListTextSearch @SubscriberId=@p0,@SearchTerms=@p1,@SortType=@p2',N'@p0 int,@p1 nvarchar(max) ,@p2 int',@p0=47594,@p1=N'denmark',@p2=0",
"Parameters": {
"UserId": 11111,
"SearchPhrase": "denmark"
}
}
听起来像是 ruby{} 过滤器的工作。首先,在查询中找到所有键=值对(@userid=@p0,可能使用 ruby 的 scan 功能),然后找到赋值(@p0=1234,再次使用扫描) ,然后创建一个将两者结合起来的新字段 (userid=1234)。在 ruby 过滤器中:
event['userid'] = '1234'