Azure Kusto - использовать extract () в поле сообщения из трасс - PullRequest
0 голосов
/ 13 апреля 2020

Я использую Azure Log Analytics как часть Azure Application Insights. Я пытаюсь написать несколько запросов Kusto для анализа некоторых журналов, созданных с помощью Application Insights Javascript SDK. Вот несколько примеров сообщений:

"index.ts: imports: 1556.916ms"
"index.ts: imports: 110.486ms import { } from '@azure/keyvault-secrets'"
"index.ts: imports: 110.396ms import { } from '@azure/event-hubs'"
"index.ts: imports: 110.023ms import { } from 'applicationinsights'"
"index.ts: imports: 0.131ms import { } from '@azure/functions'"

В Log Analytics внутри Azure Application Insights я пытаюсь извлечь имя файла из столбца сообщения, используя extract(). Пока что мой запрос Kusto выглядит так:

traces
| where message contains "imports" 
| extend file = extract("^.+\.ts", 1, message)
| sort by timestamp desc
| limit 100

Когда я пытаюсь выполнить этот запрос, я получаю сообщение об ошибке:

Syntax Error

If issue persists, please open a support ticket.

Request id: 124e777f-136e-4a75-8fa7-a49483a12902

Чего мне не хватает и где моя ошибка?

1 Ответ

2 голосов
/ 13 апреля 2020

проблемы в вашем запросе:

  1. у вас есть символ (\) в вашей строке, который либо требует экранирования, либо использует дословный строковый литерал. см. больше здесь: https://docs.microsoft.com/en-us/azure/kusto/query/scalar-data-types/string

  2. в вашем регулярном выражении отсутствует группа захвата.

, если вы исправляете это, это должно работать: | extend file = extract(@"^(.+)\.ts", 1, s)

однако, независимо от этого, вы можете использовать более эффективный оператор parse, как показано ниже:

datatable(s:string)
[
    "index.ts: imports: 1556.916ms",
    "index.ts: imports: 110.486ms import { } from '@azure/keyvault-secrets'",
    "index.ts: imports: 110.396ms import { } from '@azure/event-hubs'",
    "index.ts: imports: 110.023ms import { } from 'applicationinsights'",
    "index.ts: imports: 0.131ms import { } from '@azure/functions'",
]
| parse s with file ".ts" *
...