LMC Exporter

Configure Exporter Targets

Overview

lmc_exporter exposes LMC shared-memory managed object data as Prometheus-compatible metrics. Target configuration controls which LMC root the exporter discovers, subscribes to, and renders during a scrape.

This article explains how to configure:

  • single-target scraping
  • preloaded multi-target scraping
  • HTTP query routing with server_key, app, and instance

Use TOML configuration with --config for most deployments. A legacy flat target file is also supported for minimal multi-target setups.

NoteRecommended configuration format

Use TOML unless you specifically need the legacy --targets-config format. TOML can define runtime defaults, HTTP settings, metric scopes, and preloaded scrape targets in one file.

Prerequisites

Before configuring targets, ensure that:

  • lmc_exporter has been built successfully.
  • The target LMC shared-memory roots are visible from the host running the exporter.
  • You know the shared-memory server_key values for the targets you want to scrape.
  • You know the application metric mapping to use, such as ads, adh, or ats.
  • A valid license_file is configured for normal startup.
  • HTTP scraping is enabled if Prometheus or curl will scrape the exporter.

A minimal HTTP-enabled configuration requires:

metrics_http_enabled = true
metrics_bind_address = "0.0.0.0"
metrics_port = 9464
metrics_path = "/metrics"

How It Works

At startup, lmc_exporter creates a shared-memory server pool, discovers visible root handles, selects a matching root, subscribes to the target subtree, and renders metrics after the tracked objects and variables are ready.

The selected target is determined from:

How It Works
Configuration valuePurpose
server_key or server_keysIdentifies the shared-memory server key used to discover a target root.
appSelects the application-specific metric mapping set, such as ads, adh, or ats.
instanceOptional root-selection hint. It can be a full resolved root id or the instance_no segment when roots follow hostname.instance_no.application naming.
variableOptional descendant variable path to highlight.
classesOptional app-specific class aliases that limit subscribed and rendered metrics.
seed_path_groupsOptional named app-specific filter groups that limit subscription and rendered metrics.
seed_pathsOptional raw seed-path prefixes that limit subscription and rendered metrics.

When instance is omitted, the exporter resolves the selected root instance from the configured server_key at runtime.

NoteTarget readiness

The HTTP endpoint returns 503 until the requested target subtree has completed its initial sync. After a target is ready, the exporter serves the rendered snapshot for that target.

Configuration Modes

Use single-target mode when one exporter process should scrape one logical target selection from the top-level TOML values.

Single-target mode is active when the TOML file has no [[targets]] entries.

context_id = "shmApp"
pool_name = "pool"

app = "ads"
server_keys = ["82"]

metrics_http_enabled = true
metrics_bind_address = "0.0.0.0"
metrics_port = 9464
metrics_path = "/metrics"

license_file = "./scratch/example.lic"

Run the exporter:

lmc_exporter --config ./lmcExporterConfig.toml

Scrape the target:

curl "http://127.0.0.1:9464/metrics?server_key=82"

Use preloaded multi-target mode when one exporter process should serve multiple scrape targets.

Multi-target mode is active when the TOML file contains one or more [[targets]] tables.

context_id = "shmApp"
pool_name = "pool"

metrics_http_enabled = true
metrics_bind_address = "0.0.0.0"
metrics_port = 9464
metrics_path = "/metrics"

license_file = "./scratch/example.lic"

[[targets]]
app = "ads"
server_key = "82"

[[targets]]
app = "ads"
server_key = "456"

[[targets]]
app = "adh"
server_key = "999"

Run the exporter:

lmc_exporter --config ./lmcExporterConfig.toml

Scrape a specific target by server_key:

curl "http://127.0.0.1:9464/metrics?server_key=82"

Use the legacy flat target format only when you need a minimal target-only registry.

Create targets.conf:

target app=ads server_key=82
target app=ads server_key=456

Run the exporter with HTTP scraping enabled:

lmc_exporter --targets-config ./targets.conf --enable-metrics-http --metrics-port 9464

Scrape a target:

curl "http://127.0.0.1:9464/metrics?server_key=82"

Single-Target Scraping

Single-target mode uses the top-level target values in the TOML file.

Use this mode when:

  • one exporter process maps to one primary application target
  • the target can be selected from server_keys
  • you do not need preloaded [[targets]] entries

Minimal Single-Target Configuration

context_id = "shmApp"
pool_name = "pool"

app = "ads"
server_keys = ["82"]

metrics_interval_seconds = 10
metrics_http_enabled = true
metrics_bind_address = "0.0.0.0"
metrics_port = 9464
metrics_path = "/metrics"

license_file = "./scratch/example.lic"

Add an Instance Hint

Use instance when multiple roots may be visible and you want to guide root selection.

app = "ads"
instance = "1"
server_keys = ["82"]

You can also use the full resolved root id:

app = "ads"
instance = "phoads01.1.ads"
server_keys = ["82"]

Limit the Target Scope

Use classes, seed_path_groups, or seed_paths to reduce the subscribed subtree and rendered metrics.

app = "ads"
server_keys = ["82"]

classes = ["ManagedProcess.SinkDist", "WSOCKServer"]
seed_path_groups = ["core", "sink_ripc"]
seed_paths = ["serviceGenerator.srcPrdServicePool"]

For ADS, the core group includes root-scoped variables.

Run Single-Target Mode from CLI

You can also configure a single target with CLI flags:

lmc_exporter --app ads --server-key 82 --enable-metrics-http --metrics-port 9464

With an instance hint:

lmc_exporter --app ads --instance phoads01.1.ads --server-key 82 --enable-metrics-http --metrics-port 9464

Multi-Target Scraping

Preloaded multi-target mode uses repeated [[targets]] tables. Each table defines one scrape target.

Each [[targets]] table supports:

Multi-Target Scraping
KeyRequiredDescription
appYesApplication metric mapping set for the target.
server_keyYesShared-memory server key for the target.
instanceNoOptional root-selection hint.
variableNoOptional descendant variable path to highlight.
classesNoOptional app-specific class aliases.
seed_path_groupsNoOptional app-specific filter groups.
seed_pathsNoOptional raw seed-path prefixes.

Multi-Target TOML Example

context_id = "shmApp"
pool_name = "pool"

metrics_http_enabled = true
metrics_bind_address = "0.0.0.0"
metrics_port = 9464
metrics_path = "/metrics"

license_file = "./scratch/example.lic"

[[targets]]
app = "ads"
instance = "1"
server_key = "82"
classes = ["ManagedProcess.SinkDist", "ConsumerDataStream"]
seed_path_groups = ["core", "users"]

[[targets]]
app = "ads"
instance = "1"
server_key = "456"
classes = ["SSLDispatcher", "ManagedSSLChannel"]
seed_paths = ["sourceApplicationPool"]

[[targets]]
app = "adh"
server_key = "999"
seed_path_groups = [
  "consumer_mqos_service_service",
  "mqos_service_attributes",
  "mqos_service_datastreams"
]
NoteDuplicate app and instance values

Duplicate app + instance targets are allowed when the server_key differs. In that case, include server_key in scrape queries to disambiguate the target.

Query Routing

When multiple targets are configured, the HTTP endpoint uses query parameters to select which target to render.

The default metrics path is /metrics.

Route by server_key

Use server_key when you know the shared-memory server key for the target.

/metrics?server_key=82

Example:

curl "http://127.0.0.1:9464/metrics?server_key=82"

This is the clearest routing method for multi-target deployments.

Route by app and instance

Use app and instance when you want to route by the resolved root identity after discovery.

/metrics?app=ads&instance=phoads01.1.ads

Example:

curl "http://127.0.0.1:9464/metrics?app=ads&instance=phoads01.1.ads"

Disambiguate duplicate app and instance targets

If more than one target shares the same app and instance, add server_key.

/metrics?app=ads&instance=phoads01.1.ads&server_key=82

Example:

curl "http://127.0.0.1:9464/metrics?app=ads&instance=phoads01.1.ads&server_key=82"

Metric Scopes with Target Routing

Metric scopes expose named subsets of the rendered Prometheus output. They are configured with repeated [[metric_scopes]] tables.

[[metric_scopes]]
name = "client_threads"
metrics = [
  "ads_client_session_thread_*"
]

[[metric_scopes]]
name = "process_health"
metrics = [
  "ads_managed_process_sink_dist_state",
  "ads_managed_process_sink_dist_process_id",
  "ads_shmem_mo_server_stats_num_clients"
]

A scope can be selected as a path segment:

/metrics/client_threads?server_key=82

Or as a query parameter:

/metrics?scope=client_threads&server_key=82

When multiple targets are configured, target routing is still required with scoped endpoints.

curl "http://127.0.0.1:9464/metrics/process_health?server_key=82"

If a scoped endpoint is requested without enough target routing information in multi-target mode, the request fails with:

scope selected, but target routing still required when multiple targets are configured.

CLI Override Behavior

TOML values are loaded first. CLI flags override TOML values afterwards.

Common overrides include:

CLI Override Behavior
CLI flagEffect
--metrics-port 9564Overrides metrics_port.
--debugEnables debug logging even if debug = false in TOML.
--instance ...Switches to single-target mode and clears TOML [[targets]].
--server-key ...Switches to single-target mode and clears TOML [[targets]].
--targets-config ...Uses the legacy flat target file instead of TOML targets.
NoteAvoid accidental mode changes

Passing --instance or --server-key on the command line overrides TOML target configuration and switches the exporter to single-target mode.

Examples

Single ADS Target

context_id = "shmApp"
pool_name = "pool"

app = "ads"
server_keys = ["82"]

metrics_http_enabled = true
metrics_port = 9464
metrics_path = "/metrics"

license_file = "./scratch/example.lic"

Run:

lmc_exporter --config ./lmcExporterConfig.toml

Scrape:

curl "http://127.0.0.1:9464/metrics?server_key=82"

Multiple ADS Targets

metrics_http_enabled = true
metrics_port = 9464
metrics_path = "/metrics"

license_file = "./scratch/example.lic"

[[targets]]
app = "ads"
server_key = "82"

[[targets]]
app = "ads"
server_key = "456"

Scrape each target separately:

curl "http://127.0.0.1:9464/metrics?server_key=82"
curl "http://127.0.0.1:9464/metrics?server_key=456"

Multiple Applications

metrics_http_enabled = true
metrics_port = 9464
metrics_path = "/metrics"

license_file = "./scratch/example.lic"

[[targets]]
app = "ads"
server_key = "82"

[[targets]]
app = "adh"
server_key = "999"

Scrape by server_key:

curl "http://127.0.0.1:9464/metrics?server_key=82"
curl "http://127.0.0.1:9464/metrics?server_key=999"

Scoped Multi-Target Scrape

metrics_http_enabled = true
metrics_port = 9464
metrics_path = "/metrics"

license_file = "./scratch/example.lic"

[[metric_scopes]]
name = "process_health"
metrics = [
  "ads_managed_process_sink_dist_state",
  "ads_managed_process_sink_dist_process_id",
  "ads_shmem_mo_server_stats_num_clients"
]

[[targets]]
app = "ads"
server_key = "82"

[[targets]]
app = "ads"
server_key = "456"

Scrape the scoped output for one target:

curl "http://127.0.0.1:9464/metrics/process_health?server_key=82"

Equivalent query-parameter form:

curl "http://127.0.0.1:9464/metrics?scope=process_health&server_key=82"

Confirm