プログラミングを完全に理解したエンジニアのメモ

チラ裏レベルのことしか書いてないインターネットの藻屑

Elastic Stack 5.0がリリースされたのでログの可視化をしようとしたらできなかった話

この間elastic stack 5.0系が出たので使ってみようと頑張ったログです。 技術系のアウトプットは基本的にQiitaにするけど収集できなかったのではてぶに投稿、、、

使うもの

https://www.elastic.co/jp/products

  • Beats
  • Logstash
  • Elasticsearch
  • Kibana
  • GMOVPSサーバー2台(CentOS6.2 x64/メモリ1G/SSD50GB/CPU 2Core)

週に500ユーザーくらいのwebサーバーだからBeatいらない気もするけどせっかくなので構成に入れてみた。

したかった構成

f:id:fujitora:20161031175613p:plain

共通の環境構築

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の画面がでる スクリーンショット 2016-10-30 18.18.03.png

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起動しただけでの使用量

f:id:fujitora:20161031171731p:plain

AWS EC2で構築しなおします。

参考サイト

acro-engineer.hatenablog.com

snickerjp.blogspot.jp

www.elastic.co