KQL-запрос для фильтрации повторяющихся записей и выбора первой первой записи из данных журнала

Я использую приведенный ниже запрос, чтобы получить журнал ошибок контейнера и фильтровать его для удаления дубликатов.

    let ContainerIdList = KubePodInventory
    | where ContainerName contains "acc-c1-logger"
    | where Namespace has "prd" | where ClusterId =~ '/subscriptions/xxxx/resourcegroups/xxxx/providers/Microsoft.ContainerService/managedClusters/aksprd'
   | distinct ContainerID;
   ContainerLog 
   | where ContainerID in (ContainerIdList)
   | where LogEntry !has "SRV1174"
   | where LogEntry has "| E |" or LogEntry has "| F |"
   | where LogEntry !contains "the I/O interface definition of project" 
   | where LogEntry !contains "the I/O interface definition of cuc" 
   | where TimeGenerated > ago(5m)
   | project LogEntrySource, LogEntry, TimeGenerated 
   | order by TimeGenerated desc
   | top 1000 by LogEntry
   | render table
   | extend SplitLog = split(LogEntry, "|")
   | project C1 = SplitLog[0], cc=SplitLog[1],C2 = todatetime(SplitLog[1]), C3 = 
     SplitLog[2], C4 = SplitLog[3], C5=SplitLog[4], logerror=SplitLog[5]
   | summarize arg_max(C2,*) by tostring(logerror)
   | project-away logerror
   | project ERROR = strcat( cc, "|", C3, "|", C4, "|", C5, "|", logerror1)

я получаю следующий вывод в таблице ошибок

  2024-06-27 20:43:47 | con-prc-sc | SRV2006 | E | [DB_AdviceSimulationAlerted] on project 
  'Advice': error while storing: During executeUpdate: Could not find prepared statement 
   with handle 7."
   2024-06-27 20:44:00 | con-prc-sc | SRV2001 | E | Unable to connect DB

   2024-06-27 20:44:47 | con-prc-sc | SRV2006 | E | [DB_AdviceSimulationAlerted] on project 
  'Advice': error while storing: During executeUpdate: Could not find prepared statement 
   with handle 9."
   2024-06-27 20:45:00 | con-prc-sc | SRV2001 | E | file is missing on relative path

   2024-06-27 20:45:47 | con-prc-sc | SRV2006 | E | [DB_Advice] on project 
  'Advice': error while storing: During executeUpdate: Could not find prepared statement 
   with handle 11."

Требование здесь: мне нужно получить только первую 1 из ошибки не удалось подготовить подготовленный оператор вместе с другими ошибками.

 The Expected outcome should be 
 Error:
 2024-06-27 20:43:47 | con-prc-sc | SRV2006 | E | 
 [DB_AdviceSimulationAlerted] on project 
 'Advice': error while storing: During executeUpdate: Could not find 
 prepared statement with handle 7."
 2024-06-27 20:44:00 | con-prc-sc | SRV2001 | E | Unable to connect DB
 2024-06-27 20:45:00 | con-prc-sc | SRV2001 | E | file is missing on 
 relative path

заранее спасибо

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать следующее непосредственно под последней строкой вашего запроса: Data предназначен только для воспроизведения ваших данных.

let Data = datatable(ERROR: string)
[
   "2024-06-27 20:43:47 | con-prc-sc | SRV2005 | E | [DB_AdviceSimulationAlerted] on project 'Advice': error while storing: During executeUpdate: Could not find prepared statement with handle 11.",
   "2024-06-27 20:43:47 | con-prc-sc | SRV2005 | E | [DB_AdviceSimulationAlerted] on project 'Advice': error while storing: During executeUpdate: Could not find prepared statement with handle 9.",
   "2024-06-27 20:43:47 | con-prc-sc | SRV2006 | E | [DB_AdviceSimulationAlerted] on project 'Advice': error while storing: During executeUpdate: Could not find prepared statement with handle 7.",
   "2024-06-27 20:44:00 | con-prc-sc | SRV2001 | E | Unable to connect DB",
   "2024-06-27 20:44:47 | con-prc-sc | SRV2006 | E | [DB_AdviceSimulationAlerted] on project 'Advice': error while storing: During executeUpdate: Could not find prepared statement with handle 9.",
   "2024-06-27 20:45:00 | con-prc-sc | SRV2001 | E | file is missing on relative path",
   "2024-06-27 20:45:47 | con-prc-sc | SRV2006 | E | [DB_Advice] on project 'Advice': error while storing: During executeUpdate: Could not find prepared statement with handle 11."
];
Data
| extend type = tostring(split(ERROR, "|")[2])
| extend ts = tostring(split(ERROR, "|")[0])
| extend message = tostring(split(ERROR, "|")[4])
| extend type = iff(message contains "Could not find prepared statement with handle", "A", strcat(type, message))
| order by type desc, ts desc
| extend HasPrev = prev(type) == type
| where HasPrev == false
| project ERROR

Демо здесь

Результат:

Игнорирует ли он другие ошибки? Если да, то этого не должно быть.

ramesh reddy 30.06.2024 04:37

Нет, это не игнорирование других ошибок. Но нужно, конечно, протестировать. Если что-то все еще не так, мы можем это исправить!

decius 30.06.2024 08:24

Я проверил это, я вижу, что он игнорирует другие ошибки, даже мы видим это в ваших результатах, это не ошибка в списке. Невозможно подключить БД.

ramesh reddy 01.07.2024 14:07

Я думал, это было твое требование. Затем удалите строку | where ERROR has "Could not find prepared statement" Тогда у вас будут все ошибки.

decius 01.07.2024 14:12

Важная часть — это строка с HasPrev. Все остальные строки предназначены только для демонстрации результата.

decius 01.07.2024 14:13

Я попытался удалить строку, в ней указана только первая ошибка и проигнорированы все остальные.

ramesh reddy 01.07.2024 14:23

Когда вы нажимаете на демонстрационную ссылку в моем ответе, она работает. Но я использовал только тестовые данные. HasPrev по типу просматривает строки «SRV2005». Если одинаковых строк больше, к результату будет добавлена ​​только первая. Возможно, вам придется изменить этот критерий. Но теперь мой запрос суммирует все типы и дает только один для каждого типа. Это часть: «первая часть из ошибок не удалось подготовить подготовленный оператор»

decius 01.07.2024 14:30

Возможно, у вас нет других ошибок из-за вашего таймфрейма в 5 минут.

decius 01.07.2024 14:31

вы правы, SRV2005 имеет разные ошибки вместе с подготовленным оператором. этот запрос выбирает только top1 из списка, любое другое решение, которое выберет top1 из ошибки подготовленного оператора и перечислит его вместе с остальными ошибками?

ramesh reddy 01.07.2024 14:38

Каков ожидаемый результат на основе выборки данных по вашему вопросу?

decius 01.07.2024 14:40

Я обновил вопрос с ожидаемым результатом, это похоже на 1 из 3 ошибок подготовленного утверждения с двумя другими уникальными ошибками. Спасибо за вашу помощь

ramesh reddy 01.07.2024 14:47

Понятно. Я обновил свой запрос в своем ответе. Я думаю, что сейчас это то, чего вы хотите достичь. Если да, не стесняйтесь проголосовать и принять это :) Спасибо.

decius 01.07.2024 14:53

В демонстрационных результатах первые две ошибки одного типа (подготовлены), нужно указать только одну. но я думаю, что мы не можем пойти дальше этого. Спасибо за вашу помощь. действительно потрясающие навыки. большое спасибо

ramesh reddy 01.07.2024 15:20

Пожалуйста. Но почему первые два результата в моей демо-версии одинаковы?

decius 01.07.2024 15:26

Был бы рад, если бы вы проголосовали за мой ответ. Или, если это все еще не правильный ответ, давайте исправим это :)

decius 01.07.2024 15:27

нам нужна только одна запись для всех ошибок, содержащая строку «Не удалось найти ошибки подготовленного оператора», если вы видите в демонстрационных результатах, что первая и вторая записи такие же, как и они, не удалось найти ошибку подготовленного оператора. можно ли сделать это независимо от типа ошибки и других строк в журнале.

ramesh reddy 01.07.2024 15:38

О, да. Я починю это. Дай мне секунду.

decius 01.07.2024 15:39

Теперь мой запрос исправлен в моем ответе. Пожалуйста, посмотрите.

decius 01.07.2024 15:42

Большое спасибо. это работает как шарм. ценит вашу поддержку.

ramesh reddy 01.07.2024 15:46

пожалуйста.

decius 01.07.2024 15:47

Если хотите, вы также можете проголосовать за мой ответ. Спасибо. :)

decius 01.07.2024 15:48

сделанный. Спасибо

ramesh reddy 01.07.2024 15:49

Другие вопросы по теме