框架概覽

- ElasticSearch 有強大的搜索功能的無模式數據庫,可以簡單的很想擴展,索引每一個字段,可以聚合分組數據。

- Logstash 用Ruby編寫的,我們可以使用管道輸入和輸出數據到任何位置。一個可以抓取,轉換,存儲事件到ElasticSearch的ETL管道。打包版本在JRuby上運行,並使用幾十個線程進行並行的數據處理,利用了JVM的線程功能。

- Kibana 基於web的數據分析,為ElasticSearch儀表板的工具。充分利用ElasticSearch的搜索功能,以秒為單位可視化數據。支持Lucene的查詢字符串的語法和Elasticsearch的過濾功能。

前提
本文只介紹了最簡化搭建。如果您用於生產,還需要在如下方面完善 1.elastic是有存儲目錄,需要在docker中進行數據卷映射。配置文件elasticsearch.yml需要根據自己需求自行配置。請參考:https://hub.docker.com/_/elasticsearch/ 2.Dockerhub官方提供的鏡像基於不同的基礎鏡像,不利於網絡傳輸!建議根據自己組織內部鏡像重新創建!
Docker搭建ELK的javaweb應用日志收集存儲分析系統
第一步:啟動elasticsearch
docker run -d --name myes \ --net=multihost --ip=192.168.2.51 \ elasticsearch:2.3
- 采用docker自定義overlay網絡multihost,設置容器ip為192.168.2.51
第二步:啟動kibana
docker run --name mykibana \
-e ELASTICSEARCH_URL=http://192.168.2.51:9200 \ --net=multihost \ -p 5601:5601 \ -d kibana:4.5
- 采用自定義網絡multihost,ip隨機分配
- 在宿主機啟動kibana,容器端口5601映射到宿主機端口5601,可以通過http://<宿主機ip>:5601訪問kibana
- 參數ELASTICSEARCH_URL指向第一步中啟動的elasticsearch
第三步:logstash配置文件
- logstash.conf,這個文件名字可以隨便起
input {
log4j { mode => "server" host => "0.0.0.0" port => 3456 type => "log4j" } } output { elasticsearch { hosts => ["192.168.2.51"] } }
- 輸入模式log4j的服務,監聽於當前容器的3456端口。也就是數據源需要向容器的3456端口發送日志。
第四步:啟動logstash
docker run -d \
-v "$PWD":/config-dir \ -p 3456:3456 \ --net multihost \ logstash:2.3 \ logstash -f /config-dir/logstash.conf
- 采用自定義網絡multihost,ip隨機分配
- 在宿主機啟動logstash,容器端口3456映射到宿主機端口3456.(這么做是假設您的應用不是docker化的,所以ip不在自定義網絡multihost內.如果web應用docker化,並與logstash共同使用同一個自定義網絡,則端口不需要對外映射)
- 容器配置文件/config-dir/logstash.conf映射到宿主機當前目錄下面。即你需要將logstash.conf放到當前目錄"$PWD"下啟動。(這個目錄可以調整)
第五步:web應用log4j日志TCP輸出
- 為log4j.properties添加tcp輸出,代碼片段如下:
log4j.rootLogger = DEBUG,tcp log4j.appender.tcp=org.apache.log4j.net.SocketAppender log4j.appender.tcp.Port=3456 log4j.appender.tcp.RemoteHost=192.168.1.158 log4j.appender.tcp.ReconnectionDelay=10000 log4j.appender.tcp.Application=ssmm
- RemoteHost是logstash所在的宿主機ip.如果您的web應用docker化,可以是容器ip
- 發送日志到3456端口 > 最重要的事不要忘了,啟動您的web應用。日志才能發過去!
絕不忽悠,看看結果
- 以下為原始日志,您可以用kibana強大的配置來展現您的日志分析
