如何在Azure日志分析中定期运行搜索作业?

8ehkhllq  于 2023-02-13  发布在  其他
关注(0)|答案(1)|浏览(90)

我正在尝试可视化托管在Azure中的应用的浏览器统计信息。
为此,我使用nginx日志并运行Azure日志分析查询,如下所示:

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)

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

但是查询非常非常慢,如果我将时间范围设置为超过过去几个小时,则需要几分钟或者根本不工作。
我的解决方案是这样使用search job

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表,以便该表上的新查询总是在最新的日志上运行。这可能吗?现在我甚至不能再次手动触发搜索作业,因为这样我会得到错误“A destination table with this name already exists”。
最后,我想有一个深入链接到饼图与浏览器的统计数据,而不需要做任何进一步的点击。任何帮助将不胜感激。

ctzwtxfj

ctzwtxfj1#

但我的问题是,我如何保持这个最新的?最好这个搜索作业将自动运行一天一次,并刷新BrowserStats_SRCH表,以便该表上的新查询总是在最新的日志上运行。
你可以利用API来创建一个搜索任务,然后使用a timer triggered azure function或者逻辑应用程序按计划调用那个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"
            }
    }
}

现在,我甚至不能再次手动触发搜索作业,因为这样我会收到错误消息“具有此名称的目标表已经存在”。
在按上述方式启动作业之前,请使用an api call删除旧的结果表:

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

或者,您可以在删除作业之前使用此API检查作业的状态,以确保它不是InProgressDeleting

相关问题