[blackbird-httpd] blackbird で Apache をモニタリングする

# blackbird httpd plugin

この plugin では Apache(httpd) から様々な情報を取得し、backend にデータを送信します
現在のところ、下記の情報をモニタリングすることができます。

* Apache の version (`httpd -v`)
* server-status の各項目
* server-info の MaxClients
* 特定 url に対する responce check (HTTP status code / Reponse Time)

# Install

## blackbird 本体

[こちら](http://qiita.com/makocchi/items/9166016b2ad4cc43e83f)を参考に install してください

## Install httpd plugin

setup.py で入れる方法と rpm で入れる方法があります
手動で入れる方法もありますが、その場合は別途 python の `requests` の module を使えるようにしてください

### setup.py で install

```bash
git clone https://github.com/Vagrants/blackbird-httpd.git
cd blackbird-httpd
python setup.py install
```

### rpm で install

```bash
yum install blackbird-httpd--enablerepo=blackbird
```
依存関係で `python-requests` が必要となります

# Apache 側で status を取れるようにする

server-status の定義をします

```text:/etc/httpd/conf.d/server_status.conf
ExtendedStatus On

<VirtualHost *:80>
  ServerName localhost
 
  <Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from localhost
  </Location>
  <Location /server-info>
    SetHandler server-info
    Order deny,allow
    Deny from all
    Allow from localhost
  </Location>
</VirtualHost>
```

例えばこんな感じにします  

_server-info についてですが、今のところ MaxClients くらいしか取ってきてません_
_将来的にはもうちょっといろいろ取ろうかなと思ってますが、いかんせん出力結果が parse しにくい・・・_

# plugin の設定をする

config は `/etc/blackbird/conf.d/httpd.cfg` にあります

```ini:/etc/blackbird/conf.d/httpd.cfg
[httpd]
module = 'httpd'

# stub_status URI
# - support only http status code '200'
# - you must set uri value start with '/'
#
status_uri = '/server-status'
info_uri = '/server-info'
# host = '127.0.0.1'
# port = '80'
# timeout = '3'

# use ssl connection?
#
# ssl = False

# for BASIC authentication. default: Nothing
#
# user = 'nobody'

# for BASIC authentication. default: Nothing
#
# password = 'nobody'

# for response time check
# if you do not want to check, please comment out
# - support only http status code '200'
# - you must set uri value start with '/'
#
response_check_uri = '/'
# response_check_host = '127.0.0.1'
# response_check_port = '80'
# response_check_timeout = '3'
# response_check_vhost = 'localhost'
# response_check_uagent = 'blackbird response check'
# response_check_ssl = False

# httpd path
path = '/usr/sbin/httpd'
```

`response_check_uri` が指定された場合、その uri に対して HTTP GET をします
HTTP の status code と Response Time を計測します
virtual host も設定しておくことでサービス用途の virtual host の response をモニタリングすることが可能です



設定が終わったら `blackbird` を再起動させます

```bash
sudo /etc/init.d/blackbird restart
```

# Zabbix 上でデータが入ってきているか確認する

Zabbix の Template は [github の repository](https://github.com/Vagrants/blackbird-httpd/tree/master/templates)にあります
Zabbix に import して対象のサーバーに適用させて下さい

**Zabbix 上の host 名と blackbird が起動しているサーバーの host 名が違う場合は `/etc/blackbird/conf.d/httpd.cfg` 上で hostname を設定してあげる必要があります**
Zabbix 上と合わせてください

```ini:/etc/blackbird/conf.d/httpd.cfg
hostname = your_static_hostname
```

また、監視間隔も変更できます (デフォルト 60 秒)

```ini:/etc/blackbird/conf.d/httpd.cfg
interval = 30
```

# Zabbix Template のアイテムについて

### \_Httpd_2.2

| Application | item | description |
|-------------|------|-------------|
| Httpd - Stats |Stats - ***| ReqPerSec,BytesPerSec,BytesPerReq,,,etc|
| Httpd - Scoreboad |Scoreboad - ***| Waiting for Connection,Starting up,Reading Request,,,etc |
| Httpd - Performance | Performance - Amount | aggregate 用 item|
| Httpd - Performance | Performance - Available| aggregate 用 item|
| Httpd - Performance | Performance - Response status | `response_check_uri` の HTTP status|
| Httpd - Performance | Performance - Response Time | `response_check_uri` の Response Time|
| Version | Version - Httpd | Apache の version | 
| General | General - Blackbird httpd plugin is sending data | blackbird からの ping |
| General | General - Blackbird httpd plugin version | httpd plugin の version |
| General | General - Port $PORT is in LISTENING state | 特定 port が Listen しているか (agent)|
| General | General - Port $PORT is accepting connections | 特定 port が Accept しているか (agent)|
| General | Process - Number of httpd processes | httpd の process 数 (agent)|
| Macro | {$ITM_HTTPD_MONITOR_URI} | アイテム表示用 (httpd.cfg と合わせて下さい) |
| Macro | {$ITM_HTTPD_MONITOR_VHOST} | アイテム表示用 (httpd.cfg と合わせて下さい) |
| Macro | {$ITM_HTTPD_PORT} | Apache の port | 
| Macro | {$TRG_BBD_HTTPD_NDT_PRD} | blackbird からの ping の間隔の閾値 | 
| Macro | {$TRG_HTTPD_RSP_TIME} | Response Time の閾値| 

一部 agent の item も入ってます

##### `{$TRG_BBD_HTTPD_NDT_PRD}` について
blackbird が落ちていることを検知するため、ある一定の間隔で ping アイテムが更新されなかった場合に Trigger をあげます
その間隔の閾値です
`/etc/blackbird/conf.d/httpd.cfg` で interval を長くした場合はこの値も増やして下さい

##### `{$TRG_HTTPD_RSP_TIME}` について
Response Time が一定の秒数より大きかった場合に Trigger が上がります
その閾値になります
(Template では 3 回連続で閾値を超えた場合に Trigger を上げるようにしてますが、環境に応じて変えて下さい)


### \_Httpd_group_monitor

| Application | item | description |
|-------------|------|-------------|
| Httpd - Group | Group - Total servers | group 監視のサーバー全体数 |
| Httpd - Group | Group - Available servers | group 監視のサーバーのうち正常な数
| Httpd - Group | Group - Available servers rate | その割合 |
| Macro | {$ITM_HTTPD_GROUP_NAME} | group 監視する host group |
| Macro | {$TRG_HTTPD_AVAILABLE_RATE} | Trigger の閾値 |

この \_Httpd_group_monitor ですが、load balancer 配下のサーバー郡のうち正常なサーバーがどれくらいあるか把握したい場合に使うことを想定しています
例えば 10 台で load balance されているサーバー達の半分が HTTP status 200 以外返しているのを検知したりできます
Zabbix の Aggregate の機能を使ってますので、監視したいサーバー達は同じ host group でまとめておく必要があります
ちなみにこの Template を適用させるサーバーは正直どこでもいい(127.0.0.1とかでもいい)のですが、わかりやすい方法としては load balance 用の vip の host を Zabbix 上で定義して、その host に適用させておくといいでしょう