Solr のモニタリングに使えるソフトウェア

[Solr のモニタリングに使える API](https://qiita.com/mosuka/private/c2da5302ab002f63935b) で、[Apache Solr](http://lucene.apache.org/solr/) (以下「Solr」) のモニタリングに使える API を紹介しました。

とはいえ、JSON でレスポンスが返ってきても、それを目視するのは大変です。スクリプトを書いて [jq](https://stedolan.github.io/jq/) コマンドで毎回整形するのも手間ですし、取得したメトリクスの可視化やアラーティングを考えると、自作するのは結構大変です。

<img width="722" alt="terminal.png" src="https://qiita-image-store.s3.amazonaws.com/0/58291/77f5be3e-2548-df0a-d1be-1bd10de9e03c.png">

Apache Software Foundation の [Lucene](http://lucene.apache.org)/[Solr](http://lucene.apache.org/solr/) プロジェクトは、検索ライブラリ・サーバのプロジェクトなので、[Elastic](https://www.elastic.co) のように、検索サーバ ([Elasticsearch](https://www.elastic.co/products/elasticsearch)) とその可視化 ([Kibana](https://www.elastic.co/products/kibana))、モニタリング ([X-Pack](https://www.elastic.co/products/x-pack)) のためのソフトウェアスタックまで包括提供していません。
それらを行うためには他の OSS の力を借りることになります。
そこで、Solr のモニタリングに使えるソフトウェアをいくつか紹介します。

# Solr のモニタリングに使えるソフトウェア

メトリクスのモニタリングをするソフトウェアは、[Monitoring Solr | Apache Solr Reference Guide 7.1](https://lucene.apache.org/solr/guide/7_1/monitoring-solr.html) や Blog でもいくつか紹介されています。

- [jconsole](https://docs.oracle.com/javase/9/tools/jconsole.htm)
- [Graphite](http://graphiteapp.org)
- [Ganglia](http://ganglia.info)
- [Prometheus](https://prometheus.io) + [Grafana](https://grafana.com)


# jconsole

Solr の JMX 機能を有効にすることで、Solr の MBean を [jconsole](https://docs.oracle.com/javase/9/tools/jconsole.htm) で可視化できます。jconsole は JDK に同梱されています。

jconsole は JMX に準拠した、監視ツールで、JMX 機能を使用してアプリケーションのリソースを可視化する機能を提供しています。

スタンドアローンの Java アプリケーションとして提供されているので、ローカルのマシンで起動し、サーバーへ接続して使用します。

![jconsole.png](https://qiita-image-store.s3.amazonaws.com/0/58291/a052d829-1d08-9fd9-2cf8-6426447103a7.png)


詳細は下記の URL を参照してください。

- [Using JMX with Solr](https://lucene.apache.org/solr/guide/7_1/using-jmx-with-solr.html)
- [Java Platform, Standard Edition Tools Reference - jconsole](https://docs.oracle.com/javase/9/tools/jconsole.htm)

jconsole は簡単なグラフを描画するだけなので、テスト、検証に使用するとよいです。

# Graphite

[Graphite](http://graphiteapp.org) はオープンソースの統合監視ツールです。

Solr の Metrics Reporting の機能である、[Graphite Reporter](https://lucene.apache.org/solr/guide/7_1/metrics-reporting.html#graphite-reporter) を使用して、メトリクスを Graphite へ送信することができます。

実際に Solr のメトリクスを表示したものではありませんが、次のような画面で可視化が行えます。

![sample](https://res.infoq.com/articles/graphite-intro/en/resources/fig4.png "sample")

参考 https://www.infoq.com/articles/graphite-intro

アラーティングについては、[graphite-beacon](https://github.com/klen/graphite-beacon)を使用することで行えるようです。

詳細は下記の URL を参照してください。

- [Metrics Reporting Graphite Reporter](https://lucene.apache.org/solr/guide/7_1/metrics-reporting.html#graphite-reporter)
- [Graphite Documentation](http://graphite.readthedocs.io/en/latest/)

# Ganglia

[Ganglia](http://ganglia.info) もオープンソースの統合監視ツールです。

Solr の Metrics Reporting の機能である、[Ganglia Reporter](https://lucene.apache.org/solr/guide/7_1/metrics-reporting.html#ganglia-reporter) を使用して、メトリクスを Ganglia へ送信します。

実際に Solr のメトリクスを表示したものではありませんが、次のような画面で可視化が行えます。

![sample](http://heig-cloud.github.io/static/img/2015-12-21%20ganglia/ganglia_sample2.png "sample")

参考 http://heig-cloud.github.io/article/2015-12-21%20ganglia/

アラーティングについては、[ganglia-alert](https://github.com/ganglia/ganglia_contrib/tree/master/ganglia-alert) を使用することで行えるようです。

詳細は下記の URL を参照してください。

- [Metrics Reporting Ganglia Reporter](https://lucene.apache.org/solr/guide/7_1/metrics-reporting.html#ganglia-reporter)
- [Ganglia Documents](https://github.com/ganglia/monitor-core/wiki/Ganglia-Documents)

# Prometheus + Grafana

[Prometheus](https://prometheus.io) もオープンソースの統合監視ツールです。
[jmx_exporter](https://github.com/prometheus/jmx_exporter)を使用して、Solr のメトリクスを公開 (expose) し、Prometheus で Pull します。

Prometheus 自体もメトリクスの可視化のためにグラフを表示できますが、強力な可視化を行える [Grafana](https://grafana.com) と連携することができます。

Prometheus での可視化サンプル

![prometheus.png](https://qiita-image-store.s3.amazonaws.com/0/58291/d801ad3e-9685-5cf4-5523-e3caa64984a5.png)

Grafana での可視化サンプル

![grafana.png](https://qiita-image-store.s3.amazonaws.com/0/58291/f8cb1341-328e-a946-fab5-67c0d7a1db35.png)

参考 https://techblog.yahoo.co.jp/architecture/abyss_2/

アラーティングについては、Prometheus が提供する [Alertmanager](https://prometheus.io/docs/alerting/alertmanager/) を使用することで行えます。

[Yahoo! JAPAN](https://www.yahoo.co.jp) でも、3000台規模の Solr のモニタリングに Prometheus を使用しているようです。

詳細は下記の URL を参照してください。

- [Overview | Prometheus](https://prometheus.io/docs/introduction/overview/)
- [jmx_exporter](https://github.com/prometheus/jmx_exporter)
- [Grafana Documentation](http://docs.grafana.org)
- [Prometheus: Monitoring at ABYSS - Yahoo! JAPAN Tech Blog](https://techblog.yahoo.co.jp/architecture/abyss_2/)

# まとめ

サードパーティの製品を利用することで、メトリクスのモニタリングを可能にし、サービスの安定運用に役立つと思います。
既に監視システムを導入済みであれば、[Solr のモニタリングに使える API](https://qiita.com/mosuka/private/c2da5302ab002f63935b) を利用するプラグインやツールを開発し、組み込んでもよいでしょう。

![TH160_9784774189307.jpg](https://qiita-image-store.s3.amazonaws.com/0/58291/b6d09ffb-aea6-d4cb-988b-f9d7994d3bfe.jpeg)

JMX を使ったモニタリングについては、[［改訂第3版］Apache Solr入門](http://gihyo.jp/book/2017/978-4-7741-8930-7) でも簡単に解説されているので、興味ある方は是非読んでみてください。