I got it working by myself and here are the query if somebody else is fighting with same issues. For some reason I can not mark my own comment as answer.
Heartbeat
| summarize LastCall = max(TimeGenerated) by Computer, _ResourceId
| extend HeartBeatMissing = iff(LastCall < ago(2h), 1, 0)
| join kind=leftanti (
AzureActivity
| where ActivityStatus == "Succeeded"
| where Category == "Administrative"
| where OperationName == "Deallocate Virtual Machine"
| summarize by _ResourceId
) on _ResourceId