Kubesense

Differences from Splunk

KubeSense SPL follows Splunk's, so most Splunk searches run unchanged. This page lists where it differs.


Data

  • One index. All your logs are in one place, scoped by the time range and clusters chosen in the Log Explorer. index=… is accepted and ignored.
  • Field names. Log fields have their own names (see Built-in Field Names): _time, _raw, host and source work as in Splunk; sourcetype does not exist.
  • Attributes are text. They behave as numbers in comparisons, arithmetic, sorting, min/max and numeric aggregations, as in Splunk. A field that does not exist reads as empty and matches nothing, rather than causing an error.
  • Quotes. Single and double quotes both make text. Splunk's 'field name' for a field in eval is not supported.

Commands That Work Differently

CommandDifference
searchOn the built-in log fields, a value matches as typed, in lower case, in upper case or capitalized (error, ERROR, Error), not in every mix of cases; attribute values match in any case
timechart … byOne row per bucket and series, not one column per series. Use chart or xyseries for columns. As in Splunk, the 10 largest series are kept (limit=) and the rest combined as OTHER
fieldsColumns left out can still be read by later commands, as in CloudWatch Logs Insights
Searches at the start of a querySeveral unquoted words need search in front (search error timeout), so a mistyped command is an error
search operatorsand, or and not also work in lower case
predictA straight-line trend (algorithm=LLT); other algorithms, period=, correlate= and suppress= are not supported
clusterGroups messages that differ only in numbers, IDs and quoted values; t=, match= and delims= are not supported
anomalydetectionhistogram puts numbers into 10 equal ranges and checks each field on its own
transactionmaxspan splits a transaction into pieces of that length from its first event; its fields hold distinct values
timewrapSeries are named relative to the latest period; series=relative and align=end only
mapAt most 100 searches; a row's values may not add commands or subsearches to the search
eventcountOne row for all your logs (index is main)
tstatsReads the pre-aggregated log tables: dimension fields and log counts only, and spans in multiples of 5 seconds (see tstats)
lookupReads reference tables, and needs Log Pipeline access; no automatic lookups, time-based lookups or KV store
strptimeReturns a time rather than epoch seconds; strftime(t, "%s") gives epoch seconds
SubsearchesReturn at most 10,000 rows; append, appendcols, union and join subsearches at most 50,000 (maxout= lowers it). maxtime= and timeout= are accepted; the query's own time limit applies
chart, xyseriesAt most 1000 columns, for one aggregation
stats … byRows whose by field is missing form their own group, with the field empty, rather than being dropped
Spans shorter than a secondbin, timechart and chart take us, ms, cs and ds spans; tstats, timewrap, streamstats time_window=, transaction maxspan=/maxpause=, aligntime= and predict need a whole number of seconds

Not Supported

A Splunk command or option that KubeSense SPL does not have fails with … is not supported and the reason, rather than returning different results. Options SPL cannot honour are accepted only with the value that asks for what SPL does anyway, such as dedup keepevents=false.

CommandWhy
outputlookup, collect, outputcsvThey write data. Edit reference tables under Settings → Reference Tables; keep results with Query Jobs
sendemailUse alerts for notifications
rest, metadata, dbinspectThey read Splunk's own configuration and indexes
datamodel, pivot, fromThere are no data models
savedsearch, loadjob, map saved_search=Saved searches are not available in SPL; open a Query Job's results from Query Jobs
iplocation, geostats, geomThere is no IP location database or map data
kmeans, fit, apply and other machine-learning commandsNot available
mstats, mcatalogQuery metrics in Dashboards & Metrics
OptionWhy
timechart format=, sep=, where=; chart format=, sep=, agg=; xyseries grouped=true, sep=, format=Columns are named by the values; use limit= to keep the largest
streamstats reset_before= / reset_after=Use reset_on_change=
eventstats / streamstats allnum=trueNumeric aggregations skip values that are not numbers
join left= / right= / where= / usetime=trueName the join fields instead; rows join by field values
dedup keepevents=truededup removes the duplicate rows
extract limit=, maxchars=, mv_add=true, auto=falseextract reads every pair in the message, keeping a key's first value
rex offset_field=Match positions are not available
makemv setsv=true, mvcombine delim=The field stays a multivalue field; use mvjoin() for text
makeresults annotate=trueAdd fields with eval
transaction mvlist=true, mvraw=true, connected=false, nullstr=, delim=A transaction's fields hold their distinct values
format optionsA subsearch's rows are matched directly, not as search text
tojsonBuild JSON with eval and json_object()
tstats prestats=true, append=true, fillnull_value=tstats returns results like stats; use fillnull after it
lookup event_time_field=, inputlookup append=trueReference tables are not time-based; inputlookup must come first
selfjoin overwrite=false, max= other than 1Each row joins one other row, whose values replace its own
anomalydetection cutoff=false, outlier type= other than numNot available
append extendtimerange=trueA subsearch reads the query's time range
foreach mode= other than multifieldforeach runs over fields