Groongaの細かいことを知らなくても使えるWebブラウザー上で動く管理ツール

## はじめに

GroongaにはWebブラウザーで動く管理ツールが付属しています。GroongaをHTTPサーバーとして起動して`http://localhost:10041/`にアクセスすると使えます。詳細は[Groongaでブラウザベースの管理ツールを使うには](http://qiita.com/groonga/items/cf6d83b2b3e2956d6bd8)を参照してください。

この管理ツールはスキーマの定義からレコードの追加・削除・更新、さらに、細かく検索条件をした検索まで一通りできます。この管理ツールは「コマンドでできることをWebブラウザー上でも実現できる」というところを目指しているため、使うにはGroongaの知識が必要でした。

この管理ツールを開発した頃と今では事情が違ってきています。端的に言うとGroongaの細かいことを知らなくてもGroongaを使えるようになってきました。これは周辺ツールが成熟してきたからです。例えば、[Fluentdで集めたデータをGroongaに格納する方法](http://qiita.com/groonga/items/5c674be9daf25054c14c)があります。他にも、スキーマを気にせずにRubyからGroongaを使える[GrnMini](http://ongaeshi.hatenablog.com/entry/create-grn-mini)というライブラリーがあります。上級者向けの使い方ですが、Mroongaを使うことでSQLでスキーマ定義やデータの管理を実施し、検索やGroongaのデータベースの調査には直接Groongaを使う、ということもできます。

このため、Webブラウザーで動く管理ツールも「Groongaの細かいことを知らなくても使える」方向で作りなおしています。それが、今回紹介する[Groonga Admin](https://github.com/groonga/groonga-admin/)です。

## 設定方法

Groonga Adminはすべてクライアントサイドの技術（HTMLとCSSとJavaScript）で実装しているため、サーバーサイドのアプリケーションを用意する必要はありません。GroongaのAPIを提供しているHTTPサーバーでGroonga Adminを配信すればすぐに使えます。

Ubuntu 14.10での使い方は次の通りです。

まず、Groongaサーバーをインストールします。（詳細や他の環境でのインストール方法は[公式ドキュメントのインストール方法](http://groonga.org/ja/docs/install.html)を参照してください。）

```sh
sudo apt-get -y install software-properties-common
sudo add-apt-repository -y universe
sudo add-apt-repository -y ppa:groonga/ppa
sudo apt-get update
sudo apt-get -y install groonga-httpd
```

次にHTTPサーバーでGroonga Adminを配信するように設定を変更します。

```sh
rm -rf /tmp/groonga-admin
mkdir -p /tmp/groonga-admin
cd /tmp/groonga-admin/
wget http://packages.groonga.org/source/groonga-admin/groonga-admin.tar.gz
tar xvf groonga-admin.tar.gz
sudo rm -rf /usr/share/groonga/html/groonga-admin
sudo cp -r groonga-admin-*/html /usr/share/groonga/html/groonga-admin
sudo sed -i'' -e 's,/admin;,/groonga-admin;,' /etc/groonga/httpd/groonga-httpd.conf
sudo service groonga-httpd restart
```

これで動きます。[http://localhost:10041/](http://localhost:10041/)にアクセスしてみてください。次のような画面がでているはずです。

![Groonga Adminの初期トップページ](https://qiita-image-store.s3.amazonaws.com/0/15623/365cfa69-d70a-1b9e-6c26-d386a835272d.png)

まだ1つもテーブルがないので味気ない画面です。

[fluent-plugin-groongaの設定サンプル](https://github.com/groonga/fluent-plugin-groonga/blob/master/sample/store-syslog.conf)を使ってテーブル作成・データ投入をします。

fluent-plugin-groongaの設定方法は次の通りです。

```sh
sudo apt-get install -y ntp
curl -L http://toolbelt.treasuredata.com/sh/install-ubuntu-trusty-td-agent2.sh | sh
sudo td-agent-gem install fluent-plugin-forest fluent-plugin-parser fluent-plugin-record-reformer fluent-plugin-groonga
sudo mkdir -p /var/spool/td-agent/buffer
sudo chown -R td-agent:td-agent /var/spool/td-agent/
cd /tmp
curl -O https://raw.githubusercontent.com/groonga/fluent-plugin-groonga/master/sample/store-syslog.conf
sudo cp store-syslog.conf /etc/td-agent/td-agent.conf
sudo sed -i'' -e 's/messages/syslog/g' /etc/td-agent/td-agent.conf
sudo adduser td-agent adm
sudo service td-agent restart
```

いくつかsyslogにログを出力してGroongaにデータを入れましょう。

```sh
logger test
logger hello
logger world
logger --id test message
logger --tag test tag
```

管理ツールをリロードすると次のようにテーブルが増えています。これは、fluent-plugin-groongaが自動でスキーマを定義してデータを投入してくれたからです。

![データロード後のGroonga Adminのトップページ](https://qiita-image-store.s3.amazonaws.com/0/15623/3b557a61-867d-8429-5c2b-b50bb65939ff.png)

「Logs」テーブルを選択するとレコードを確認できます。

![Groonga Adminの検索ページ](https://qiita-image-store.s3.amazonaws.com/0/15623/e17a72fd-5467-f612-a4ec-f71af3d548df.png)

このページでは、Groongaの検索コマンドのパラメーターなど細かいことを知らなくても検索機能を使ってレコードを絞り込んだり、ドリルダウンしてデータの傾向を確認したりすることができます。

## 使い方

使い方をいくつか紹介します。

基本的にすべての操作はインタラクティブに反映されるのでどのような変化になるかをすぐに確認しながら操作することができます。

### 全文検索

一番上のテキストボックスで全文検索できます。全文検索可能なカラム（全文検索用のインデックスが張られているカラム）は自動的に検出され、テキストボックスの上に並んでいます。チェックボックスを外すとそのカラムは検索しません。

![Groonga Adminの検索ページでの全文検索](https://qiita-image-store.s3.amazonaws.com/0/15623/0a032dac-22cf-13e0-4b36-ad42eb67ee47.png)

### 表示カラムの選択

カラム数が多いと一覧性が悪くなります。そのときは、必要なカラムだけ表示することで一覧性をよくすることができます。

サイドバーにあるチェックボックスで表示するカラムを選択できます。

![Groonga Adminの検索ページでの表示カラムの選択](https://qiita-image-store.s3.amazonaws.com/0/15623/4c4a7588-a189-4a40-c1bd-ccc0b763d24a.png)

### リストビュー

カラム数を減らせない場合はレコードの表示方法を「表」ではなく「リスト」にすることで改善できるかもしれません。

リスト表示にすると「カラム名」と「カラム値」の縦・横が入れ替わるので狭い幅でレコードを表示できます。（その代わり、縦が長くなります。）

表示方法はタブで切り替えることができます。

![Groonga Adminの検索ページでのレコードのリスト表示](https://qiita-image-store.s3.amazonaws.com/0/15623/3e7a349f-58a0-aad9-f535-f5040c66f751.png)

### ドリルダウン

レコードをグループ化することでデータの傾向をわかりやすくすることができます。このグループ化の機能を「ファセット」や「ドリルダウン」と呼びますが、Groongaでは「ドリルダウン」という呼び方を使っています。

サイドバーのカラムリストにドリルダウンをするかどうかというチェックボックスがついています。チェックを入れると、サイドバーの下の方にドリルダウン結果がでます。

この例では、「vagrant」関連のログと「dhclient」関連のログが多めという傾向がわかります。

![Groonga Adminの検索ページでのドリルダウン](https://qiita-image-store.s3.amazonaws.com/0/15623/dbcdefaf-3b1a-fd3d-baeb-e75621b93e58.png)

### ソート

レコード一覧部分のヘッダーにはカラム毎にソート順を指定するボタンがついています。ここをクリックすると昇順・降順・指定なしとソート順が変わっていきます。

最新のログに注目したい場合はタイムスタンプで降順でソートする、という使い方ができます。

![Groonga Adminの検索ページでのソート](https://qiita-image-store.s3.amazonaws.com/0/15623/5d3ab8ec-1ae3-0a01-415b-188e341c3b65.png)

### その他

他にも、次のような機能があります。

  * `select`コマンドでのコマンドラインと生のGroongaのレスポンスをpretty printして表示する機能（レコード一覧の上のタブの「Raw」を選ぶと見れます。）
  * 時間の範囲で絞り込む機能（全文検索用のテキストボックスの下にあります。）
  * ページネーション機能（レコード一覧の上下にあります。）
  * 現在の検索条件をブックマークする機能（サイドバーの上にあるボタンを押すと検索条件を示したURLになるので、それをWebブラウザーの機能でブックマークしてください。）

## 注意

Groonga Adminはまだ開発途中で既存の管理ツールを置き換えるところまでいっていません。例えば、スキーマ管理機能やレコード管理機能がありません。

そのため、まだ、Groonga本体と一緒に配布しておらず、別で配布しています。今後、必要な機能が追加されていき、既存の管理ツールを置き換えられるところまでいったらGroonga本体と一緒に配布する予定です。

JavaScriptが得意な方で開発に協力したい方は[groonga/groonga-adminのIssues](https://github.com/groonga/groonga-admin/issues)を確認してください。

## まとめ

Groongaの細かいことを知らなくても使えるGroonga AdminというWebブラウザー上でGroongaを管理できるツールを紹介しました。現時点では検索機能しかなく、スキーマやレコードの管理はできませんが、検索機能はGroongaの細かいことを知らなくても使えるはずです。Groongaのデータベース内のレコードを参照したい方はぜひ試してみてください。