【问题标题】:Querying Log Analytics So That It Returns a List of All Table Names查询 Log Analytics 以返回所有表名的列表
【发布时间】:2020-03-06 07:25:23
【问题描述】:

我正在使用 Python 对我的 Azure Log Analytics 工作区调用查询。为了提供最大的可扩展性,我想实现一个查询,该查询返回我的 Log Analytics 工作区中的所有表名。本质上,我想生成所有表名的列表,以便稍后在我的 python 脚本中调用它们。

我尝试了几个不同的查询。例如:

Search * | distinct $table

而不是获取表的列表,例如:

[
  {
    "$table": "ExampleTable"
  }
]

我收到一条错误消息:

{'error': 
    {
           'message': 'The request had some invalid properties', 'code': 'BadArgumentError', 'innererror': 
           {
               'code': 'SyntaxError', 'message': 'Syntax Error'
           }
    }
}

任何建议/示例将不胜感激。谢谢!

更新:

再次访问 Azure Log Analytics REST API 网站后,我决定花一些时间来研究一下内置的 API 浏览器工具。在那里,我能够成功地查询示例工作区以获取表列表。我可以使用几个不同的查询来做到这一点:

search * | distinct $table
search * | distinct Type

虽然这两个查询在示例环境中都能完美运行,但它们在我自己的环境中仍然继续让我失望。每当我发送在 API 资源管理器中返回完美结果的相同查询时,我的 python 应用程序和 Azure LogicApp 都会继续收到语法错误。我继续对这个问题感到困惑。这里是 API Explorer 的站点,供想要测试的人使用:https://dev.loganalytics.io/apiexplorer/query?appId=DEMO_WORKSPACE&apiKey=DEMO_KEY

另外,回答一个显而易见的问题:是的,我已经正确设置了 API 连接的其余部分。在 Python 应用程序和 LogicApp 工作流中,我可以并且确实成功地进行了其他查询。似乎正是这个特殊的问题给我带来了问题。

最后,如果有帮助,这是我在进行查询时继续收到的错误消息:

{'error': {'message': 'The request had some invalid properties', 'code': 'BadArgumentError', 'innererror': {'code': 'SyntaxError', 'message': 'Syntax Error'}}}

【问题讨论】:

    标签: python python-requests adal azure-log-analytics azure-data-explorer


    【解决方案1】:

    关于问题的 Kusto-query-language 部分,Search 应为 search(小写 s

    【讨论】:

    • 感谢您的建议;不幸的是,即使您进行了更正,问题仍然存在。
    【解决方案2】:

    我没有深入挖掘,但在您的查询中,Python 对“$”的理解肯定有问题。可能我们必须以一种我们告诉 Python 在这种情况下转义“$”的方式显式调用 API。

    但是,您可以使用以下查询来完成您的要求。

    search * | distinct Type
    

    另一个注意事项是,由于 Log Analytics 查询语言已更改为较新版本,因此请确保使用最新的可用 API。新的 API 文档可在https://dev.loganalytics.io/

    获得

    希望这会有所帮助!!干杯!!

    注意:如果您认为您的问题已得到解答,请“接受”它,如果只是帮助,请点击“此答案很有用”并投赞成票。这可能对阅读此主题的其他社区成员有所帮助。

    【讨论】:

    • 感谢您抽出宝贵时间研究我面临的这个问题。我已经尝试在我的 Python 应用程序和我一直用来通过 API 测试查询的 LogicApp 中实现您的解决方案。但是,您的解决方案仍然返回相同的错误。
    • 但是,我会注意到,在我的 LogicApp 上下文中,我有一些关于这个问题的有趣经历。在 2019 年 3 月 5 日之前,我能够成功调用此查询,它会返回我需要的结果(所有表名的列表),但是在 2019 年 3 月 5 日之后,无论何时尝试运行该查询,LogicApp 都会失败。代码根本没有改变,所以我只能假设 API 或查询语言发生了一些变化。
    【解决方案3】:

    请注意搜索 * | distinc 不会为您提供工作区中的所有表,只会提供至少包含一条记录的表。否则,它们不会出现在搜索结果 * 中,因此也不会出现在不同的查询中。

    请查看此 API 以获取工作区的架构: https://docs.microsoft.com/en-us/rest/api/loganalytics/workspaces%202015-03-20/getschema

    【讨论】:

      【解决方案4】:
      search "*" | summarize count() by $table | sort by count_ desc
      

      这会向您显示每个表,按登录其中的日志计数排序。

      【讨论】:

        猜你喜欢
        • 2021-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多