@dx-do/cli 5.2.49 → 5.2.50
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 +24 -6
- package/dist-node/01-discover-vertices.tas-pwngv2fz.md +31 -0
- package/dist-node/01-discover-vertices.tas.data-store-svjfrm1f.json5 +29 -0
- package/dist-node/01-discover-vertices.tas.data-store-tmd-w650nfzt.json +4 -0
- package/dist-node/02-discover-services.tas-867m0m88.md +30 -0
- package/dist-node/02-discover-services.tas.data-store-jz0gx5vn.json5 +40 -0
- package/dist-node/02-discover-services.tas.data-store-tmd-eq264m6y.json +4 -0
- package/dist-node/03-discover-sources.nassql-4tgp9jvv.md +34 -0
- package/dist-node/03-discover-sources.nassql.data-store-by6sqk23.json5 +63 -0
- package/dist-node/03-discover-sources.nassql.data-store-tmd-n3gy57wm.json +4 -0
- package/dist-node/04-discover-metadata-columns.nassql-vhzb0mrq.md +26 -0
- package/dist-node/04-discover-metadata-columns.nassql.data-store-c9zr7p0q.json5 +35 -0
- package/dist-node/04-discover-metadata-columns.nassql.data-store-tmd-4ygrjvty.json +4 -0
- package/dist-node/10-filter-attribute-matches.tas-tafqmtw1.md +33 -0
- package/dist-node/10-filter-attribute-matches.tas.data-store-tmd-m2sendv0.json +4 -0
- package/dist-node/10-filter-attribute-matches.tas.data-store-whdc6vbc.json5 +35 -0
- package/dist-node/11-filter-and-compose.tas-m8856738.md +29 -0
- package/dist-node/11-filter-and-compose.tas.data-store-dh5meyk8.json5 +56 -0
- package/dist-node/11-filter-and-compose.tas.data-store-tmd-mfn8a16f.json +4 -0
- package/dist-node/12-filter-or-not.tas-21zab96s.md +35 -0
- package/dist-node/12-filter-or-not.tas.data-store-7vjr4fnd.json5 +83 -0
- package/dist-node/12-filter-or-not.tas.data-store-tmd-am9smwe5.json +4 -0
- package/dist-node/13-filter-layer.tas-r1ff5anv.md +29 -0
- package/dist-node/13-filter-layer.tas.data-store-5mneyz77.json5 +30 -0
- package/dist-node/13-filter-layer.tas.data-store-tmd-9qmhyfzr.json +4 -0
- package/dist-node/14-filter-traverse.tas-da9jene0.md +38 -0
- package/dist-node/14-filter-traverse.tas.data-store-p0vxtfvj.json5 +63 -0
- package/dist-node/14-filter-traverse.tas.data-store-tmd-5hepg5wf.json +4 -0
- package/dist-node/15-filter-take-vertices-edges.tas-m160qc7z.md +35 -0
- package/dist-node/15-filter-take-vertices-edges.tas.data-store-drmcme43.json5 +46 -0
- package/dist-node/15-filter-take-vertices-edges.tas.data-store-tmd-8fewsp5s.json +4 -0
- package/dist-node/16-filter-projection.tas-dh39mcx8.md +31 -0
- package/dist-node/16-filter-projection.tas.data-store-tmd-3r8anggx.json +4 -0
- package/dist-node/16-filter-projection.tas.data-store-xjbdry1x.json5 +36 -0
- package/dist-node/17-filter-lucene.tas-gyvtzwaa.md +29 -0
- package/dist-node/17-filter-lucene.tas.data-store-1knw6srt.json5 +39 -0
- package/dist-node/17-filter-lucene.tas.data-store-tmd-5cf3tygg.json +5 -0
- package/dist-node/18-filter-variable-reuse.tas-89fq0y6x.md +46 -0
- package/dist-node/18-filter-variable-reuse.tas.data-store-by35113t.json5 +55 -0
- package/dist-node/18-filter-variable-reuse.tas.data-store-tmd-ak7aprgk.json +4 -0
- package/dist-node/19-filter-order-statefilter.tas-hm3z71qj.md +36 -0
- package/dist-node/19-filter-order-statefilter.tas.data-store-ra9hj1rz.json5 +51 -0
- package/dist-node/19-filter-order-statefilter.tas.data-store-tmd-wqer9xy2.json +4 -0
- package/dist-node/20-nassql-from-metadata-basic.nassql-szr2xax1.md +28 -0
- package/dist-node/20-nassql-from-metadata-basic.nassql.data-store-tmd-c7drxs1m.json +4 -0
- package/dist-node/20-nassql-from-metadata-basic.nassql.data-store-zdf1gp1v.json5 +42 -0
- package/dist-node/21-nassql-from-metadata-regex.nassql-78jnsn3e.md +30 -0
- package/dist-node/21-nassql-from-metadata-regex.nassql.data-store-ckzsv7h1.json5 +53 -0
- package/dist-node/21-nassql-from-metadata-regex.nassql.data-store-tmd-zgr6r9my.json +4 -0
- package/dist-node/22-nassql-from-topology.nassql-a71qw9r0.md +42 -0
- package/dist-node/22-nassql-from-topology.nassql.data-store-81m23nge.json5 +58 -0
- package/dist-node/22-nassql-from-topology.nassql.data-store-tmd-vhpjy6c7.json +4 -0
- package/dist-node/23-nassql-join-topology-metadata.nassql-hywxhcg2.md +35 -0
- package/dist-node/23-nassql-join-topology-metadata.nassql.data-store-da7q90n2.json5 +76 -0
- package/dist-node/23-nassql-join-topology-metadata.nassql.data-store-tmd-rr8wt9qa.json +4 -0
- package/dist-node/24-nassql-from-data-window-mean.nassql-q6qsgdxw.md +33 -0
- package/dist-node/24-nassql-from-data-window-mean.nassql.data-store-j7xmg7fc.json5 +81 -0
- package/dist-node/24-nassql-from-data-window-mean.nassql.data-store-tmd-qgzz2f7v.json +4 -0
- package/dist-node/25-nassql-group-order-top.nassql-awgnwn3r.md +30 -0
- package/dist-node/25-nassql-group-order-top.nassql.data-store-cmrn300b.json5 +48 -0
- package/dist-node/25-nassql-group-order-top.nassql.data-store-tmd-7xpqeh7c.json +4 -0
- package/dist-node/26-nassql-filter-predicate.nassql-2t27h5ev.md +41 -0
- package/dist-node/26-nassql-filter-predicate.nassql.data-store-k2rgp609.json5 +59 -0
- package/dist-node/26-nassql-filter-predicate.nassql.data-store-tmd-m4dddgwm.json +4 -0
- package/dist-node/27-nassql-distinct-keep.nassql-6z55dvk3.md +24 -0
- package/dist-node/27-nassql-distinct-keep.nassql.data-store-mrx00ys5.json5 +52 -0
- package/dist-node/27-nassql-distinct-keep.nassql.data-store-tmd-0p9hy42g.json +4 -0
- package/dist-node/28-nassql-format-time.nassql-6wraqgdk.md +30 -0
- package/dist-node/28-nassql-format-time.nassql.data-store-tmd-bbbqhz1x.json +4 -0
- package/dist-node/28-nassql-format-time.nassql.data-store-tvy8y2cs.json5 +59 -0
- package/dist-node/29-nassql-describe-log.nassql-t9vnxeb0.md +31 -0
- package/dist-node/29-nassql-describe-log.nassql.data-store-tmd-q4mtczy8.json +4 -0
- package/dist-node/29-nassql-describe-log.nassql.data-store-x16y4crx.json5 +51 -0
- package/dist-node/30-nassql-map-string.nassql-f2tdknzs.md +30 -0
- package/dist-node/30-nassql-map-string.nassql.data-store-t8ahcabn.json5 +53 -0
- package/dist-node/30-nassql-map-string.nassql.data-store-tmd-a6xq0bdx.json +4 -0
- package/dist-node/31-nassql-join-data-sum.nassql-p16y3xk6.md +26 -0
- package/dist-node/31-nassql-join-data-sum.nassql.data-store-dje7wm6v.json5 +64 -0
- package/dist-node/31-nassql-join-data-sum.nassql.data-store-tmd-c1pyx1qw.json +4 -0
- package/dist-node/32-nassql-bottom-aggregation.nassql-hpgfn77p.md +26 -0
- package/dist-node/32-nassql-bottom-aggregation.nassql.data-store-tmd-p0ssj1vc.json +4 -0
- package/dist-node/32-nassql-bottom-aggregation.nassql.data-store-v9580caa.json5 +43 -0
- package/dist-node/33-nassql-cross-domain-pipeline.nassql-fm0ynphf.md +45 -0
- package/dist-node/33-nassql-cross-domain-pipeline.nassql.data-store-tmd-18881drs.json +4 -0
- package/dist-node/33-nassql-cross-domain-pipeline.nassql.data-store-vqs9hkx4.json5 +79 -0
- package/dist-node/3rdpartylicenses-hx59bakt.txt +885 -0
- package/dist-node/50-discover-custom-layers.tas-2hvvpkzw.md +66 -0
- package/dist-node/50-discover-custom-layers.tas.data-store-h85zgna9.json5 +36 -0
- package/dist-node/50-discover-custom-layers.tas.data-store-tmd-hagn9eak.json +4 -0
- package/dist-node/51-collect-counts-everything.tas-nz0ksgdc.md +46 -0
- package/dist-node/51-collect-counts-everything.tas.data-store-eypcjah8.json5 +48 -0
- package/dist-node/51-collect-counts-everything.tas.data-store-tmd-4pcj94s9.json +4 -0
- package/dist-node/52-collect-counts-bulk.tas-eerw4z8s.md +54 -0
- package/dist-node/52-collect-counts-bulk.tas.data-store-scedtw1m.json5 +65 -0
- package/dist-node/52-collect-counts-bulk.tas.data-store-tmd-csyzj189.json +4 -0
- package/dist-node/53-collect-attributes-by-type.tas-cw0285hx.md +71 -0
- package/dist-node/53-collect-attributes-by-type.tas.data-store-fvjge4yr.json5 +65 -0
- package/dist-node/53-collect-attributes-by-type.tas.data-store-tmd-274qrd8f.json +4 -0
- package/dist-node/README-ghxecaz0.md +84 -0
- package/dist-node/SKILL-1xn7r9nt.md +104 -0
- package/dist-node/agent-25q752kd.md +55 -0
- package/dist-node/agent_connection_and_status-0dq7zkpc.md +62 -0
- package/dist-node/agent_source_collector-6s06n3rs.md +40 -0
- package/dist-node/agentic-mcp-rycd2gh8.md +140 -0
- package/dist-node/application-dfva8tz0.md +48 -0
- package/dist-node/application-m0q2vaxj.md +74 -0
- package/dist-node/attribute_resource_metric_name-pxrceab5.md +56 -0
- package/dist-node/browseragent-snippet.template-9megjp8a.html +12 -0
- package/dist-node/bulkvertexpatch-1a4qy5vb.md +78 -0
- package/dist-node/bundle.pbd-38r15kyd.template +13 -0
- package/dist-node/bundle.profile-1wpzpt3d.template +2 -0
- package/dist-node/business_transaction-mbqz5ex9.md +61 -0
- package/dist-node/chunk-4I3HBO6U-2ebgf7kh.js +127 -0
- package/dist-node/chunk-4PMCLJMS-0mqvr4m4.js +1 -0
- package/dist-node/chunk-5VSFINOX-ewzpx7wh.js +5 -0
- package/dist-node/chunk-72HYG3XZ-kf7hy4vs.js +3625 -0
- package/dist-node/chunk-JRM4BLOM-rg32z8w4.js +1 -0
- package/dist-node/chunk-Q2JA73UH-akkb8bh3.js +14 -0
- package/dist-node/chunk-RNMHSXZF-pdwasrg7.js +1358 -0
- package/dist-node/chunk-VV2FJEMA-3rvtkmga.js +321 -0
- package/dist-node/chunk-YVD3UK5I-9pxr1jka.js +695 -0
- package/dist-node/configuration-1vczsdex.md +104 -0
- package/dist-node/dashboards-x0xddksy.md +17 -0
- package/dist-node/database_or_inferred-8vqf5gyr.md +75 -0
- package/dist-node/default-licensing-config-0p879qpb.template +122 -0
- package/dist-node/dependency-3b0neg5x.md +40 -0
- package/dist-node/description.md-qwc2bj9r.template +30 -0
- package/dist-node/discovery-flow-fw79kbx4.md +116 -0
- package/dist-node/dxi_service-13prnpd5.md +59 -0
- package/dist-node/entity-relationships-cevz61kj.md +142 -0
- package/dist-node/gotchas-8ab64kcd.md +389 -0
- package/dist-node/host-es6fxtgx.md +46 -0
- package/dist-node/host-j3qqrm5f.md +55 -0
- package/dist-node/index-104hyb1m.html +13 -0
- package/dist-node/index-7fp2dfas.json +178 -0
- package/dist-node/index-g3hh5wez.json +403 -0
- package/dist-node/index-mbzg9rhc.json +270 -0
- package/dist-node/index-qffdhwgm.json +2479 -0
- package/dist-node/inferred-w998vfq1.md +41 -0
- package/dist-node/installInstructions.md-k9ghf3dr.template +21 -0
- package/dist-node/inventorize-xc9h9bjr.md +34 -0
- package/dist-node/investigation-planning-6kcm01h9.md +149 -0
- package/dist-node/investigator-flow-jc2s0n46.md +186 -0
- package/dist-node/k8s_deployment_and_namespace-69c29152.md +88 -0
- package/dist-node/k8s_pod_and_container-9h4v6cmj.md +64 -0
- package/dist-node/main-SGLYO5YX-ht69eb0y.js +13 -0
- package/dist-node/main.js +397415 -0
- package/dist-node/marketplace-srdmzxkj.json +15 -0
- package/dist-node/metric-source-names-6cbczyks.md +75 -0
- package/dist-node/metrics-grounding-2h4kkbe3.md +130 -0
- package/dist-node/mm-cookbook-23jpw721.md +231 -0
- package/dist-node/mm-quickstart-x2adfc16.md +106 -0
- package/dist-node/nassql-cookbook-n8kc0mff.md +812 -0
- package/dist-node/nassql-quickstart-090e0yex.md +149 -0
- package/dist-node/plugin-c3bavxvf.json +18 -0
- package/dist-node/polyfills-A7ZF72EO-mp884a0b.js +2 -0
- package/dist-node/prerendered-routes-523d8gat.json +3 -0
- package/dist-node/primeicons-4GST5W3O-jac3wxrf.woff2 +0 -0
- package/dist-node/primeicons-DHQU4SEP-760n99pp.svg +345 -0
- package/dist-node/primeicons-GEFHGEHP-rc4kaa3b.ttf +0 -0
- package/dist-node/primeicons-P53SE5CV-4saz3d5j.woff +0 -0
- package/dist-node/primeicons-RSSEDYLY-4d4vbd67.eot +0 -0
- package/dist-node/query-vs-analysis-separation-sag1ezcq.md +97 -0
- package/dist-node/run-query-vs-run-partial-6138pc94.md +80 -0
- package/dist-node/service-5pz5nhzf.md +133 -0
- package/dist-node/service-hierarchies-87a4ynpj.md +178 -0
- package/dist-node/service-k4f5mkbq.md +51 -0
- package/dist-node/servlet_or_frontend-1kjcb7ar.md +76 -0
- package/dist-node/src-apm-mfnsq6vw.svg +4 -0
- package/dist-node/src-axa-nn28yqmj.svg +4 -0
- package/dist-node/src-dxim-fv7ne4qa.svg +4 -0
- package/dist-node/styles-23VUPSCU-9ehggc1f.css +1 -0
- package/dist-node/tas-cookbook-0y4826rp.md +693 -0
- package/dist-node/tas-quickstart-wgcvwffc.md +138 -0
- package/dist-node/time-format-0595g01j.md +41 -0
- package/dist-node/toggles.pbd-9wscbmng.template +2 -0
- package/dist-node/type-host-agbhmn6v.svg +6 -0
- package/dist-node/type-metric-p9b90bpx.svg +4 -0
- package/dist-node/type-service-k7f1x71k.svg +4 -0
- package/dist-node/ui-0b5grqrg.md +113 -0
- package/dist-node/universe-b9nhf325.md +47 -0
- package/dist-node/universe-fzpwzvxr.md +91 -0
- package/dist-node/universes-and-scopes-1cb9pfk7.md +105 -0
- package/dist-node/vertex_entity_node-mm3yp9d0.md +31 -0
- package/package.json +1 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
|
|
2
|
+
## Environment Variables
|
|
3
|
+
|
|
4
|
+
#### Basic Environment Vars
|
|
5
|
+
|
|
6
|
+
* **DXDO_CONFIGURATION** : String containing entire JSON configuration
|
|
7
|
+
* **DXDO_LOG_LEVEL** : "debug" or "info"
|
|
8
|
+
* **DXDO_NO_COLOR** : disable colors in output
|
|
9
|
+
* **FORCE_COLOR** : if 0 disable colors in logging
|
|
10
|
+
* **DXDO_DEBUG_ARGS** : shows provided args as understood by the parser
|
|
11
|
+
* **ALLOW_INSECURE_HTTPS** : allows connections to on-premise DX with self-signed certs.
|
|
12
|
+
|
|
13
|
+
#### Request Logging Environment Vars
|
|
14
|
+
|
|
15
|
+
* **DXDO_LOG_REQUESTS** : any value, true if exists.
|
|
16
|
+
* **DXDO_REQUEST_LOG_FILE** : location to log requests
|
|
17
|
+
* **DXDO_POSTMAN_EXPORT** : if set, along with DXDO_LOG_REQUESTS, will export a complete postman export of all network transactions.
|
|
18
|
+
* **DXDO_POSTMAN_DIR** : set to the location for postman exports of runs
|
|
19
|
+
|
|
20
|
+
## Experimental commands
|
|
21
|
+
|
|
22
|
+
Some `dx-do` commands are marked **experimental** — they're being designed, may change shape between releases, or are only safe to run on test tenants. They're hidden from `dx-do help commands` and refused at runtime by default. Open the gate either way:
|
|
23
|
+
|
|
24
|
+
* **Per-invocation flag**: `dx-do --enable-experimental-commands <group> <command> ...`
|
|
25
|
+
* **Env var**: `export DXDO_ENABLE_EXPERIMENTAL_COMMANDS=true`
|
|
26
|
+
|
|
27
|
+
Both forms behave identically; pick whichever fits your workflow. The env var is the better choice when you need experimental commands repeatedly (CI, scripts, an MCP-server-spawn config in Claude Code / Cursor).
|
|
28
|
+
|
|
29
|
+
To see which commands are experimental, run any of:
|
|
30
|
+
|
|
31
|
+
* `DXDO_ENABLE_EXPERIMENTAL_COMMANDS=true dx-do help commands` — list with `[experimental]` tag.
|
|
32
|
+
* The `README.md` shipped with the binary — generated with experimental commands always included; each is suffixed with `[experimental]`.
|
|
33
|
+
|
|
34
|
+
When an MCP client (Claude Code, Cursor, mcp-inspector) spawns `dx-do` as a subprocess for a currently-experimental command (e.g. `agentic mcp`), set the env var in the spawn config so the gate is open for the child process. The bundled `investigate@dx-do` Claude Code plugin already does this in its `plugin.json`.
|
|
35
|
+
|
|
36
|
+
## Configuration
|
|
37
|
+
* dx-do loads its default configuration from ~/.dxdo/default.dxo2.config.json
|
|
38
|
+
* If that doesn't exist, the first time you run dx-do, it will prompt you for values and write the configuration file.
|
|
39
|
+
* You can have multiple config files for different tenants, and pass them using the '--config=<config file>' argument.
|
|
40
|
+
* If your configuration file is in ~/.dxdo directory, you do not have to specify the directory' argument.
|
|
41
|
+
* Also, dx-do assumes that the extension is .json and will add it if the file doesn't exist as specified.
|
|
42
|
+
|
|
43
|
+
* ```'npx dx-do --config=my-config'``` will find a config in ```~/.dxdo/my-config.dxo2.config.json```
|
|
44
|
+
|
|
45
|
+
## Proxy Configuration
|
|
46
|
+
|
|
47
|
+
* dx-do relies on system proxy by default.
|
|
48
|
+
* if a system proxy is enabled but not working, you can try setting
|
|
49
|
+
* `export GLOBAL_AGENT_HTTP_PROXY=true`
|
|
50
|
+
* user can also provide a proxy configuration file on the command line
|
|
51
|
+
* 'npx dx-do --config=my-config --proxyConfig=my-proxy.json'
|
|
52
|
+
|
|
53
|
+
### Proxy configuration file format
|
|
54
|
+
```text
|
|
55
|
+
{
|
|
56
|
+
host: <proxy hostname>
|
|
57
|
+
port: <proxy port>
|
|
58
|
+
auth: {
|
|
59
|
+
username: <username>
|
|
60
|
+
password: <password>
|
|
61
|
+
}
|
|
62
|
+
protocol: <proxy http mode = "https" | "http">
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
## Generating keys
|
|
67
|
+
|
|
68
|
+
* [userToken] Launchpad -> Settings -> + New Token -> User Token ...
|
|
69
|
+
|
|
70
|
+
## optional configuration
|
|
71
|
+
|
|
72
|
+
* userToken is now required, tenant token is not necessary.
|
|
73
|
+
|
|
74
|
+
## current version 4 configuration file format
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
{
|
|
78
|
+
"configurationVersion": "3"
|
|
79
|
+
"cohortId": "<cohortUD from Settings -> Connector Parameters>",
|
|
80
|
+
"userToken": <DX User Token from Settings -> Manage Tokens -> New Token -> User>,
|
|
81
|
+
"dxGatewayHost": "https://apmgw.dxi-na1.saas.broadcom.com/",
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
## now disabled version 3 configuration file format, please use "config upgrade" command.
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
{
|
|
90
|
+
"tenantCN": "<>",
|
|
91
|
+
"tenantId": "<>",
|
|
92
|
+
"tenantToken": <DX Tenant Token>,
|
|
93
|
+
"userToken": <DX User Token>,
|
|
94
|
+
"hostUrl": "https://apmgw.dxi-na1.saas.broadcom.com/",
|
|
95
|
+
"axaHostUrl": "https://axa.dxi-na1.saas.broadcom.com/",
|
|
96
|
+
"oiHostUrl": "https://oi.dxi-na1.saas.broadcom.com/",
|
|
97
|
+
"axaSessionHostUrl": "https://axaservices-es-exporter.dxi-na1.saas.broadcom.com/",
|
|
98
|
+
"dashboardHostUrl": "https://dxi-dashboard.dxi-na1.saas.broadcom.com/",
|
|
99
|
+
"configurationVersion": "3"
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# dx-do dashboard quirks
|
|
2
|
+
|
|
3
|
+
### Configuration
|
|
4
|
+
|
|
5
|
+
dx-do dashboard commands require an API key that is not able to be generated from the UI.
|
|
6
|
+
|
|
7
|
+
In order to generate a dashboard api key, follow these steps:
|
|
8
|
+
|
|
9
|
+
1. Open a modern browser as a DX admin
|
|
10
|
+
2. Open browser developer tools and find any XHR request ("search").
|
|
11
|
+
3. In the request headers, ensure that it has keys starting with CA_ and SPP_
|
|
12
|
+
4. Copy the entire cookie value.
|
|
13
|
+
5. From the terminal, run
|
|
14
|
+
* ```npx dx-do dashboard create-dashboard-api-key liveBrowserSessionCookie="<paste cookie header>"```
|
|
15
|
+
6. Add a key "dashboardApiKey" to your tenant's config.json with the value generated by the previous command.
|
|
16
|
+
|
|
17
|
+
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: database_or_inferred
|
|
3
|
+
title: DATABASE / INFERRED_DATABASE — the APM-discovered backend database
|
|
4
|
+
layer: ATC
|
|
5
|
+
related_entities: [business_transaction, agent, mysql_db]
|
|
6
|
+
related_cookbooks: [investigator-flow, metrics-grounding]
|
|
7
|
+
tags: [apm, runtime-specific, inferred]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# DATABASE and INFERRED_DATABASE
|
|
11
|
+
|
|
12
|
+
## What they are
|
|
13
|
+
|
|
14
|
+
When an APM agent watches an application call out to a database, it records two pieces of identity:
|
|
15
|
+
|
|
16
|
+
- **Per-call backend** — captured under the agent's metric source as `Backends|<provider>|<remote>:<metric>` (response time, errors, throughput).
|
|
17
|
+
- **Vertex** — a `DATABASE` vertex describing the backend (provider, host:port, database name, agent-domain).
|
|
18
|
+
|
|
19
|
+
Across multiple agents in different apps, **the same backing database often shows up as multiple DATABASE vertices** — one per producing agent, since each agent only sees its own connection. To unify these, the platform's **inference rules** create an `INFERRED_DATABASE` vertex matching by host+port+dbname (or whichever shape the rule recognized). The `INFERRED_*` prefix is the marker that a vertex was produced by platform inference, not by an agent.
|
|
20
|
+
|
|
21
|
+
When you query "the database for application X":
|
|
22
|
+
|
|
23
|
+
- Per-agent slice → `DATABASE` (one per agent).
|
|
24
|
+
- Unified backend identity → `INFERRED_DATABASE`.
|
|
25
|
+
|
|
26
|
+
## Where they live
|
|
27
|
+
|
|
28
|
+
Both live in the **ATC** layer. The non-inferred type is more common in raw vertex counts; the inferred type is typically smaller in number but more reliable as an identity anchor.
|
|
29
|
+
|
|
30
|
+
## Useful attributes
|
|
31
|
+
|
|
32
|
+
DATABASE:
|
|
33
|
+
- `name` — display label, often `<provider>:<host>:<port>` shape.
|
|
34
|
+
- `provider` — `MySQL`, `Oracle`, `PostgreSQL`, etc.
|
|
35
|
+
- `hostname`, `port`, `remoteName` — the connection target.
|
|
36
|
+
- `applicationName`, `agentDomain`, `agent` — the agent that observed it.
|
|
37
|
+
- `backendNode` — the agent-internal id used to correlate metrics.
|
|
38
|
+
|
|
39
|
+
INFERRED_DATABASE:
|
|
40
|
+
- `name`, `databasename` — display + db-name.
|
|
41
|
+
- `inferredBackendNode` — the inference-rule id.
|
|
42
|
+
- `cor.dbname.contains.from` — the rule's matching criterion.
|
|
43
|
+
- `provider`, `hostname`, `port` — same identity fields.
|
|
44
|
+
|
|
45
|
+
## How metrics are reported
|
|
46
|
+
|
|
47
|
+
Backend-call metrics live under the **calling agent's metric source** (not on the DATABASE vertex). Path shape: `Backends|<provider>|<host>|<dbname>:<metric>`. Common metric names: `Average Response Time (ms)`, `Errors Per Interval`, `Responses Per Interval`, `Connections In Use`.
|
|
48
|
+
|
|
49
|
+
A common authoring pattern:
|
|
50
|
+
|
|
51
|
+
1. Identify the BT or application of interest.
|
|
52
|
+
2. Find the DATABASEs it talks to via TAS edges (`agent-monitors` → DATABASE; or `composed_of` for INFERRED_DATABASE).
|
|
53
|
+
3. For each DATABASE, find the agent that produced it (`agent` attribute).
|
|
54
|
+
4. Query MM under that agent for `Backends|...` metric paths.
|
|
55
|
+
|
|
56
|
+
When the user asks "how are the databases doing" without naming an app, use `INFERRED_DATABASE` as the identity anchor — it deduplicates across agents.
|
|
57
|
+
|
|
58
|
+
## Common synonyms / mistakes
|
|
59
|
+
|
|
60
|
+
- "DB" / "database" / "datastore" — ambiguous between DATABASE and MYSQL_DB / native types.
|
|
61
|
+
- DATABASE is **APM-discovered** — it represents what the agent saw. If the customer monitors the database directly with a MySQL agent, you'll also see `MYSQL_DB` (different vertex type, different metric set).
|
|
62
|
+
- Don't filter only on `INFERRED_DATABASE` — many tenants have agent-side DATABASE without the corresponding inference rule firing.
|
|
63
|
+
|
|
64
|
+
## Related entities
|
|
65
|
+
|
|
66
|
+
- **BUSINESSTRANSACTION** — BTs that talk to this DB.
|
|
67
|
+
- **AGENT** — the producing observer for a (non-inferred) DATABASE.
|
|
68
|
+
- **MYSQL_DB** — the direct-monitoring counterpart when a MySQL agent is deployed.
|
|
69
|
+
- **GENERICBACKEND / INFERRED_GENERICBACKEND** — the same pattern for non-DB backends.
|
|
70
|
+
|
|
71
|
+
## See also
|
|
72
|
+
|
|
73
|
+
- `cookbooks/metrics-grounding` — the "backend metrics live under the producing agent" pattern.
|
|
74
|
+
- `cookbooks/investigator-flow` — DB-level health rollups.
|
|
75
|
+
- `lexicon/inferred` — what the `INFERRED_*` prefix means.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
{
|
|
2
|
+
"licenseGroups": [
|
|
3
|
+
{
|
|
4
|
+
"name": "Kubernetes",
|
|
5
|
+
"isPrimary": true,
|
|
6
|
+
"devicesPerHost": 4,
|
|
7
|
+
"membershipRules": [
|
|
8
|
+
{
|
|
9
|
+
"agentNameRegex": "Kubernetes Agent.*"
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
},{
|
|
13
|
+
"name": "Java",
|
|
14
|
+
"isPrimary": true,
|
|
15
|
+
"devicesPerAgent": 4,
|
|
16
|
+
"membershipRules": [
|
|
17
|
+
{
|
|
18
|
+
"agentProcessRegex": "(tomcat|weblogic|websphere|undertow|liberty).*"
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"name": ".NET",
|
|
24
|
+
"isPrimary": true,
|
|
25
|
+
"devicesPerAgent": 4,
|
|
26
|
+
"membershipRules": [
|
|
27
|
+
{
|
|
28
|
+
"agentProcessRegex": "(\\.NET).*",
|
|
29
|
+
"excludeAgentNameRegex": "PerfMonCollector.*"
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "NodeJS",
|
|
35
|
+
"isPrimary": true,
|
|
36
|
+
"devicesPerAgent": 0.4,
|
|
37
|
+
"membershipRules": [
|
|
38
|
+
{
|
|
39
|
+
"agentProcessRegex": "(nodejs-).*"
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "Go",
|
|
45
|
+
"isPrimary": true,
|
|
46
|
+
"devicesPerAgent": 0.4,
|
|
47
|
+
"membershipRules": [
|
|
48
|
+
{
|
|
49
|
+
"agentProcessRegex": "(go-).*"
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "Python",
|
|
55
|
+
"isPrimary": true,
|
|
56
|
+
"devicesPerHost": 4,
|
|
57
|
+
"membershipRules": [
|
|
58
|
+
{
|
|
59
|
+
"agentProcessRegex": "(python-).*"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
},{
|
|
63
|
+
"name": "PHP",
|
|
64
|
+
"isPrimary": true,
|
|
65
|
+
"devicesPerAgent": 4,
|
|
66
|
+
"membershipRules": [
|
|
67
|
+
{
|
|
68
|
+
"agentProcessRegex": "(php-).*"
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"name": "NetOps",
|
|
74
|
+
"isPrimary": true,
|
|
75
|
+
"devicesPerAgent": 0,
|
|
76
|
+
"membershipRules": [
|
|
77
|
+
{
|
|
78
|
+
"agentProcessRegex": "(NFA|NetOps|Spectrum|VNA).*"
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"name": "Infrastructure",
|
|
84
|
+
"isPrimary": false,
|
|
85
|
+
"devicesPerAgent": 1,
|
|
86
|
+
"membershipRules": [
|
|
87
|
+
{
|
|
88
|
+
"agentProcessRegex": "(Infrastructure).*"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"agentProcessRegex": "Cluster.*"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"agentNameRegex": "Infrastructure.*"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"agentNameRegex": "Prometheus.*"
|
|
98
|
+
}
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"name": "PerfMon",
|
|
103
|
+
"isPrimary": false,
|
|
104
|
+
"devicesPerAgent": 1,
|
|
105
|
+
"membershipRules": [
|
|
106
|
+
{
|
|
107
|
+
"agentProcessRegex": "(PerfMonCollector).*"
|
|
108
|
+
}
|
|
109
|
+
]
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"name": "Built-In",
|
|
113
|
+
"isPrimary": false,
|
|
114
|
+
"devicesPerGroupMember": 0,
|
|
115
|
+
"membershipRules": [
|
|
116
|
+
{
|
|
117
|
+
"agentHostRegex": "(Custom Metric Host|Experience Collector Host)"
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: dependency
|
|
3
|
+
title: dependency — when a relationship implies one
|
|
4
|
+
aliases: [depends-on, dependent]
|
|
5
|
+
category: topology
|
|
6
|
+
related: [service]
|
|
7
|
+
tags: [overloaded]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# dependency
|
|
11
|
+
|
|
12
|
+
"Depends on" is one of those words that sounds precise but isn't. In DXO2, several different mechanisms can imply that A depends on B; **none of them is universally trustworthy**, and not every relationship is a dependency.
|
|
13
|
+
|
|
14
|
+
## Things that *can* indicate a dependency
|
|
15
|
+
|
|
16
|
+
1. **TAS edges** with semantic = `contains`, `runs_on`, `composed_of`, `orchestrates`, or `agent-monitors` — directional and concrete, but the semantic varies and ~17% of edges in real tenants have no semantic at all (1140 of 6513 in demo-prod).
|
|
17
|
+
2. **Service hierarchy** — a parent service often depends on its children for health rollups; sometimes also has more specific service-to-service dependency edges.
|
|
18
|
+
3. **Application-side observed calls** — APM-recorded backend calls (BUSINESSTRANSACTION → DATABASE) are dependencies in the runtime sense.
|
|
19
|
+
4. **k8s ownership** — a deployment "depends on" its replicaset which "depends on" its pods. Mechanically these are control-plane links, not call-graph dependencies.
|
|
20
|
+
5. **Attribute similarity** — entities sharing IP/hostname imply *some* relationship, not necessarily dependency.
|
|
21
|
+
|
|
22
|
+
## Things that look like dependency but aren't
|
|
23
|
+
|
|
24
|
+
- Two entities being members of the same DXO2 service. They're related, not necessarily dependent.
|
|
25
|
+
- Two services in a parent-child relationship. The parent often groups for ownership, not because the parent calls the child.
|
|
26
|
+
- An AGENT "monitoring" an entity. The agent observes; the entity doesn't depend on the agent.
|
|
27
|
+
|
|
28
|
+
## Disambiguation rule
|
|
29
|
+
|
|
30
|
+
When the user says "what does X depend on":
|
|
31
|
+
|
|
32
|
+
1. Ask (or pick): runtime dependency (call graph) or organizational dependency (service hierarchy)?
|
|
33
|
+
2. Runtime → traverse APM-observed edges (`BUSINESSTRANSACTION` → backends, `agent-monitors` to find producing agents). The `service-dependency-graph` API returns the runtime view as a TAS subgraph.
|
|
34
|
+
3. Organizational → `discovery_service_hierarchy` and walk the parent/child tree.
|
|
35
|
+
4. Cross-check both before stating "X depends on Y" definitively.
|
|
36
|
+
|
|
37
|
+
## See also
|
|
38
|
+
|
|
39
|
+
- `cookbooks/entity-relationships` — the five kinds of relationships.
|
|
40
|
+
- `cookbooks/service-hierarchies` — DXO2 service mechanics.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# ${bundleName} (${bundleVersion})
|
|
2
|
+
|
|
3
|
+
## Description
|
|
4
|
+
|
|
5
|
+
${bundleDisplayName}
|
|
6
|
+
|
|
7
|
+
## APM version
|
|
8
|
+
${agentMinimumVersion}
|
|
9
|
+
|
|
10
|
+
## Supported third party versions
|
|
11
|
+
|
|
12
|
+
## Limitations
|
|
13
|
+
|
|
14
|
+
## License
|
|
15
|
+
https://communities.ca.com/docs/DOC-231150910#license on the CA APM Developer Community.
|
|
16
|
+
|
|
17
|
+
## Support
|
|
18
|
+
This document and associated tools are made available from CA Technologies as examples and provided at no charge as a courtesy to the CA APM Community at large. This resource may require modification for use in your environment. However, please note that this resource is not supported by CA Technologies, and inclusion in this site should not be construed to be an endorsement or recommendation by CA Technologies. These utilities are not covered by the CA Technologies software license agreement and there is no explicit or implied warranty from CA Technologies. They can be used and distributed freely amongst the CA APM Community, but not sold. As such, they are unsupported software, provided as is without warranty of any kind, express or implied, including but not limited to warranties of merchantability and fitness for a particular purpose. CA Technologies does not warrant that this resource will meet your requirements or that the operation of the resource will be uninterrupted or error free or that any defects will be corrected. The use of this resource implies that you understand and agree to the terms listed herein.
|
|
19
|
+
|
|
20
|
+
Although these utilities are unsupported, please let us know if you have any problems or questions by adding a comment to the CA APM Community Site area where the resource is located, so that the Author(s) may attempt to address the issue or question.
|
|
21
|
+
|
|
22
|
+
Unless explicitly stated otherwise this field pack is only supported on the same platforms as the APM core agent. See [APM Compatibility Guide](http://www.ca.com/us/support/ca-support-online/product-content/status/compatibility-matrix/application-performance-management-compatibility-guide.aspx).
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# Change log
|
|
26
|
+
Changes for each version of the field pack.
|
|
27
|
+
|
|
28
|
+
Version | Author | Comment
|
|
29
|
+
|--------|--------|--------|
|
|
30
|
+
|${bundleVersion}| ${bundleAuthor} | First version of the field pack.|
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: discovery-flow
|
|
3
|
+
title: Discovery flow — figure out what's queryable on this tenant
|
|
4
|
+
applies_to: all
|
|
5
|
+
tags: [getting-started, discovery]
|
|
6
|
+
related: [tas-quickstart, nassql-quickstart, mm-quickstart]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Discovery flow
|
|
10
|
+
|
|
11
|
+
Before authoring any specific query, learn what the tenant has. The discovery tools are read-only and cached — call them freely.
|
|
12
|
+
|
|
13
|
+
## The discovery hierarchy (READ FIRST)
|
|
14
|
+
|
|
15
|
+
Multiple surfaces overlap in what they can tell you. Use them in this order — each tier is cheaper and more abstract than the next:
|
|
16
|
+
|
|
17
|
+
1. **`discovery_capabilities`** — *(forthcoming)* what this tenant supports (LUCENE indexing, traversal, etc.). One call up front so you don't author against a feature that's off. Without this, you find out by failing.
|
|
18
|
+
2. **`corpus_list("entities")` + `corpus_get("entities", "<id>")`** — universal *conceptual* knowledge. What a HOST is, what an AGENT is, where each lives, what it's commonly confused with. Tenant-independent; cheap; teaches the model the right ontology before it asks the tenant anything.
|
|
19
|
+
3. **`discovery_layers` / `discovery_services` / `discovery_attributes(layer)` / `discovery_attribute_values(layer, attr)`** — live, tenant-specific. Cached per session. Use after the entity-level grounding when you need to know "what does THIS tenant actually have."
|
|
20
|
+
4. **NASSQL `FROM_METADATA` with KEEP** — when you need the actual metric catalog as a *dataframe* (for downstream GROUP / COUNT / JOIN). `discovery_metrics` returns a flat string list capped at 1000; FROM_METADATA returns the full catalog with all columns.
|
|
21
|
+
|
|
22
|
+
`corpus_list("queries", {type: "<type>"})` and `corpus_get("queries", "<id>")` sit alongside this hierarchy as the *worked-example* surface — read a known-good query when you want to pattern-match against an existing one rather than author from scratch.
|
|
23
|
+
|
|
24
|
+
## TAS — layers and attributes
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
discovery_layers → ["INFRASTRUCTURE", "CONNECTOR", ...]
|
|
28
|
+
discovery_attributes(layer) → ["hostname", "ip", "type", ...]
|
|
29
|
+
discovery_attribute_values(layer, attribute) → ["host-a", "host-b", ...]
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Pattern:
|
|
33
|
+
|
|
34
|
+
1. `discovery_layers` to know what layers exist
|
|
35
|
+
2. Pick the layer relevant to the query goal (e.g. `INFRASTRUCTURE` for hosts)
|
|
36
|
+
3. `discovery_attributes(layer)` to see what's filterable
|
|
37
|
+
4. For IN-style filters: `discovery_attribute_values(layer, attribute)` to
|
|
38
|
+
see distinct values
|
|
39
|
+
|
|
40
|
+
Caching: each call hits the live tenant once, then serves from session
|
|
41
|
+
cache. Pass `refresh: true` on any discovery tool call to bust that key's
|
|
42
|
+
cache; rebinding the session clears everything.
|
|
43
|
+
|
|
44
|
+
## NASSQL — services and metrics catalog
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
discovery_services → ["service-a", "service-b", ...]
|
|
48
|
+
discovery_metrics → ["cpu.utilization", "mem.free", ...] (capped at 1000)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
NASSQL queries that name services or metrics should validate names
|
|
52
|
+
against discovery first.
|
|
53
|
+
|
|
54
|
+
`discovery_metrics` is capped at 1000 names — see `gotchas.md` for the
|
|
55
|
+
workaround if a known metric is missing.
|
|
56
|
+
|
|
57
|
+
## MM — same metric catalog
|
|
58
|
+
|
|
59
|
+
`discovery_metrics` is the same source — no separate MM-specific
|
|
60
|
+
discovery tool today.
|
|
61
|
+
|
|
62
|
+
## Corpus — multi-section reference content
|
|
63
|
+
|
|
64
|
+
Separate from live discovery, the corpus has known-good worked
|
|
65
|
+
examples and reference docs. The corpus is multi-section (queries,
|
|
66
|
+
cookbooks today; entities/metrics/lexicon planned) and exposed through
|
|
67
|
+
three generic tools:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
corpus_sections → enumerate sections + per-section filter shapes
|
|
71
|
+
corpus_list(section, filter?) → list entries in a section
|
|
72
|
+
corpus_get(section, id) → fetch a single entry (full payload + metadata)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
For worked-example queries:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
corpus_list("queries") → list all worked-example queries (filter by type or tags)
|
|
79
|
+
corpus_get("queries", "01-discover-vertices") → full canonical query + descriptions + tmd + md
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
For reference cookbooks (this is one of them):
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
corpus_list("cookbooks") → list all cookbooks (filter by applies_to or tags)
|
|
86
|
+
corpus_get("cookbooks", "tas-quickstart") → full markdown body
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Use the corpus to pattern-match against queries known to work on a
|
|
90
|
+
similar tenant, and to look up universal DXO2 behaviors before going to
|
|
91
|
+
the tenant.
|
|
92
|
+
|
|
93
|
+
## Working set vs corpus
|
|
94
|
+
|
|
95
|
+
| Tool | Set | Mutable? |
|
|
96
|
+
|---|---|---|
|
|
97
|
+
| `list_queries` / `get_query` | User's queries under `~/.dxdo/queries/<alias>/` | Yes |
|
|
98
|
+
| `corpus_list("queries")` / `corpus_get("queries", id)` | Universal worked examples shipped via `@dx-do/corpus` | No |
|
|
99
|
+
|
|
100
|
+
Don't mix them up. The user's queries are scratch / in-progress. The
|
|
101
|
+
corpus is reference / known-good.
|
|
102
|
+
|
|
103
|
+
## Putting it together
|
|
104
|
+
|
|
105
|
+
Typical agent flow for a new query:
|
|
106
|
+
|
|
107
|
+
1. `corpus_sections` → see what corpus sections exist
|
|
108
|
+
2. `corpus_list("cookbooks", {applies_to: "<type>"})` → find relevant reference docs
|
|
109
|
+
3. `corpus_get("cookbooks", "<type>-quickstart")` → load the quickstart
|
|
110
|
+
4. `discovery_layers` / `discovery_attributes` / `discovery_metrics` → know what's queryable
|
|
111
|
+
5. `corpus_list("queries", {type: "<type>"})` → see known-good examples
|
|
112
|
+
6. `corpus_get("queries", <id>)` → study a relevant example
|
|
113
|
+
7. Draft the query
|
|
114
|
+
8. `create_query(...)` → save to user's working set
|
|
115
|
+
9. `run_query(...)` → execute, see results
|
|
116
|
+
10. If wrong: `update_query(...)` to refine, `run_partial_query(...)` to debug a sub-tree
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: dxi_service
|
|
3
|
+
title: DXI_SERVICE — APM-internal service abstraction (NOT the same as `service`)
|
|
4
|
+
layer: APM_INFRASTRUCTURE
|
|
5
|
+
synonyms: [APM service, monitored service, application service]
|
|
6
|
+
related_entities: [service, agent, agent_connection]
|
|
7
|
+
related_cookbooks: [universes-and-scopes, investigator-flow]
|
|
8
|
+
tags: [apm, telemetry]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# DXI_SERVICE
|
|
12
|
+
|
|
13
|
+
## What it is
|
|
14
|
+
|
|
15
|
+
A `DXI_SERVICE` is a special entity that represents a portion of API surface for the current DXO2 tenant, at this time, it really only exposes the performance the "NASS Reactive Client", which is an important but small facet of the DXO2 tenant surface. It's NOT the same as the topology-level `service` (`saService`) used to organize and scope tenant data; the names collide in user vocabulary but the concepts are different. There is usually one per tenant.
|
|
16
|
+
|
|
17
|
+
## Where it lives
|
|
18
|
+
|
|
19
|
+
`type=DXI_SERVICE` vertices live in the **APM_INFRASTRUCTURE** layer (alongside `AGENT`, `AGENT_CONNECTION`, `APM_SAAS`, etc.).
|
|
20
|
+
|
|
21
|
+
This is the same layer where APM telemetry collectors live — DXI_SERVICE is the *monitored target* abstraction, AGENT is the *collector* abstraction.
|
|
22
|
+
|
|
23
|
+
## DXI_SERVICE vs `service` — the load-bearing distinction
|
|
24
|
+
|
|
25
|
+
When a user says "service" in a DXO2 question, they almost never mean DXI_SERVICE. They usually mean one of:
|
|
26
|
+
|
|
27
|
+
| User says | Probably means | Lives in | Vertex type |
|
|
28
|
+
|-----------------------------|-------------------------------------------------------------------|---|---|
|
|
29
|
+
| "the Mobile Service" | A grouping / business service | (organizational axis) | `saService` (topology) |
|
|
30
|
+
| "the service that's failing" | Same — `saService` | (organizational axis) | `saService` |
|
|
31
|
+
| "the NASS service" | part of DXO2, usually a deep meta question about slowness in DXO2 | APM_INFRASTRUCTURE layer | `DXI_SERVICE` |
|
|
32
|
+
|
|
33
|
+
In an investigative conversation: if the user names a service, default to `saService` (the organizational axis). Only consider DXI_SERVICE when the user is specifically discussing APM-monitored applications, or when the context is "what is this agent watching."
|
|
34
|
+
|
|
35
|
+
## Common uses
|
|
36
|
+
|
|
37
|
+
- there are no common uses for DXI_service!
|
|
38
|
+
|
|
39
|
+
## Useful attributes
|
|
40
|
+
|
|
41
|
+
DXI_SERVICE attributes overlap with other APM_INFRASTRUCTURE entities (it shares the layer's general attributes — `agent`, `SystemFQHostName`, `category`, `SourceProduct`, etc.). Beyond those:
|
|
42
|
+
|
|
43
|
+
- `name` — SuperDomain|Custom Metric Host (Virtual)|Custom Metric Process (Virtual)|Custom Metric Agent (Virtual)
|
|
44
|
+
|
|
45
|
+
## Common synonyms / mistakes
|
|
46
|
+
|
|
47
|
+
- **Confusing with `saService`** — happens often. The fix is to ask which kind of service the user means; if the answer is "I just want the things my Mobile Service includes," that's `saService` (use the SERVICE filter in TAS).
|
|
48
|
+
- **Treating DXI_SERVICE as the unit of grouping** — it's not; it's a special entity that represents a platform feature. Grouping happens through `saService` and through universes.
|
|
49
|
+
|
|
50
|
+
## Related entities
|
|
51
|
+
|
|
52
|
+
- **`service`** (topology, `saService`) — the organizational service axis. Almost always what the user means when they say "service".
|
|
53
|
+
- **`agent_connection`** (APM_INFRASTRUCTURE) — the connection lifecycle abstraction.
|
|
54
|
+
|
|
55
|
+
## See also
|
|
56
|
+
|
|
57
|
+
- `entities/service` — the more common "service" the user means.
|
|
58
|
+
- `entities/agent` — the collector counterpart.
|
|
59
|
+
- `cookbooks/universes-and-scopes` — universe-aware querying that may interact with both DXI_SERVICE and `saService`.
|