Python中LogsQueryClient执行KQL查询返回0行问题求助
问题:Python调用KQL查询返回0行(Log Analytics中正常)
问题场景
以下KQL查询在Log Analytics资源管理器中执行可正常返回结果:
let endDateTime = now(); let startDateTime = ago(1d); AnyTableName | where TimeGenerated < endDateTime | where TimeGenerated >= startDateTime
但通过Python代码调用时,返回0行数据。Python代码如下:
credential = DefaultAzureCredential() client = LogsQueryClient(credential) query="""let endDateTime = now(); let startDateTime = ago(1d); AnyTableName | where TimeGenerated < endDateTime | where TimeGenerated >= startDateTime""" print (query) os.environ['LOGS_WS_ID'] = 'XXXX' start_time=datetime(2022, 11, 4, tzinfo=timezone.utc) end_time=datetime(2022, 11, 5, tzinfo=timezone.utc) try: response = client.query_workspace(os.environ['LOGS_WS_ID'], query, timespan=(start_time, end_time)) if response.status == LogsQueryStatus.PARTIAL: error = response.partial_error print(error.message) elif response.status == LogsQueryStatus.SUCCESS: print("SUCCESSSSS") data = response.tables for table in data: df = pd.DataFrame(data=table.rows, columns=table.columns) print(df) except HttpResponseError as err: print("Well !!! This is no good") print (err)
执行结果:
[0 rows x 29 columns]
原因分析
问题核心是Python调用时传入的timespan参数与KQL内的时间过滤条件形成了双重交集过滤:
- KQL中用
now()和ago(1d)取的是当前时间往前1天的动态区间 - Python代码指定了固定的
2022-11-4至2022-11-5静态区间 - 当执行脚本时,当前时间不在该静态区间内,两个时间范围无交集,因此返回0行
解决方案
两种可行方案任选其一:
方案1:移除Python中的timespan参数
让KQL自身控制时间范围,删除query_workspace调用中的timespan参数:
response = client.query_workspace(os.environ['LOGS_WS_ID'], query)
方案2:统一时间范围控制
去掉KQL内的时间变量和过滤逻辑,完全依赖Python的timespan参数控制查询区间(Log Analytics API会自动对TimeGenerated应用该区间过滤):
修改后的KQL:
AnyTableName
Python调用保持原timespan参数即可。
或者将Python的时间参数传入KQL,实现动态可控:
# 定义时间参数 start_time=datetime(2022, 11, 4, tzinfo=timezone.utc) end_time=datetime(2022, 11, 5, tzinfo=timezone.utc) # 格式化KQL,传入时间参数 query=f"""AnyTableName | where TimeGenerated < datetime({end_time.isoformat()}) | where TimeGenerated >= datetime({start_time.isoformat()})""" # 调用时无需传入timespan response = client.query_workspace(os.environ['LOGS_WS_ID'], query)
内容的提问来源于stack exchange,提问作者Asimananda
相关产品推荐
相关产品推荐

