Monitor Apache HTTP Server with OpenTelemetry
Osuite monitors the Apache HTTP Server through the OpenTelemetry Collector’s apache receiver, which scrapes the mod_status machine-readable page and exports worker, connection, and request metrics over OTLP. They share resource attributes with your services, so worker saturation lines up with the traffic that caused it.
Prerequisites
Section titled “Prerequisites”- Apache built with
mod_status(included in the standard packages). - The
server-statushandler enabled with the?automachine-readable output.
Enable the module and the status handler in httpd.conf, then restart:
LoadModule status_module modules/mod_status.soExtendedStatus On
<Location "/server-status"> SetHandler server-status Require ip 127.0.0.1</Location>Confirm the endpoint responds with the machine-readable format:
curl "http://localhost/server-status?auto"Configure the Collector
Section titled “Configure the Collector”-
Add the
apachereceiver, theotlp/osuiteexporter, and a metrics pipeline. Theendpointmust keep the?autoquery so Apache returns the machine-readable page. Pick the tab that matches where your Collector runs.receivers:apache:endpoint: "http://localhost:80/server-status?auto"collection_interval: 30sprocessors:batch:resourcedetection:exporters:otlp/osuite:endpoint: ingest.<region>.osuite.io:443headers:x-osuite-ingest-token: <your-ingest-token>service:pipelines:metrics:receivers: [apache]processors: [batch, resourcedetection]exporters: [otlp/osuite]receivers:apache:endpoint: "http://httpd:80/server-status?auto"collection_interval: 30sprocessors:batch:resourcedetection:exporters:otlp/osuite:endpoint: ingest.<region>.osuite.io:443headers:x-osuite-ingest-token: <your-ingest-token>service:pipelines:metrics:receivers: [apache]processors: [batch, resourcedetection]exporters: [otlp/osuite]receivers:apache:endpoint: "http://apache.default.svc.cluster.local:80/server-status?auto"collection_interval: 30sprocessors:batch:resourcedetection:exporters:otlp/osuite:endpoint: ingest.<region>.osuite.io:443headers:x-osuite-ingest-token: <your-ingest-token>service:pipelines:metrics:receivers: [apache]processors: [batch, resourcedetection]exporters: [otlp/osuite] -
Start the Collector. On Docker and Kubernetes, the Collector and Apache must share a network so the
endpointresolves.
Validate
Section titled “Validate”What you should see
Metrics named apache.* appear in Dashboards → Explore metrics within a minute, tagged with the host or pod the Collector runs on.
Data collected
Section titled “Data collected”| Metric | Description | Unit |
|---|---|---|
apache.current_connections | Active connections | {connections} |
apache.requests | Requests serviced | {requests} |
apache.traffic | Total traffic served | By |
apache.scoreboard | Worker count by state | {workers} |
apache.uptime | Server uptime | s |
apache.cpu.load | Current CPU load | % |
apache.cpu.time | Cumulative CPU time by category | {jiff} |
apache.load.1 | One-minute load average | % |
apache.load.5 | Five-minute load average | % |
apache.request.time | Cumulative request-handling time | ms |
ExtendedStatus On is required for the CPU, load, and request-time metrics; without it Apache omits those fields.
Dashboards and alerts
Section titled “Dashboards and alerts”Once metrics arrive, build an Apache dashboard in the dashboard builder from the series above. Alerts in Osuite are PromQL-based — see Alerts. Useful starting conditions: worker exhaustion (busy share of apache.scoreboard), a request-rate drop to zero (apache.requests), and rising apache.request.time.
Troubleshooting
Section titled “Troubleshooting”- 404 on
/server-status— confirmmod_statusis loaded and the<Location>handler is configured. - Missing CPU or load metrics — confirm
ExtendedStatus Onis set and theendpointkeeps the?autoquery string.
No data in Osuite after a few minutes? Work through these checks.
- Endpoint — confirm the exporter targets exactly
ingest.<region>.osuite.io:443for your region, over TLS. - Token — confirm the ingest header carries a valid
<your-ingest-token>and has not been rotated. - Pipeline — confirm the signal you expect (traces, logs, or metrics) is wired into an active pipeline with the
otlp/osuiteexporter attached. - Export errors — check the application or Collector logs for OTLP export failures (auth, DNS, TLS, connection refused).
- Network — confirm the host has outbound access to the ingest endpoint on port
443. - Timing — allow up to a minute for the first data to appear before assuming a failure.
Still stuck? Ask the Investigation Agent or contact support.