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

# blackbird mysql plugin

この plugin では mysql から様々な情報を取得し、backend にデータを送信します
現在のところ、下記の情報をモニタリングすることができます。
(mysql 5.5 系を対象にしていますが 5.6 でも特に問題はないと思います)

* mysql に接続できるかできないかの死活監視
* `SELECT VERSION()`
* `SHOW GLOBAL VARIABLES`
* `SHOW GLOBAL STATUS`
* `SHOW ENGINE INNODB STATUS`
* `SHOW SLAVE STATUS`
* DATABASE 内の TABLE の数 (Low Level Discovery)

各取得項目は `component` という単位になっています。
`component` 毎に Zabbix の Template を用意していますので、監視したい component と Zabbix Template をセットで使ってください
`component` と Zabbix Template の対応表は下記になります

## blackbird mysql plugin の各 component

| component | content | zabbix template |
|:---------:|:--------|:-----------------|
| (defaultt) | get mysql version and check mysql health | MySQL_5.5_general.xml |
| global_variables | get information by SHOW GLOBAL VARIABLES | MySQL_5.5_variables.xml
| global_status | get information by SHOW GLOBAL STATUS | MySQL_5.5_status.xml |
| innodb_status | get information by SHOW ENGINE INNODB STATUS | MySQL_5.5_innodb.xml |
| slave_status | get information by SHOW SLAVE STATUS | MySQL_5.5_slave.xml |
| table_count | discovery number of tables in database (lld) | MySQL_5.5_general.xml |

**各 Zabbix Template ですが、Zabbix 2.4 で作成されたものです**
**Trigger の定義が変わってますので 2.2 系では使えません**

# Install

## blackbird 本体

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

## Install mysql plugin

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

### setup.py で install

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

### rpm で install

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

# MySQL 側に monitoring user を作成する

blackbird が接続する user を作成します

```sql
mysql> GRANT SELECT, REPLICATION CLIENT, SHOW DATABASES, PROCESS ON *.* TO  'bbd'@'127.0.0.1' IDENTIFIED BY 'bbd';
```

ip address や username、password は適宜変えてください
接続ユーザー情報は config  で自由に設定することができます
すでにモニタリング用のユーザーがいる場合はわざわざ作る必要はありません

# plugin の設定をする

config は `/etc/blackbird/conf.d/mysql.cfg` にあります
`component` や監視間隔を設定することができます

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

# mysql setting
#
# - Please create monitor user like this.
#
#   mysql> GRANT SELECT, REPLICATION CLIENT, SHOW DATABASES, PROCESS ON *.* TO  'bbd'@'127.0.0.1' IDENTIFIED BY 'bbd';
#
# mysqlhost = '127.0.0.1'
# mysqluser = 'bbd'
# mysqlpass = 'bbd'

# components
# - global_variables : SHOW GLOBAL VARIABLES;
# - global_status    : SHOW GLOBAL STATUS;
# - innodb_status    : SHOW ENGINE INNODB STATUS;
# - slave_status     : SHOW SLAVE STATUS;
# - table_count (LLD): SELECT table_schema, COUNT(table_name) FROM information_schema.TABLES GROUP BY table_schema;
#
components = 'global_variables,global_status,innodb_status,slave_status,table_count'

# interval for this module
#
# interval = 60
# lld_interval = 600

#
# You can set the different interval time for each component.
#
# [mysql]
# module = 'mysql'
# components = 'version,global_variables,global_status,innodb_status'
# interval = 60
#
# [mysql_slave_monitor_frequent_intervals]
# module = 'mysql'
# components = 'slave_status'
# interval = 10
```

config の後ろの方には TIPS として特定の `component` だけ監視間隔を変えたい場合の設定方法が書いてあったりします

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

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

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

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

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

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

# 注意点等

##### Zabbix の Template の Trigger 等は各自の環境毎にいろいろカスタマイズしてください  

##### **とりあえず取れるものは取る** というポリシーで Zabbix Template は作られています
* 当然 **こんなの取ってどうするの？** みたいな item もあります
* item が多いということは、それなりに Zabbix DB に負荷がかかります。適宜無効にしてください

##### 絶賛募集中です
* あらかじめこういう Trigger を入れておいて欲しい
* あらかじめこういう Graph を入れておいて欲しい
* あらかじめこういう Screen を入れておいて欲しい
* このアイテムも取れるようにしてほしい (`SHOW PROCESSLIST` は検討中です)

##### Zabbix 2.2 系で使いたいんだが
* 要望が多ければ 2.2 系の Template も準備します

##### MySQL だけじゃなくて PostgreSQL は？
* がんばります・・・