Apache

Supported OS Linux Windows Mac OS

Integration version4.5.1

Apache Dashboard

Overview

The Apache check tracks requests per second, bytes served, number of worker threads, service uptime, and more.

Setup

Installation

The Apache check is packaged with the Datadog Agent. To start gathering your Apache metrics and logs, you need to:

  1. Install the Agent on your Apache servers.

  2. Install mod_status on your Apache servers and enable ExtendedStatus.

Configuration

Host

To configure this check for an Agent running on a host:

Metric collection
  1. Edit the apache.d/conf.yaml file in the conf.d/ folder at the root of your Agent’s configuration directory to start collecting your Apache metrics. See the sample apache.d/conf.yaml for all available configuration options.

    init_config:
    
    instances:
      ## @param apache_status_url - string - required
      ## Status url of your Apache server.
      #
      - apache_status_url: http://localhost/server-status?auto
    
  2. Restart the Agent.

Log collection

Available for Agent versions >6.0

  1. Collecting logs is disabled by default in the Datadog Agent. Enable it in datadog.yaml:

    logs_enabled: true
    
  2. Add this configuration block to your apache.d/conf.yaml file to start collecting your Apache logs, adjusting the path and service values to configure them for your environment:

    logs:
      - type: file
        path: /path/to/your/apache/access.log
        source: apache
        service: apache
        sourcecategory: http_web_access
    
      - type: file
        path: /path/to/your/apache/error.log
        source: apache
        service: apache
        sourcecategory: http_web_error
    

    See the sample apache.d/conf.yaml for all available configuration options.

  3. Restart the Agent.

Docker

To configure this check for an Agent running on a container:

Metric collection

Set Autodiscovery Integrations Templates as Docker labels on your application container:

LABEL "com.datadoghq.ad.check_names"='["apache"]'
LABEL "com.datadoghq.ad.init_configs"='[{}]'
LABEL "com.datadoghq.ad.instances"='[{"apache_status_url": "http://%%host%%/server-status?auto"}]'
Log collection

Collecting logs is disabled by default in the Datadog Agent. To enable it, see Docker Log Collection.

Then, set Log Integrations as Docker labels:

LABEL "com.datadoghq.ad.logs"='[{"source": "apache", "service": "<SERVICE_NAME>"}]'

Kubernetes

To configure this check for an Agent running on Kubernetes:

Metric collection

Set Autodiscovery Integrations Templates as pod annotations on your application container. Aside from this, templates can also be configured with a file, a configmap, or a key-value store.

Annotations v1 (for Datadog Agent < v7.36)

apiVersion: v1
kind: Pod
metadata:
  name: apache
  annotations:
    ad.datadoghq.com/apache.check_names: '["apache"]'
    ad.datadoghq.com/apache.init_configs: '[{}]'
    ad.datadoghq.com/apache.instances: |
      [
        {
          "apache_status_url": "http://%%host%%/server-status?auto"
        }
      ]      
spec:
  containers:
    - name: apache

Annotations v2 (for Datadog Agent v7.36+)

apiVersion: v1
kind: Pod
metadata:
  name: apache
  annotations:
    ad.datadoghq.com/apache.checks: |
      {
        "apache": {
          "init_config": {},
          "instances": [
            {
              "apache_status_url": "http://%%host%%/server-status?auto"
            }
          ]
        }
      }      
spec:
  containers:
    - name: apache
Log collection

Collecting logs is disabled by default in the Datadog Agent. To enable it, see Kubernetes Log Collection.

Then, set Log Integrations as pod annotations. This can also be configured with a file, a configmap, or a key-value store.

Annotations v1/v2

apiVersion: v1
kind: Pod
metadata:
  name: apache
  annotations:
    ad.datadoghq.com/apache.logs: '[{"source":"apache","service":"<SERVICE_NAME>"}]'
spec:
  containers:
    - name: apache

ECS

To configure this check for an Agent running on ECS:

Metric collection

Set Autodiscovery Integrations Templates as Docker labels on your application container:

{
  "containerDefinitions": [{
    "name": "apache",
    "image": "apache:latest",
    "dockerLabels": {
      "com.datadoghq.ad.check_names": "[\"apache\"]",
      "com.datadoghq.ad.init_configs": "[{}]",
      "com.datadoghq.ad.instances": "[{\"apache_status_url\": \"http://%%host%%/server-status?auto\"}]"
    }
  }]
}
Log collection

Collecting logs is disabled by default in the Datadog Agent. To enable it, see ECS Log Collection.

Then, set Log Integrations as Docker labels:

{
  "containerDefinitions": [{
    "name": "apache",
    "image": "apache:latest",
    "dockerLabels": {
      "com.datadoghq.ad.logs": "[{\"source\":\"apache\",\"service\":\"<YOUR_APP_NAME>\"}]"
    }
  }]
}

Validation

Run the Agent’s status subcommand and look for apache under the Checks section.

Data Collected

Metrics

apache.conns_async_closing
(gauge)
The number of asynchronous closing connections.
Shown as connection
apache.conns_async_keep_alive
(gauge)
The number of asynchronous keep alive connections.
Shown as connection
apache.conns_async_writing
(gauge)
The number of asynchronous writes connections.
Shown as connection
apache.conns_total
(gauge)
The total number of connections performed.
Shown as connection
apache.net.bytes
(gauge)
The total number of bytes served.
Shown as byte
apache.net.bytes_per_s
(gauge)
The number of bytes served per second.
Shown as byte
apache.net.hits
(gauge)
The total number of requests performed.
Shown as request
apache.net.request_per_s
(gauge)
The number of requests performed per second.
Shown as request
apache.performance.busy_workers
(gauge)
The number of workers serving requests.
Shown as thread
apache.performance.cpu_load
(gauge)
The percent of CPU used.
Shown as percent
apache.performance.idle_workers
(gauge)
The number of idle workers.
Shown as thread
apache.performance.max_workers
(gauge)
The maximum number of workers apache can start.
Shown as thread
apache.performance.uptime
(gauge)
The amount of time the server has been running.
Shown as second
apache.scoreboard.closing_connection
(gauge)
The amount of workers that are currently closing a connection.
Shown as thread
apache.scoreboard.disabled
(gauge)
These slots will never be able to handle any requests, indicates a misconfiguration.
Shown as thread
apache.scoreboard.dns_lookup
(gauge)
The workers waiting on a DNS lookup.
Shown as thread
apache.scoreboard.gracefully_finishing
(gauge)
The number of workers finishing their request.
Shown as thread
apache.scoreboard.idle_cleanup
(gauge)
These workers were idle and their process is being stopped.
Shown as thread
apache.scoreboard.keepalive
(gauge)
The workers intended for a new request from the same client, because it asked to keep the connection alive.
Shown as thread
apache.scoreboard.logging
(gauge)
The workers writing something to the Apache logs.
Shown as thread
apache.scoreboard.open_slot
(gauge)
The amount of workers that Apache can still start before hitting the maximum number of workers.
Shown as thread
apache.scoreboard.reading_request
(gauge)
The workers reading the incoming request.
Shown as thread
apache.scoreboard.sending_reply
(gauge)
The number of workers sending a reply/response or waiting on a script (like PHP) to finish so they can send a reply.
Shown as thread
apache.scoreboard.starting_up
(gauge)
The workers that are still starting up and not yet able to handle a request.
Shown as thread
apache.scoreboard.waiting_for_connection
(gauge)
The number of workers that can immediately process an incoming request.
Shown as thread

Events

The Apache check does not include any events.

Service Checks

apache.can_connect
Returns CRITICAL if the Agent is unable to connect to the monitored Apache instance. Returns OK otherwise.
Statuses: ok, critical

Troubleshooting

Apache status URL

If you are having issues with your Apache integration, it is mostly like due to the Agent not being able to access your Apache status URL. Try running curl for the apache_status_url listed in your apache.d/conf.yaml file (include your login credentials if applicable).

Further Reading

Additional helpful documentation, links, and articles: