全文検索エンジンGroongaで対応したMuninワイルドカードプラグインとは

昨年11/29に[全文検索エンジンGroongaを囲む夕べ4](http://atnd.org/events/43461)を開催しました。[発表資料](http://atnd.org/events/43461#document)へのリンクもまとめています。[隔週連載Groonga](http://gihyo.jp/dev/clip/01/groonga)も参考になりますよ。
イベントレポートも昨年末に[「全文検索エンジンGroongaを囲む夕べ 4」レポート](http://gihyo.jp/news/report/2013/12/2701)として公開されましたね。

# はじめに

オープンソースの[カラムストア機能付き全文検索エンジンGroonga](http://groonga.org/ja/)を公開しています。この記事を書いたときの最新のバージョンは2013年12月29日にリリースした[3.1.1](http://groonga.org/ja/docs/news.html#release-3-1-1)です。

今回は、全文検索エンジンGroongaで対応したMuninワイルドカードプラグインの紹介をします。

# GroongaのMuninプラグインをワイルドカード対応した背景

全文検索エンジンであるGroongaでは、Muninプラグインのパッケージがあります。

そのあたりの導入方法については[全文検索エンジンGroongaの状態をMuninプラグインで確認するには](http://qiita.com/groonga/items/b889f1207ce664b11382)としてエントリを書きました。

その後、Groonga 3.1.1のリリースで該当エントリを書いたときの次の問題点をMuninワイルドカードプラグインにすることで修正しました。

* GQTPのポート番号変更に対応していない
* GQTPにしか対応していない

# Muninプラグイン新旧の対応

Groonga 3.1.0以前では、次のようなMuninプラグインを提供していました。

|旧プラグイン|説明|
|--------|----|
|groonga_cpu_load|CPU使用率情報|
|groonga_cpu_time|一日におけるCPU負荷情報|
|groonga_disk|テーブルのディスク使用比率情報|
|groonga_memory|メモリ使用量情報|
|groonga_n_records|レコード数情報|
|groonga_query_performance|クエリ実行時間の平均、中央値情報|
|groonga_status|statusコマンド情報|
|groonga_throughput|実行できたクエリ数情報|

Groonga 3.1.1以降では、GQTPだけでなく、HTTP向けのプラグインも提供するようになりました。
それにともない、個々のプラグイン名も変更しています。プラグイン名の末尾にプロトコルが付与されていることがわかります。

* groonga_cpu_load_gqtp
* groonga_cpu_time_gqtp
* groonga_disk_gqtp
* groonga_memory_gqtp
* groonga_n_records_gqtp
* groonga_query_performance_gqtp
* groonga_status_gqtp
* groonga_throughput_gqtp
* groonga_cpu_load_http
* groonga_cpu_time_http
* groonga_disk_http
* groonga_memory_http
* groonga_n_records_http
* groonga_query_performance_http
* groonga_status_http
* groonga_throughput_http

# Muninワイルドカードプラグインの実体

プラグインはプロトコル別ですが、実体は一緒でシンボリックリンクで実現されています。
これは、GQTPとHTTPでそれほどプラグインそのものの内容に違いがないので、プロトコル設定で動作を切り替えられるようにしているためです。

ワイルドカードプラグインとはこのような1つのプラグインで複数のグラフの情報を収集できるプラグインのことです。

```
lrwxrwxrwx 1 root root 42  1月  9 11:23 groonga_cpu_load_gqtp -> /usr/share/munin/plugins/groonga_cpu_load_
lrwxrwxrwx 1 root root 42  1月  9 11:23 groonga_cpu_load_http -> /usr/share/munin/plugins/groonga_cpu_load_
lrwxrwxrwx 1 root root 42  1月  9 11:23 groonga_cpu_time_gqtp -> /usr/share/munin/plugins/groonga_cpu_time_
lrwxrwxrwx 1 root root 42  1月  9 11:23 groonga_cpu_time_http -> /usr/share/munin/plugins/groonga_cpu_time_
lrwxrwxrwx 1 root root 38  1月  9 11:23 groonga_disk_gqtp -> /usr/share/munin/plugins/groonga_disk_
lrwxrwxrwx 1 root root 38  1月  9 11:23 groonga_disk_http -> /usr/share/munin/plugins/groonga_disk_
lrwxrwxrwx 1 root root 40  1月  9 11:23 groonga_memory_gqtp -> /usr/share/munin/plugins/groonga_memory_
lrwxrwxrwx 1 root root 40  1月  9 11:23 groonga_memory_http -> /usr/share/munin/plugins/groonga_memory_
lrwxrwxrwx 1 root root 43  1月  9 11:23 groonga_n_records_gqtp -> /usr/share/munin/plugins/groonga_n_records_
lrwxrwxrwx 1 root root 43  1月  9 11:23 groonga_n_records_http -> /usr/share/munin/plugins/groonga_n_records_
lrwxrwxrwx 1 root root 51  1月  9 11:23 groonga_query_performance_gqtp -> /usr/share/munin/plugins/groonga_query_performance_
lrwxrwxrwx 1 root root 51  1月  9 11:23 groonga_query_performance_http -> /usr/share/munin/plugins/groonga_query_performance_
lrwxrwxrwx 1 root root 40  1月  9 11:23 groonga_status_gqtp -> /usr/share/munin/plugins/groonga_status_
lrwxrwxrwx 1 root root 40  1月  9 11:23 groonga_status_http -> /usr/share/munin/plugins/groonga_status_
lrwxrwxrwx 1 root root 44  1月  9 11:23 groonga_throughput_gqtp -> /usr/share/munin/plugins/groonga_throughput_
lrwxrwxrwx 1 root root 44  1月  9 11:23 groonga_throughput_http -> /usr/share/munin/plugins/groonga_throughput_
```

ワイルドカードプラグインかどうかはsuggestを引数にmunin-node-configureに与えることでもわかります。

```zsh
% sudo munin-node-configure --suggest
[sudo] password for khayashi: 
Plugin                     | Used | Suggestions                            
------                     | ---- | -----------                            
groonga_cpu_load_          | yes  | yes (gqtp http)                        
groonga_cpu_time_          | yes  | yes (gqtp http)                        
groonga_disk_              | yes  | yes (gqtp http)                        
groonga_memory_            | yes  | yes (gqtp http)                        
groonga_n_records_         | yes  | yes (gqtp http)                        
groonga_query_performance_ | yes  | yes (gqtp http)                        
groonga_status_            | yes  | yes (gqtp http)                        
groonga_throughput_        | yes  | yes (gqtp http)                        
```

ワイルドカードプラグインでは、以下を満す必要があります。

* ファイル名末尾が_であること
* capabilitiesのsuggestマジックコメントがあること
* suggest引数を与えて実行するとサポート対象を出力すること

ファイル名についてはすでに述べました。マジックコメントは例えば次のような内容にします。

```
#!/bin/sh

#%# family=auto
#%# capabilities=autoconf suggest
```

suggest引数への対応では次のようにして"gqtp"と"http"に対応していることを明示します。

```
   suggest)
        echo "gqtp"
        echo "http"
        exit 0
        ;;
```

これで、GroongaもMuninワイルドカードプラグイン化することができました。

# まとめ

今回は、Groongaで対応したMuninワイルドカードプラグインの紹介しました。

Groongaに興味を持ったなら、まずは[インストール](http://groonga.org/ja/docs/install.html)して試してみてください。

Groongaの基本的な動作を知るための[チュートリアル](http://groonga.org/ja/docs/tutorial.html)もあります。インストールしたら試してみてください。

Muninプラグイン関連の話はククログにもあるので、参考にしてみてください。

* [Muninプラグインの作り方 - ククログ](http://www.clear-code.com/blog/2010/4/8.html)
* [groonga用Muninプラグイン - ククログ](http://www.clear-code.com/blog/2010/5/7.html)