Skip to content

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.

  • Apache built with mod_status (included in the standard packages).
  • The server-status handler enabled with the ?auto machine-readable output.

Enable the module and the status handler in httpd.conf, then restart:

LoadModule status_module modules/mod_status.so
ExtendedStatus On
<Location "/server-status">
SetHandler server-status
Require ip 127.0.0.1
</Location>

Confirm the endpoint responds with the machine-readable format:

Terminal window
curl "http://localhost/server-status?auto"
  1. Add the apache receiver, the otlp/osuite exporter, and a metrics pipeline. The endpoint must keep the ?auto query 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: 30s
    processors:
    batch:
    resourcedetection:
    exporters:
    otlp/osuite:
    endpoint: ingest.<region>.osuite.io:443
    headers:
    x-osuite-ingest-token: <your-ingest-token>
    service:
    pipelines:
    metrics:
    receivers: [apache]
    processors: [batch, resourcedetection]
    exporters: [otlp/osuite]
  2. Start the Collector. On Docker and Kubernetes, the Collector and Apache must share a network so the endpoint resolves.

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.

MetricDescriptionUnit
apache.current_connectionsActive connections{connections}
apache.requestsRequests serviced{requests}
apache.trafficTotal traffic servedBy
apache.scoreboardWorker count by state{workers}
apache.uptimeServer uptimes
apache.cpu.loadCurrent CPU load%
apache.cpu.timeCumulative CPU time by category{jiff}
apache.load.1One-minute load average%
apache.load.5Five-minute load average%
apache.request.timeCumulative request-handling timems

ExtendedStatus On is required for the CPU, load, and request-time metrics; without it Apache omits those fields.

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.

  • 404 on /server-status — confirm mod_status is loaded and the <Location> handler is configured.
  • Missing CPU or load metrics — confirm ExtendedStatus On is set and the endpoint keeps the ?auto query string.

No data in Osuite after a few minutes? Work through these checks.

  • Endpoint — confirm the exporter targets exactly ingest.<region>.osuite.io:443 for 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/osuite exporter 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.