AmazonLinuxAMI ✗ Logstash ✗ Itamae

# 目的
* ALにItamaeでLogstashをインストールする

# 環境
* Amazon Linux AMI release 2017.03
* itamae (1.9.10)
* logstash-5.3.2-1.noarch
    * [Installing Logstash](https://www.elastic.co/guide/en/logstash/current/installing-logstash.htmlhttps://www.elastic.co/guide/en/logstash/current/installing-logstash.html)

# Logstash
## 構成
* Logstashには2種類の構成ファイルがある

```
/etc/logstash/
├── conf.d
├── jvm.options
├── log4j2.properties
├── logstash.yml
└── startup.options
```

 1. pipeline configuration files
     - `/etc/logstash/conf.d/`に置く
     - `/etc/logstash/conf.d/`配下をすべてロードするため、バックアップファイルも置かないようにする
 2. settings files
     - logstash.yml
         - パイプライン設定、構成ファイルの場所、ログオプション、およびその他の設定を指定し、Logstashの実行を制御する
     - jvm.options
         - JVM設定ファイル
     - startup.options
         - システムに適した起動スクリプトが作成されるよう定義されている
 
# Itamae
## 構成
```
/execution/
├── file
│   └── etc
│       └── yum.repos.d
│           └── logstash.repo
└── logstash-install.rb
```

## 設定
```logstash-install.rb
package "expect" do
  action :install
end

package "java-1.8.0-openjdk.x86_64" do
  action :install
end

execute "import public signing key" do
  command "sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch"
end

execute "backup /etc/yum.repos.d/logstash.repo" do
  command "cp --backup=number -f /etc/yum.repos.d/logstash.repo /etc/yum.repos.d/logstash.repo"
end

remote_file "/etc/yum.repos.d/logstash.repo" do
  source "file/etc/yum.repos.d/logstash.repo"
  owner "root"
  group "root"
  mode "644"
end

package "logstash" do
  action :install
end

execute "execution system-install" do
  command "/usr/share/logstash/bin/./system-install /etc/logstash/startup.options sysv"
  not_if 'test -e /etc/rc.d/init.d/logstash'
end

execute "chkconfig add" do
  command "sudo chkconfig --add logstash"
end

service "logstash" do
  action :start
end
```

```logstash.repo
[logstash-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
```

## 実行
`$ itamae ssh -i <key> -u <user> -h <hostname> logstash-install.rb`

##　補足
* logstashはjava8で動作するので、java7から切り替えるためにexpectを使用して切り替えを自動化

```java-change.sh
#!/bin/bash
expect -c "
  spawn sudo alternatives --config java
  expect \":\"
  send \"2\n\"
  interact
"
```

- befor

```
There are 2 programs which provide 'java'.

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

- after

```
There are 2 programs which provide 'java'.

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

# 所感
* 公式にALについての記述が確認できなかった為、`system-install`を使用した起動設定の箇所で嵌りました。
    * `/etc/logstash/startup.options`にシステムに適した起動スクリプトが作成されるよう定義されている

```
Usage: system-install [OPTIONSFILE] [STARTUPTYPE] [VERSION]

NOTE: These arguments are ordered, and co-dependent

OPTIONSFILE: Full path to a startup.options file
OPTIONSFILE is required if STARTUPTYPE is specified, but otherwise looks first
in /usr/share/logstash/config/startup.options and then /etc/logstash/startup.options
Last match wins

STARTUPTYPE: e.g. sysv, upstart, systemd, etc.
OPTIONSFILE is required to specify a STARTUPTYPE.

VERSION: The specified version of STARTUPTYPE to use.  The default is usually
preferred here, so it can safely be omitted.
Both OPTIONSFILE & STARTUPTYPE are required to specify a VERSION.

For more information, see https://github.com/jordansissel/pleaserun
```
* 下記のようにディストリビューションに合わせて実行が必要だったようです。

```
(snip)
  command "/usr/share/logstash/bin/./system-install /etc/logstash/startup.options sysv"
(snip)
```