iOSエンジニアがAPIの監視ツール「Topbeat」を導入するまで

やりたいことはプロセス監視とリソース監視、プロセスが落ちてたりリソースが枯渇してたら教えて欲しい。
ほんとはアクセスログの可視化もしたいけど、なにがいいのか・・・というので夏休みすることもないので調べてみる。

とりあえずいろんな会社の事例見てみる・・・
[WEB系各社で使われている監視ツールまとめ](https://www.google.co.jp/search?q=kibana+%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E7%9B%A3%E8%A6%96&oq=kibana+%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E7%9B%A3%E8%A6%96&aqs=chrome..69i57.4399j0j9&sourceid=chrome&ie=UTF-8)

だめだ分からん。

とにかくzabbixとnginxは使ったことがあるけど、冗長で重いイメージだ。
ちょっとしたAPIサーバの自信のリソースの状態や、アクセスの推移などをさっとkibanaとかで見れるとクレバーだ。

# 選んだのはTopbeatでした
セットアップ

```
//Topbeat
$ curl -L -O https://download.elastic.co/beats/topbeat/topbeat-1.0.1-x86_64.rpm
$ sudo rpm -vi topbeat-1.0.1-x86_64.rpm
$ sudo /etc/init.d/topbeat start
```

```
//elasticsearch
// http://qiita.com/inouet/items/6276c5a08c4fe5eecdb5
$ yum install java-1.8.0-openjdk-headless
$ yum install elasticsearch
$ sudo service elasticsearch start
```

```
//Packetbeat
$ sudo rpm -ivh https://download.elastic.co/beats/packetbeat/packetbeat-1.0.0-x86_64.rpm
$ curl -XPUT localhost:9200/_template/packetbeat -d @/etc/packetbeat/packetbeat.template.json
$ sudo /etc/init.d/packetbeat start
```


## Kibanaでエラー
```
[jumbo@tk2-230-24763 ~]$ sudo service elasticsearch start
Starting elasticsearch: Exception in thread "main" java.lang.IllegalStateException: Failed to created node environment
Likely root cause: java.nio.file.AccessDeniedException: /var/lib/elasticsearch/elasticsearch/nodes/1
	at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
	at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
	at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
	at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:383)
	at java.nio.file.Files.createDirectory(Files.java:630)
	at java.nio.file.Files.createAndCheckIsDirectory(Files.java:734)
	at java.nio.file.Files.createDirectories(Files.java:720)
	at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:169)
	at org.elasticsearch.node.Node.<init>(Node.java:165)
	at org.elasticsearch.node.Node.<init>(Node.java:140)
	at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:143)
	at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:178)
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:270)
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)
Refer to the log for complete error details.
```

これで回避
https://github.com/elastic/elasticsearch/issues/10671
```
$ sudo chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/
```

## Kibanaの起動確認

よっしゃ動く。

```
[jumbo@tk2-230-24763 ~]$ curl -XGET http://localhost:9200
{
  "name" : "Doorman",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.3.5",
    "build_hash" : "90f439ff60a3c0f497f91663701e64ccd01edbb4",
    "build_timestamp" : "2016-07-27T10:36:52Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.0"
  },
  "tagline" : "You Know, for Search"
}
```
## 見てみる
http://address:5601/

<img width="1173" alt="スクリーンショット 2016-08-13 9.50.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/31237/fc1fd625-d13e-3ba0-32f1-ecc8ee5e2c07.png">

件数が多すぎるな・・・前任者なにをした。

## Elasticsearch内を調査
[Elasticsearchのクエリ](https://medium.com/hello-elasticsearch/elasticsearch-api-83760ce1424b#.89wsd4ykd)

インデックス一覧を見る

```
[jumbo@tk2-230-24763 beats-dashboards-1.0.1]$ curl -XGET localhost:9200/_aliases?pretty
{
  "topbeat-2016.08.13" : {
    "aliases" : { }
  },
  "mytest" : {
    "aliases" : { }
  },
  ".kibana" : {
    "aliases" : { }
  }
}
```

中身を見てみる

```
[jumbo@tk2-230-24763 beats-dashboards-1.0.1]$ curl -XGET localhost:9200/_cat/count/topbeat-2016.08.13
1471051011 10:16:51 44216
[jumbo@tk2-230-24763 beats-dashboards-1.0.1]$ curl -XGET localhost:9200/_cat/count/topbeat-2016.08.13
1471051020 10:17:00 44382
```

徐々に増えていっているね。

## 解決法
```
$ curl -X PUT localhost:9200/.kibana/_settings -d '{ "index": { "max_result_window": 2147483647 }}'
```

[Kibana の設定を Export Everything しても取得できない](http://qiita.com/aviscaerulea/items/6b3659db1d9e3e7757bf)

## 次のエラー
<img width="847" alt="スクリーンショット 2016-08-13 10.00.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/31237/615636c4-30f2-4c1f-c4db-3e2568c56894.png">


### 解決法

[2016-06-03
Elastic Stack 5.0 alpha 3で、いよいよ登場Metricbeat！ #elasticsearch](http://acro-engineer.hatenablog.com/entry/2016/06/03/202042)

## 表示されない・・・・

javaを上げてみる。
```
sudo yum install java-1.8.0-openjdk-devel
```

初めて知ったアクティベイトコマンド

```
[jumbo@tk2-230-24763 beats-dashboards-1.0.1]$ sudo alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*  1           /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java
 + 2           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java

Enter to keep the current selection[+], or type selection number: 1
```

```
[jumbo@tk2-230-24763 beats-dashboards-1.0.1]$  javac -version
javac 1.8.0_101
```

## とにかく見れたけどエラー
<img width="1428" alt="スクリーンショット 2016-08-13 10.56.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/31237/280daa2d-7874-f4e7-6f0a-fc4b06a7d1de.png">

```
SearchParseException[Unknown key for a VALUE_STRING in [2]: [pre_zone].]
```

もうあかん・・・・と思ってたけど。kibana4.2にすればいけるらしい。

```
$ curl -sL https://download.elastic.co/kibana/kibana/kibana-4.2.0-linux-x64.tar.gz  | sudo tar zxf - -C /tmp
$ sudo mv /tmp/kibana-4.2.0-linux-x64 /usr/share/kibana
$ sudo /usr/share/kibana/bin/kibana
```

いけた！！！！！

<img width="1408" alt="スクリーンショット 2016-08-13 11.20.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/31237/8dff0e2b-63cf-b3d6-2b62-1c041f82f97d.png">

いい休日だ。ビール飲もう。

# Topbeatのいいところ。

- 導入が簡単
- リソース監視が見やすい
- プロセス監視が便利

プロセスの死活監視とアラートは別のツールを探します。

### 参考資料
[10分でサーバリソース監視ができるTopbeat](http://elastic.hatenablog.com/entry/2016/02/03/230030)