I of course would recommend the lookup table route, but If you're looking to sort of "create" hosts that don't actually exist, you could also do something like this:
index=* | eval host=host.",test_host, test_host2" | makemv host delim="," | mvexpand host | dedup host | table host
This would give you a list of hosts that actually exist, with the addition of two "fake" hosts called test_host and test_host2.
From there you could use the join command on the host field to actually join your list of hosts to actual data in a subsearch:
index=* | eval host=host.",test_host, test_host2" | makemv host delim="," | mvexpand host | dedup host | table host | join type=outer host [search index=* | table host index]
Finally, you could filter by any hosts with no data in any index
index=* | eval host=host.",test_host, test_host2" | makemv host delim="," | mvexpand host | dedup host | table host | join type=outer host [search index=* | table host index] | fillnull index value=NO_DATA | search index=NO_DATA
... View more