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'