ZabbixでApacheのTCPコネクション数を監視したい

# はじめに

ZabbixでApacheのTCPコネクション数を確認しようと思ったけど、Google先生にお聞きしてもどうも簡単にできなそうにない雰囲気。
ホントか？！
簡単に実施してやる！

# 環境
CentOS6, CentOS7
Apache 2.4.9
Zabbix 3.4.9   で動作確認しました。

# 前提
elinks パッケージがインストールされていること。

```
（確認）# rpm -qa | grep elinks
（インストール）# yum install elinks

（確認）# httpd -M | grep status
        status_module(shared)    ☆OK
```


# いざ！設定

１．Apache のmod_status モジュールが有効になっているか確認します。
    ※ コメントアウトされてたり、モジュールがインストールされていない場合は、自力で対処してください。

```
grep mod_status /etc/httpd/*/*
/etc/httpd/conf.modules.d/00-base.conf:LoadModule status_module modules/mod_status.so   ☆ あった！コメントアウトされてない！
```

２． server-statusハンドラーの設定をします。httpd.conf に記載してもいいですし、下記のようにファイルを追加してもOKです。ハンドラーなので、server-statusというディレクトリを作成したりする必要もありません。

```
# cd /etc/httpd
# grep server-status */*  ☆ server-status の記述場所を探します。

(ファイルがあった場合）
# vi /etc/httpd/conf/extra/httpd-info.conf    ☆ Apache2.4.9 では、このファイルに記述がありました。

<Location /server-status>
    SetHandler server-status
#   Require host .example.com     ☆ この行をコメントします。
    Require all denied            ☆ コメントアウトした上の行をコピーして変更します。アクセス制御は大事。
#   Require ip 127                ☆ この行をコメントします。
    Require ip 127.0.0.1          ☆ コメントアウトした上の行をコピーして変更します。.0.0.1 を追加
</Location>

(ファイルがなかった場合）
適当にconf ファイルを作って読み込ませます。
# vi /etc/httpd/conf.d/tcp-connection.conf
<Location /server-status>
    SetHandler server-status
    Require all denied
    Require ip 127.0.0.1
</Location>

```

３．Apache再起動

```
<CentOS6> # service httpd restart
<CentOS7> # systemctl restart httpd
```

４．apachectl 
情報の取得が行えるかどうかによって、apachectlの修正が必要となります。
下記コマンドを実行して、情報が取得できるか確認してください。
成功した場合には、本項目は飛ばしてOKです。

```
（成功パターン）
# apachectl status
               Apache Server Status for localhost (via 127.0.0.1)

   Server Version: Apache/2.4.9 (Unix) OpenSSL/1.0.1e-fips

   Server MPM: prefork

   Server Built: Jun 23 2014 08:52:48

   --------------------------------------------------------------------------

   Current Time: Tuesday, 12-Jun-2018 15:00:45 JST

   Restart Time: Tuesday, 12-Jun-2018 13:46:43 JST

   Parent Server Config. Generation: 1

   Parent Server MPM Generation: 0

   Server uptime: 1 hour 14 minutes 2 seconds

   Server load: 0.00 0.00 0.00

   Total accesses: 681 - Total Traffic: 826 kB

   CPU Usage: u1.31 s.16 cu0 cs0 - .0331% CPU load

   .153 requests/sec - 190 B/second - 1242 B/request

   2 requests currently being processed, 5 idle workers

 W_____K.........................................................
 ................................................................
 ................................................................
 ..........................................................

   Scoreboard Key:
   "_" Waiting for Connection, "S" Starting up, "R" Reading Request,
   "W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
   "C" Closing connection, "L" Logging, "G" Gracefully finishing,
   "I" Idle cleanup of worker, "." Open slot with no current process
```

```
(失敗パターン）
(CentOS6)
# apachectl status
Elinks:SSL error

(CentOS7)
# apachectl fullstatus
Elinks:SSL error
```

失敗した場合、自前でapachectlを作成（COPY)して、オプションを変更します。

```
# cp -p /usr/sbin/apachectl /usr/sbin/apachectl-zabbix
# vi /usr/sbin/apachectl-zabbix
（55行目あたり）
LYNX="links -dump"   ☆ コメントアウトを入れます。
LYNX="/usr/bin/links -dump -no-home"     ☆ 新規追加します。

STATUSURL="http://localhost:80/server-status"   ☆ コメントアウトしましょ。
STATUSURL="http://localhost/server-status"      ☆ :80を消します。
```


５．zabbix_agentのユーザパラメータに設定を追加

```
# vi /etc/zabbix/zabbix_agentd.d/userparameter_apache.conf     ☆ ファイルを新規追加（ファイル名は任意です）
（4.でapachectl statusが成功した場合）
UserParameter=apache.con.num,/usr/sbin/apachectl status|grep "requests currently being processed"|awk '{print $1}'

（4.でapachectl statusが失敗した場合）
UserParameter=apache.con.num,/usr/sbin/apachectl-zabbix status|grep "requests currently being processed"|awk '{print $1}'

```

６．Zabbix-agent再起動

```
<CentOS6> # service zabbix-agent restart
<CentOS7> # systemctl restart zabbix-agent
```

７．zabbix-server の管理画面でアイテムの作成
Zabbix管理画面にアクセスして、[設定]-[ホスト]から、対象ホストの[アイテム]をクリックします。
続けて画面右上の[アイテムの作成]を押します。
設定を入れた箇所は、以下の通りです。

```
名前：（任意の名前）    ※ ここでは、「Apacheコネクション」としました。
キー：apache.con.num
アプリケーション：（任意）        ☆ 環境によって、適切なアプリケーションを設定（ここではHTTP service, HTTPS service を選択）

最後に[追加]ボタンを押します。
```

![Apache02.png](https://qiita-image-store.s3.amazonaws.com/0/109620/df05c775-f6c3-2457-64e6-f0e676bc1a8b.png)



これで、値の取得ができるようになります。

# 確認

Zabbix管理画面から[監視データ]-[概要]を選び、追加したアイテム名（ここでは”Apacheコネクション”と記入しました）に値が入ってることを確認してください。

![Apache01.png](https://qiita-image-store.s3.amazonaws.com/0/109620/5736acee-5618-2942-b20a-fde0bc976cd9.png)

# グラフまで作っちゃえ

アイテム作成ができたので、グラフまで見たい！

Zabbix管理画面にアクセスして、[設定]-[ホスト]から、対象ホストの[グラフ]をクリックします。
続けて画面右上の[グラフの作成]を押します。
設定を入れた箇所は、以下の通りです。

```
名前：（任意の名前）    ※ ここでは、「TCPコネクション」としました。
アイテム：（追加）
    名前：Apacheコネクション を選択
    関数：すべて   

最後に[追加]ボタンを押します。
```

![Apache03.png](https://qiita-image-store.s3.amazonaws.com/0/109620/44a6dca3-5344-d6f2-9f56-507e4a28e134.png)


:grin::grin::grin::grin::grin::grin::grin::grin::grin::grin::grin::grin::grin::grin:
わーぃ！

![Apache04.png](https://qiita-image-store.s3.amazonaws.com/0/109620/be577c18-5340-3928-4d11-d430da32c2a2.png)