# Apache by HTTP ## Overview This template is designed for the effortless deployment of Apache monitoring by Zabbix via HTTP and doesn't require any external scripts. The template `Apache by HTTP` - collects metrics by polling [mod_status](https://httpd.apache.org/docs/current/mod/mod_status.html) with HTTP agent remotely: ```text 127.0.0.1 ServerVersion: Apache/2.4.41 (Unix) ServerMPM: event Server Built: Aug 14 2019 00:35:10 CurrentTime: Friday, 16-Aug-2019 12:38:40 UTC RestartTime: Wednesday, 14-Aug-2019 07:58:26 UTC ParentServerConfigGeneration: 1 ParentServerMPMGeneration: 0 ServerUptimeSeconds: 189613 ServerUptime: 2 days 4 hours 40 minutes 13 seconds Load1: 4.60 Load5: 1.20 Load15: 0.47 Total Accesses: 27860 Total kBytes: 33011 Total Duration: 54118 CPUUser: 18.02 CPUSystem: 31.76 CPUChildrenUser: 0 CPUChildrenSystem: 0 CPULoad: .0262535 Uptime: 189613 ReqPerSec: .146931 BytesPerSec: 178.275 BytesPerReq: 1213.33 DurationPerReq: 1.9425 BusyWorkers: 7 IdleWorkers: 93 Processes: 4 Stopping: 0 BusyWorkers: 7 IdleWorkers: 93 ConnsTotal: 13 ConnsAsyncWriting: 0 ConnsAsyncKeepAlive: 5 ConnsAsyncClosing: 0 Scoreboard: ... ``` ## Requirements Zabbix version: 7.0 and higher. ## Tested versions This template has been tested on: - Apache 2.4.41 ## Configuration > Zabbix should be configured according to the instructions in the [Templates out of the box](https://www.zabbix.com/documentation/7.0/manual/config/templates_out_of_the_box) section. ## Setup See the setup instructions for [mod_status](https://httpd.apache.org/docs/current/mod/mod_status.html). Check the availability of the module with this command line: `httpd -M 2>/dev/null | grep status_module` This is an example configuration of the Apache web server: ```text SetHandler server-status Require host example.com ``` If you use another path, then do not forget to change the `{$APACHE.STATUS.PATH}` macro. ### Macros used |Name|Description|Default| |----|-----------|-------| |{$APACHE.STATUS.PORT}|

The port of the Apache status page.

|`80`| |{$APACHE.STATUS.PATH}|

The URL path.

|`server-status?auto`| |{$APACHE.STATUS.SCHEME}|

The request scheme, which may be either HTTP or HTTPS.

|`http`| |{$APACHE.RESPONSE_TIME.MAX.WARN}|

The maximum Apache response time expressed in seconds for a trigger expression.

|`10`| ### Items |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Apache: Get status|

Getting data from a machine-readable version of the Apache status page.

For more information see Apache Module [mod_status](https://httpd.apache.org/docs/current/mod/mod_status.html).

|HTTP agent|apache.get_status

**Preprocessing**

| |Apache: Service ping||Simple check|net.tcp.service[http,"{HOST.CONN}","{$APACHE.STATUS.PORT}"]

**Preprocessing**

| |Apache: Service response time||Simple check|net.tcp.service.perf[http,"{HOST.CONN}","{$APACHE.STATUS.PORT}"]| |Apache: Total bytes|

The total bytes served.

|Dependent item|apache.bytes

**Preprocessing**

| |Apache: Bytes per second|

It is calculated as a rate of change for total bytes statistics.

`BytesPerSec` is not used, as it counts the average since the last Apache server start.

|Dependent item|apache.bytes.rate

**Preprocessing**

| |Apache: Requests per second|

It is calculated as a rate of change for the "Total requests" statistics.

`ReqPerSec` is not used, as it counts the average since the last Apache server start.

|Dependent item|apache.requests.rate

**Preprocessing**

| |Apache: Total requests|

The total number of the Apache server accesses.

|Dependent item|apache.requests

**Preprocessing**

| |Apache: Uptime|

The service uptime expressed in seconds.

|Dependent item|apache.uptime

**Preprocessing**

| |Apache: Version|

The Apache service version.

|Dependent item|apache.version

**Preprocessing**

| |Apache: Total workers busy|

The total number of busy worker threads/processes.

|Dependent item|apache.workers_total.busy

**Preprocessing**

| |Apache: Total workers idle|

The total number of idle worker threads/processes.

|Dependent item|apache.workers_total.idle

**Preprocessing**

| |Apache: Workers closing connection|

The number of workers in closing state.

|Dependent item|apache.workers.closing

**Preprocessing**

| |Apache: Workers DNS lookup|

The number of workers in `dnslookup` state.

|Dependent item|apache.workers.dnslookup

**Preprocessing**

| |Apache: Workers finishing|

The number of workers in finishing state.

|Dependent item|apache.workers.finishing

**Preprocessing**

| |Apache: Workers idle cleanup|

The number of workers in cleanup state.

|Dependent item|apache.workers.cleanup

**Preprocessing**

| |Apache: Workers keepalive (read)|

The number of workers in `keepalive` state.

|Dependent item|apache.workers.keepalive

**Preprocessing**

| |Apache: Workers logging|

The number of workers in logging state.

|Dependent item|apache.workers.logging

**Preprocessing**

| |Apache: Workers reading request|

The number of workers in reading state.

|Dependent item|apache.workers.reading

**Preprocessing**

| |Apache: Workers sending reply|

The number of workers in sending state.

|Dependent item|apache.workers.sending

**Preprocessing**

| |Apache: Workers slot with no current process|

The number of slots with no current process.

|Dependent item|apache.workers.slot

**Preprocessing**

| |Apache: Workers starting up|

The number of workers in starting state.

|Dependent item|apache.workers.starting

**Preprocessing**

| |Apache: Workers waiting for connection|

The number of workers in waiting state.

|Dependent item|apache.workers.waiting

**Preprocessing**

| ### Triggers |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----------|--------|--------------------------------| |Apache: Failed to fetch status page|

Zabbix has not received any data for items for the last 30 minutes.

|`nodata(/Apache by HTTP/apache.get_status,30m)=1`|Warning|**Manual close**: Yes
**Depends on**:
| |Apache: Service is down||`last(/Apache by HTTP/net.tcp.service[http,"{HOST.CONN}","{$APACHE.STATUS.PORT}"])=0`|Average|**Manual close**: Yes| |Apache: Service response time is too high||`min(/Apache by HTTP/net.tcp.service.perf[http,"{HOST.CONN}","{$APACHE.STATUS.PORT}"],5m)>{$APACHE.RESPONSE_TIME.MAX.WARN}`|Warning|**Manual close**: Yes
**Depends on**:
| |Apache: Host has been restarted|

Uptime is less than 10 minutes.

|`last(/Apache by HTTP/apache.uptime)<10m`|Info|**Manual close**: Yes| |Apache: Version has changed|

Apache version has changed. Acknowledge to close the problem manually.

|`last(/Apache by HTTP/apache.version,#1)<>last(/Apache by HTTP/apache.version,#2) and length(last(/Apache by HTTP/apache.version))>0`|Info|**Manual close**: Yes| ### LLD rule Event MPM discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Event MPM discovery|

The discovery of additional metrics if the event Multi-Processing Module (MPM) is used.

For more details see [Apache MPM event](https://httpd.apache.org/docs/current/mod/event.html).

|Dependent item|apache.mpm.event.discovery

**Preprocessing**

| ### Item prototypes for Event MPM discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Apache: Connections async closing|

The number of asynchronous connections in closing state (applicable only to the event MPM).

|Dependent item|apache.connections[async_closing{#SINGLETON}]

**Preprocessing**

| |Apache: Connections async keepalive|

The number of asynchronous connections in keepalive state (applicable only to the event MPM).

|Dependent item|apache.connections[async_keep_alive{#SINGLETON}]

**Preprocessing**

| |Apache: Connections async writing|

The number of asynchronous connections in writing state (applicable only to the event MPM).

|Dependent item|apache.connections[async_writing{#SINGLETON}]

**Preprocessing**

| |Apache: Connections total|

The number of total connections.

|Dependent item|apache.connections[total{#SINGLETON}]

**Preprocessing**

| |Apache: Bytes per request|

The average number of client requests per second.

|Dependent item|apache.bytes[per_request{#SINGLETON}]

**Preprocessing**

| |Apache: Number of async processes|

The number of asynchronous processes.

|Dependent item|apache.process[num{#SINGLETON}]

**Preprocessing**

| ## Feedback Please report any issues with the template at [`https://support.zabbix.com`](https://support.zabbix.com) You can also provide feedback, discuss the template, or ask for help at [`ZABBIX forums`](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback)