如何在 Azure Log Analytics 中定期运行搜索作业?

问题描述 投票:0回答:2

我正在尝试可视化托管在 Azure 中的应用程序的浏览器统计信息。

为此,我使用 nginx 日志并运行 Azure Log Analytics 查询,如下所示:

ContainerLog
| where LogEntrySource == "stdout" and LogEntry has "nginx"
| extend logEntry=parse_json(LogEntry)
| extend userAgent=parse_user_agent(logEntry.nginx.http_user_agent, "browser")
| extend browser=parse_json(userAgent)
| summarize count=count() by tostring(browser.Browser.Family)
| sort by ['count']
| render piechart with (legend=hidden)

然后我得到了这个图表,这正是我想要的:

但是查询速度非常非常慢。如果我将时间范围设置为超过最后几个小时,则需要几分钟或根本不起作用。

我的解决方案是使用搜索作业,如下所示:

ContainerLog
| where LogEntrySource == "stdout" and LogEntry has "nginx"
| extend d=parse_json(LogEntry)
| extend user_agent=parse_user_agent(d.nginx.http_user_agent, "browser")
| extend browser=parse_json(user_agent)

它创建一个新表 BrowserStats_SRCH,我可以在其中执行此搜索查询:

BrowserStats_SRCH
| summarize count=count() by tostring(browser.Browser.Family)
| sort by ['count']
| render piechart with (legend=hidden)

现在速度快多了,只需要几秒钟。

但我的问题是,我怎样才能保持最新呢?优选地,该搜索作业每天自动运行一次并刷新 BrowserStats_SRCH 表,以便该表上的新查询始终在最新日志上运行。这可能吗?现在我什至无法再次手动触发搜索作业,因为然后我收到错误“具有此名称的目标表已存在”。

最后,我希望有一个带有浏览器统计信息的饼图的深层链接,而无需进一步单击。任何帮助将不胜感激。

azure azure-log-analytics
2个回答
1
投票

但我的问题是,我怎样才能保持最新呢?优选地,该搜索作业每天自动运行一次并刷新 BrowserStats_SRCH 表,以便该表上的新查询始终在最新日志上运行。这可能吗?

您可以利用 API 创建搜索作业。然后使用计时器触发的 Azure 函数或逻辑应用按计划调用该 api。

PUT https://management.azure.com/subscriptions/00000000-0000-0000-0000-00000000000/resourcegroups/testRG/providers/Microsoft.OperationalInsights/workspaces/testWS/tables/Syslog_suspected_SRCH?api-version=2021-12-01-preview

带有包含查询的请求正文

{
    "properties": { 
        "searchResults": {
                "query": "Syslog | where * has 'suspected.exe'",
                "limit": 1000,
                "startSearchTime": "2020-01-01T00:00:00Z",
                "endSearchTime": "2020-01-31T00:00:00Z"
            }
    }
}

或者您可以使用 Azure CLI:

az monitor log-analytics workspace table search-job create --subscription ContosoSID --resource-group ContosoRG  --workspace-name ContosoWorkspace --name HeartbeatByIp_SRCH --search-query 'Heartbeat | where ComputerIP has "00.000.00.000"' --limit 1500 --start-search-time "2022-01-01T00:00:00.000Z" --end-search-time "2022-01-08T00:00:00.000Z" --no-wait

现在我什至无法再次手动触发搜索作业,因为然后我收到错误“具有此名称的目标表已存在”。

在按照上述方式开始作业之前,请使用 API 调用删除旧结果表:

DELETE https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.OperationalInsights/workspaces/{workspaceName}/tables/{tableName}?api-version=2021-12-01-preview

您也可以在删除作业之前使用 this api 检查作业的状态,以确保它不是

InProgress
Deleting


0
投票

我是 Azure Monitor Log Analytics 团队的 Meir。我们现在正在针对此类用例运行私人预览版,如果您想参与,请随时与我联系:meirm @ microsoft.com

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.