OpenTelemetry Collector deployment, instrumentation (Java/Python/Node.js/.NET/Go), and OTTL pipeline transforms for Coralogix — coralogix exporter config, Helm chart selection, Kubernetes topology, ECS/EKS/GKE deployments, SDK setup, APM transactions, and OTTL cardinality/PII/routing.
98
97%
Does it follow best practices?
Impact
99%
1.13xAverage score across 81 eval scenarios
Advisory
Suggest reviewing before use
A PowerShell one-liner downloads the MSI, registers the OpenTelemetry Collector Windows Service, and wires an optional user-authored config.
coralogix-otel-collector.ps1 ─► Windows Service: OpenTelemetry Collector
Invoke-WebRequest + & installer downloads MSI + registers service
optional: -Config <user-supplied YAML>The PowerShell installer (coralogix-otel-collector.ps1) downloads the otelcol-contrib MSI, registers OpenTelemetry Collector as a Windows Service, and (with -Config) copies the supplied config into place. With -Supervisor, it additionally installs the opampsupervisor MSI and registers a second service that wraps the collector for Fleet Management.
Supported: Windows 10/11, Windows Server 2016+, x64/ARM64. Service name: OpenTelemetry Collector (quote it: Get-Service "OpenTelemetry Collector").
$u = 'https://github.com/coralogix/telemetry-shippers/releases/latest/download/coralogix-otel-collector.ps1'
$f = Join-Path $env:TEMP 'coralogix-otel-collector.ps1'
Invoke-WebRequest -Uri $u -OutFile $f -UseBasicParsing
$env:CORALOGIX_PRIVATE_KEY = '<send-your-data-api-key>'
$env:CORALOGIX_DOMAIN = '<cx-region>.coralogix.com'
& $f -Config 'C:/path/to/config.yaml'The -Config path is a YAML the user has authored or adapted — any valid config with a correctly-configured coralogix exporter block.
Needs CORALOGIX_DOMAIN in addition to the API key. The chart has opentelemetry-agent.presets.fleetManagement.supervisor.enabled: true as the counterpart setting — keep them aligned.
$u = 'https://github.com/coralogix/telemetry-shippers/releases/latest/download/coralogix-otel-collector.ps1'
$f = Join-Path $env:TEMP 'coralogix-otel-collector.ps1'
Invoke-WebRequest -Uri $u -OutFile $f -UseBasicParsing
$env:CORALOGIX_DOMAIN = '<cx-region>.coralogix.com'
$env:CORALOGIX_PRIVATE_KEY = '<send-your-data-api-key>'
& $f -SupervisorIn supervisor mode the installer registers a second Windows Service, opampsupervisor, which manages the collector process out-of-process. The supervisor handles the OpAMP connection to Fleet Manager — the collector's base config (passed via -Config) must not contain an extensions: [opamp] block, because the supervisor is the one running the OpAMP connection. (The in-process opamp extension IS supported on modern Windows collector builds, but you pick one or the other, not both — see the OpAMP-on-Windows section below.)
This mode is the recommended path for running older collector versions (e.g., v0.92.0) that do not support the in-process OpAMP extension.
See preset-fleet-management.md for the full precedence model (values.yaml vs Fleet Manager UI).
| Flag | Purpose | Default |
|---|---|---|
-Config <path> | Path to a config.yaml. In regular mode this is required — without it the service runs a nop config. In supervisor mode it becomes the base config merged with remote config from Fleet Manager (cannot contain opamp extension). | nop |
-Version <X.Y.Z> | Pin the collector MSI version. | latest |
-MemoryLimit <MiB> | Sets OTEL_MEMORY_LIMIT_MIB env var (reference as ${env:OTEL_MEMORY_LIMIT_MIB} in config). | 512 |
-ListenInterface <IP> | Sets OTEL_LISTEN_INTERFACE — use 0.0.0.0 for gateway mode. | 127.0.0.1 |
-Supervisor | Switches to supervisor mode. Registers the opampsupervisor wrapper service. | off |
-SupervisorVersion <X.Y.Z> | Pin the supervisor binary version independently of the collector. | latest |
-CollectorVersion <X.Y.Z> | Pin the collector version under the supervisor. | same as -Version |
-SupervisorMsi <path> | Use a locally-downloaded supervisor MSI instead of fetching from GitHub. Useful for air-gapped hosts. | off |
-SupervisorConfig <path> | Override the auto-generated supervisor config entirely. Advanced. | auto |
-EnableDynamicIISParsing | Creates C:/ProgramData/OpenTelemetry/Collector/storage and passes --feature-gates=filelog.allowHeaderMetadataParsing so IIS log parsers read the #Fields: header dynamically. Regular mode only — cannot combine with -Supervisor. Also required when the config uses the file_storage extension (e.g. checkpointing). | off |
-Uninstall | Remove the service + binaries. | — |
C:/Program Files/OpenTelemetry Collector/
otelcol-contrib.exe # binary
config.yaml # copied from -Config
C:/ProgramData/OpenTelemetry/Collector/
logs/
otelcol.log # collector logs (when configured)
cache/ # filestorage extension target, if enabledService management:
Get-Service "OpenTelemetry Collector"
Stop-Service "OpenTelemetry Collector"
Start-Service "OpenTelemetry Collector"receivers:
otlp:
protocols:
grpc:
endpoint: "127.0.0.1:4317"
http:
endpoint: "127.0.0.1:4318"
hostmetrics:
collection_interval: 60s
scrapers: { cpu: {}, memory: {}, filesystem: {}, network: {}, processes: {} }
# Default chart enables all three: System, Application, Security
windowseventlog/system:
channel: System
windowseventlog/application:
channel: Application
windowseventlog/security:
channel: Security
iis: # enable only if IIS is present
collection_interval: 60s
filelog/iis:
include: ['C:/inetpub/logs/LogFiles/*/*.log']
start_at: end
operators:
- type: regex_parser
regex: '^#' # (headers — filtered; simplified)
processors:
memory_limiter:
check_interval: 2s
limit_mib: 512
resourcedetection:
detectors: [env, system] # `gcp`/`azure` if running there
timeout: 2s
override: false
batch:
exporters:
coralogix:
domain: "${env:CORALOGIX_DOMAIN}"
private_key: "${env:CORALOGIX_PRIVATE_KEY}"
application_name: "windows-host"
subsystem_name_attributes: ["host.name"]
service:
pipelines:
logs:
receivers: [windowseventlog/system, windowseventlog/application, windowseventlog/security, filelog/iis, otlp]
processors: [memory_limiter, resourcedetection, batch]
exporters: [coralogix]
metrics:
receivers: [hostmetrics, iis, otlp]
processors: [memory_limiter, resourcedetection, batch]
exporters: [coralogix]
traces:
receivers: [otlp]
processors: [memory_limiter, resourcedetection, batch]
exporters: [coralogix]
telemetry:
logs:
level: info # NOT "detailed" in prod (see perf gotcha below)A frequent user symptom — "the OTel collector is at 90% CPU when IIS is under load."
Usually the collector isn't the culprit. Windows Defender (msmpeng.exe) scanning new IIS log files as they rotate can saturate disk I/O on the log path, which causes the collector and everything else that touches those files to look CPU-bound in the resource monitor.
Diagnostic order:
C:/inetpub/logs/LogFiles/* path. If Defender is the top disk consumer, the collector is a victim, not the cause.service.telemetry.logs.level: debug or a debug exporter with verbosity: detailed dumps every signal to stdout/file — expensive on Windows. Drop to info / basic in prod.memory_limiter, receiver intervals.Fix for Defender: exclude the IIS log directory from real-time scanning, or (better) route the collector to read from log channels via windowseventlog instead of the file path.
Fleet Management on Windows can use either the in-process opamp extension or the out-of-process opampsupervisor wrapper. Both ship with the modern Windows MSI (verified on collector v0.130.7 as rendered by the otel-windows-standalone chart).
extensions: [opamp]) — the collector itself maintains the OpAMP connection to Fleet Manager. The otel-windows-standalone chart renders this by default when fleetManagement.enabled: true is set. Config embeds the opamp extension pointing at https://ingress.<domain>/opamp/v1.-Supervisor on the installer) — installs a separate opampsupervisor Windows Service that runs the collector as a child process. The supervisor owns the OpAMP connection and writes runtime configs to disk that the collector reloads. Required flags: CORALOGIX_DOMAIN env in addition to CORALOGIX_PRIVATE_KEY. See preset-fleet-management.md for the precedence model.Known caveat — older image pins. The otel-integration Helm chart's opentelemetry-agent-windows sub-preset has historically defaulted to coralogixrepo/opentelemetry-collector-contrib-windows:0.92.0, which pre-dates OpAMP support on Windows. If a user on the K8s-on-Windows path (not the standalone MSI) enables extensions: [opamp] and sees the collector refuse to start, check the image tag. The fix is to bump to a collector image ≥ 0.130, or switch to the supervisor wrapper.
Practical implication for this skill's scope: a Windows collector that won't start with extensions: [opamp] loaded is almost always running an older image (e.g. the otel-integration Windows sub-preset pinned to contrib-windows:0.92.0). Bump the image to ≥ v0.130, or switch to the supervisor wrapper. The otel-windows-standalone chart has opamp on by default on current builds.
IIS log fields are configurable per-site — you can add custom fields in IIS Manager, and the header comment at the top of each log file declares which columns are present. Static parsers break when a user changes their IIS config.
-EnableDynamicIISParsing swaps the baked filelog operators for a parser that reads the #Fields: header at the start of each file and maps columns dynamically. Turn it on for any user running IIS — off by default for compatibility, but the dynamic parser is what you actually want.
-Config, the service runs but routes nothing. Every real deployment passes -Config.CORALOGIX_PRIVATE_KEY env at install time is written into the service environment, not the config file. Re-running the installer with a new key overwrites it; hand-edits to the service env via sc.exe config get reset on upgrade.windowseventlog receiver channels are case-sensitive. Application, System, Security. Typos result in silently empty logs.C:/Program Files/...). They work everywhere the collector library accepts paths.filelog. The iis receiver scrapes perf counters (metrics); filelog reads IIS access logs (logs). They're complementary, not alternatives. Users asking for "IIS integration" usually want both.coralogix-otel-collector.ps1, not from source. For a custom config, pass -Config <path> with a YAML that has a correctly-configured coralogix exporter block.-Config — never skip that flag for real deployments."OpenTelemetry Collector". Config lives at C:/Program Files/OpenTelemetry Collector/config.yaml.extensions: [opamp] (rendered by default in the modern standalone chart) or the opampsupervisor wrapper service (-Supervisor). Older Windows images (e.g. the contrib-windows:0.92.0 pinned in the K8s opentelemetry-agent-windows sub-preset) predate OpAMP and need the wrapper path or an image bump.CORALOGIX_PRIVATE_KEY and CORALOGIX_DOMAIN unless the config hardcodes exporters.coralogix.domain. Supervisor mode also needs both.info, not debug. debug + verbosity: detailed is a known perf regression on Windows hosts.-EnableDynamicIISParsing is regular-mode only. Can't combine with -Supervisor. Also required whenever the config uses file_storage extension.evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10
scenario-11
scenario-12
scenario-13
scenario-14
scenario-15
scenario-16
scenario-17
scenario-18
scenario-19
scenario-20
scenario-21
scenario-22
scenario-23
scenario-24
scenario-25
scenario-26
scenario-27
scenario-28
scenario-29
scenario-30
scenario-31
scenario-32
scenario-33
scenario-34
scenario-35
scenario-36
scenario-37
scenario-38
scenario-39
scenario-40
scenario-41
scenario-42
scenario-43
scenario-44
scenario-45
scenario-46
scenario-47
scenario-48
scenario-49
scenario-50
scenario-51
scenario-52
scenario-53
scenario-54
scenario-55
scenario-56
scenario-57
scenario-58
scenario-59
scenario-60
scenario-61
scenario-62
scenario-63
scenario-64
scenario-65
scenario-66
scenario-67
scenario-68
scenario-69
scenario-70
scenario-71
scenario-72
scenario-73
scenario-74
scenario-75
scenario-76
scenario-77
scenario-78
scenario-79
scenario-80
scenario-81
skills
opentelemetry
opentelemetry-collector
references
opentelemetry-instrumentation
opentelemetry-ottl