やる気がストロングZERO

やる気のストロングスタイル

Elastic Stackのセッティングメモ

Elastic Stackのセッティングをしてみたのでメモ。

対象OSはUbuntu18.04

参考)

www.elastic.co

Elastic Stackで作るBI環境 Ver.7.4対応改訂版 (技術の泉シリーズ(NextPublishing))

Elastic Stackで作るBI環境 Ver.7.4対応改訂版 (技術の泉シリーズ(NextPublishing))

  • 作者:石井 葵
  • 発売日: 2019/11/29
  • メディア: オンデマンド (ペーパーバック)

Elastic Stackとはサーバーの状態を見やすく管理するためのツール郡

サーバー運用していると、問題が起きていないかアクセスログやcpu負荷などを継続的にチェックする必要がある。
確認するにはlogファイルを開いたり、topコマンドを叩いてload averageを見たりしなければならないが、Elastic Stackを導入することでwebインターフェースから様々な視点で検索・一覧して確認できるようになり便利。

今回導入したツール郡

  • Elastic Search
  • Logstash
  • Kibana
  • Beats(Metricbeat)

Elastic Search

Elastic Searchはオープンソースの RESTful 分散検索/分析エンジンで、アクセスログやload average等の指数を保存する場所として使う。 Kibanaでのデータを表示するときにいい感じにデータを吐き出してくれる。

インストール方法

参考) Install Elasticsearch with Debian Package | Elasticsearch Reference [7.10] | Elastic

elastic stackのリポジトリ周りの設定。(1度やればOK)

$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

$ sudo apt-get install apt-transport-https

$ echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list

$ sudo apt-get update

elastic searchのインストール

$ sudo apt-get install elasticsearch

設定

モリー使用率修正

マシンのメモリが少ない場合、javaの最大ヒープサイズを調整しないと起動しないとのこと。 僕の場合1GのVPSでやってるので256MBにした。(あとでLogstashも入れるので少なめに指定)

$ sudo vim /etc/elasticsearch/jvm.options

-Xms2g
-Xmx2g

↓以下に変更
-Xms256m
-Xmx256m

起動

$ sudo systemctl start elasticsearch.service

自動起動設定

$ sudo systemctl daemon-reload
$ sudo systemctl enable elasticsearch.service

動作確認

$ curl -XGET 'localhost:9200/?pretty' # jsonがかえってこればOK

Kibana

Kibanaとはデータを検索したり表示したりするためのWebインターフェース。Elastic Searchから取得したデータをいい感じにグラフ化して表示してくれる。

インストール方法

$ sudo apt-get install kibana

設定

デフォルトだとローカルのelastic search(localhost:5601)に接続されるようになっている。もし、違う場所にあるならkibana.ymlを編集する

$ sudo vim /etc/kibana/kibana.yml

起動

$ sudo systemctl start kibana.service

自動起動設定

$ sudo systemctl daemon-reload
$ sudo systemctl enable kibana.service

Logstash

Logstashはサーバーからデータ(アクセスログやcpu使用状況など)を継続的に取得し、整形し、データストア(今回はElastic Search)へ送出するためのツール。

インストール方法

今回僕は計測対象サーバー(アプリケーションサーバー)にelastic searchやkibanaをインストールしてるので(本来は別サーバーにしたほうが良い)Logstashも同じサーバーへインストールしている。

$ sudo apt-get install logstash

設定

モリー使用率修正

elastic searchと同じ理由でメモリー使用率を修正する

$ sudo vim /etc/logstash/jvm.options

-Xms2g
-Xmx2g

↓以下に変更
-Xms256m
-Xmx256m

railsログを取り込んでElastic searchへ送り込む設定

$ sudo vim /etc/logstash/conf.d/rails.conf


input {
    file {
        path => "/railsAppDir/log/production.log"
        start_position => "beginning" # 追記されたログを取り込む
        tags => "rails_log"
    }
}

filter {
    grok {
        patterns_dir => ["./patterns"]
        match => { "message" => "(?<timestamp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY}T%{HOUR}:%{MINUTE}:%{SECOND}) #(?<pid>\d+)]  (?<level>\w+) -- : \[(?<tid>\w+-\w+-\w+-\w+-\w+)] (?<mess>.+)" } # railsログをある程度構造化して取り込むための設定(もっといいやり方があったら教えてほしい)
    }
}

output {
    elasticsearch {
        index => "rails-log-%{+YYYY.MM.dd}"
    }
}

起動

$ sudo systemctl start logstash.service

自動起動設定

$ sudo systemctl daemon-reload
$ sudo systemctl enable logstash.service

Beats(Metricbeat)

Beatsはサーバーからデータを取得し、データストアで送出するための軽量なツール郡。
対象データ毎に[○○beat]という感じで別ツールになっている。(対象データがcpu使用状況ならMetricbeat、fileデータならFilebeat、という感じ)
今回はcpu使用率などを計測するMetricbeatを使う。

Logstashよりも低機能だが軽量

Beatsはデータに対してあまり細かい設定はできない。「取得して送出」するだけ。
ただし軽量なので、
「計測対象サーバーに常駐させて、別サーバーで動いているLogstashに対して送出し、Logstashでデータ整形を行ってElastic Searchへストアする 」
というような使い方が良さそう。

インストール方法

今回僕は計測対象サーバー(アプリケーションサーバー)にelastic searchやkibanaをインストールしてるので(本来は別サーバーにしたほうが良い)Metricbeatも同じサーバーへインストールしている。

$ sudo apt-get install metricbeat

設定

デフォルトでlocalhostのElastic searchにデータ送出先が向いている。
変更の必要があれば設定ファイルを編集する

$ sudo vim /etc/metricbeat/metricbeat.yml

起動

$ sudo systemctl start metricbeat

自動起動設定

$ sudo systemctl enable metricbeat

kibanaへの接続制限どうするか(SSHポートフォワードにしてみた)

kibanaへの接続に制限をかけたい。ぱっと良い方法が浮かばなかったのでSSHポートフォワードで接続するようにしてみた。

参考)

SSHポートフォワードメモ - やる気がストロングZERO

$ ssh username@hostip -L 5601:localhost:5601 -N

上記を実行してから、ローカルマシンでlocalhost:5601へアクセスする。