log10x-mcp 1.30.21 → 1.30.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +3 -1
  2. package/build/index.js +26 -4
  3. package/build/index.js.map +1 -1
  4. package/build/lib/advisor/reporter-forwarders.js +34 -3
  5. package/build/lib/advisor/reporter-forwarders.js.map +1 -1
  6. package/build/lib/advisor/reporter.js +7 -4
  7. package/build/lib/advisor/reporter.js.map +1 -1
  8. package/build/lib/cdk-recipes.d.ts +1 -1
  9. package/build/lib/cdk-recipes.js +4 -5
  10. package/build/lib/cdk-recipes.js.map +1 -1
  11. package/build/lib/fenced.d.ts +2 -0
  12. package/build/lib/fenced.js +2 -2
  13. package/build/lib/fenced.js.map +1 -1
  14. package/build/lib/offload-recipes.d.ts +2 -1
  15. package/build/lib/offload-recipes.js +7 -6
  16. package/build/lib/offload-recipes.js.map +1 -1
  17. package/build/lib/poc-report-renderer.js +17 -11
  18. package/build/lib/poc-report-renderer.js.map +1 -1
  19. package/build/lib/retriever-api.d.ts +14 -0
  20. package/build/lib/retriever-api.js +40 -10
  21. package/build/lib/retriever-api.js.map +1 -1
  22. package/build/lib/runtime-image.d.ts +4 -2
  23. package/build/lib/runtime-image.js +4 -2
  24. package/build/lib/runtime-image.js.map +1 -1
  25. package/build/lib/siem/_sampling.js +4 -0
  26. package/build/lib/siem/_sampling.js.map +1 -1
  27. package/build/lib/siem/cloudwatch.d.ts +18 -0
  28. package/build/lib/siem/cloudwatch.js +106 -2
  29. package/build/lib/siem/cloudwatch.js.map +1 -1
  30. package/build/lib/siem/datadog.js +1 -1
  31. package/build/lib/siem/datadog.js.map +1 -1
  32. package/build/lib/siem/elasticsearch.js +13 -1
  33. package/build/lib/siem/elasticsearch.js.map +1 -1
  34. package/build/lib/siem/splunk.d.ts +18 -0
  35. package/build/lib/siem/splunk.js +71 -7
  36. package/build/lib/siem/splunk.js.map +1 -1
  37. package/build/product-kb/docs/apps/receiver/compact/index.md +3 -3
  38. package/build/product-kb/docs/apps/receiver/compact/splunk.md +81 -67
  39. package/build/product-kb/docs/apps/retriever/faq.md +2 -2
  40. package/build/product-kb/docs/faq/apps/retriever.md +2 -2
  41. package/build/product-kb/docs/faq/general.md +1 -1
  42. package/build/product-kb/docs/faq/stacks/splunk/comparisons.md +3 -3
  43. package/build/product-kb/docs/faq/stacks/splunk/compatibility.md +19 -242
  44. package/build/product-kb/docs/faq/stacks/splunk/index.md +1 -1
  45. package/build/product-kb/docs/faq/stacks/splunk/kv-store.md +41 -159
  46. package/build/product-kb/docs/faq/stacks/splunk/optimization.md +4 -4
  47. package/build/product-kb/docs/run/input/forwarder/fluentbit/index.md +1 -1
  48. package/build/product-kb/docs/run/input/forwarder/fluentd/index.md +1 -1
  49. package/build/product-kb/docs/run/input/forwarder/otel-collector/index.md +1 -1
  50. package/build/product-kb/docs/run/input/forwarder/vector/index.md +1 -1
  51. package/build/tools/advise-install.js +8 -3
  52. package/build/tools/advise-install.js.map +1 -1
  53. package/build/tools/doctor.js +3 -2
  54. package/build/tools/doctor.js.map +1 -1
  55. package/build/tools/emit-sample-plan.js +7 -1
  56. package/build/tools/emit-sample-plan.js.map +1 -1
  57. package/build/tools/poc-from-local.js +7 -6
  58. package/build/tools/poc-from-local.js.map +1 -1
  59. package/build/tools/poc-from-siem.js +71 -4
  60. package/build/tools/poc-from-siem.js.map +1 -1
  61. package/build/tools/retriever-query.js +1 -1
  62. package/build/tools/retriever-query.js.map +1 -1
  63. package/package.json +1 -1
@@ -3,26 +3,27 @@ icon: material/check-circle-outline
3
3
  title: "Compatibility"
4
4
  ---
5
5
 
6
- Splunk dashboards, Universal Forwarders, testing on your own environment, HEC integration, Splunk Enterprise on-premises, and the full Splunk Cloud KV-Store pilot checklist.
6
+ Splunk dashboards, Universal Forwarders, testing on your own environment, HEC integration, Splunk Enterprise on-premises, and Splunk Cloud Platform.
7
7
 
8
8
  ??? tenx-compat "Does 10x work with my existing Splunk dashboards and queries"
9
9
 
10
- **Yes.** 10x preserves all Splunk field mappings and metadata.
10
+ **Yes.** Compact events keep `host`, `source`, `sourcetype` and `index`; field extractions apply to the expanded text.
11
11
 
12
12
  **Fields preserved:**
13
13
 
14
- - `_time`, `host`, `source`, `sourcetype`
15
- - `_raw`, `index`
16
- - All field extractions (props.conf, transforms.conf)
17
- - Custom metadata and tags
14
+ - `host`, `source`, `sourcetype`, `index`
15
+ - `_raw`, expanded at search time
16
+ - Field extractions, applied to the expanded text
18
17
 
19
- **Functionality preserved:**
18
+ `_time` on a compact event is the time Splunk indexed it; the original timestamp is in the expanded line.
20
19
 
21
- - Saved searches and dashboards require zero changes
22
- - Scheduled alerts are compiled once at save time (via the **10x Compile Alert** view) so they run natively server-side
23
- - SPL queries return the same results
20
+ **How searches reach compact events:**
24
21
 
25
- **How optimization works:** The 10x Engine uses [template-based](https://doc.log10x.com/run/transform/){target="_blank"} encoding, not field removal. Each repeated log event is replaced by a compact reference to its template while maintaining full searchability in Splunk.
22
+ - Classic dashboards in an app that carries `dashboard.js` keep their SPL unchanged; Dashboard Studio panels use `tenxsearch`
23
+ - The search bar, saved searches and the REST API wrap the search in the `tenxsearch` command
24
+ - Alerts created in the **Compile Alert** view are compiled once at save time, so they run natively server-side; an alert saved from the search page wraps its search in `tenxsearch`
25
+
26
+ **How optimization works:** The 10x Engine uses [template-based](https://doc.log10x.com/run/transform/){target="_blank"} encoding, keeping every value. Each repeated log event is replaced by a compact reference to its template while maintaining full searchability in Splunk.
26
27
 
27
28
  ??? tenx-compat "Does this work with Universal Forwarders"
28
29
 
@@ -36,7 +37,7 @@ Splunk dashboards, Universal Forwarders, testing on your own environment, HEC in
36
37
 
37
38
  1. **[Cost POC](https://doc.log10x.com/apps/mcp/)**, install the 10x MCP and ask it to run a POC on your Splunk logs. The engine runs on your own machine, results in minutes. No account, no credit card.
38
39
  2. **[Reporter](https://doc.log10x.com/apps/reporter/)**, Deploy as a DaemonSet alongside your forwarder for cost visibility before logs reach Splunk. Alternatively, the [MCP server](https://github.com/log-10x/log10x-mcp){target="_blank"}'s SIEM-sample tool connects to Splunk via REST API for agentless Splunk-side analysis (no DaemonSet).
39
- 3. **[Receiver](https://doc.log10x.com/apps/receiver/deploy/)**, Deploy via Helm chart alongside your forwarder. Filter mode (sampling) or [Compact mode](https://doc.log10x.com/apps/receiver/compact/) (lossless shrink via the [10x for Splunk](https://doc.log10x.com/apps/receiver/compact/splunk/) app). ~30 min setup.
40
+ 3. **[Receiver](https://doc.log10x.com/apps/receiver/deploy/)**, Deploy via Helm chart alongside your forwarder. Filter mode (sampling) or [Compact mode](https://doc.log10x.com/apps/receiver/compact/) (lossless shrink via the [Log10x App](https://doc.log10x.com/apps/receiver/compact/splunk/)). ~30 min setup.
40
41
  4. **[Retriever](https://doc.log10x.com/apps/retriever/)**, Route events to S3, stream selected data to Splunk on-demand.
41
42
 
42
43
  Each step is independent, start with the cost POC to see your reduction ratio, then move to production when ready.
@@ -68,11 +69,11 @@ Splunk dashboards, Universal Forwarders, testing on your own environment, HEC in
68
69
 
69
70
  **Agentless Splunk analysis:** The [MCP server](https://github.com/log-10x/log10x-mcp){target="_blank"}'s SIEM-sample tool queries Splunk REST API for cost analysis without deploying a DaemonSet.
70
71
 
71
- **Compatibility:** Works with Splunk Cloud Platform (all regions), Splunk Enterprise 8.x, 9.x, and 10.x. No changes to HEC configuration required.
72
+ **Compatibility:** The Receiver and Reporter send to any Splunk HEC endpoint, on Splunk Cloud Platform or Splunk Enterprise. No changes to HEC configuration required. The Log10x App, which expands compact events, supports Splunk Enterprise 9.4 through 10.4.
72
73
 
73
74
  ??? tenx-compat "Works with Splunk Enterprise on-premises"
74
75
 
75
- **Yes.** Works with both Splunk Cloud and Splunk Enterprise on-premises (8.x, 9.x, 10.x), across single-instance, distributed, and clustered deployments.
76
+ **Yes.** The Receiver, Reporter and Retriever work with Splunk Enterprise on-premises across single-instance, distributed, and clustered deployments. The Log10x App supports Splunk Enterprise 9.4 through 10.4.
76
77
 
77
78
  On-premises, the Receiver sidecar and Reporter DaemonSet forward to HEC or to Heavy Forwarders, using either HEC token or Heavy Forwarder S2S authentication.
78
79
 
@@ -85,234 +86,10 @@ Splunk dashboards, Universal Forwarders, testing on your own environment, HEC in
85
86
 
86
87
  **[Retriever](https://doc.log10x.com/apps/retriever/){target="_blank"} for on-premises:** Works with AWS S3, Azure Blobs, and any S3-compatible [object storage](https://doc.log10x.com/run/input/objectStorage/){target="_blank"}. Returns the exact offloaded events to Splunk Enterprise HEC endpoints on-demand.
87
88
 
88
- ??? tenx-compat "Splunk Cloud: KV Store Setup & Pilot Checklist"
89
-
90
- The [10x for Splunk](https://github.com/log-10x/splunk-app){target="_blank"} app expands compact events at search time using a KV Store collection. Here's the complete setup and pilot validation checklist for Splunk Cloud.
91
-
92
- **Before You Start**
93
-
94
- - Admin or Power User access to your Splunk Cloud instance
95
- - Splunk Cloud supporting KV Store (all modern instances do)
96
- - Ability to create HTTP Event Collector (HEC) tokens
97
- - Two HEC tokens configured: one for templates (`tenx_dml_raw_json` sourcetype), one for encoded events
98
-
99
- **Day 1: App Installation & KV Store Setup**
100
-
101
- 1. **Install 10x for Splunk app**
102
- - [ ] Download from [GitHub](https://github.com/log-10x/splunk-app/releases){target="_blank"}
103
- - [ ] Upload via Settings > Apps > Install app from file
104
- - [ ] Restart (if prompted by Splunk Cloud)
105
- - [ ] Verify: Settings > Apps > Confirm "10x for Splunk" appears in app list
106
-
107
- 2. **Create KV Store collection**
108
- - [ ] Go to Settings > Advanced Search > Collections
109
- - [ ] Create new collection named `tenx_dml`
110
- - [ ] Schema fields (automatically generated, verify all present):
111
- ```
112
- _key (primary key)
113
- pattern_hash (string)
114
- pattern (string)
115
- pattern_parts (array)
116
- part_0 (string)
117
- pattern_terminator (string)
118
- timestamp_format (string)
119
- ```
120
- - [ ] Verify: `| inputlookup tenx-dml-lookup | stats count` returns 0 (empty)
121
-
122
- 3. **Create indexes for template data**
123
- - [ ] **Create `tenx_dml` index** (required for storing templates):
124
- ```
125
- Settings → Indexes → New Index
126
- Name: tenx_dml
127
- Data type: Events
128
- Max size: 10GB (adjust based on your expected template volume)
129
- Retention: 30+ days (templates are reference data, not logs)
130
- ```
131
- Verify: `| rest /services/data/indexes | search title="tenx_dml"`
132
- - [ ] **Optional: Create separate index for encoded events:**
133
- ```
134
- Settings → Indexes → New Index
135
- Name: encoded_events (or your preferred name)
136
- Data type: Events
137
- Max size: Depends on log volume
138
- ```
139
- Or use `main` index if preferred (encoded events are searchable until expansion)
140
-
141
- 4. **Verify props.conf and transforms.conf**
142
- - [ ] Check Settings > Field Extractions > Verify `tenx_encoded` sourcetype has `REPORT-tenx` extraction
143
- - [ ] Verify transforms.conf has `tenx-hash-vars-extraction` and `tenx-dml-lookup` defined
144
- - [ ] If missing, manually add via Settings > Add data > Source type settings
145
-
146
- **Phase 4: Enable HTTP Event Collector (HEC) globally**
147
-
148
- 4a. **Enable HEC globally** (required before creating tokens):
149
- - [ ] Settings → Data Inputs → HTTP Event Collector → Global Settings
150
- - [ ] Toggle "All Tokens" to **ENABLED**
151
- - [ ] Set Default Input Port: `8088` (or your custom port)
152
- - [ ] Enable SSL: **YES** (recommended for production)
153
- - [ ] Click Save
154
- - [ ] Verify: `| rest /services/data/inputs/http | search disabled=0`
155
-
156
- 4b. **Create HEC Token 1 (for templates)**:
157
- - [ ] Settings → Data Inputs → HTTP Event Collector → New Token
158
- - [ ] Name: `tenx-templates`
159
- - [ ] Source Type: `tenx_dml_raw_json`
160
- - [ ] Index: `tenx_dml` (created in step 3)
161
- - [ ] Indexes allowed: `tenx_dml` (restrict to this index only)
162
- - [ ] Disabled: NO
163
- - [ ] Click **Save Token**
164
- - [ ] Copy the token value (save it for later)
165
-
166
- 4c. **Create HEC Token 2 (for encoded events)**:
167
- - [ ] Settings → Data Inputs → HTTP Event Collector → New Token
168
- - [ ] Name: `tenx-encoded`
169
- - [ ] Source Type: `tenx_encoded`
170
- - [ ] Index: Your target index (where searchable events go)
171
- - [ ] Indexes allowed: Your target index
172
- - [ ] Disabled: NO
173
- - [ ] Click **Save Token**
174
- - [ ] Copy the token value (save it for later)
175
-
176
- **Week 1: Data Ingestion & KV Store Population**
177
-
178
- 5. **Send template data via HEC** (or via your log forwarder)
179
- - [ ] **Via curl** (for testing):
180
- ```bash
181
- SPLUNK_HOST="your-splunk-cloud.splunkcloud.com"
182
- SPLUNK_PORT="8088"
183
- HEC_TOKEN="<your-tenx-templates-token>"
184
-
185
- curl -k https://$SPLUNK_HOST:$SPLUNK_PORT/services/collector/event \
186
- -H "Authorization: Splunk $HEC_TOKEN" \
187
- -H "Content-Type: application/json" \
188
- -d '{
189
- "event": {
190
- "templateHash": "abc123def456",
191
- "template": "User %s logged in from %s",
192
- "templateParts": ["User", "logged in from"]
193
- },
194
- "sourcetype": "tenx_dml_raw_json",
195
- "index": "tenx_dml"
196
- }'
197
- ```
198
- - [ ] **Via Fluentd/Fluent Bit:** Configure your forwarder output to send to this HEC endpoint with same token and sourcetype
199
- - [ ] Verify templates arriving: `index=tenx_dml sourcetype=tenx_dml_raw_json | head 10`
200
-
201
- 6. **Send encoded events via HEC** (or via your log forwarder)
202
- - [ ] **Via curl** (for testing):
203
- ```bash
204
- SPLUNK_HOST="your-splunk-cloud.splunkcloud.com"
205
- SPLUNK_PORT="8088"
206
- HEC_TOKEN="<your-tenx-encoded-token>"
207
-
208
- curl -k https://$SPLUNK_HOST:$SPLUNK_PORT/services/collector/event \
209
- -H "Authorization: Splunk $HEC_TOKEN" \
210
- -H "Content-Type: application/json" \
211
- -d '{
212
- "event": "~abc123def456,admin,192.168.1.1",
213
- "sourcetype": "tenx_encoded",
214
- "index": "main"
215
- }'
216
- ```
217
- - [ ] **Via Fluentd/Fluent Bit:** Configure your forwarder output to send to this HEC endpoint with same token and sourcetype
218
- - [ ] Verify encoded events arriving: `index=main sourcetype=tenx_encoded | head 10`
219
-
220
- 7. **Wait for KV Store population**
221
- - [ ] The "Consume KV" saved search runs every 2 minutes (automatic)
222
- - [ ] Check: `index=_internal savedsearch_name="Consume KV" | table _time, status, result_count` (verify no errors)
223
- - [ ] Check KV store: `| inputlookup tenx-dml-lookup | stats count` (should be > 0 after 2-3 min)
224
-
225
- 8. **Monitor template consumption**
226
- - [ ] Run: `sourcetype=tenx_dml_pure | stats count` (confirms templates are searchable; this sourcetype lands in the index set by `dest_dml_index`, `main` by default)
227
- - [ ] Run: `| inputlookup tenx-dml-lookup | head 5 | table _key, pattern, timestamp_format` (verify structure)
228
-
229
- **Week 2: Expansion Validation & Performance Testing**
230
-
231
- 9. **Test basic expansion**
232
- - [ ] Run: `index=your_target_index sourcetype=tenx_encoded | head 10 | \`tenx-inflate\``
233
- - [ ] Verify: All fields (`_raw`, `_time`, `host`, `source`, etc.) are restored to original values
234
- - [ ] Check: No `tenx_hash`, `tenx_var_*` fields remain in final output (cleanup working)
235
-
236
- 10. **Test debug mode**
237
- - [ ] Run: `index=your_target_index sourcetype=tenx_encoded | head 1 | \`tenx-inflate-debug\` | table *`
238
- - [ ] Verify: `_raw` field matches original (unencoded) log format
239
- - [ ] Check: `tenx_ts_sec` correctly detects timestamp precision (milliseconds vs nanoseconds)
240
-
241
- 11. **Test field extractions and searches post-expansion**
242
- - [ ] Run existing saved search/dashboard on expanded data
243
- - [ ] Verify: All field extractions work (extractions applied post-expansion)
244
- - [ ] Check: Alerts trigger correctly on expanded events
245
- - [ ] Compare: Results match pre-optimization historical logs (sample query on same time range)
246
-
247
- 12. **Measure search performance**
248
- - [ ] Run: `index=your_target_index sourcetype=tenx_encoded earliest=-1h | \`tenx-inflate\` | stats count`
249
- - [ ] Note: The `tenx-inflate` macro adds a per-event decode step at search time; expect a small overhead relative to searching un-encoded events
250
- - [ ] Compare: Same query without expansion vs with expansion, and validate the overhead on your own data volume
251
-
252
- **Post-Pilot: Production Deployment**
253
-
254
- 13. **Enable analytics dashboard**
255
- - [ ] Open: App launcher > 10x for Splunk > Analytics Dashboard
256
- - [ ] Verify: Shows total compact events, reduction ratio, storage savings
257
- - [ ] Check: Panels populate when opened (the dashboard runs its searches on view)
258
-
259
- 14. **Set up monitoring and alerts**
260
- - [ ] Monitor KV store size: `| inputlookup tenx-dml-lookup | stats count` (alert on growth or error against the threshold you set)
261
- - [ ] Monitor expansion failures: Check tenx app logs for errors
262
- - [ ] Optional: Set up dashboard for Splunk license impact (GB before/after)
263
-
264
- 15. **Risk Mitigation & Rollback**
265
- - [ ] **Rollback procedure:** Simply disable 10x for Splunk app:
266
- 1. Settings > Apps > 10x for Splunk > Disable
267
- 2. Re-run searches without `\`tenx-inflate\`` macro (searches work on encoded raw data until disabled)
268
- 3. KV Store collection remains; can re-enable app without data loss
269
- - [ ] **Zero data loss:** Encoded events remain in index; templates preserved in KV Store
270
- - [ ] **Retention:** Configure KV Store collection retention if needed (Settings > Collections)
271
-
272
- **Splunk Cloud Limitations & Workarounds**
273
-
274
- - **No custom Python alert actions**, Covered. App uses standard KV Store and Search hooks (no custom Python required)
275
- - **Limited app customization**, App config available in local/default folders; can override via local/ without modifying default/
276
- - **Network egress**, All data stays within Splunk Cloud. No external calls needed after app installation
277
- - **KV Store max size**, Bounded by your Splunk KV Store limits, one entry per template. Monitor via `| inputlookup tenx-dml-lookup | stats count`. If approaching your limit, consider archiving old templates
278
-
279
- **Forwarder Configuration Examples**
280
-
281
- **Fluentd:**
282
- ```yaml
283
- <match encoded_events>
284
- @type http_buffered
285
- endpoint_url https://<splunk-host>:8088/services/collector/event
286
- serializer json
287
- auth_type basic
288
- auth_key "Splunk <your-hec-token>"
289
- <buffer>
290
- flush_interval 10s
291
- </buffer>
292
- </match>
293
- ```
294
-
295
- **Fluent Bit:**
296
- ```ini
297
- [OUTPUT]
298
- Name http
299
- Match *
300
- Host <splunk-host>
301
- Port 8088
302
- URI /services/collector/event
303
- header Authorization Splunk <your-hec-token>
304
- header Content-Type application/json
305
- json_date_key timestamp
306
- Format json
307
- ```
89
+ ??? tenx-compat "Does the Log10x App run on Splunk Cloud Platform"
308
90
 
309
- **Universal Forwarder:**
310
- The Universal Forwarder integration uses a file relay pattern, not a custom forwarder output. Fluent Bit with the 10x sidecar reads logs from the original folder, filters and (optionally) compacts them, and writes the processed output to a second folder. The Universal Forwarder monitors that second folder with a standard `inputs.conf` and ships to the indexers over its normal S2S protocol. The UF keeps its existing configuration; no custom outputs are required.
91
+ The [Log10x App](https://doc.log10x.com/apps/receiver/compact/splunk/) is tested on Splunk Enterprise 9.4, 10.0, 10.2 and 10.4, and the package passes AppInspect's Splunk Cloud checks. On Splunk Cloud Platform, an uploaded app goes through Splunk's own vetting before it installs.
311
92
 
312
- **Support & Troubleshooting**
93
+ Setup is the same on both: install the app, create the `tenx_dml` index and two HEC tokens, point the Receiver at them, set the `tenx-events` macro, and run the backfill search once if templates were indexed before the app. The app creates its KV Store collection itself. See the [Quickstart](https://doc.log10x.com/apps/receiver/compact/splunk/#quickstart).
313
94
 
314
- - **Templates not in KV Store:** Check saved search logs: `index=_internal savedsearch_name="Consume KV"`
315
- - **Expansion returns empty:** Verify template format in `tenx_dml_raw_json` index, ensure KV Store has matching hash
316
- - **Performance degradation:** Limit time ranges in searches; filter by `tenx_hash` before expansion for large datasets
317
- - **HEC token rejected:** Verify token is enabled and not deleted: `| rest /services/data/inputs/http`
318
- - **For detailed troubleshooting:** See [10x for Splunk Troubleshooting Guide](https://github.com/log-10x/splunk-app#troubleshooting){target="_blank"} on GitHub
95
+ The app runs Python on the search head: the `tenxsearch` command, the `/tenx-search` and `/tenx-alert` endpoints, and the alert action that stores templates. It makes no outbound calls.
@@ -19,7 +19,7 @@ Cut [Splunk](https://www.log10x.com/splunk.html){target="_blank"} costs by a mod
19
19
 
20
20
  - :material-currency-usd: **[Optimization](optimization.md)**
21
21
 
22
- How the 10x for Splunk app expands compact events, search-time overhead, license-tier reduction, and what happens to filtered events.
22
+ How the Log10x App expands compact events, search-time overhead, license-tier reduction, and what happens to filtered events.
23
23
 
24
24
  - :material-scale-balance: **[Comparisons](comparisons.md)**
25
25
 
@@ -3,196 +3,78 @@ icon: material/database-check
3
3
  title: "KV Store Validation & Diagnostics"
4
4
  ---
5
5
 
6
- Validating the KV Store, diagnosing "Consume KV" silent failures, monitoring capacity, recovering from template/event ordering issues, and distributed-cluster setup.
6
+ Validating the KV Store, diagnosing "Consume KV", loading templates indexed earlier, sizing, and search head clusters.
7
7
 
8
8
  ??? tenx-kvstore "How do I validate that KV Store is working correctly"
9
9
 
10
- **Quick Health Check (run all three):**
10
+ Run each search in the Log10x App.
11
11
 
12
- 1. **Verify KV collection exists:**
12
+ 1. **Templates are arriving:**
13
+ ```spl
14
+ index=tenx_dml sourcetype=tenx_dml_raw_json | stats count
13
15
  ```
14
- | rest /servicesNS/nobody/tenx-for-splunk/storage/collections/config
15
- | search title="tenx_dml"
16
- ```
17
- Expected: Returns 1 result. If 0 results, collection wasn't created.
16
+ Expected: more than 0. If 0, check the templates HEC token points at `tenx_dml`.
18
17
 
19
- 2. **Check KV store population:**
20
- ```
18
+ 2. **Templates are stored:**
19
+ ```spl
21
20
  | inputlookup tenx-dml-lookup | stats count
22
21
  ```
23
- Expected: Shows N (number of templates). If 0, no templates loaded yet.
22
+ Expected: close to the number of distinct templates sent.
24
23
 
25
- 3. **Verify "Consume KV" scheduled search is running:**
24
+ 3. **"Consume KV" is running:**
25
+ ```spl
26
+ index=_internal sourcetype=scheduler savedsearch_name="Consume KV"
27
+ | stats latest(status) as status, latest(_time) as last_run
28
+ | eval last_run=strftime(last_run, "%F %T")
26
29
  ```
27
- | index=_internal savedsearch_name="Consume KV"
28
- | stats latest(status) as status, latest(_time) as last_run by savedsearch_name
29
- ```
30
- Expected: `status=success`, `last_run` within last 2 minutes.
31
-
32
- **If any check fails, see troubleshooting below.**
30
+ Expected: `status=success`, `last_run` within the last 5 minutes.
33
31
 
34
- ??? tenx-kvstore "\"Consume KV\" scheduled search is failing silently"
32
+ The **Diagnostics** dashboard runs these checks and more on one page.
35
33
 
36
- The "Consume KV" search populates templates from `tenx_dml` index into the KV Store. If it fails, templates won't be available for expansion.
34
+ ??? tenx-kvstore "\"Consume KV\" is not storing templates"
37
35
 
38
- **Diagnostic procedure:**
39
-
40
- ```
41
- Step 1: Check scheduler logs
42
- | index=_internal sourcetype=scheduler savedsearch_name="Consume KV"
43
- | table _time, status, result_count, alert_action
44
- | stats latest(*) as * by status
45
- ```
36
+ "Consume KV" runs every 5 minutes over the last 7 minutes of `tenx_dml_raw_json` and hands the results to the `tenx_dml_to_kv` alert action, which writes the KV Store.
46
37
 
47
- **Common failure modes:**
38
+ | Symptom | Cause | Fix |
39
+ |---------|-------|-----|
40
+ | No scheduler entries | The search is disabled | Enable it in **Settings** → **Searches, reports, and alerts** |
41
+ | `success`, KV count stays 0 | No templates in the last 7 minutes | Check the templates token, then run the backfill search below |
42
+ | `success`, KV count stays 0, templates present | The alert action failed | Read `$SPLUNK_HOME/var/log/splunk/tenx_dml_to_kv.log` |
48
43
 
49
- | Status | Cause | Fix |
50
- |--------|-------|-----|
51
- | `error` | Search syntax error in saved search | Edit saved search "Consume KV" and verify query syntax |
52
- | `success` / count=0 | No templates in `tenx_dml` index | Run: `\| index=tenx_dml \| stats count`, if 0, send templates via HEC |
53
- | `failure` | Alert action (tenx_dml_to_kv.py) failed | Check: `\| index=_internal sourcetype=action_handler savedsearch_name="Consume KV"` |
54
- | No results | Search never ran | Verify: Scheduler is enabled (Settings > Scheduled Searches) |
55
-
56
- **Recovery steps:**
57
-
58
- ```
59
- 1. Verify templates exist:
60
- | index=tenx_dml sourcetype=tenx_dml_raw_json | stats count
61
-
62
- 2. Force immediate execution:
63
- Click saved search "Consume KV" > Run
64
- (Or use: | savedsearch "Consume KV")
65
-
66
- 3. Wait 2 minutes and verify population:
67
- | inputlookup tenx-dml-lookup | stats count
68
- (Should show > 0)
44
+ The alert action's log is also searchable:
69
45
 
70
- 4. If still 0, check KV collection exists:
71
- | rest /servicesNS/nobody/tenx-for-splunk/storage/collections/config
46
+ ```spl
47
+ index=_internal source=*tenx_dml_to_kv.log* (ERROR OR WARNING)
72
48
  ```
73
49
 
74
- ??? tenx-kvstore "How do I monitor KV Store size and capacity"
50
+ ??? tenx-kvstore "Templates were indexed before the app was installed"
75
51
 
76
- KV Store size affects search performance. Monitor it proactively:
52
+ "Consume KV" reads only the last 7 minutes, so templates indexed earlier, or while it was disabled or failing, are never stored and their events stay compact.
77
53
 
78
- **Monthly capacity check:**
54
+ Run this search once, as an admin or power user:
79
55
 
80
- ```
81
- | inputlookup tenx-dml-lookup
82
- | stats count as num_templates, max(timestamp_format) as latest_update
83
- ```
84
-
85
- **Growth and partitioning guidance:**
86
-
87
- The KV Store holds one row per template, so size grows with the number of
88
- templates rather than event volume. Track `num_templates` over time
89
- and watch expansion latency (query below). If lookup latency climbs well above
90
- your normal baseline as the template count grows, consider archiving old
91
- templates or partitioning across collections.
92
-
93
- **If the template count keeps growing:**
94
-
95
- Archive old templates by exporting them out of the collection and removing
96
- them from `tenx_dml`:
97
- ```
98
- | inputlookup tenx-dml-lookup
99
- | search timestamp_format < "2024-01-01"
100
- | ... (export to archive)
101
- ```
102
-
103
- The `tenx-inflate` macro reads a single collection (`tenx_dml`), so keep all
104
- active templates in that one collection rather than splitting them.
105
-
106
- **Monitor expansion latency:**
107
-
108
- ```
109
- index=<your-index> sourcetype=tenx_encoded
110
- | `tenx-inflate`
111
- | stats avg(eval(round(relative_time(now(), "now") - _time, 3))) as inflate_latency_sec
56
+ ```spl
57
+ index=tenx_dml sourcetype=tenx_dml_raw_json earliest=-30d | sendalert tenx_dml_to_kv
112
58
  ```
113
59
 
114
- Establish a baseline for `inflate_latency_sec` when the collection is small,
115
- then watch for it rising well above that baseline as the template count grows.
60
+ Widen `earliest` to reach older templates. Templates already stored are skipped, so running it again is safe. The app's **Backfill KV** saved search holds the same search, but the **Run** button does not fire its alert action. Encoded events need no re-indexing: they expand as soon as their template is in the KV Store.
116
61
 
117
- ??? tenx-kvstore "What if I accidentally send encoded events before templates are loaded"
62
+ ??? tenx-kvstore "How large does the KV Store get"
118
63
 
119
- If encoded events arrive before templates, expansion will fail silently until templates load.
64
+ One row per template, not per event, so size follows the number of distinct templates. The **Analytics** dashboard shows the count as **Active Templates**; the same number from SPL:
120
65
 
121
- **Prevention:**
122
-
123
- Always verify template population BEFORE sending encoded events:
124
-
125
- ```
126
- # Wait for this to return > 0:
66
+ ```spl
127
67
  | inputlookup tenx-dml-lookup | stats count
128
68
  ```
129
69
 
130
- **Recovery (if already happened):**
131
-
132
- 1. Load the missing templates
133
- - Re-send template data via HEC (same format as before)
134
- - Wait ~2 minutes for "Consume KV" to process (it runs every 2 minutes)
135
-
136
- 2. Re-index the encoded events (optional)
137
- ```
138
- # If using Kubernetes:
139
- kubectl delete pod <forwarder-pod-name> # Triggers reprocessing
140
-
141
- # If using file-based forwarder:
142
- # Delete offset tracking file, restart forwarder
143
- ```
144
-
145
- 3. Verify recovery:
146
- ```
147
- | index=<your-index> sourcetype=tenx_encoded
148
- | head 10 | `tenx-inflate`
149
- # Should now return expanded events
150
- ```
151
-
152
- ??? tenx-kvstore "Distributed KV Store setup for multi-node Splunk clusters"
153
-
154
- For production Splunk clusters, KV Store can be:
155
- - **Replicated** (HA across nodes)
156
- - **Partitioned** (scaled across multiple collections)
70
+ The `tenx-inflate` macro reads the single `tenx_dml` collection; keep every active template there.
157
71
 
158
- **For a multi-node Splunk cluster:**
72
+ ??? tenx-kvstore "Search head clusters"
159
73
 
160
- KV Store replication across search heads follows your cluster's KV Store
161
- configuration, so confirm the `tenx_dml` collection is present and consistent
162
- on each node:
74
+ The `tenx_dml` collection is defined in the app's `default/collections.conf` and replicates with the rest of the cluster's KV Store. Deploy the app to every search head with the deployer. Each member reports the same count:
163
75
 
164
- ```
165
- # On each node:
166
- | rest /servicesNS/nobody/tenx-for-splunk/storage/collections/config
167
- | search title="tenx_dml"
168
- | table label, acl{}.perms
169
- ```
170
-
171
- Each node should return the same collection.
172
-
173
- **Collection schema:**
174
-
175
- The `tenx_dml` collection is defined in the app's `default/collections.conf`.
176
- The `tenx-inflate` macro reads these fields at search time:
177
-
178
- ```
179
- [tenx_dml]
180
- field.pattern_hash = string
181
- field.pattern = string
182
- field.pattern_parts = array
183
- field.part_0 = string
184
- field.pattern_terminator = string
185
- field.timestamp_format = string
186
- ```
187
-
188
- **Monitoring cluster KV Store health:**
189
-
190
- ```
191
- | rest /servicesNS/nobody/tenx-for-splunk/storage/collections/data/tenx_dml
192
- | stats count as templates_primary
193
- | append
194
- [| rest /servicesNS/nobody/tenx-for-splunk/storage/collections/data/tenx_dml
195
- | stats count as templates_replica]
76
+ ```spl
77
+ | inputlookup tenx-dml-lookup | stats count
196
78
  ```
197
79
 
198
- Both should be equal (healthy replication).
80
+ Only admins and power users can write the collection. The scheduled "Consume KV" search runs on one member, and its writes replicate to the others.
@@ -3,11 +3,11 @@ icon: material/currency-usd
3
3
  title: "Optimization"
4
4
  ---
5
5
 
6
- How the 10x for Splunk app expands compact events at search time, search-time overhead, potential license-tier reduction, and what happens to events the Receiver filters out.
6
+ How the Log10x App expands compact events at search time, search-time overhead, potential license-tier reduction, and what happens to events the Receiver filters out.
7
7
 
8
- ??? tenx-costopt "How does the 10x for Splunk app expand optimized events"
8
+ ??? tenx-costopt "How does the Log10x App expand optimized events"
9
9
 
10
- On Splunk and self-hosted Elasticsearch or OpenSearch, the Receiver compacts events losslessly before they hit Splunk, so the saving lands on your license bill. The open-source [10x for Splunk](https://doc.log10x.com/apps/receiver/compact/splunk/){target="_blank"} app keeps that saving invisible to searchers: it automatically expands compact events back to their full original form before displaying results.
10
+ On Splunk and self-hosted Elasticsearch or OpenSearch, the Receiver compacts events losslessly before they hit Splunk, so the saving lands on your license bill. The open-source [Log10x App](https://doc.log10x.com/apps/receiver/compact/splunk/){target="_blank"} keeps that saving invisible to searchers: it automatically expands compact events back to their full original form before displaying results.
11
11
 
12
12
  **How it works:**
13
13
 
@@ -30,7 +30,7 @@ How the 10x for Splunk app expands compact events at search time, search-time ov
30
30
  - Top templates by usage
31
31
  - Expansion success rate
32
32
 
33
- **User experience:** Classic dashboards keep their panel SPL unchanged. From the search bar a query is wrapped in the app's `tenxsearch` command, since Splunk's search page loads no app JavaScript. Scheduled alerts are compiled once at save time into a native saved search. All three read the original full-fidelity data.
33
+ **User experience:** Classic dashboards keep their panel SPL unchanged. From the search bar a query is wrapped in the app's `tenxsearch` command, since Splunk's search page loads no app JavaScript. Alerts created in the app's Compile Alert view are compiled once into a native saved search. All three read the original full-fidelity data.
34
34
 
35
35
  **Open source:** Available on [GitHub](https://github.com/log-10x/splunk-app){target="_blank"}.
36
36
 
@@ -95,7 +95,7 @@ tenx @run/input/forwarder/fluentbit @apps/receiver
95
95
  # ... destination config
96
96
  ```
97
97
 
98
- For Splunk integration see the [10x for Splunk](https://doc.log10x.com/apps/receiver/compact/splunk/) documentation. For Kubernetes deployment, add the `log10x/edge-10x` sidecar on top of the official Fluent Bit chart via an `extraContainers` values overlay, see the [Helm chart overlay](https://doc.log10x.com/apps/receiver/deploy/#fluent-bit).
98
+ For Splunk integration see the [Log10x App](https://doc.log10x.com/apps/receiver/compact/splunk/) documentation. For Kubernetes deployment, add the `log10x/edge-10x` sidecar on top of the official Fluent Bit chart via an `extraContainers` values overlay, see the [Helm chart overlay](https://doc.log10x.com/apps/receiver/deploy/#fluent-bit).
99
99
 
100
100
  ## :material-wrench-outline: Config Files
101
101
 
@@ -101,7 +101,7 @@ tenx @run/input/forwarder/fluentd @apps/receiver
101
101
  </label>
102
102
  ```
103
103
 
104
- For Splunk integration see the [10x for Splunk](https://doc.log10x.com/apps/receiver/compact/splunk/) documentation. For Kubernetes deployment, add the `log10x/edge-10x` sidecar on top of the official Fluentd chart via a kustomize post-renderer overlay, see the [Helm chart overlay](https://doc.log10x.com/apps/receiver/deploy/#fluentd).
104
+ For Splunk integration see the [Log10x App](https://doc.log10x.com/apps/receiver/compact/splunk/) documentation. For Kubernetes deployment, add the `log10x/edge-10x` sidecar on top of the official Fluentd chart via a kustomize post-renderer overlay, see the [Helm chart overlay](https://doc.log10x.com/apps/receiver/deploy/#fluentd).
105
105
 
106
106
  ## :material-wrench-outline: Config Files
107
107
 
@@ -139,7 +139,7 @@ service:
139
139
  exporters: [debug]
140
140
  ```
141
141
 
142
- For Splunk integration see the [10x for Splunk](https://doc.log10x.com/apps/receiver/compact/splunk/) documentation. For Kubernetes deployment via the official OpenTelemetry Collector Helm chart see the [Helm sidecar overlay](https://doc.log10x.com/apps/receiver/deploy/#otel-collector).
142
+ For Splunk integration see the [Log10x App](https://doc.log10x.com/apps/receiver/compact/splunk/) documentation. For Kubernetes deployment via the official OpenTelemetry Collector Helm chart see the [Helm sidecar overlay](https://doc.log10x.com/apps/receiver/deploy/#otel-collector).
143
143
 
144
144
  ## :material-wrench-outline: Config Files
145
145
 
@@ -116,7 +116,7 @@ sinks:
116
116
  encoding: { codec: json }
117
117
  ```
118
118
 
119
- For Splunk integration see the [10x for Splunk](https://doc.log10x.com/apps/receiver/compact/splunk/) documentation. For Kubernetes deployment via the official Vector Helm chart see the [Helm sidecar overlay](https://doc.log10x.com/apps/receiver/deploy/#vector).
119
+ For Splunk integration see the [Log10x App](https://doc.log10x.com/apps/receiver/compact/splunk/) documentation. For Kubernetes deployment via the official Vector Helm chart see the [Helm sidecar overlay](https://doc.log10x.com/apps/receiver/deploy/#vector).
120
120
 
121
121
  ## :material-wrench-outline: Config Files
122
122