DockerでFluentdとElasticsearchとRe:dashを起動してログの収集と解析を行います。
Docker
dockerとdocker-composeを導入
CentOSであれば下記を参照
CentOS6.5にdockerとdocker-composeをインストール
前提
- ログは行にJSON
- Fluentd & Elasticsearchは同じサーバ上に存在
ログ例
hoge_log
{ "type": "chatlog", "name": "hoge1", "text": "hoge1" }
{ "type": "chatlog", "name": "hoge2", "text": "hoge2" }
{ "type": "chatlog", "name": "hoge3", "text": "hoge3" }
{ "type": "chatlog", "name": "hoge4", "text": "hoge4" }
{ "type": "chatlog", "name": "hoge5", "text": "hoge5" }
Fluentd & Elasticsearch
$ mkdir ~/workspace
$ cd ~/workspace
Fluentd
$ mkdir fluentd
$ cd fluentd
$ mkdir plugins
$ vi Dockerfile
$ vi fluent.conf
Dockerfile
FROM fluent/fluentd:latest-onbuild
USER fluent
WORKDIR /home/fluent
ENV PATH /home/fluent/.gem/ruby/2.3.0/bin:$PATH
RUN gem install fluent-plugin-secure-forward
RUN gem install fluent-plugin-elasticsearch
EXPOSE 24284
CMD fluentd -c /fluentd/etc/fluent.conf -p /fluentd/plugins -vv
fluent.conf
<source>
type tail
path /var/log/hoge/[log file] # 収集するログファイル名を指定
tag json.hoge
pos_file /var/log/hoge/[log file].pos # 収集するログファイル名を指定
format json
</source>
<match json.**>
type copy
<store>
type stdout
</store>
<store>
type elasticsearch
host localhost # elasticsearchのホスト
port 9200 # elasticsearchのポート
logstash_format true
</store>
</match>
Elasticsearch
$ mkdir elasticsearch
$ cd elasticsearch
$ vi Dockerfile
Dockerfile
FROM elasticsearch
RUN bin/plugin install mobz/elasticsearch-head
EXPOSE 9200
CMD ["bin/elasticsearch", "-Des.insecure.allow.root=true"]
起動
$ cd ~/workspace
$ vi docker-compose.yml
docker-compose.yml
elasticsearch:
build: elasticsearch
ports:
- 9200:9200
fluentd:
build: fluentd
ports:
- 24284:24284
volumes:
- [log folder]:/var/log/hoge # 収集するログフォルダを指定
$ docker-compose up
ElasticsearchのWebページ
http://[IP]:9200/_plugin/head/
Re:dash
詳しくは下記を参照
Re:dashをdockerで起動する
データソースを追加
Settings > DATA SOURCES > NEW DATA SOURCES
Base URLはこんな感じ
http://[IP]:9200