ELK (Elasticsearch + Logstash + Kibana) 環境を非インターネット接続 Windows 7 に作成する


# 背景
セキュリティの厳しい会社だとインターネットの接続が規制されている場合があります。そんな環境でも ELK (Elasticsearch + Logstash + Kibana) を使いたいという事があったのでメモを残しておきます。
このメモは[How to install Logstash on a Windows server with Kibana in IIS.](https://community.ulyaoth.net/threads/how-to-install-logstash-on-a-windows-server-with-kibana-in-iis.17/)を参考にしました。このメモでは IIS を使いませんが、それ以外のほとんどはこのページを参考にしています。

なお、おおむねメモを書き終わった後に気づきましたが、ファイルが直接ダウンロードできないことと Elasticsearch プラグインのインストール以外、インターネット接続でもそうでなくても手順に差はありませんでした…。

# インストール

## インストール環境
  - Windows 7 SP1 64bit 版
  - ELK は `C:\srv\` に配置する前提です。適宜読み換えてください。

## 準備
以下のファイルをインターネット接続環境でダウンロードし*何らかの方法*で対象のマシンに保存します。
  - [Java SE Development Kit 8](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
      - jdk-8u45-windows-x64.exe
  - [Elasticsearch 1.6.0](https://www.elastic.co/downloads/elasticsearch)
      - elasticsearch-1.6.0.zip
  - [Logstash 1.5.1](https://www.elastic.co/downloads/logstash)
      - logstash-1.5.1.zip
  - [Kibana 4.1.0](https://www.elastic.co/downloads/kibana)
      - kibana-4.1.0-windows.zip
  - [nssm 2.24](http://nssm.cc/download) ※ Windows のサービスを作成するためのヘルパーツール
      - nssm-2.24.zip

保存したファイルを以下の様なディレクトリ構造で展開します。
Java 8 はインストーラを起動してインストールします。デフォルトで JDK は `C:\Program Files\Java\jdk1.8.0_45` にインストールされます。

```
C:\srv\
      └ elasticsearch\
         └ bin 等
      └ kibana\
         └ bin 等
      └ logstash\
         └ bin 等
      └ nssm\
         └ win64 等
```

## Elasticsearch のインストール

環境変数 `JAVA_HOME` に JDK のインストール先を指定します。
コントロールパネル→システムとセキュリティ→システム→システムの詳細設定→詳細設定タブ→環境変数ボタン
と辿ってゆき、システム環境変数の新規を押下して

  - 変数名: JAVA_HOME
  - 変数値: C:\Program Files\Java\jdk1.8.0_45

と入力して OK を押下します。

もしクラスタ構成を組むつもりがならば `C:\srv\elasticsearch\config\elasticsearch.yml` を開いて

```
cluster.name: [任意のクラスタ名]
```

を設定すると良いかもしれません。他に負荷分散も Elasticsearch のみで構成出来ます。詳細は[Load Balancing Across Multiple Elasticsearch Nodes](https://www.elastic.co/guide/en/kibana/current/production.html#load-balancing)を参照してください。

この時点でコマンドプロンプトを開き `C:\srv\elasticsearch\bin` に移動して `elasticsearch` と打つと Elasitcsearch が起動し、`http://localhost:9200` でアクセスできるようになりますが、ここは Windows サービスに登録し、OS 起動時に Elasticsearch も自動起動するようにします。

Windows サービスに登録するには**管理者権限**でコマンドプロンプトを開き `C:\srv\elasticsearch\bin` に移動して

```
service install
```

と打ちます。以下のようになると成功です。

![elasticsearch-install.png](https://qiita-image-store.s3.amazonaws.com/0/58889/b9bd8216-673a-bc6f-430f-d9d5ad89fa42.png)

この時点ではまだ起動もしていないので

```
service manager
```

と打ってサービスマネージャを開き、Start ボタンを押下します。また、Startup type を Automatic にして OS 起動時に自動起動するようにします。

![elasticsearch-manager.png](https://qiita-image-store.s3.amazonaws.com/0/58889/2875a22e-b549-25c9-31cf-174c90bb9b72.png)

[http://localhost:9200](http://localhost:9200) にアクセスして JSON 形式のレスポンスがあることを確認しましょう。以上で Elasticsearch のインストールは完了です。
なお、プラグインのインストールについてはこのページ下部の [Elasticsearch Plugin のインストール](Elasticsearch Plugin のインストール)に記載しています。

## Kibana のインストール

Kibana はコマンドプロンプトで `C:\srv\kibana\bin` に移動して

```
kibana
```

と打てば起動します。[http://localhost:5601](http://localhost:5601) にアクセスすれば Kibana をすぐに使うことができます。

Kibana を Windows サービスに登録するには nssm を使います。**管理者権限**でコマンドプロンプトを開き `C:\srv\nssm\win64` に移動します。

```
nssm install kibana
```

として登録画面を表示し、

  - Application タブ
      - Path: C:\srv\kibana\bin\kibana.bat
      - Startup directory: C:\srv\kibana\bin
  - Details タブ
      - Display name: Kibana
      - Startup type: Automatic
  - Dependencies タブ
      - This service depends on the following system components: elasticsearch-service-x64

と入力して Install service ボタンを押下してインストールを完了します。

## Logstash (Shipper) のインストール

本来なら Shipper と Elasticsearch の間には Redis をかませた方が良いようですが、このメモでは割愛します。
また、設定ファイル `*.conf` は `C:\srv\logstash\config` を作成して、そこに配置することにします。

例えば以下の様な内容の `logstash-sample.json` を用意します。

```json
input { stdin { } } output { elasticsearch { host => localhost } }
```

この設定ファイルで Logstash を起動するにはコマンドプロンプトを開き `C:\srv\logstash\bin` に移動して

```
logstash agent -f ..\config\logstash-sample.conf
```

と打つと、以下のような画面で止まります。

![logstash-startup.png](https://qiita-image-store.s3.amazonaws.com/0/58889/6987a871-0244-f1dd-1372-3133e30a829c.png)

ここで試しにコマンドプロンプト画面で `test` と入力すると Elasticsearch にもその内容が反映されます。確認のため [http://localhost:9200/_search?pretty](http://localhost:9200/_search?pretty) にアクセスすると以下の様な結果が返ります。

```json
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "logstash-2015.06.18",
      "_type" : "logs",
      "_id" : "AU4HK92CYE_QZ5I4aXei",
      "_score" : 1.0,
      "_source":{"message":"test\r","@version":"1","@timestamp":"2015-06-18T14:56:31.678Z","host":"Dev-PC"}
    } ]
  }
}
```

終了するには `Ctrl-C` を押下した後に `Y` を入力してください。

こうした Shipper を Windows サービスに登録するには

```
logstash agent -f ..\config\logstash-sample.conf
```

という内容の `run.bat` を用意して `C:\srv\logstash\bin` に保存します。そうしたら管理者権限のコマンドプロンプトから `C:\srv\nssm\win64` に移動して

```
nssm install logstash
```

として登録画面を表示し、

  - Application タブ
      - Path: C:\srv\logstash\bin\run.bat
      - Startup directory: C:\srv\logstash\bin
  - Details タブ
      - Display name: Logstash
      - Startup type: Automatic
  - Dependencies タブ
      - This service depends on the following system components: elasticsearch-service-x64

と入力して Install service ボタンを押下してインストールを完了します。

※このメモの設定ファイルだと標準入力を Input とするためサービス化しても意味がありませんが、やり方としてはこのようになります。設定ファイルは適宜変更してください。

### 補足: Logstash の使用メモリを変更する

Logstash の使用メモリを変更するには `C:\srv\logstash\bin\logstash.bat` を開いて `SETLOCAL` の下部に

```
set LS_MIN_MEM=256m
set LS_MAX_MEM=1g
```

という記述を追加してください。

## Elasticsearch Plugin のインストール

ローカル上のファイルからプラグインをインストールするにはコマンドプロンプトを開き `C:\srv\elasticsearch\bin` に移動して

```
plugin --url file:///path/to/plugin --install plugin-name
```

と打ちます。[公式プラグインリストはここ](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-plugins.html)にあります。例えば Elasticsearch Head Plugin をインストールするには GitHub から [elasticsearch-head-master.zip](https://github.com/mobz/elasticsearch-head/archive/master.zip) をダウンロードして端末に*何らかの方法*で保存し、

```
plugin --url file:///C:/Users/Dev/Downloads/elasticsearch-head-master.zip --install elasticsearch-head
```

と打ちます。これで [http://localhost:9200/_plugin/head/](http://localhost:9200/_plugin/head/) でアクセスできるようになります。ポイントはパスに含まれるバックスラッシュ "\" をスラッシュ "/" に置き換えているところでしょうか。