Elastic Stack 5.0がリリースされたのでログの可視化をしようとしたらできなかった話
この間elastic stack 5.0系が出たので使ってみようと頑張ったログです。 技術系のアウトプットは基本的にQiitaにするけど収集できなかったのではてぶに投稿、、、
使うもの
https://www.elastic.co/jp/products
週に500ユーザーくらいのwebサーバーだからBeatいらない気もするけどせっかくなので構成に入れてみた。
したかった構成
共通の環境構築
java
sudo yum update -y sudo yum remove -y java-1.7.0-openjdk sudo yum install -y java-1.8.0-openjdk-devel sudo yum install -y java-1.8.0-openjdk-debuginfo --enablerepo=*debug*
yum
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch sudo vi /etc/yum.repos.d/elastic.repo
[elasticsearch-5.x] name=Elasticsearch 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
ELKサーバーの構築
Elasticsearch
sudo yum install -y elasticsearch
Kibana
sudo yum install -y kibana sudo vi /etc/kibana/kibana.yml
#server.host: "localhost" を server.host: "XXX.XXX.XXX" に書き換え
起動
sudo service elasticsearch start sudo service kibana start
elasticsearchの起動確認コマンド
$ curl 'localhost:9200' { "name" : "qLGo9hB", "cluster_name" : "elasticsearch", "cluster_uuid" : "XETXNZ0kQTWiw_dFNZWMhg", "version" : { "number" : "5.0.0", "build_hash" : "253032b", "build_date" : "2016-10-26T04:37:51.531Z", "build_snapshot" : false, "lucene_version" : "6.2.0" }, "tagline" : "You Know, for Search" }
Elasticsearch起動エラー
サーバーのメモリが少なすぎてElasticsearch起動時にエラーが出た
Starting elasticsearch: OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000006d0660000, 4019847168, 0) failed; error='Cannot allocate memory' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 4019847168 bytes for committing reserved memory. # An error report file with more information is saved as: # /tmp/hs_err_pid21456.log [FAILED]
5.0ではES_HEAP_SIZEをelasticsearch.ymlに書けない
sudo vi /etc/elasticsearch/jvm.options
サーバーのスペックに合わせて設定
-Xms1000m -Xmx1000m
Kibanaにアクセス
http://XXX.XXX.XXX.XX:5601にアクセスするとKibanaの画面がでる
Logstash
sudo yum install -y logstash sudo vi /etc/logstash/conf.d/logstash.conf
動かしてないから雰囲気で
input{ beats{ host => "YYY.YYY.YYY.YY" port => 5044 } } output{ elasticsearch{ hosts => ["localhost:9200"] index => "accesslog-%{+YYYYMM}" } }
起動
sudo initctl start logstash
webサーバー(Railsアプリケーション)
filebeatsでELKサーバーにログを流す
sudo yum install -y filebeat sudo vi /etc/filebeat/filebeat.yml
動かしてないから雰囲気で
filebeat.prospectors: - input_type: log paths: - /var/log/nginx/access.log output.logstash: hosts: ["http://XXX.XXX.XXX.XX:5044"] index: filebeat
起動
sudo /etc/init.d/filebeat start
できなかった理由とかまとめ的な
- そもそもfilebeatから直で別サーバーのlogstashに流せない(?)
- [logfile -> filebeat -> logstash] -> [logstash -> elasticsearch -> kibana]が正しい構成(?)
- サーバーのスペック問題 => AWSのEC2インスタンスを作る
- logstashとbeatの書き方がわからん => 試しに実行するとESが止まっちゃう
- sslでじゃないとforwardできないみたいな情報を見た気がする
free -tmコマンドでメモリ使用量をみるとこんな感じ Logstash elasticsearch kibana起動しただけでの使用量
AWS EC2で構築しなおします。