Elastic Stackのセッティングをしてみたのでメモ。
対象OSはUbuntu18.04
参考)
Elastic Stackで作るBI環境 Ver.7.4対応改訂版 (技術の泉シリーズ(NextPublishing))
- 作者:石井 葵
- 発売日: 2019/11/29
- メディア: オンデマンド (ペーパーバック)
- Elastic Stackとはサーバーの状態を見やすく管理するためのツール郡
- 今回導入したツール郡
- Elastic Search
- Kibana
- Logstash
- Beats(Metricbeat)
- kibanaへの接続制限どうするか(SSHポートフォワードにしてみた)
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 username@hostip -L 5601:localhost:5601 -N
上記を実行してから、ローカルマシンでlocalhost:5601へアクセスする。