Unfortunately, knowing exactly where a field comes from can be quite difficult to track down.
When you look at the list of fields on the left-hand bar, an individual field could come from any of these:
Native (built-in) fields like _time/source/sourcetype/host
Pseudo indexed fields like index, _cd
Automatically indexed fields (punct, timestartpos, date_hour, ...)
Custom defined index-time fields.
Automatic (structured data) fields use primary for CSV/JSON/XML type sources
Special purpose run-time fields like "splunk_server", "eventtype", and "tag"
Auto extracted fields (key=value)
Custom defined field extractions (KV, delimited, custom regex)
Automatic lookups
calculated fields (EVAL)
field aliases
Possibly others, but I think that's a pretty exhaustive list.
Before structured data extractions you could generally assume that all of the (non-default) fields came from a search-time field extraction (or one of the other search-time methods listed above), but that's not always the case anymore.
So all that to say there's no "easy" answer. I think the best approach is to ask the question one field at at time. You can do that with tstats , because it searches the index directly and therefore will therefore completely ignore search-time extracted fields.
Let's say you suspect that foo is an indexed field. Assuming that foo shows up with the value of bar . So lets just setup a baseline search that will show us how many times "foo" equals "bar" for whatever index and time range your testing.
foo=bar | stats count
Now run the tstats version and see if you get the same results:
| tstats count where foo=bar
Or, another option (if tstats scares you -- I had forgotten that this still works.):
foo::bar | stats count
If you get "0", then the field isn't indexed; so it must be auto extracted or something... the point is that it's happening at search time; not at index time. If both searches return the same count, then you know that "foo" is always an indexed field. (If the numbers are slightly off, it either means that the field is only sometimes indexed, or more likely, it just means that data moved between the time you ran the two searches. (Try using a historic timerange that doesn't go up until "now")
Here's a few other things you can look at when trying to determine if a field is indexed or not:
Check in fields.conf look for stanzas with INDEXED is true. (But this isn't a guarantee.)
You could use walklex to probe individual *.tsidx files in your buckets. (This is very low-level, very tedious unless your a Splunk Ninja; but it's the ultimate source of truth)
Grep all your .conf files at once for the field name in question. Normally returns something relevant, unless your field name is also a commonly occurring term.
... View more