Я использую приведенный ниже запрос, чтобы получить журнал ошибок контейнера и фильтровать его для удаления дубликатов.
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
заранее спасибо
Вы можете сделать следующее непосредственно под последней строкой вашего запроса:
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
Результат:
Нет, это не игнорирование других ошибок. Но нужно, конечно, протестировать. Если что-то все еще не так, мы можем это исправить!
Я проверил это, я вижу, что он игнорирует другие ошибки, даже мы видим это в ваших результатах, это не ошибка в списке. Невозможно подключить БД.
Я думал, это было твое требование. Затем удалите строку | where ERROR has "Could not find prepared statement"
Тогда у вас будут все ошибки.
Важная часть — это строка с HasPrev
. Все остальные строки предназначены только для демонстрации результата.
Я попытался удалить строку, в ней указана только первая ошибка и проигнорированы все остальные.
Когда вы нажимаете на демонстрационную ссылку в моем ответе, она работает. Но я использовал только тестовые данные. HasPrev по типу просматривает строки «SRV2005». Если одинаковых строк больше, к результату будет добавлена только первая. Возможно, вам придется изменить этот критерий. Но теперь мой запрос суммирует все типы и дает только один для каждого типа. Это часть: «первая часть из ошибок не удалось подготовить подготовленный оператор»
Возможно, у вас нет других ошибок из-за вашего таймфрейма в 5 минут.
вы правы, SRV2005 имеет разные ошибки вместе с подготовленным оператором. этот запрос выбирает только top1 из списка, любое другое решение, которое выберет top1 из ошибки подготовленного оператора и перечислит его вместе с остальными ошибками?
Каков ожидаемый результат на основе выборки данных по вашему вопросу?
Я обновил вопрос с ожидаемым результатом, это похоже на 1 из 3 ошибок подготовленного утверждения с двумя другими уникальными ошибками. Спасибо за вашу помощь
Понятно. Я обновил свой запрос в своем ответе. Я думаю, что сейчас это то, чего вы хотите достичь. Если да, не стесняйтесь проголосовать и принять это :) Спасибо.
В демонстрационных результатах первые две ошибки одного типа (подготовлены), нужно указать только одну. но я думаю, что мы не можем пойти дальше этого. Спасибо за вашу помощь. действительно потрясающие навыки. большое спасибо
Пожалуйста. Но почему первые два результата в моей демо-версии одинаковы?
Был бы рад, если бы вы проголосовали за мой ответ. Или, если это все еще не правильный ответ, давайте исправим это :)
нам нужна только одна запись для всех ошибок, содержащая строку «Не удалось найти ошибки подготовленного оператора», если вы видите в демонстрационных результатах, что первая и вторая записи такие же, как и они, не удалось найти ошибку подготовленного оператора. можно ли сделать это независимо от типа ошибки и других строк в журнале.
О, да. Я починю это. Дай мне секунду.
Теперь мой запрос исправлен в моем ответе. Пожалуйста, посмотрите.
Большое спасибо. это работает как шарм. ценит вашу поддержку.
пожалуйста.
Если хотите, вы также можете проголосовать за мой ответ. Спасибо. :)
сделанный. Спасибо
Игнорирует ли он другие ошибки? Если да, то этого не должно быть.