log10x-mcp 1.30.38 → 1.30.40
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.
- package/README.md +2 -2
- package/build/index.js +1 -1
- package/build/lib/compile-runner.d.ts +1 -1
- package/build/lib/compile-runner.js +1 -1
- package/build/lib/runtime-image.d.ts +1 -1
- package/build/lib/runtime-image.js +1 -1
- package/build/lib/server-instructions.js +1 -1
- package/build/product-kb/docs/api/js.md +4 -4
- package/build/product-kb/docs/apps/mcp/run.md +5 -4
- package/build/product-kb/docs/apps/mcp/tools/compile/compile-link.md +2 -2
- package/build/product-kb/docs/apps/mcp/tools/compile/compile-status.md +2 -2
- package/build/product-kb/docs/apps/mcp/tools/compile/compile.md +6 -6
- package/build/product-kb/docs/apps/mcp/tools/compile/index.md +1 -1
- package/build/product-kb/docs/apps/receiver/compact/index.md +1 -1
- package/build/product-kb/docs/apps/receiver/deploy.md +1 -1
- package/build/product-kb/docs/apps/receiver/faq.md +16 -17
- package/build/product-kb/docs/apps/receiver/index.md +2 -2
- package/build/product-kb/docs/apps/receiver/run.md +19 -32
- package/build/product-kb/docs/apps/reporter/run.md +19 -32
- package/build/product-kb/docs/apps/retriever/run.md +19 -32
- package/build/product-kb/docs/compile/faq.md +13 -13
- package/build/product-kb/docs/compile/index.md +1 -1
- package/build/product-kb/docs/compile/link/index.md +2 -1
- package/build/product-kb/docs/compile/pull/index.md +3 -1
- package/build/product-kb/docs/compile/scan/index.md +5 -5
- package/build/product-kb/docs/compile/scanner/logMethods/index.md +1 -1
- package/build/product-kb/docs/compile/scanner/text/index.md +1 -1
- package/build/product-kb/docs/engine/launcher/extension.md +24 -25
- package/build/product-kb/docs/faq/apps/index.md +1 -1
- package/build/product-kb/docs/faq/apps/receiver.md +16 -17
- package/build/product-kb/docs/faq/general.md +5 -5
- package/build/product-kb/docs/faq/pricing/node-counting.md +1 -1
- package/build/product-kb/docs/faq/stacks/aws-cloudwatch.md +4 -4
- package/build/product-kb/docs/faq/stacks/azure-monitor.md +2 -2
- package/build/product-kb/docs/faq/stacks/datadog/comparisons.md +3 -3
- package/build/product-kb/docs/faq/stacks/datadog/integration.md +1 -1
- package/build/product-kb/docs/faq/stacks/elasticsearch/optimization.md +1 -1
- package/build/product-kb/docs/faq/stacks/splunk/index.md +1 -1
- package/build/product-kb/docs/install/docker.md +8 -7
- package/build/product-kb/docs/run/initialize/message/index.md +67 -32
- package/build/product-kb/docs/run/receive/rate/index.md +2 -2
- package/build/product-kb/docs/run/transform/index.md +2 -0
- package/build/product-kb/docs/run/transform/structure/index.md +2 -2
- package/build/product-kb/docs/run/transform/symbol/index.md +20 -32
- package/build/tools/compile.js +2 -2
- package/build/tools/configure-engine.d.ts +3 -2
- package/build/tools/configure-engine.js +6 -5
- package/build/tools/configure-engine.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ This server is open source under MIT. A Log10x product license (API key) unlocks
|
|
|
20
20
|
| "This message type is noise, cut it." | Sample, drop, compact, tier down, or offload a chosen message type, with examples and trend so the action is clear. `log10x_pattern_mitigate`, `log10x_pattern_examples`, `log10x_pattern_trend` |
|
|
21
21
|
| "We are 100% Lambda, no cluster. Install there." | The install plan comes back for the serverless estate: the engine as a Lambda extension paired with the function's OTel collector, a CDK construct, and an AWS-native recurring tick over an S3 config plane. `log10x_advise_install`, `log10x_setup_recurring` |
|
|
22
22
|
| "Get me the actual events I offloaded." | Fetch the exact events back on demand from your own S3. `log10x_retriever_query`, `log10x_offload_add`, `log10x_retriever_register` |
|
|
23
|
-
| "Recognize more of my message types." |
|
|
23
|
+
| "Recognize more of my message types." | Compile your own source code, binaries and container images into a symbol library so the engine names more of your message types. `log10x_compile`, `log10x_compile_link`, `log10x_compile_status` |
|
|
24
24
|
|
|
25
25
|
## Install
|
|
26
26
|
|
|
@@ -91,7 +91,7 @@ All optional. The common path is just `LOG10X_API_KEY` (or no key at all).
|
|
|
91
91
|
| `LOG10X_TENX_PATH` | Path to the local `tenx` binary (used when the resolved mode is `local`). Defaults to `tenx` on PATH. |
|
|
92
92
|
| `LOG10X_RUNTIME_IMAGE` | Engine image for the run path in docker mode (default `log10x/pipeline-10x:latest`). Accepts the alias `native`, which selects the GraalVM-native `log10x/edge-10x`. |
|
|
93
93
|
| `LOG10X_TENX_IMAGE` | Engine image shared by the run path and, as a fallback, `log10x_compile`. A runtime-flavor image here is refused on the compile path. |
|
|
94
|
-
| `LOG10X_COMPILER_IMAGE` | Compiler image for `log10x_compile` / `log10x_compile_link` (default `log10x/compiler-10x:1.1.
|
|
94
|
+
| `LOG10X_COMPILER_IMAGE` | Compiler image for `log10x_compile` / `log10x_compile_link` (default `log10x/compiler-10x:1.1.136` pinned by digest, so every run goes through the same compiler; set it to `:latest` to track releases; falls back to `LOG10X_TENX_IMAGE` when unset). Only the compiler flavor can build a symbol library. |
|
|
95
95
|
| `LOG10X_GH_REPO` / `LOG10X_GITOPS_REPO_PATH` | GitHub repo and local path for GitOps-aware config tools. |
|
|
96
96
|
|
|
97
97
|
## Connect your own data (optional)
|
package/build/index.js
CHANGED
|
@@ -1318,7 +1318,7 @@ async function handleCliFlags() {
|
|
|
1318
1318
|
' LOG10X_TENX_PATH Path to local tenx CLI (used when LOG10X_TENX_MODE=local). Compile and link need the `compiler` flavor; the `mode` arg of log10x_compile states the three flavors and which are refused',
|
|
1319
1319
|
' LOG10X_TENX_IMAGE Docker image when LOG10X_TENX_MODE=docker, SHARED by the run path and (as a fallback) log10x_compile (default: log10x/pipeline-10x:latest). A runtime-flavor image here is refused on the compile path — use LOG10X_RUNTIME_IMAGE instead',
|
|
1320
1320
|
' LOG10X_RUNTIME_IMAGE Docker image for the run-path engine tools only, leaving log10x_compile alone. Accepts a full ref or the alias `native`, which selects the GraalVM-native log10x/edge-10x:latest (391MB vs 926MB, same @apps/mcp output). Wins over LOG10X_TENX_IMAGE',
|
|
1321
|
-
' LOG10X_COMPILER_IMAGE Docker image for log10x_compile. Default log10x/compiler-10x:1.1.
|
|
1321
|
+
' LOG10X_COMPILER_IMAGE Docker image for log10x_compile. Default log10x/compiler-10x:1.1.136 pinned by digest, so every run goes through the same compiler (the image ref is part of the output-folder key); set it to :latest to track releases. Falls back to LOG10X_TENX_IMAGE',
|
|
1322
1322
|
' TENX_LICENSE_KEY License key passed through to the compiler app (log10x_compile); omit to use the image built-in limited license',
|
|
1323
1323
|
' GH_TOKEN GitHub token for log10x_compile github_repos pull (or pass the github_token arg; required even for public repos)',
|
|
1324
1324
|
' DOCKER_USERNAME Registry username for log10x_compile docker_images pull (or pass the docker_username arg; omit for public images)',
|
|
@@ -303,7 +303,7 @@ export declare class HelmRepoAddError extends Error {
|
|
|
303
303
|
*
|
|
304
304
|
* `LOG10X_COMPILER_IMAGE=log10x/compiler-10x:latest` restores the moving tag.
|
|
305
305
|
*/
|
|
306
|
-
export declare const DEFAULT_IMAGE = "log10x/compiler-10x:1.1.
|
|
306
|
+
export declare const DEFAULT_IMAGE = "log10x/compiler-10x:1.1.136@sha256:ffcd9890935804b06fcb1791994dfbb32cdb270f3e35fc423ede78ced2097b1f";
|
|
307
307
|
/** First engine release where a CLI option given after `@apps/compiler` overrides the app's value. */
|
|
308
308
|
export declare const CLI_OVERRIDE_MIN_ENGINE = "1.1.89";
|
|
309
309
|
/**
|
|
@@ -205,7 +205,7 @@ export class HelmRepoAddError extends Error {
|
|
|
205
205
|
*
|
|
206
206
|
* `LOG10X_COMPILER_IMAGE=log10x/compiler-10x:latest` restores the moving tag.
|
|
207
207
|
*/
|
|
208
|
-
export const DEFAULT_IMAGE = 'log10x/compiler-10x:1.1.
|
|
208
|
+
export const DEFAULT_IMAGE = 'log10x/compiler-10x:1.1.136@sha256:ffcd9890935804b06fcb1791994dfbb32cdb270f3e35fc423ede78ced2097b1f';
|
|
209
209
|
/** First engine release where a CLI option given after `@apps/compiler` overrides the app's value. */
|
|
210
210
|
export const CLI_OVERRIDE_MIN_ENGINE = '1.1.89';
|
|
211
211
|
/**
|
|
@@ -74,7 +74,7 @@ export declare const NATIVE_RUNTIME_IMAGE = "log10x/edge-10x:latest";
|
|
|
74
74
|
* pass-through fix (config #74) ships in this image, checked with a Fluent
|
|
75
75
|
* Bit sidecar: 0 fullText fallbacks, 2,000 of 2,000 lines.
|
|
76
76
|
*/
|
|
77
|
-
export declare const EDGE_MANIFEST_IMAGE = "log10x/edge-10x:1.1.
|
|
77
|
+
export declare const EDGE_MANIFEST_IMAGE = "log10x/edge-10x:1.1.136";
|
|
78
78
|
/**
|
|
79
79
|
* Resolve the image the run-path (`@apps/mcp`) docker backend should use.
|
|
80
80
|
*
|
|
@@ -74,7 +74,7 @@ export const NATIVE_RUNTIME_IMAGE = 'log10x/edge-10x:latest';
|
|
|
74
74
|
* pass-through fix (config #74) ships in this image, checked with a Fluent
|
|
75
75
|
* Bit sidecar: 0 fullText fallbacks, 2,000 of 2,000 lines.
|
|
76
76
|
*/
|
|
77
|
-
export const EDGE_MANIFEST_IMAGE = 'log10x/edge-10x:1.1.
|
|
77
|
+
export const EDGE_MANIFEST_IMAGE = 'log10x/edge-10x:1.1.136';
|
|
78
78
|
/** Aliases accepted by LOG10X_RUNTIME_IMAGE in place of a full image ref. */
|
|
79
79
|
const NATIVE_ALIASES = new Set(['native', 'runtime', 'edge']);
|
|
80
80
|
/**
|
|
@@ -56,7 +56,7 @@ and mutes or per-pattern sample and compact rows keyed on an old name or hash no
|
|
|
56
56
|
When new patterns cluster at an engine upgrade, tell the user they are the same statements under new
|
|
57
57
|
names and offer to re-derive the per-pattern rules from the new names.
|
|
58
58
|
|
|
59
|
-
VOCABULARY: the compact action minifies events: it replaces each event's repeated structure with a template-plus-values encoding so it lands smaller with every field in the encoding, and the destination's expander rebuilds it at read time. Never call it lossless or fully searchable without the destination's terms: on Splunk each event expands exactly up to 256 KB with the current 10x app (a longer one comes back cut) and a search-bar query needs the app's tenxsearch command to see the full text; on Elasticsearch match, match_phrase and multi_match queries (so Kibana and KQL) see the full text and other query types see the encoded form. When describing it, say "compact" or "minify", never "compress" or "compression": 10x does not do binary or gzip compression, and that word misleads. (Vendor billing terms are different and fine to use as-is, e.g. a destination that bills on "compressed ingest", or Datadog's "compressed GB" rehydration price, refer to the vendor's own compression, not ours.)
|
|
59
|
+
VOCABULARY: the compact action minifies events: it replaces each event's repeated structure with a template-plus-values encoding so it lands smaller with every field in the encoding, and the destination's expander rebuilds it at read time. Never call it lossless or fully searchable without the destination's terms: on Splunk each event expands exactly up to 256 KB with the current 10x app (a longer one comes back cut) and a search-bar query needs the app's tenxsearch command to see the full text; on Elasticsearch match, match_phrase and multi_match queries (so Kibana and KQL) see the full text and other query types see the encoded form. Timestamps keep their instant: one written in UTC (Z, +0000) or with no zone comes back exactly, and one with any other offset or zone name (-0700, PDT, GMT) can come back written in another zone. When describing it, say "compact" or "minify", never "compress" or "compression": 10x does not do binary or gzip compression, and that word misleads. (Vendor billing terms are different and fine to use as-is, e.g. a destination that bills on "compressed ingest", or Datadog's "compressed GB" rehydration price, refer to the vendor's own compression, not ours.)
|
|
60
60
|
|
|
61
61
|
NON-LOSSY FIRST: the value proposition is cutting cost WITHOUT losing data. Whenever you list the Receiver actions, LEAD with the keep-everything levers and present the lossy ones as opt-ins the user explicitly chooses. Order: (1) compact/minify, keeps everything, where the destination supports it (Splunk, self-hosted Elasticsearch/OpenSearch; a no-op on managed backends like Datadog, CloudWatch, Coralogix, and on ClickHouse, where measurement put it at about 7% of table bytes. ClickHouse: offload is the lever, the bill is compute, and every ClickHouse dollar this server prints is modeled); (2) tier_down, keeps everything, a cheaper tier in the same destination, still queryable, where it applies (Datadog Flex, CloudWatch IA, Azure Monitor Basic/Auxiliary Logs, Coralogix Monitoring); (3) offload, keeps everything, routes to the customer's own S3, recoverable on demand, the one lever that applies on every destination; then (4) sample, lossy, keep 1 in N; (5) drop, lossy, discard. NEVER lead with drop or sample. When you enumerate the actions to a prospect, say which keep everything and which are lossy opt-ins. Do not offer compact as a saving on a destination where it is a no-op; lead with that destination's cheaper tier where it has one (on Datadog that is Flex, because the moved events stay searchable in Datadog), and with offload where it has none.
|
|
62
62
|
|
|
@@ -1270,7 +1270,7 @@ this.status = this.symbol("ENUM", "Status"); //capture the 'ENABLED value above
|
|
|
1270
1270
|
### .symbolSequence(symbolContexts,fieldName,maxLen) ⇒ <code>string</code>
|
|
1271
1271
|
Returns a sequence of [symbol](https://doc.log10x.com/run/transform/structure/#symbols) tokens of a specified type.
|
|
1272
1272
|
|
|
1273
|
-
This function selects
|
|
1273
|
+
This function selects the symbol and delimiter tokens of the origin ranked highest by the [message](https://doc.log10x.com/run/initialize/message/) comparator from the object's
|
|
1274
1274
|
[TenXTemplate](https://doc.log10x.com/run/template/) based on their context within the source code/binary file from which they originated.
|
|
1275
1275
|
|
|
1276
1276
|
To capture a symbol sequence for the following event:
|
|
@@ -1286,7 +1286,7 @@ this.message = symbolSequence("log,class,exec"); // = 'Partition__not_found_comp
|
|
|
1286
1286
|
```
|
|
1287
1287
|
|
|
1288
1288
|
The `symbolContext` argument controls the [symbol contexts](https://doc.log10x.com/run/transform/symbol/#contexts) to search for;
|
|
1289
|
-
|
|
1289
|
+
the listed contexts are evaluated in a single pass, so list order acts as a filter rather than a precedence chain.
|
|
1290
1290
|
|
|
1291
1291
|
Supported values: package, class, method, log, enum, const, text, exec, any (case insensitive).
|
|
1292
1292
|
|
|
@@ -1342,7 +1342,7 @@ and [time-series](https://doc.log10x.com/run/output/metric/) output.
|
|
|
1342
1342
|
### .symbolOrigin(symbolContext) ⇒ <code>string</code>
|
|
1343
1343
|
Returns a the source code/binary origin of 'symbol' tokens of a specified type.
|
|
1344
1344
|
|
|
1345
|
-
This function selects
|
|
1345
|
+
This function selects the origin (i.e. the source code or binary executable which emitted) the highest-ranked set of [symbol](https://doc.log10x.com/run/transform/structure/#symbols) and delimiter tokens from the object's
|
|
1346
1346
|
TenXTemplate.
|
|
1347
1347
|
|
|
1348
1348
|
To capture the origin value for the following event:
|
|
@@ -1356,7 +1356,7 @@ The following call can be used:
|
|
|
1356
1356
|
this.origin = symbolOrigin("log,class,exec"); // CacheManager.scala'
|
|
1357
1357
|
```
|
|
1358
1358
|
|
|
1359
|
-
The 'symbolContext' argument controls the [symbol contexts](https://doc.log10x.com/run/transform/symbol/#contexts) to search for;
|
|
1359
|
+
The 'symbolContext' argument controls the [symbol contexts](https://doc.log10x.com/run/transform/symbol/#contexts) to search for; the listed contexts are evaluated in a single pass, so list order acts as a filter rather than a precedence chain.
|
|
1360
1360
|
|
|
1361
1361
|
Supported values: PACKAGE, CLASS, METHOD, LOG, ENUM, CONST, TEXT, EXEC (case insensitive).
|
|
1362
1362
|
|
|
@@ -587,8 +587,8 @@ To configure the MCP test-drive app, [:material-cog: Edit](https://doc.log10x.co
|
|
|
587
587
|
contexts: log,exec
|
|
588
588
|
|
|
589
589
|
# 'messageField' specifies the field name to assign the message pattern to target TenXObjects: the symbol
|
|
590
|
-
# tokens of the origin ranked highest
|
|
591
|
-
#
|
|
590
|
+
# tokens of the origin ranked highest on the five-key comparator, message-text width first. Span length
|
|
591
|
+
# is the last tiebreak. The origin file name itself goes to 'originField'.
|
|
592
592
|
messageField: message_pattern
|
|
593
593
|
|
|
594
594
|
# 'messageHashField' specifies the field name to assign a stable, URL-safe pattern hash (xxHash64 of the messageField value, base64url, 11 chars). Safe as a SIEM query term or forwarder filter key.
|
|
@@ -610,8 +610,9 @@ To configure the MCP test-drive app, [:material-cog: Edit](https://doc.log10x.co
|
|
|
610
610
|
# indented detail, banners) so the message-template skips its own message-pattern compute for them.
|
|
611
611
|
# The check fires only for templates that don't already pass the (groupSize > 1) || groupHead arms;
|
|
612
612
|
# i.e., for single-event templates with no head signal. A non-negator line in that case (e.g., bare
|
|
613
|
-
# "Hello World", "Heartbeat received from node-7")
|
|
614
|
-
# (e.g., a lone "\tat com.foo.Bar(...)")
|
|
613
|
+
# "Hello World", "Heartbeat received from node-7") gets a pattern from its library words; a negator-matching
|
|
614
|
+
# orphan (e.g., a lone "\tat com.foo.Bar(...)") skips origin selection and is named by a hash of its shape,
|
|
615
|
+
# template_<hash>.
|
|
615
616
|
message:
|
|
616
617
|
negators:
|
|
617
618
|
- " " # any indented line (stack frames, indented app detail, multi-line JSON, banners)
|
|
@@ -36,7 +36,7 @@ A very large units tree returns a running `job_id` to poll with [`log10x_compile
|
|
|
36
36
|
|
|
37
37
|
## :material-check-decagram-outline: Prerequisites
|
|
38
38
|
|
|
39
|
-
The Compiler flavor, docker-first: `auto` and `docker` pull `log10x/compiler-10x:1.1.
|
|
39
|
+
The Compiler flavor, docker-first: `auto` and `docker` pull `log10x/compiler-10x:1.1.136` (pinned by digest), and `local` runs a Compiler-flavor `tenx`. The Runtime flavor is refused; the `mode` argument of [`log10x_compile`](compile.md) lists the three flavors.
|
|
40
40
|
|
|
41
41
|
A link into a folder another compile or link job is still writing joins that job instead of starting a second one.
|
|
42
42
|
|
|
@@ -138,7 +138,7 @@ This is the CLI tier, so it needs no Kubernetes, deployed app, or Log10x account
|
|
|
138
138
|
"job_id": "7b2e9c41-3f5a-4d8e-9b21-6c0f1a2d7e44",
|
|
139
139
|
"job_status": "completed",
|
|
140
140
|
"mode": "docker",
|
|
141
|
-
"image": "log10x/compiler-10x:1.1.
|
|
141
|
+
"image": "log10x/compiler-10x:1.1.136@sha256:ffcd9890935804b06fcb1791994dfbb32cdb270f3e35fc423ede78ced2097b1f",
|
|
142
142
|
"compiler": null,
|
|
143
143
|
"exit_code": 0,
|
|
144
144
|
"elapsed_ms": 6240,
|
|
@@ -149,8 +149,8 @@ The per-language scan failures and the symbol-type counts need a `compiler-10x`
|
|
|
149
149
|
"job_id": "compile-7c2f",
|
|
150
150
|
"job_status": "completed",
|
|
151
151
|
"mode": "docker",
|
|
152
|
-
"image": "log10x/compiler-10x:1.1.
|
|
153
|
-
"compiler": "docker:log10x/compiler-10x:1.1.
|
|
152
|
+
"image": "log10x/compiler-10x:1.1.136@sha256:ffcd9890935804b06fcb1791994dfbb32cdb270f3e35fc423ede78ced2097b1f",
|
|
153
|
+
"compiler": "docker:log10x/compiler-10x:1.1.136@sha256:ffcd9890935804b06fcb1791994dfbb32cdb270f3e35fc423ede78ced2097b1f",
|
|
154
154
|
"exit_code": 0,
|
|
155
155
|
"elapsed_ms": 184220,
|
|
156
156
|
"timed_out": false,
|
|
@@ -22,7 +22,7 @@ Sources combine freely in one call:
|
|
|
22
22
|
|
|
23
23
|
Docker pulls are daemonless. GitHub and Artifactory pulls each need a token, even for public GitHub repos.
|
|
24
24
|
|
|
25
|
-
The [Compiler app](../../../compiler/) runs the Compiler flavor, docker-first via the `log10x/compiler-10x:1.1.
|
|
25
|
+
The [Compiler app](../../../compiler/) runs the Compiler flavor, docker-first via the `log10x/compiler-10x:1.1.136` image (pinned by digest) or a local Compiler-flavor `tenx`. It runs without Kubernetes, a deployed app, or a Log10x account.
|
|
26
26
|
|
|
27
27
|
What gets scanned, per the shipped scanner config:
|
|
28
28
|
|
|
@@ -38,7 +38,7 @@ The output folder is keyed on the sources, the library name, and the compiler (t
|
|
|
38
38
|
|
|
39
39
|
What a re-run skips: the engine skips every local file whose checksum already has a unit in the folder. Pulled sources cost a remote round-trip each run (GitHub branch head, image manifest digest, Artifactory listing) and are downloaded again only when the remote changed; Helm charts are rendered again every run. Only the scan of unchanged files is skipped.
|
|
40
40
|
|
|
41
|
-
The engine's own whole-scan cap (`scanOperationTimeout`, bundled default 10 minutes) is raised to 90% of `timeout_ms` on the command line, so the engine cap follows `timeout_ms`. That needs compiler 1.1.89 or newer; the pinned default is 1.1.
|
|
41
|
+
The engine's own whole-scan cap (`scanOperationTimeout`, bundled default 10 minutes) is raised to 90% of `timeout_ms` on the command line, so the engine cap follows `timeout_ms`. That needs compiler 1.1.89 or newer; the pinned default is 1.1.136, and an older local engine keeps its 10 minute cap. A run the engine stopped early is reported as `incomplete` by [Status](compile-status.md).
|
|
42
42
|
|
|
43
43
|
## :material-code-braces: Example
|
|
44
44
|
|
|
@@ -208,14 +208,14 @@ Archives are scanned as-is: `.jar`, `.war`, `.ear`, `.zip` and tarballs are expa
|
|
|
208
208
|
"local"
|
|
209
209
|
],
|
|
210
210
|
"default": "auto",
|
|
211
|
-
"description": "Execution backend. `auto` (default) prefers Docker (the compiler image, guaranteed compiler flavor) and falls back to a local compiler-flavor tenx; the backend is chosen once, before the output folder is keyed. `docker` forces the image (LOG10X_COMPILER_IMAGE or LOG10X_TENX_IMAGE, default log10x/compiler-10x:1.1.
|
|
211
|
+
"description": "Execution backend. `auto` (default) prefers Docker (the compiler image, guaranteed compiler flavor) and falls back to a local compiler-flavor tenx; the backend is chosen once, before the output folder is keyed. `docker` forces the image (LOG10X_COMPILER_IMAGE or LOG10X_TENX_IMAGE, default log10x/compiler-10x:1.1.136 pinned by digest, so every run goes through the same compiler). `local` forces the binary (LOG10X_TENX_PATH or `tenx` on PATH) and refuses it unless its version banner reports the compiler flavor (`compiler`, or `cloud` on an engine built before the flavor rename). Of the three shipped flavors only `compiler` can compile: `runtime` (native binary) and `runtime-jvm` (JVM-packaged runtime, the only runtime available on Windows) are both refused, since neither carries the `generate` pipeline unit. With a local install, local-folder compilation and GitHub pull (REST API + token) work out of the box; docker_images pull additionally needs a container engine (podman or docker) on the host. The docker `compiler-10x` image bundles all of those (podman included, daemonless), which is why Docker is the default."
|
|
212
212
|
},
|
|
213
213
|
"timeout_ms": {
|
|
214
214
|
"type": "integer",
|
|
215
215
|
"minimum": 10000,
|
|
216
216
|
"maximum": 3600000,
|
|
217
217
|
"default": 1800000,
|
|
218
|
-
"description": "Hard cap on compile wall time in milliseconds. Default 1,800,000 (30 min). The engine's own whole-scan cap (scanOperationTimeout, bundled default 10 min) is raised to 90% of this value on the command line, so the engine cap follows this value (needs compiler 1.1.89+; the pinned default is 1.1.
|
|
218
|
+
"description": "Hard cap on compile wall time in milliseconds. Default 1,800,000 (30 min). The engine's own whole-scan cap (scanOperationTimeout, bundled default 10 min) is raised to 90% of this value on the command line, so the engine cap follows this value (needs compiler 1.1.89+; the pinned default is 1.1.136; an older local engine keeps its 10 min cap). A re-run over unchanged local sources skips every file whose checksum already has a unit and finishes in seconds. Pulled sources (GitHub, images, Artifactory) are re-checked remotely each run and downloaded again only when the remote changed; Helm charts are rendered again every run."
|
|
219
219
|
},
|
|
220
220
|
"max_wait_ms": {
|
|
221
221
|
"type": "integer",
|
|
@@ -264,8 +264,8 @@ Archives are scanned as-is: `.jar`, `.war`, `.ear`, `.zip` and tarballs are expa
|
|
|
264
264
|
"job_id": "9f2c1a3e-7b4d-4e1a-9f0c-2a1b3c4d5e6f",
|
|
265
265
|
"job_status": "completed",
|
|
266
266
|
"mode": "docker",
|
|
267
|
-
"image": "log10x/compiler-10x:1.1.
|
|
268
|
-
"compiler": "docker:log10x/compiler-10x:1.1.
|
|
267
|
+
"image": "log10x/compiler-10x:1.1.136@sha256:ffcd9890935804b06fcb1791994dfbb32cdb270f3e35fc423ede78ced2097b1f",
|
|
268
|
+
"compiler": "docker:log10x/compiler-10x:1.1.136@sha256:ffcd9890935804b06fcb1791994dfbb32cdb270f3e35fc423ede78ced2097b1f",
|
|
269
269
|
"exit_code": 0,
|
|
270
270
|
"elapsed_ms": 38120,
|
|
271
271
|
"timed_out": false,
|
|
@@ -52,7 +52,7 @@ To re-link an existing units tree into a library with no source scan, use [`log1
|
|
|
52
52
|
|
|
53
53
|
## :material-check-decagram-outline: Prerequisites
|
|
54
54
|
|
|
55
|
-
The compile family runs the [Compiler app](../../../compiler/), which executes the [compile pipeline](../../../../compile/), docker-first. By default it pulls `log10x/compiler-10x:1.1.
|
|
55
|
+
The compile family runs the [Compiler app](../../../compiler/), which executes the [compile pipeline](../../../../compile/), docker-first. By default it pulls `log10x/compiler-10x:1.1.136`, pinned by digest, so every run goes through the same compiler.
|
|
56
56
|
|
|
57
57
|
That image bundles the following, so no host docker socket is needed:
|
|
58
58
|
|
|
@@ -14,7 +14,7 @@ Reduce storage costs by forwarding [compact](https://doc.log10x.com/run/transfor
|
|
|
14
14
|
|
|
15
15
|
<h3 id="analytics-costs"><span class="twemoji" ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11 21H7v-2h4v2m4.5-2H17v2h-4v-2h.2l-1.4-6.1-2.5.6c-.1.5-.3.9-.5 1.3-.9 1.5-2.8 1.9-4.3 1-1.5-.9-1.9-2.8-1-4.3.9-1.5 2.8-1.9 4.3-1 .4.2.7.6.9.9l2.5-.6-.6-2.5c-.4-.1-.8-.3-1.2-.5C8 6.9 7.5 5 8.4 3.5c.9-1.5 2.8-1.9 4.3-1 1.5.9 1.9 2.8 1 4.3-.2.4-.6.7-.9.9L15.5 19M7 11.8c-.7-.5-1.7-.2-2.2.5-.5.7-.2 1.7.5 2.1.7.5 1.7.3 2.2-.5.4-.7.2-1.7-.5-2.1M12.4 6c.5-.7.2-1.7-.5-2.2-.7-.5-1.7-.2-2.2.5-.4.7-.2 1.7.6 2.2.7.4 1.7.2 2.1-.5m.4 5.3c-.2-.1-.4-.1-.5.1-.1.2-.1.4.1.5.2.1.4.1.5-.1.2-.2.1-.4-.1-.5M21 8.5 14.5 10l.5 2.2 7.5-1.8.5-.7-2-1.2M23 19h-4v2h4v-2M5 19H1v2h4v-2Z"></path></svg></span> Cut Log Analytics Costs</h3>
|
|
16
16
|
|
|
17
|
-
Reduce ingestion and licensing costs, where the destination supports it, by forwarding [compact](https://doc.log10x.com/run/transform/#compact) events to Splunk or self-hosted Elasticsearch/OpenSearch. The open-source [Log10x App](splunk.md) and [L1ES Elasticsearch plugin](elasticsearch.md) expand events in real-time, maintaining full querying, dashboard, and alerting capabilities; compact is lossless, so expanded events match the originals (on Splunk, up to 256 KB per event).
|
|
17
|
+
Reduce ingestion and licensing costs, where the destination supports it, by forwarding [compact](https://doc.log10x.com/run/transform/#compact) events to Splunk or self-hosted Elasticsearch/OpenSearch. The open-source [Log10x App](splunk.md) and [L1ES Elasticsearch plugin](elasticsearch.md) expand events in real-time, maintaining full querying, dashboard, and alerting capabilities; compact is lossless, so expanded events match the originals (on Splunk, up to 256 KB per event). A timestamp that carries an offset or zone name other than UTC (`-0700`, `PDT`) keeps its instant but can come back written in another zone; see [Compact](https://doc.log10x.com/run/transform/#compact).
|
|
18
18
|
|
|
19
19
|
## :material-cog-transfer-outline: Workflow
|
|
20
20
|
|
|
@@ -2179,7 +2179,7 @@ The OTel Collector overlay moves the sidecar's OTLP listener with `TENX_OTEL_COL
|
|
|
2179
2179
|
|
|
2180
2180
|
**Phase C: processed events flowing**
|
|
2181
2181
|
|
|
2182
|
-
The receiver
|
|
2182
|
+
The receiver hands each record back byte-for-byte unless `symbolMessageHashField` names a field (the forwarder args above). Name one, for example `symbolMessageHashField tenx_hash`, and the receiver adds that field to every record it hands back, so the field arriving at the destination is the proof that events completed the round trip through 10x. For a real destination, query for the field there: Elasticsearch `exists: tenx_hash`, Splunk `tenx_hash=*`, Datadog `@tenx_hash:*`. For the stdout / `debug` placeholder destination from Step 3, count it on the container that writes to the destination. Pick your forwarder:
|
|
2183
2183
|
|
|
2184
2184
|
=== ":simple-fluentd: Fluentd"
|
|
2185
2185
|
|
|
@@ -3,7 +3,7 @@ icon: material/help-circle-outline
|
|
|
3
3
|
title: "FAQ"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
The [Receiver](https://doc.log10x.com/apps/receiver/) is the execution arm of the 10x pipeline. The rate regulator finds which patterns are over the byte cap set for their service, and an action decides what happens to that excess. The keep-everything actions (compact, offload, tier_down) cut cost without losing data; sample and drop are lossy
|
|
6
|
+
The [Receiver](https://doc.log10x.com/apps/receiver/) is the execution arm of the 10x pipeline. The rate regulator finds which patterns are over the byte cap set for their service, and an action decides what happens to that excess. The keep-everything actions (compact, offload, tier_down) cut cost without losing data; sample and drop, the Receiver's Filter modes, are lossy: they apply only to the share of a pattern over a cap the operator sets, and that share is dropped unless the operator chooses another action; pass leaves the pattern untouched. An AI agent picks the action per service through the log10x MCP (the `configure_engine` tool); the engine enforces it, and the decision travels as a config change through the GitOps repo. The Receiver runs as a sidecar alongside your forwarder.
|
|
7
7
|
|
|
8
8
|
<div class="grid cards" markdown>
|
|
9
9
|
|
|
@@ -27,31 +27,30 @@ The [Receiver](https://doc.log10x.com/apps/receiver/) is the execution arm of th
|
|
|
27
27
|
- **offload**: route the pattern to customer-owned object storage (S3 or any S3-compatible bucket) instead of the destination.
|
|
28
28
|
- **drop**: stop forwarding the pattern.
|
|
29
29
|
|
|
30
|
-
An AI agent picks the action per service through the log10x MCP (the `configure_engine` tool), which turns a target percent or budget into
|
|
30
|
+
An AI agent picks the action per service through the log10x MCP (the `configure_engine` tool), which turns a target percent or budget into per-service caps and actions carried as cap and action CSV files. The files land in the config repo through a GitOps PR and hot-reload on the next pull. Per-pattern rates come from the [mute file](https://doc.log10x.com/run/receive/rate/#protection-list){target="_blank"}, a CSV keyed by pattern, committed to git and pulled the same way.
|
|
31
31
|
|
|
32
32
|
Log10x is normally driven by an AI agent (Claude, or a model the customer brings) through the log10x MCP server, which installs, configures, and queries via MCP tools. The manual steps in these docs are the same operations without an agent.
|
|
33
33
|
|
|
34
34
|
??? tenx-overview "How do budget policies work"
|
|
35
35
|
|
|
36
|
-
Configuration is a YAML file, written by hand or generated by the MCP `configure_engine` tool and delivered through GitOps. The [rate receiver](https://doc.log10x.com/run/receive/rate/){target="_blank"}
|
|
36
|
+
Configuration is a YAML file, written by hand or generated by the MCP `configure_engine` tool and delivered through GitOps. The [rate receiver](https://doc.log10x.com/run/receive/rate/){target="_blank"} caps the bytes each pattern ([symbol identity](https://doc.log10x.com/run/initialize/message/){target="_blank"}) may spend in its container over a rolling window. You configure:
|
|
37
37
|
|
|
38
|
-
- **
|
|
39
|
-
- **
|
|
40
|
-
- **Severity floors**,
|
|
38
|
+
- **A byte cap per pattern per container**, fleet-wide or per container from a cap file; the MCP derives it from a monthly dollar budget
|
|
39
|
+
- **A share guard**, a pattern below a minimum share of its container's volume (default 5%) is left alone
|
|
40
|
+
- **Severity floors**, an over-cap pattern keeps at least a set share of each level (by default ERROR 50%, WARN 30%, INFO 10%)
|
|
41
|
+
- **An action per service** for the excess: drop (the default), offload, tier_down, compact, sample or pass
|
|
41
42
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
When an event type exceeds its max share, the Receiver samples it down proportionally. For [multi-app environments](https://doc.log10x.com/run/receive/rate/#multi-app-regulation){target="_blank"} (Kubernetes), cap per-app budgets using the [container name](https://doc.log10x.com/run/initialize/k8s/){target="_blank"} field, scaling replicas doesn't bypass limits.
|
|
43
|
+
Cost is reported per pattern; the cap itself is in bytes. Caps are scoped by the [container name](https://doc.log10x.com/run/receive/rate/#containers){target="_blank"}, so scaling replicas doesn't bypass them.
|
|
45
44
|
|
|
46
45
|
??? tenx-overview "What happens to logs when budget limits are reached (sample action)"
|
|
47
46
|
|
|
48
|
-
The [rate receiver](https://doc.log10x.com/run/receive/rate/){target="_blank"}
|
|
47
|
+
The [rate receiver](https://doc.log10x.com/run/receive/rate/){target="_blank"} decides per event, on bytes:
|
|
49
48
|
|
|
50
|
-
- **
|
|
51
|
-
- **
|
|
52
|
-
- **Severity floors**, ERROR events keep a higher
|
|
49
|
+
- **At or below the pattern's cap**, every event flows through
|
|
50
|
+
- **Over the cap**, each level keeps its floor share and the rest takes the container's action (drop when none is set); nothing targets the excess back down to the cap line
|
|
51
|
+
- **Severity floors**, ERROR events keep a higher share of the over-cap slice than DEBUG noise
|
|
53
52
|
|
|
54
|
-
The result: noisy
|
|
53
|
+
The result: a noisy pattern is throttled while its errors keep flowing. The Receiver exports [metrics](https://doc.log10x.com/run/output/metric/){target="_blank"} tracking what each pattern's action did, so policies can be tuned over time. Routed-away events carry the label `routeState` (for example `routeState="drop"`).
|
|
55
54
|
|
|
56
55
|
### :material-cog-outline: Configuration
|
|
57
56
|
|
|
@@ -69,10 +68,10 @@ The [Receiver](https://doc.log10x.com/apps/receiver/) is the execution arm of th
|
|
|
69
68
|
|
|
70
69
|
The [rate receiver](https://doc.log10x.com/run/receive/rate/){target="_blank"} uses two mechanisms that naturally protect critical events:
|
|
71
70
|
|
|
72
|
-
- **Severity floors**, ERROR and WARN events keep a higher minimum share
|
|
73
|
-
- **
|
|
71
|
+
- **Severity floors**, ERROR and WARN events keep a higher minimum share of the over-cap slice. Even when their pattern is over its cap, critical-severity events keep flowing at a higher rate than DEBUG noise
|
|
72
|
+
- **Per-pattern caps**, the regulator engages only on a [pattern](https://doc.log10x.com/run/initialize/message/){target="_blank"} over its byte cap and above the share guard (default 5% of its container's volume). Low-volume patterns, which security and authentication logs typically are, stay under their cap and pass through unaffected
|
|
74
73
|
|
|
75
|
-
The Receiver targets noisy, high-volume
|
|
74
|
+
The Receiver targets noisy, high-volume patterns, not broad categories. Security events that stay under their cap flow through untouched.
|
|
76
75
|
|
|
77
76
|
??? tenx-capabilities "How do I monitor budget consumption"
|
|
78
77
|
|
|
@@ -7,7 +7,7 @@ icon: "material/pipe-valve"
|
|
|
7
7
|
---
|
|
8
8
|
The Receiver runs as a forwarder sidecar and acts on each pattern before events reach your analyzer.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Its actions are **pass, sample, compact, tier_down, offload, and drop**. The action is set per service and applies to every pattern over its cap in that service. An AI agent sets the action per service through the [log10x MCP](https://doc.log10x.com/apps/mcp/) (`configure_engine`); the engine enforces it, carried as a config change through the [GitOps](https://doc.log10x.com/engine/gitops/) repo.
|
|
11
11
|
|
|
12
12
|
## :material-cog-transfer-outline: Workflow
|
|
13
13
|
|
|
@@ -71,7 +71,7 @@ The Receiver executes as a [forwarder sidecar](https://doc.log10x.com/engine/lau
|
|
|
71
71
|
|
|
72
72
|
=== ":material-file-document-edit-outline: Mute File (GitOps)"
|
|
73
73
|
|
|
74
|
-
A declarative file keyed by the joined `rateReceiverFieldNames` values (e.g. `symbolMessage`, `container`) caps specific patterns with an explicit sample rate and expiry. Operators (or an AI assistant via the [Log10x MCP](https://github.com/log-10x/log10x-mcp)) append entries based on [Reporter](https://doc.log10x.com/apps/reporter/) cost attribution, commit to git, and every receiver pulls the file on its next reload. Each mute is diff-reviewed, self-expires, and maps 1:1 to the field-sets the Reporter attributes cost to. See [mute file mode](https://doc.log10x.com/run/receive/rate/#
|
|
74
|
+
A declarative file keyed by the joined `rateReceiverFieldNames` values (e.g. `symbolMessage`, `container`) caps specific patterns with an explicit sample rate and expiry. Operators (or an AI assistant via the [Log10x MCP](https://github.com/log-10x/log10x-mcp)) append entries based on [Reporter](https://doc.log10x.com/apps/reporter/) cost attribution, commit to git, and every receiver pulls the file on its next reload. Each mute is diff-reviewed, self-expires, and maps 1:1 to the field-sets the Reporter attributes cost to. See [mute file mode](https://doc.log10x.com/run/receive/rate/#protection-list).
|
|
75
75
|
|
|
76
76
|
## :material-shield-check-outline: Safety & Reliability
|
|
77
77
|
|
|
@@ -1303,8 +1303,8 @@ To configure the Receiver app, [:material-cog: Edit](https://doc.log10x.com/conf
|
|
|
1303
1303
|
contexts: log,exec
|
|
1304
1304
|
|
|
1305
1305
|
# 'messageField' specifies the field name to assign the message pattern to target TenXObjects: the symbol
|
|
1306
|
-
# tokens of the origin ranked highest
|
|
1307
|
-
#
|
|
1306
|
+
# tokens of the origin ranked highest on the five-key comparator, message-text width first. Span length
|
|
1307
|
+
# is the last tiebreak. The origin file name itself goes to 'originField'.
|
|
1308
1308
|
messageField: message_pattern
|
|
1309
1309
|
|
|
1310
1310
|
# 'messageHashField' specifies the field name to assign a stable, URL-safe pattern hash (xxHash64 of the messageField value, base64url, 11 chars). Safe as a SIEM query term or forwarder filter key.
|
|
@@ -1326,8 +1326,9 @@ To configure the Receiver app, [:material-cog: Edit](https://doc.log10x.com/conf
|
|
|
1326
1326
|
# indented detail, banners) so the message-template skips its own message-pattern compute for them.
|
|
1327
1327
|
# The check fires only for templates that don't already pass the (groupSize > 1) || groupHead arms;
|
|
1328
1328
|
# i.e., for single-event templates with no head signal. A non-negator line in that case (e.g., bare
|
|
1329
|
-
# "Hello World", "Heartbeat received from node-7")
|
|
1330
|
-
# (e.g., a lone "\tat com.foo.Bar(...)")
|
|
1329
|
+
# "Hello World", "Heartbeat received from node-7") gets a pattern from its library words; a negator-matching
|
|
1330
|
+
# orphan (e.g., a lone "\tat com.foo.Bar(...)") skips origin selection and is named by a hash of its shape,
|
|
1331
|
+
# template_<hash>.
|
|
1331
1332
|
message:
|
|
1332
1333
|
negators:
|
|
1333
1334
|
- " " # any indented line (stack frames, indented app detail, multi-line JSON, banners)
|
|
@@ -6405,7 +6406,7 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
|
|
|
6405
6406
|
</div>
|
|
6406
6407
|
</dialog>
|
|
6407
6408
|
|
|
6408
|
-
<template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAic3ltYm9sIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJzZXF1ZW5jZVJlc2VydmVkIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHRlcm1zIHRvIGlnbm9yZSB3aGVuIHNjYW5uaW5nIHN5bWJvbCB0b2tlbnNcblxuRGVmaW5lcyBhIGxpc3Qgb2YgdGVybXMgdGhhdCB0byBpZ25vcmUgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBzeW1ib2wgdG9rZW5zIGNvbnN0aXR1dGluZyBhbiBUZW5YVGVtcGxhdGUncyAnbWVzc2FnZScgcG9ydGlvbiAoaS5lLiwgdGhlIFtzeW1ib2xdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zdHJ1Y3R1cmUvI3N5bWJvbHMpIHRva2VucyBvZiB0aGUgb3JpZ2luIHJhbmtlZCBoaWdoZXN0IGJ5IGNvdmVyYWdlLCBtZWFuaW5nIHRoZSBjb3VudCBvZiBkaXN0aW5jdCBsaWJyYXJ5LWtub3duIHRva2VucyBpdCBleHBsYWluczsgc3BhbiBsZW5ndGggaXMgdGhlIGxhc3QgdGllYnJlYWspLiBGb3IgZXhhbXBsZSwgZm9yIGFuIFRlblhPYmplY3Qgd2hvc2UgdGV4dCBjb250YWluczogJ2Nvbm5lY3Qgc3VjY2VzcyA9IHRydWUnLCB0aGUgdmFsdWUgJ3RydWUnIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBwYXJ0IG9mIHRoZSBpbnN0YW5jZSdzIG1lc3NhZ2UsIGFzIGl0IGlzIG1vc3RseSBsaWtlbHkgdGhlIHJlc3VsdCBvZiBhIHZhcmlhYmxlIGJvb2xlYW4gc3RhdGUuIFRvIGxlYXJuIG1vcmUgc2VlIFtzeW1ib2xTZXF1ZW5jZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhPYmplY3Qrc3ltYm9sU2VxdWVuY2UpLiAoRGVmYXVsdDogW1wibnVsbFwiLFwibmlsXCIsXCJ0cnVlXCIsXCJmYWxzZVwiXSkiLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICJudWxsIiwKICAgICAgICAgICAgIm5pbCIsCiAgICAgICAgICAgICJ0cnVlIiwKICAgICAgICAgICAgImZhbHNlIgogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgInByZWFtYmxlIiA6IHsKICAgICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgICAiZW5jbG9zdXJlcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGFpcnMgb2Ygb3BlbiBhbmQgY2xvc2UgY2hhcmFjdGVycyB3aG9zZSB0ZXh0IGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBlbnZlbG9wZVxuXG5EZWZpbmVzIHRoZSBlbmNsb3N1cmVzIG9mIGEgbGluZSdzIHByZWFtYmxlLCBlYWNoIGFuIG9wZW4gYW5kIGEgY2xvc2UgY2hhcmFjdGVyLiBBIHdvcmQgaW5zaWRlIG9uZSBvZiB0aGVtIGJlZm9yZSB0aGUgbWVzc2FnZSAoZS5nLiwgJ21haW4nIGluICdbbWFpbl0gU3RhcnRpbmcgd29ya2VyJykgaXMgZW52ZWxvcGUgYW5kIHN0YXlzIG91dCBvZiB0aGUgVGVuWFRlbXBsYXRlJ3MgbWVzc2FnZSBuYW1lLiBUaGUgbWVzc2FnZSBzdGFydHMgYXQgdGhlIGZpcnN0IHdvcmQgdGhhdCBubyBwYXJ0IG9mIHRoZSBwcmVhbWJsZSBkZXNjcmliZXM6IG5vdCBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpLCBub3QgYSBbbWVzc2FnZSBrZXldKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHByZWFtYmxlbWVzc2FnZWtleXMpLCBub3QgZW5jbG9zZWQgYW5kIG5vdCBhIHJlc2VydmVkIGtleSBvciBpdHMgdmFsdWUuIChEZWZhdWx0OiBbXCJbXVwiLFwiKClcIl0pIiwKICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJkZWZhdWx0IiA6IFsKICAgICAgICAgICAgICAgICJbXSIsCiAgICAgICAgICAgICAgICAiKCkiCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYmluZCBhIGtleSB0byBpdHMgdmFsdWUgd2hlbiB0aGUga2V5IG9yIHRoZSB2YWx1ZSBpcyBxdW90ZWRcblxuRGVmaW5lcyB0aGUgY2hhcmFjdGVycyB0aGF0IGJpbmQgYSBrZXkgdG8gaXRzIHZhbHVlLCBvbmUgY2hhcmFjdGVyIGVhY2gsIHdoZW4gdGhlIGtleSBvciB0aGUgdmFsdWUgaXMgcXVvdGVkIChlLmcuLCAnXCJsZXZlbFwiOlwiaW5mb1wiJywgXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gQSBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpIGtleSBhbmQgaXRzIHZhbHVlIGFyZSBlbnZlbG9wZTsgdGhlIG1lc3NhZ2Ugc3RhcnRzIGluc2lkZSBhIFttZXNzYWdlIGtleV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9scHJlYW1ibGVtZXNzYWdla2V5cykncyB2YWx1ZS4gVW5xdW90ZWQsIGEgY29sb24gYmluZHMgbm90aGluZywgc28gJ0Vycm9yOiAxMyBJTlRFUk5BTCcgYW5kICdJTkZPOnJvb3Q6U3RhcnRpbmcnIGtlZXAgdGhlaXIgd29yZHMuIChEZWZhdWx0OiBbXCI9XCIsXCI6XCJdKSIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICAgICAiPSIsCiAgICAgICAgICAgICAgICAiOiIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJiYXJlQXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYWxzbyBiaW5kIGFuIHVucXVvdGVkIGtleSB0byBhbiB1bnF1b3RlZCB2YWx1ZVxuXG5EZWZpbmVzIHRoZSBhc3NpZ25lcnMgdGhhdCBiaW5kIGEga2V5IHdpdGhvdXQgcXVvdGVzLCBvbmUgY2hhcmFjdGVyIGVhY2gsIGFzIGxvZ2ZtdCB3cml0ZXMgdGhlbSAoZS5nLiwgJ2xldmVsPWluZm8nLCAnbG9nZ2VyPWNsZWFudXAnKS4gQW4gYXNzaWduZXIgbGlzdGVkIGhlcmUgYmluZHMgaW4gcmVjb3JkIGZvcm0gdG9vLiAoRGVmYXVsdDogW1wiPVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIj0iCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiam9pbmVycyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU2VwYXJhdG9ycyB0aGF0IGNoYWluIHdvcmRzIGludG8gb25lIG5hbWUsIHJlYWQgdG8gZmluZCBhIGdyb3VwJ3MgbGVhZFxuXG5EZWZpbmVzIHRoZSBzZXBhcmF0b3JzIHRoYXQgY2hhaW4gdHdvIG9yIG1vcmUgd29yZHMsIHdyaXR0ZW4gd2l0aG91dCB3aGl0ZXNwYWNlLCBpbnRvIG9uZSBuYW1lIChlLmcuLCAnb3JnLmFwYWNoZS5rYWZrYS5sb2cuTG9jYWxMb2cnLCAnY2FydC5jYXJ0c3RvcmUuVmFsa2V5Q2FydFN0b3JlJyksIHR5cGljYWxseSBhIGxvZ2dlciwgY2xhc3Mgb3IgZmlsZSBuYW1lLiBUaGV5IGRlY2lkZSBvbmx5IHdoaWNoIG1lbWJlciBvZiBhIG11bHRpLWxpbmUgZXZlbnQgbmFtZXMgaXQ6IGEgbWVtYmVyIHdob3NlIGV2ZXJ5IHdvcmQgaXMgc3VjaCBhIG5hbWUgb3Igb3RoZXIgZW52ZWxvcGUgZG9lcyBub3QgbGVhZCB0aGUgZ3JvdXAgKHNlZSBbc3ltYm9sR3JvdXBMZWFkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xncm91cGxlYWQpKS4gSW4gYSBtZXNzYWdlIG5hbWUgYSBqb2luZWQgbmFtZSBzdGF5cywgYXMgYSBsb2dnZXIgb3IgY2xhc3MgbmFtZSBpcyBvZnRlbiB0aGUgb25seSB0ZXh0IHRoYXQgdGVsbHMgdHdvIHN0YXRlbWVudHMgYXBhcnQuIChEZWZhdWx0OiBbXCIuXCIsXCI6OlwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIi4iLAogICAgICAgICAgICAgICAgIjo6IgogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm1lc3NhZ2VLZXlzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJLZXlzIHdob3NlIGJvdW5kIHZhbHVlIGhvbGRzIHRoZSBtZXNzYWdlXG5cbkRlZmluZXMgdGhlIGtleXMgd2hvc2UgdmFsdWUgaG9sZHMgdGhlIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHN0YXJ0cyBhdCB0aGUgdmFsdWUncyBmaXJzdCB3b3JkIHRoZSBwcmVhbWJsZSBkb2VzIG5vdCBkZXNjcmliZSAoZS5nLiwgJ3N0YXJ0aW5nJyBpbiAnbXNnPXN0YXJ0aW5nJywgJ1N1YmNoYW5uZWwnIGluICdcIm1zZ1wiOlwiW2NvcmVdW0NoYW5uZWwgIzFdIFN1YmNoYW5uZWwgY3JlYXRlZFwiJywgJ0NoYXJnZScgaW4gXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gSW4gYSByZWNvcmQgdGhhdCBvcGVucyB3aXRoICd7JywgcmVhZGluZyBzdGFydHMgYXQgdGhlIGZpcnN0IG1lc3NhZ2Uga2V5IHdpdGggYSB2YWx1ZS4gQSBtZXNzYWdlIGtleSB3aXRob3V0IGEgdmFsdWUgaXMgZW52ZWxvcGUsIGFzIGEgcmVzZXJ2ZWQgd29yZCBpcy4gKERlZmF1bHQ6IFtcIm1zZ1wiLFwibWVzc2FnZVwiLFwiYm9keVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIm1zZyIsCiAgICAgICAgICAgICAgICAibWVzc2FnZSIsCiAgICAgICAgICAgICAgICAiYm9keSIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJncm91cExlYWQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1lbWJlciBvZiBhIG11bHRpLWxpbmUgZ3JvdXAgd2hvc2UgdGV4dCBuYW1lcyB0aGUgZ3JvdXBcblxuU2VsZWN0cyB0aGUgbWVtYmVyIG9mIGEgbXVsdGktbGluZSBldmVudCBncm91cCB3aG9zZSB0ZXh0IG5hbWVzIGl0LiAnZmlyc3RXaXRoTWVzc2FnZScgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBmaXJzdCBtZW1iZXIgd2hvc2UgaW5wdXQgZmllbGQgaXMgbm90IGFsbCBlbnZlbG9wZSwgYSBuYW1lIG9mIHdvcmRzIGNoYWluZWQgYnkgYSBbam9pbmVyXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xwcmVhbWJsZWpvaW5lcnMpIGNvdW50aW5nIGFzIGVudmVsb3BlIGhlcmUsIHNvIGEgaGVhZCBzdWNoIGFzIHRoZSAuTkVUIGNvbnNvbGUgbG9nZ2VyJ3MgJ2luZm86IGNhcnQuY2FydHN0b3JlLlZhbGtleUNhcnRTdG9yZVswXScgYmVmb3JlIHRoZSByZWNvcmQgaG9sZGluZyB0aGUgbWVzc2FnZSBsZWF2ZXMgdGhlIG5hbWUsIG9yaWdpbiBhbmQgc2tlbGV0b24gdG8gdGhhdCByZWNvcmQuIEEgaGVhZCB0aGF0IGhvbGRzIGEgbWVzc2FnZSAoZS5nLiwgYSBzdGFjayB0cmFjZSdzIGV4Y2VwdGlvbiBsaW5lKSBuYW1lcyB0aGUgZ3JvdXAuICdoZWFkJyBhbHdheXMgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBoZWFkLiAoRGVmYXVsdDogZmlyc3RXaXRoTWVzc2FnZSkiLAogICAgICAgICAgImRlZmF1bHQiIDogImZpcnN0V2l0aE1lc3NhZ2UiCiAgICAgICAgfSwKICAgICAgICAibWF4T3JpZ2lucyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heCBudW1iZXIgb2Ygc291cmNlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbFxuXG5Db250cm9scyB0aGUgbnVtYmVyIG9mIHNvdXJjZSBjb2RlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbCB0b2tlbiBzZXF1ZW5jZS4gQXMgYSBzZXJpZXMgb2YgdG9rZW5zIHdpdGhpbiAgYSBnaXZlbiB0ZW1wbGF0ZSAoZS5nLiwgJ0VSUk9SJywgJ2NvdWxkIG5vdCBjb25uZWN0IHRvIFwie30nKSBtYXkgYXBwZWFyICBpbiBtdWx0aXBsZSBzb3VyY2UvYmluYXJ5IGZpbGVzIHdpdGhpbiB0aGUgcGlwZWxpbmUncyBzeW1ib2wgZmlsZXMsIHRoZSBzb3J0aW5nIGFsZ29yaXRobSBzZWxlY3RzIFttYXhTeW1ib2xPcmlnaW5zXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xtYXhvcmlnaW5zKSBmb3IgY29tcGFyaXNvbi4gKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogNjQpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IDY0CiAgICAgICAgfSwKICAgICAgICAiZGVidWciIDogewogICAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICJvcmlnaW5zIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHNvdXJjZSBzY2FubmVkIGZpbGUgbmFtZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgd2l0aGluIHRoZSBsb2FkZWQgc3ltYm9sIGxpYnJhcnkgKGUuZy4sICdteS5zY2FsYScsICdmb28uamF2YScpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaWYvaG93IHRoZXkgcGFydGljaXBhdGUgaW4gc2VsZWN0aW5nIHRoZSBvcmlnaW4gb2YgYSB0YXJnZXQgVGVuWFRlbXBsYXRlIHN5bWJvbCBzZXF1ZW5jZS4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBpbnB1dCBmaWxlcy4iLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN5bWJvbHMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgVGVuWFRlbXBsYXRlIHN5bWJvbCB2YWx1ZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5MaXN0IG9mIHN5bWJvbCB2YWx1ZXMgc3VjaCBhcyBjbGFzcyBhbmQgbWV0aG9kIG5hbWVzKGUuZy4sICdNeUNsYXNzJywgJ2ZvbycpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaG93IHRoZWlyIG9yaWdpbiBpbmZvcm1hdGlvbiBpcyBzZWxlY3RlZC4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBzeW1ib2xzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibG9nZ2VyTmFtZSIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEZWJ1ZyBsb2dnZXIgbmFtZVxuXG5Db250cm9scyB0aGUgbmFtZSBvZiB0aGUgbG9nNGogbG9nZ2VyIHVzZWQgYnkgW2RlYnVnT3JpZ2luc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdvcmlnaW5zKSBhbmQgW2RlYnVnU3ltYm9sc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdzeW1ib2xzKS4gKERlZmF1bHQ6IFtjb25zb2xlT3V0XShodHRwczovL2dpdGh1Yi5jb20vbG9nLTEweC9jb25maWcvYmxvYi9tYWluL2xvZzRqMi55YW1sI0w2NikpIiwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiAiW2NvbnNvbGVPdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L2NvbmZpZy9ibG9iL21haW4vbG9nNGoyLnlhbWwjTDY2KSIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=</template>
|
|
6409
|
+
<template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAic3ltYm9sIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJzZXF1ZW5jZVJlc2VydmVkIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHRlcm1zIHRvIGlnbm9yZSB3aGVuIHNjYW5uaW5nIHN5bWJvbCB0b2tlbnNcblxuRGVmaW5lcyBhIGxpc3Qgb2YgdGVybXMgdGhhdCB0byBpZ25vcmUgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBzeW1ib2wgdG9rZW5zIGNvbnN0aXR1dGluZyBhbiBUZW5YVGVtcGxhdGUncyAnbWVzc2FnZScgcG9ydGlvbiAoaS5lLiwgdGhlIFtzeW1ib2xdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zdHJ1Y3R1cmUvI3N5bWJvbHMpIHRva2VucyBvZiB0aGUgb3JpZ2luIHJhbmtlZCBoaWdoZXN0IGJ5IGNvdmVyYWdlLCBtZWFuaW5nIHRoZSBjb3VudCBvZiBkaXN0aW5jdCBsaWJyYXJ5LWtub3duIHRva2VucyBpdCBleHBsYWluczsgc3BhbiBsZW5ndGggaXMgdGhlIGxhc3QgdGllYnJlYWspLiBGb3IgZXhhbXBsZSwgZm9yIGFuIFRlblhPYmplY3Qgd2hvc2UgdGV4dCBjb250YWluczogJ2Nvbm5lY3Qgc3VjY2VzcyA9IHRydWUnLCB0aGUgdmFsdWUgJ3RydWUnIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBwYXJ0IG9mIHRoZSBpbnN0YW5jZSdzIG1lc3NhZ2UsIGFzIGl0IGlzIG1vc3RseSBsaWtlbHkgdGhlIHJlc3VsdCBvZiBhIHZhcmlhYmxlIGJvb2xlYW4gc3RhdGUuIFRvIGxlYXJuIG1vcmUgc2VlIFtzeW1ib2xTZXF1ZW5jZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhPYmplY3Qrc3ltYm9sU2VxdWVuY2UpLiAoRGVmYXVsdDogW1wibnVsbFwiLFwibmlsXCIsXCJ0cnVlXCIsXCJmYWxzZVwiXSkiLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICJudWxsIiwKICAgICAgICAgICAgIm5pbCIsCiAgICAgICAgICAgICJ0cnVlIiwKICAgICAgICAgICAgImZhbHNlIgogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgInByZWFtYmxlIiA6IHsKICAgICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgICAiZW5jbG9zdXJlcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGFpcnMgb2Ygb3BlbiBhbmQgY2xvc2UgY2hhcmFjdGVycyB3aG9zZSB0ZXh0IGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBlbnZlbG9wZVxuXG5EZWZpbmVzIHRoZSBlbmNsb3N1cmVzIG9mIGEgbGluZSdzIHByZWFtYmxlLCBlYWNoIGFuIG9wZW4gYW5kIGEgY2xvc2UgY2hhcmFjdGVyLiBBIHdvcmQgaW5zaWRlIG9uZSBvZiB0aGVtIGJlZm9yZSB0aGUgbWVzc2FnZSAoZS5nLiwgJ21haW4nIGluICdbbWFpbl0gU3RhcnRpbmcgd29ya2VyJykgaXMgZW52ZWxvcGUgYW5kIHN0YXlzIG91dCBvZiB0aGUgVGVuWFRlbXBsYXRlJ3MgbWVzc2FnZSBuYW1lLiBBbiBvcGVuIHdpdGggbm8gY2xvc2UgYWZ0ZXIgaXQgaW4gdGhlIHNhbWUgZmllbGQgZW5jbG9zZXMgbm90aGluZywgc3VjaCBhcyB0aGUgJ1snIG9mIGEgY29sb3IgY29kZSAoJ1xcMDMzWzA7MzNtV0FSTicpIG9yIG9uZSB0aGF0IGNsb3NlcyBvbiBhIGxhdGVyIGxpbmUgb2YgYSBtdWx0aS1saW5lIGV2ZW50LiBUaGUgbWVzc2FnZSBzdGFydHMgYXQgdGhlIGZpcnN0IHdvcmQgdGhhdCBubyBwYXJ0IG9mIHRoZSBwcmVhbWJsZSBkZXNjcmliZXM6IG5vdCBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpLCBub3QgYSBbbWVzc2FnZSBrZXldKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHByZWFtYmxlbWVzc2FnZWtleXMpLCBub3QgZW5jbG9zZWQgYW5kIG5vdCBhIHJlc2VydmVkIGtleSBvciBpdHMgdmFsdWUuIChEZWZhdWx0OiBbXCJbXVwiLFwiKClcIl0pIiwKICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJkZWZhdWx0IiA6IFsKICAgICAgICAgICAgICAgICJbXSIsCiAgICAgICAgICAgICAgICAiKCkiCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYmluZCBhIGtleSB0byBpdHMgdmFsdWUgd2hlbiB0aGUga2V5IG9yIHRoZSB2YWx1ZSBpcyBxdW90ZWRcblxuRGVmaW5lcyB0aGUgY2hhcmFjdGVycyB0aGF0IGJpbmQgYSBrZXkgdG8gaXRzIHZhbHVlLCBvbmUgY2hhcmFjdGVyIGVhY2gsIHdoZW4gdGhlIGtleSBvciB0aGUgdmFsdWUgaXMgcXVvdGVkIChlLmcuLCAnXCJsZXZlbFwiOlwiaW5mb1wiJywgXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gQSBbcmVzZXJ2ZWRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI3N5bWJvbHNlcXVlbmNlcmVzZXJ2ZWQpIGtleSBhbmQgaXRzIHZhbHVlIGFyZSBlbnZlbG9wZTsgdGhlIG1lc3NhZ2Ugc3RhcnRzIGluc2lkZSBhIFttZXNzYWdlIGtleV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9scHJlYW1ibGVtZXNzYWdla2V5cykncyB2YWx1ZS4gVW5xdW90ZWQsIGEgY29sb24gYmluZHMgbm90aGluZywgc28gJ0Vycm9yOiAxMyBJTlRFUk5BTCcgYW5kICdJTkZPOnJvb3Q6U3RhcnRpbmcnIGtlZXAgdGhlaXIgd29yZHMuIChEZWZhdWx0OiBbXCI9XCIsXCI6XCJdKSIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICAgICAiPSIsCiAgICAgICAgICAgICAgICAiOiIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJiYXJlQXNzaWduZXJzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDaGFyYWN0ZXJzIHRoYXQgYWxzbyBiaW5kIGFuIHVucXVvdGVkIGtleSB0byBhbiB1bnF1b3RlZCB2YWx1ZVxuXG5EZWZpbmVzIHRoZSBhc3NpZ25lcnMgdGhhdCBiaW5kIGEga2V5IHdpdGhvdXQgcXVvdGVzLCBvbmUgY2hhcmFjdGVyIGVhY2gsIGFzIGxvZ2ZtdCB3cml0ZXMgdGhlbSAoZS5nLiwgJ2xldmVsPWluZm8nLCAnbG9nZ2VyPWNsZWFudXAnKS4gQW4gYXNzaWduZXIgbGlzdGVkIGhlcmUgYmluZHMgaW4gcmVjb3JkIGZvcm0gdG9vLiAoRGVmYXVsdDogW1wiPVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIj0iCiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAiam9pbmVycyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU2VwYXJhdG9ycyB0aGF0IGNoYWluIHdvcmRzIGludG8gb25lIG5hbWUsIHJlYWQgdG8gZmluZCBhIGdyb3VwJ3MgbGVhZFxuXG5EZWZpbmVzIHRoZSBzZXBhcmF0b3JzIHRoYXQgY2hhaW4gdHdvIG9yIG1vcmUgd29yZHMsIHdyaXR0ZW4gd2l0aG91dCB3aGl0ZXNwYWNlLCBpbnRvIG9uZSBuYW1lIChlLmcuLCAnb3JnLmFwYWNoZS5rYWZrYS5sb2cuTG9jYWxMb2cnLCAnY2FydC5jYXJ0c3RvcmUuVmFsa2V5Q2FydFN0b3JlJyksIHR5cGljYWxseSBhIGxvZ2dlciwgY2xhc3Mgb3IgZmlsZSBuYW1lLiBUaGV5IGRlY2lkZSBvbmx5IHdoaWNoIG1lbWJlciBvZiBhIG11bHRpLWxpbmUgZXZlbnQgbmFtZXMgaXQ6IGEgbWVtYmVyIHdob3NlIGV2ZXJ5IHdvcmQgaXMgc3VjaCBhIG5hbWUgb3Igb3RoZXIgZW52ZWxvcGUgZG9lcyBub3QgbGVhZCB0aGUgZ3JvdXAgKHNlZSBbc3ltYm9sR3JvdXBMZWFkXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xncm91cGxlYWQpKS4gSW4gYSBtZXNzYWdlIG5hbWUgYSBqb2luZWQgbmFtZSBzdGF5cywgYXMgYSBsb2dnZXIgb3IgY2xhc3MgbmFtZSBpcyBvZnRlbiB0aGUgb25seSB0ZXh0IHRoYXQgdGVsbHMgdHdvIHN0YXRlbWVudHMgYXBhcnQuIChEZWZhdWx0OiBbXCIuXCIsXCI6OlwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIi4iLAogICAgICAgICAgICAgICAgIjo6IgogICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm1lc3NhZ2VLZXlzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJLZXlzIHdob3NlIGJvdW5kIHZhbHVlIGhvbGRzIHRoZSBtZXNzYWdlXG5cbkRlZmluZXMgdGhlIGtleXMgd2hvc2UgdmFsdWUgaG9sZHMgdGhlIG1lc3NhZ2UuIFRoZSBtZXNzYWdlIHN0YXJ0cyBhdCB0aGUgdmFsdWUncyBmaXJzdCB3b3JkIHRoZSBwcmVhbWJsZSBkb2VzIG5vdCBkZXNjcmliZSAoZS5nLiwgJ3N0YXJ0aW5nJyBpbiAnbXNnPXN0YXJ0aW5nJywgJ1N1YmNoYW5uZWwnIGluICdcIm1zZ1wiOlwiW2NvcmVdW0NoYW5uZWwgIzFdIFN1YmNoYW5uZWwgY3JlYXRlZFwiJywgJ0NoYXJnZScgaW4gXCJib2R5OiAnQ2hhcmdlIHJlcXVlc3QgcmVjZWl2ZWQuJ1wiKS4gSW4gYSByZWNvcmQgdGhhdCBvcGVucyB3aXRoICd7JywgcmVhZGluZyBzdGFydHMgYXQgdGhlIGZpcnN0IG1lc3NhZ2Uga2V5IHdpdGggYSB2YWx1ZS4gQSBtZXNzYWdlIGtleSB3aXRob3V0IGEgdmFsdWUgaXMgZW52ZWxvcGUsIGFzIGEgcmVzZXJ2ZWQgd29yZCBpcy4gKERlZmF1bHQ6IFtcIm1zZ1wiLFwibWVzc2FnZVwiLFwiYm9keVwiXSkiLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImRlZmF1bHQiIDogWwogICAgICAgICAgICAgICAgIm1zZyIsCiAgICAgICAgICAgICAgICAibWVzc2FnZSIsCiAgICAgICAgICAgICAgICAiYm9keSIKICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJncm91cExlYWQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1lbWJlciBvZiBhIG11bHRpLWxpbmUgZ3JvdXAgd2hvc2UgdGV4dCBuYW1lcyB0aGUgZ3JvdXBcblxuU2VsZWN0cyB0aGUgbWVtYmVyIG9mIGEgbXVsdGktbGluZSBldmVudCBncm91cCB3aG9zZSB0ZXh0IG5hbWVzIGl0LiAnZmlyc3RXaXRoTWVzc2FnZScgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBmaXJzdCBtZW1iZXIgd2hvc2UgaW5wdXQgZmllbGQgaXMgbm90IGFsbCBlbnZlbG9wZSwgYSBuYW1lIG9mIHdvcmRzIGNoYWluZWQgYnkgYSBbam9pbmVyXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xwcmVhbWJsZWpvaW5lcnMpIGNvdW50aW5nIGFzIGVudmVsb3BlIGhlcmUsIHNvIGEgaGVhZCBzdWNoIGFzIHRoZSAuTkVUIGNvbnNvbGUgbG9nZ2VyJ3MgJ2luZm86IGNhcnQuY2FydHN0b3JlLlZhbGtleUNhcnRTdG9yZVswXScgYmVmb3JlIHRoZSByZWNvcmQgaG9sZGluZyB0aGUgbWVzc2FnZSBsZWF2ZXMgdGhlIG5hbWUsIG9yaWdpbiBhbmQgc2tlbGV0b24gdG8gdGhhdCByZWNvcmQuIEEgaGVhZCB0aGF0IGhvbGRzIGEgbWVzc2FnZSAoZS5nLiwgYSBzdGFjayB0cmFjZSdzIGV4Y2VwdGlvbiBsaW5lKSBuYW1lcyB0aGUgZ3JvdXAuICdoZWFkJyBhbHdheXMgbmFtZXMgYSBncm91cCBmcm9tIGl0cyBoZWFkLiAoRGVmYXVsdDogZmlyc3RXaXRoTWVzc2FnZSkiLAogICAgICAgICAgImRlZmF1bHQiIDogImZpcnN0V2l0aE1lc3NhZ2UiCiAgICAgICAgfSwKICAgICAgICAibWF4T3JpZ2lucyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heCBudW1iZXIgb2Ygc291cmNlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbFxuXG5Db250cm9scyB0aGUgbnVtYmVyIG9mIHNvdXJjZSBjb2RlL2JpbmFyeSBvcmlnaW5zIHRvIGxpc3QgcGVyIHN5bWJvbCB0b2tlbiBzZXF1ZW5jZS4gQXMgYSBzZXJpZXMgb2YgdG9rZW5zIHdpdGhpbiAgYSBnaXZlbiB0ZW1wbGF0ZSAoZS5nLiwgJ0VSUk9SJywgJ2NvdWxkIG5vdCBjb25uZWN0IHRvIFwie30nKSBtYXkgYXBwZWFyICBpbiBtdWx0aXBsZSBzb3VyY2UvYmluYXJ5IGZpbGVzIHdpdGhpbiB0aGUgcGlwZWxpbmUncyBzeW1ib2wgZmlsZXMsIHRoZSBzb3J0aW5nIGFsZ29yaXRobSBzZWxlY3RzIFttYXhTeW1ib2xPcmlnaW5zXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNzeW1ib2xtYXhvcmlnaW5zKSBmb3IgY29tcGFyaXNvbi4gKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogNjQpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IDY0CiAgICAgICAgfSwKICAgICAgICAiZGVidWciIDogewogICAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICJvcmlnaW5zIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIHNvdXJjZSBzY2FubmVkIGZpbGUgbmFtZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgd2l0aGluIHRoZSBsb2FkZWQgc3ltYm9sIGxpYnJhcnkgKGUuZy4sICdteS5zY2FsYScsICdmb28uamF2YScpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaWYvaG93IHRoZXkgcGFydGljaXBhdGUgaW4gc2VsZWN0aW5nIHRoZSBvcmlnaW4gb2YgYSB0YXJnZXQgVGVuWFRlbXBsYXRlIHN5bWJvbCBzZXF1ZW5jZS4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBpbnB1dCBmaWxlcy4iLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN5bWJvbHMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgVGVuWFRlbXBsYXRlIHN5bWJvbCB2YWx1ZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5MaXN0IG9mIHN5bWJvbCB2YWx1ZXMgc3VjaCBhcyBjbGFzcyBhbmQgbWV0aG9kIG5hbWVzKGUuZy4sICdNeUNsYXNzJywgJ2ZvbycpIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gb24gaG93IHRoZWlyIG9yaWdpbiBpbmZvcm1hdGlvbiBpcyBzZWxlY3RlZC4gVGhpcyBvcHRpb24gaGVscHMgZGVidWcgaG93IHRoZSBbc3ltYm9sU2VxdWVuY2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YT2JqZWN0K3N5bWJvbFNlcXVlbmNlKSBmdW5jdGlvbiBzZWxlY3RzICBvcmlnaW4gdmFsdWVzIGZvciBhIHRhcmdldCBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBzeW1ib2xzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibG9nZ2VyTmFtZSIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEZWJ1ZyBsb2dnZXIgbmFtZVxuXG5Db250cm9scyB0aGUgbmFtZSBvZiB0aGUgbG9nNGogbG9nZ2VyIHVzZWQgYnkgW2RlYnVnT3JpZ2luc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdvcmlnaW5zKSBhbmQgW2RlYnVnU3ltYm9sc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jc3ltYm9sZGVidWdzeW1ib2xzKS4gKERlZmF1bHQ6IFtjb25zb2xlT3V0XShodHRwczovL2dpdGh1Yi5jb20vbG9nLTEweC9jb25maWcvYmxvYi9tYWluL2xvZzRqMi55YW1sI0w2NikpIiwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiAiW2NvbnNvbGVPdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L2NvbmZpZy9ibG9iL21haW4vbG9nNGoyLnlhbWwjTDY2KSIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=</template>
|
|
6409
6410
|
|
|
6410
6411
|
```yaml
|
|
6411
6412
|
# 🔟❎ 'run' symbol origin configuration
|
|
@@ -6481,13 +6482,8 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
|
|
|
6481
6482
|
- FATAL
|
|
6482
6483
|
- PANIC
|
|
6483
6484
|
# severity levels, lowercase (engine matching is case-sensitive).
|
|
6484
|
-
#
|
|
6485
|
-
#
|
|
6486
|
-
# signal hits where the "error" key carries the actual message
|
|
6487
|
-
# body the pattern groups; reserving it would collapse distinct
|
|
6488
|
-
# error patterns into one.
|
|
6489
|
-
# Note. The token "emergency" is also intentionally NOT reserved
|
|
6490
|
-
#, sample showed only prose hits, no envelope use observed.
|
|
6485
|
+
# 'error' and 'emergency' are not reserved: an 'error' key often
|
|
6486
|
+
# carries the message itself, and 'emergency' appears as prose.
|
|
6491
6487
|
- "trace"
|
|
6492
6488
|
- "debug"
|
|
6493
6489
|
- "info"
|
|
@@ -6509,8 +6505,7 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
|
|
|
6509
6505
|
- "timestamp"
|
|
6510
6506
|
- "ts"
|
|
6511
6507
|
# 'msg' and 'message' are message keys (see 'preamble.messageKeys')
|
|
6512
|
-
# OpenTelemetry / collector envelope
|
|
6513
|
-
# otelcol's Go-package logging into pattern names)
|
|
6508
|
+
# OpenTelemetry / collector envelope
|
|
6514
6509
|
- "otel"
|
|
6515
6510
|
- "otelcol"
|
|
6516
6511
|
- "opentelemetry"
|
|
@@ -6524,9 +6519,7 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
|
|
|
6524
6519
|
- "exporters"
|
|
6525
6520
|
- "pipeline"
|
|
6526
6521
|
- "pipelines"
|
|
6527
|
-
# structured / envelope keys
|
|
6528
|
-
# is exact, no stem; both forms appear in real otel logs).
|
|
6529
|
-
# Note: "trace" is already reserved above under lowercase severity.
|
|
6522
|
+
# structured / envelope keys, singular and plural (matching is exact)
|
|
6530
6523
|
- "service"
|
|
6531
6524
|
- "services"
|
|
6532
6525
|
- "instance"
|
|
@@ -6549,9 +6542,7 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
|
|
|
6549
6542
|
- "context"
|
|
6550
6543
|
- "contexts"
|
|
6551
6544
|
- "baggage"
|
|
6552
|
-
#
|
|
6553
|
-
# the 2026-05-20 sample, every occurrence was a JSON metadata
|
|
6554
|
-
# key or audit field)
|
|
6545
|
+
# Kubernetes API / audit envelope
|
|
6555
6546
|
- "metadata"
|
|
6556
6547
|
- "namespace"
|
|
6557
6548
|
- "verb"
|
|
@@ -6562,8 +6553,7 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
|
|
|
6562
6553
|
- "encoding"
|
|
6563
6554
|
- "headers"
|
|
6564
6555
|
- "duration"
|
|
6565
|
-
# HTTP / request envelope
|
|
6566
|
-
# klog field markers or JSON keys, not as message content)
|
|
6556
|
+
# HTTP / request envelope
|
|
6567
6557
|
- "path"
|
|
6568
6558
|
- "status"
|
|
6569
6559
|
# generic identity keys (very common envelope tokens in JSON logs)
|
|
@@ -6572,7 +6562,7 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
|
|
|
6572
6562
|
- "kind"
|
|
6573
6563
|
- "version"
|
|
6574
6564
|
- "type"
|
|
6575
|
-
# source-location envelope (Go / Java / Python loggers
|
|
6565
|
+
# source-location envelope (Go / Java / Python loggers print these)
|
|
6576
6566
|
- "caller"
|
|
6577
6567
|
- "func"
|
|
6578
6568
|
- "function"
|
|
@@ -6584,15 +6574,9 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
|
|
|
6584
6574
|
- "method"
|
|
6585
6575
|
- "stack"
|
|
6586
6576
|
- "stacktrace"
|
|
6587
|
-
# process / runtime context.
|
|
6588
|
-
#
|
|
6589
|
-
#
|
|
6590
|
-
# phrase "no such host" inside DNS-failure messages; reserving
|
|
6591
|
-
# it would collapse every "no such host" pattern into one.
|
|
6592
|
-
# Note. The token "app" is intentionally NOT reserved, 42 of 44
|
|
6593
|
-
# occurrences were the Flask logger-name discriminator in
|
|
6594
|
-
# "INFO in app:" lines; reserving it would collapse Python-app
|
|
6595
|
-
# logger structure.
|
|
6577
|
+
# process / runtime context. 'host' and 'app' are not reserved:
|
|
6578
|
+
# 'host' is message text in 'no such host', and 'app' is the Flask
|
|
6579
|
+
# logger name that tells one application's statements from another's.
|
|
6596
6580
|
- "pid"
|
|
6597
6581
|
- "tid"
|
|
6598
6582
|
- "process"
|
|
@@ -6621,6 +6605,9 @@ To configure advanced options (optional) for the Receiver app, [:material-cog: E
|
|
|
6621
6605
|
|
|
6622
6606
|
# 'enclosures' lists open and close character pairs: text inside them
|
|
6623
6607
|
# before the message is envelope (e.g., 'main' in '[main] Starting worker').
|
|
6608
|
+
# An open with no close after it in the same field encloses nothing, such
|
|
6609
|
+
# as the '[' of a color code ('\033[0;33mWARN') or one that closes on a
|
|
6610
|
+
# later line of a multi-line event.
|
|
6624
6611
|
enclosures: ['[]', '()']
|
|
6625
6612
|
|
|
6626
6613
|
# 'assigners' lists the characters that bind a key to its value when the
|