You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

含变量的Splunk Cloud查询无结果问题排查求助

解决Splunk变量与字段匹配无结果的问题

我一眼就看出问题所在了——你在wheresearch命令里错误地给字段名加了双引号!这会让Splunk把"ExtendedProperties.ProductVersion"当成一个字符串字面量,而不是去引用这个字段的实际值,自然永远匹配不上你生成的变量。

错误根源分析

比如你原来的查询:

"ExtendedProperties.PrCode"="myProductName" | eval myversion="12.916"| where "ExtendedProperties.ProductVersion"=myversion

这里的"ExtendedProperties.ProductVersion"是字符串,Splunk会拿它和myversion的值"12.916"做比较——显然"ExtendedProperties.ProductVersion"不等于"12.916",所以没有结果。

修正后的基础查询

把字段名的双引号去掉(如果字段名有特殊字符,用单引号包裹也可以),就能正常匹配:

"ExtendedProperties.PrCode"="myProductName" | eval myversion="12.916"| where ExtendedProperties.ProductVersion = myversion

或者用单引号包裹字段名(适合字段名含空格/特殊字符的场景):

"ExtendedProperties.PrCode"="myProductName" | eval myversion="12.916"| where 'ExtendedProperties.ProductVersion' = myversion

实现动态版本号的最终查询

针对你用now()生成当日版本号的需求,修正后的完整查询如下:

"ExtendedProperties.PrCode"="myProductName" 
| eval month = ltrim(tostring(strftime(now(),"%m")),"0") 
| eval day = strftime(now(),"%d") 
| eval version = "12." + month + day 
| where ExtendedProperties.ProductVersion = version

验证你的测试用例

针对你提供的makeresults测试查询,修正后也能正常返回结果:

| makeresults 
| eval _raw = "{\"Timestamp\":\"2020-12-14T14:37:00.2662745Z\",\"Categories\":[\"someCategoryString\"],\"Metadata\":[\"someMetadataString\"],\"ExtendedProperties\":{\"MachineId\":\"SomeMachineId\",\"ProductVersion\":\"12.1219\",\"PrCode\":\"MyProductName\",\"ProductType\":\"1\",\"Type\":\"ProductUsed\",\"Source\":\"SomeSourceString\",\"SessionId\":\"SomeGuid\",\"TimeStamp\":\"2020-12-14T14:36:56.7086819Z\",\"Environment\":\"SomeEnvironment\"}}", 
    month = ltrim(tostring(strftime(now(),"%m")),"0"), 
    day = strftime(now(),"%d"),
    version = "12." + month + day
| spath 
| search ExtendedProperties.ProductVersion = version

这样就能正确匹配到ProductVersion12.1219的记录(当当前日期是12月19日时)。

额外提示

  • Splunk中,wheresearch命令引用字段时,不要给字段名加双引号,双引号会将其转为字符串常量;
  • 如果字段名包含空格、特殊字符(如-),可以用单引号'包裹字段名;
  • 你生成版本号的逻辑是对的:ltrim处理月份去掉前导零,日期保留两位,拼接后正好匹配数据中的格式。

内容的提问来源于stack exchange,提问作者K. B.

火山引擎 最新活动