EC2インスタンス1台にまとめてkibana+fluentd+elasticsearchを入れたときのメモ
やること
EC2のインスタンス1台にApacheをインストールして、そのアクセスログをFluentdでパース、Elasticsearchに転送し、Kibanaで可視化することをやってみる。
AWS
EC2
t2.microのしょっぱいやつを利用。AMIはAmazon Linux。
Security Group
Inboundを設定。
Type | Protocol | Port Range | Source | Description |
---|---|---|---|---|
Custom | TCP | 80 | Anywhere | apache |
Custom | TCP | 5601 | Anywhere | kibana |
Custom | TCP | 9200 | Anywhere | elasticsearch |
パッケージインストール
もろもろUpdate
なにはともあれ最新のパッケージに更新しよう。
$ sudo yum update
Kibana
https://www.elastic.co/guide/en/kibana/current/rpm.html を見ながらインストール。
設定ファイルは /etc/kibana/kibana.yml
にあるので server.host
を書き換えて外部からアクセスできる状態でスタートできるようにする。
また、ElasticsearchのURLについてもlocalhostでアクセスできなくなるので書き換える。
server.host: "ec2-xxx-xxx-xxx-xxx.ap-northeast-x.compute.amazonaws.com"
...
elasticsearch.url: "http://ec2-xxx-xxx-xxx-xxx.ap-northeast-x.compute.amazonaws.com:9200"
設定が書き換えられたらスタート。
$ sudo /etc/init.d/kibana start
Elasticsearch
https://www.elastic.co/guide/en/elasticsearch/reference/current/_installation.html を見ながらインストール。ドキュメントをみたところrpmは用意されておらずtarを解凍して頑張るっぽい。とりあえずホームディレクトリに展開して使う。
Amazon LinuxはJava7しか入っておらず、ElasticsearchがJava8を欲していたので別途インストール。
$ sudo yum install java-1.8.0-openjdk.x86_64
OSデフォルトのJavaがJava8になるように alternatives
コマンドで切り替える。
$ sudo alternatives --config java
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
Enter to keep the current selection[+], or type selection number: 2
設定ファイルは ~/elasticsearch-5.6.0/config/elasticsearch.yml
にあるので外部から通信できるようホストの設定を以下のように書き換える。
transport.host
はlocalhostでないと動作しなかったので固定する設定を入れておく。
network.host: ec2-xxx-xxx-xxx-xxx.ap-northeast-x.compute.amazonaws.com
...
transport.host: localhost
以下のコマンドでElasticsearchが立ち上がる。が、メモリ不足で立ち上がらない。(t2.microだしね)
$ ~/elasticsearch-5.6.0/bin/elasticsearch
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 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 2060255232 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/ec2-user/hs_err_pid31308.log
仕方がないので ~/elasticsearch-5.6.0/config/jvm.options
にヒープメモリを設定する部分があるので書き換える。デフォルト2Gだったのを256MBに変更。
-Xms256m
-Xmx256m
#-Xms2g
#-Xmx2g
これで動くようになる。nohupをつけてログアウトしても動き続けるようにデーモン化して起動。
$ nohup ~/elasticsearch-5.6.0/bin/elasticsearch &
Fluentd
https://docs.fluentd.org/v0.12/articles/install-by-rpm を見ながらインストール。one-linerでサクッと。
$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh
インストール後動作確認
以下のアドレスにブラウザからアクセスできれば上々。
- Kibana
- ttp://ec2-xxx-xxx-xxx-xxx.ap-northeast-x.compute.amazonaws.com:5601/
- Elasticsearch
- ttp://ec2-xxx-xxx-xxx-xxx.ap-northeast-x.compute.amazonaws.com:9200/
Apacheログの転送設定
Apacheインストール
$ sudo yum install httpd
httpdログが格納されているディレクトリの所有者やパーミッションがrootで700という厳しい感じになっているので、権限を修正しapacheユーザーとそのグループユーザーが見れるようにする。
$ sudo chown -R apache:apache /var/log/httpd/
$ sudo chmod g+rx /var/log/httpd/
また、Fluentdがログを参照できるようFluentdの実行ユーザーであるtd-agentをapacheグループに入れる。
$ sudo usermod -G apache td-agent
httpdを起動させる。
$ sudo /etc/init.d/httpd start
Fluentd設定
/etc/td-agent/td-agent.conf
に以下を追記。
<source>
@type tail
path /var/log/httpd/access_log
tag apache.access_log
pos_file /var/log/td-agent/httpd-access.log.pos
format apache2
</source>
<match apache.**>
@type copy
<store>
@type stdout
</store>
<store>
@type elasticsearch
host EC2のIPアドレス
port 9200
type_name access_log
logstash_format true
logstash_prefix apache_access
logstash_dateformat %Y%m
</store>
</match>
このconfの中のlogstash_prefix
は後述のKibanaの設定で利用するので頭の片隅に入れておく。また、Elasticsearchのプラグインが必要なのでインストール。
$ sudo td-agent-gem install fluent-plugin-elasticsearch
Fluentdを起動させて準備完了。
$ sudo /etc/init.d/td-agent start
Kibana上でグラフが見れるようにする
Apacheサーバーにアクセス
適当にサーバーへブラウザでアクセスしてアクセスログを落としておく。
設定がうまくいっていると /var/log/td-agent/td-agent.log
にFluentdがapacheのアクセスログをパースしたデータが落ちているはず。
Kibanaのindex parttern設定
ある程度ページにアクセスしたら今度はKibanaにアクセス。すると以下のようにElasticsearchのデータソース指定の画面になるので、Index partternにapache_access-*
と入力。これはFluentdのconfファイルで触れたlogstash_prefix
と同じものを指定する。入力し終えたらCreateを押す。
完成
これでKibanaで遊べるようになった。
Author And Source
この問題について(EC2インスタンス1台にまとめてkibana+fluentd+elasticsearchを入れたときのメモ), 我々は、より多くの情報をここで見つけました https://qiita.com/deko2369/items/bc05b251cf52f5a8d356著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .