GitLab Performance MonitoringをChronografを用いて解析する

[GitHub Enterprise 2.5も先週出たばかり](https://github.com/blog/2108-github-enterprise-2-5-is-now-available)ですが、GitLabも何かと話題が尽きないようで、[遅い](http://laputa.io/blog/2015/09/15/so-your-gitlab-is-slow/)、[遅い](https://gitlab.com/gitlab-org/omnibus-gitlab/issues/462)、[メモリリークひどい](https://gitlab.com/gitlab-org/gitlab-ce/issues/13241)、[タイムアウトする](https://gitlab.com/gitlab-org/gitlab-ce/issues/3294)などといろいろな意見も飛び交っているように、GitLabのパフォーマンス改善は喫緊の課題の一つになっています。

2016年1月にGitLab 8.4で導入された[Performance Monitoring機能](http://doc.gitlab.com/ce/monitoring/performance/introduction.html)はGitLabアプリケーションの各種メトリクスをInfluxDBに送信する機能です。（**重要: v8.4時点では可視化やアラートの機能はありません。**）

ここでは、そのGitLab Perfomance Monitoring（で得られた時系列データ）をInfluxData Platform (TICKスタック) のChronografで解析できるようにした例を簡単に紹介します。

## はじめに

### GitLab

Gitレポジトリ管理、コードレビュー、イシュートラッカー、Wikiなどを有するプラットフォームソフトウェア。10万以上の組織（企業、学校etc.）で利用され、2016年1月までの累計ダウンロード数は188万にも及びます。

> Git repository management, code reviews, issue tracking, activity feeds and wikis. It comes with GitLab CI for continuous integration and delivery.

(via: https://about.gitlab.com/features/)

2016年1月22日リリースのGitLab 8.4でPerformance Monitoring機能（以下画像）を導入しました。
<img width="522" alt="via https://about.gitlab.com/2016/01/22/gitlab-8-4-released/" src="https://qiita-image-store.s3.amazonaws.com/0/49113/2c4a88f2-d4de-747c-9127-bc54fff92e00.png">


### InfluxDB

InfluxDBはtime-series database (時系列データベース) の一つです。

> InfluxDB is an open source database written in Go specifically to handle time series data with high availability and performance requirements. InfluxDB installs in minutes without external dependencies, yet is flexible and scalable enough for complex deployments.

(via: https://influxdata.com/get-started/what-is-the-tick-stack/)

2016年2月時点のInfluxDBの最新バージョンは0.10。

### InfluxData

2013年にブームとなったtime-series database (時系列データベース) の一つであるInfluxDBの開発元が[2015年12月にInfluxDataへと改名し](https://influxdata.com/blog/influxdb-the-platform-for-time-series-data/)ています。


### TICKスタック

2015年12月の社名変更と同時に、InfluxData Platform、別名[TICKスタック](https://influxdata.com/get-started/what-is-the-tick-stack/)というものが発表されました。

![TICK-Stack.png](https://qiita-image-store.s3.amazonaws.com/0/49113/35188040-4970-5a2e-9ea8-468529bbc80c.png)

ビッグデータ、特に、時系列データを扱うには、以下の4つが必要であることから、この流れになったとのこと。

1. 収集 (collection)
2. 蓄積 (storage)
3. 可視化 (visualization)
4. 処理 (processing)

これらを解決するためのソフトウェアとして、Telegraf, InfluxDB, Chronograf, Kapacitorを提供することになり、それぞれの頭文字を取って、TICKとしています。

（注）ElasticsearchにおけるELKスタック (Elasticsearch, Logstash, Kibana) のようなものです。


### Chronograf

InfluxDBに接続して、グラフおよびダッシュボードの可視化の部分を担当。

> Chronograf is a single binary web application that you can deploy behind your firewall to do ad hoc exploration of your time series data in InfluxDB. It includes a library of intelligent, pre­-configured dashboards for common data sets.

(via: https://influxdata.com/get-started/what-is-the-tick-stack/)

これまでInfluxDBの可視化には[Grafana](http://grafana.org/)を使うことが最も一般的だったが、今回はInfluxData本家の様子を知る上で、Chronografの利用を採用。2016年2月現在の最新バージョンは0.10であるが、これは最近InfluxDBとバージョンを揃えたためだろう。


## 手順

### 1. InfluxDBインストール/設定

1. http://doc.gitlab.com/ce/monitoring/performance/introduction.html を読む。
2. http://doc.gitlab.com/ce/monitoring/performance/influxdb_configuration.html に従ってInfluxDBをインストールする。4GBのメモリが必要とされているので、GitLabとは別のノードのほうが良いかもしれない。
3. http://doc.gitlab.com/ce/monitoring/performance/influxdb_configuration.html に従って、InfluxDBとデータベースの設定をする。


### 2. GitLabの設定変更

1. http://doc.gitlab.com/ce/monitoring/performance/gitlab_configuration.html を読んで、1で用意したInfluxDBの接続情報を設定する。


### 3. Chronografを使った分析

Chronografでグラフおよびダッシュボードを作成して分析する。Chronografの機能は、Grafana 2.6よりはKibana 3あたりに似ている印象。メトリクスについては http://doc.gitlab.com/ce/monitoring/performance/influxdb_schema.html が参考になる。


## まとめ
### GitLabのパフォーマンス

GitLab側では[2016年3月下旬リリースのEnterprise Edition (EE) 8.6でのみ解析環境が用意される](https://about.gitlab.com/direction/)予定なので、それまで待てない（あるいはCommunity Edition (CE)を使っている）場合は、今回紹介した方法か、これまで通りGrafanaを組み合わせた解析をするのがよさそう。GitLabチームはGrafanaを使って分析運用しているみたい。

パフォーマンス問題については、Ruby on Railsアプリケーションなら、何度も遭遇する問題なので、気長に待つか、待てないならハードウェアのスペックでカバーするのがよいでしょう。


### Chronograf & TICKスタック

とりあえず出てきたので、Chronografを使ってみたが、今のところGrafana（最新はv2.6）のほうが優れていると言わざるを得ない。TICKスタックと言いつつ、T (Telegraf) と K (Kapacitor) を試せていないので、近いうちに試します。