Получение дубликатов записей при объединении в 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запустить. Затем вы можете присоединиться к этому и оставаться в безопасности, чтобы не генерировать данные, которые вам не нужны.

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