使用docker五步搭建ELK日志收集分析系統


Dcoker入門與實踐系列文章

框架概覽

  • ElasticSearch 有強大的搜索功能的無模式數據庫,可以簡單的很想擴展,索引每一個字段,可以聚合分組數據。
  • Logstash 用Ruby編寫的,我們可以使用管道輸入和輸出數據到任何位置。一個可以抓取,轉換,存儲事件到ElasticSearch的ETL管道。打包版本在JRuby上運行,並使用幾十個線程進行並行的數據處理,利用了JVM的線程功能。
  • Kibana 基於web的數據分析,為ElasticSearch儀表板的工具。充分利用ElasticSearch的搜索功能,以秒為單位可視化數據。支持Lucene的查詢字符串的語法和Elasticsearch的過濾功能。

前提

  • 本文中架構基於docker搭建,需要您了解docker的基本概念,基本操作和docker1.9之后的自定義overlay網絡

本文只介紹了最簡化搭建。如果您用於生產,還需要在如下方面完善 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強大的配置來展現您的日志分析


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM