Получение дубликатов записей при объединении в kql
У нас есть требование получить статус службы Windows при ее запуске и остановке, чтобы я возвратил один запрос, но я сталкиваюсь с проблемой при объединении двух таблиц для получения вывода.
я пытался использовать внутренние и левые внешние соединения, но все еще получал дубликаты
Event
| where EventLog == "System" and EventID == 7036 and Source == "Service Control Manager"
| parse kind=relaxed EventData with * '<Data Name="param1">' Windows_Service_Name '</Data><Data Name="param2">' Windows_Service_State '</Data>' *
| where Windows_Service_State == "running" and Windows_Service_Name == "Microsoft Monitoring Agent Azure VM Extension Heartbeat Service"
| extend startedtime = TimeGenerated
| join (
Event
| where EventLog == "System" and EventID == 7036 and Source == "Service Control Manager"
| parse kind=relaxed EventData with * '<Data Name="param1">' Windows_Service_Name '</Data><Data Name="param2">' Windows_Service_State '</Data>' *
| where Windows_Service_State == "stopped" and Windows_Service_Name == "Microsoft Monitoring Agent Azure VM Extension Heartbeat Service"
| extend stoppedtime = TimeGenerated
) on Computer
| extend downtime = startedtime - stoppedtime
| project Computer, Windows_Service_Name,stoppedtime , startedtime ,downtime
| top 10 by Windows_Service_Name desc
мы не хотим, чтобы сервис запускался и останавливался, если сервис перезапускался несколько раз в день, и мы получаем повторяющиеся временные интервалы в момент запуска при присоединении. Пожалуйста, просмотрите ссылку ( https://ibb.co/JzqxjC0)
0 ответов
Я не уверен, что полностью понимаю, что происходит, поскольку у меня нет доступа к данным. Но. Я вижу, вы используете вариант соединения по умолчанию.
По умолчанию внутренний уникальный:
Функция внутреннего соединения похожа на стандартное внутреннее соединение из мира SQL. Выходная запись создается всякий раз, когда запись на левой стороне имеет тот же ключ соединения, что и запись на правой стороне.
Это означает, что новая строка в результате создается при каждом совпадении между левой и правой стороной. Следовательно. предположим, что у вас есть компьютер, который перезагружался дважды, поэтому на нем есть 2 строкиstopped
, и 2 строки running
. Это даст 4 строки в ответе Кусто.
Глядя на вашу фотографию, я вижу в ней смысл, потому что у вас есть линии с отрицательным временем простоя. Думаю, это невозможно.
Что бы я сделал, так это поищу идентификатор, уникальный для каждого Computer
запустить. Затем вы можете присоединиться к этому и оставаться в безопасности, чтобы не генерировать данные, которые вам не нужны.