程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 從頭開始搭建分布式日志平台的docker環境,搭建docker

從頭開始搭建分布式日志平台的docker環境,搭建docker

編輯:JAVA綜合教程

從頭開始搭建分布式日志平台的docker環境,搭建docker


 

上篇(spring mvc+ELK從頭開始搭建日志平台)分享了從頭開始搭建基於spring mvc+redis+logback+logstash+elasticsearch+kibana的分布式日志平台,是在windows平台下操作的,這篇主要是將這些軟件環境全部在linux+docker折騰一遍。
 


  我們的目的是需要在docker中安裝像resis,elk這些軟件環境,由於我是windows平台,搜索一把找到了boot2docker,但在安裝時提示需要用dockermachine來安裝,dockermachine與Oracle VM VirtualBox配合來完成,在創建一個docker時會自動創建一個linux虛似機。經過對比,我最終決定按傳統的方式來做,在linux系統中去安裝docker.虛似機我選擇了VMware Workstation Pro,操作系統選擇最新的ubantu,,安裝好之後,還需要做很多操作,比如:磁盤映射,窗口大小分辨率,粘貼復制的支持等等這些方便使用虛似機的設置。

  有了虛似機,就可以開始搞docker了,安裝docker環境這個操作比較簡單,我們只需要按照這個鏈接(Installation on Ubuntu)中的操作一步一步就可以了,雖然有些操作命令你不一定熟悉,但也不需要過份緊張,我們只求安裝成功,有興趣的可細研究每條命令的用途。文章中需要根據自己安裝的ubuntu版本來執行相應的命令,新版本反而更加簡單些,安裝成功了也附加了測試方式。我們執行下docer version,如果看到如下圖所示說明已經安裝成功。

  安裝軟件,安裝軟件一種是直接去下載壓縮包,解壓來安裝,這種自控能力比較強,但相對麻煩,這裡我們可以選擇已經做好的image文件方式來安裝,所有的image都可以在hub.docker中查找到,其中包含了詳細的操作步驟,下面主要分享在安裝過程中遇到的一些問題。

  在執行時,如果發現有些命令不清楚,第一個方法是去官網上查,第二個就是利用-h或者--help在命令中查看。
 

  •   redis
docker run -v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis redis-server /usr/local/etc/redis/redis.conf


     我按上面的命令寫出了下面的版本:
    

docker run -dit --name redis  --hostname  redis-host  -v /data:/data -p 6379:6379 redis redis-server /data/redis.conf


     上面的指令導致docker執行異常,問題出在配置文件的指定上,修改了加載配置文件的路徑,改成下面的可正常運行,不知道是否是配置文件的路徑不支持隨意修改的原因,下面的命令沒有指定redis-server以及配置文件,初步看來默認會加載配置文件,有待後續驗證。
    

docker run -dit --name redis  --hostname  redis-host  -v /data:/data -v /data/redis.conf:/usr/local/etc/redis/redis.conf -p 6379:6379 redis
    • -p是端口映射,docker內部的端口映射到host的端口,比如安裝了多個resis時,這個端口映射就必備設置,否則會出現host上的端口被占用的情況。
    • --name,這個是為了方便根據docker的名稱來操作docker,否則只能根據生成的ID來操作,不直觀,比如我們可以 docker start redis來啟動。

               

    • --hostname,這個是進入docker後的一個顯示名稱,比如執行docker exec -it redis bash後出現的名稱

               

    • -v是磁盤路徑映射,docker與host主機之間的路徑關系
    • -d是機後台方式運行,其它的i與t可以查文檔
    • 如果不指定image的版本,它會自動尋找最新的版本來安裝。
  •   logstash
docker run -dit --name logstash  --hostname  logstash-host -v /data:/data logstash logstash -f /data/logstash.conf

     logstash的安裝沒有出現redis的一波三折,配置文件的路徑可直接指定,問題出在配置文件的配置上,下面是運轉正常的配置

input {

    redis {
        data_type => "list"
        key => "logstash"
        host => "192.168.21.128"
        port => 6379
        threads => 5
        codec => "json"
    }
}
filter {

}
output {
 elasticsearch {
        hosts => ["192.168.21.128"]
    }

    stdout{}
}


    之前的windows版本有介紹配置,但在docker下配置有所不同,直接將windows版的配置文件拿過來,出現了logstash無法將redis中的日志輸出到elastcsearch中,輸出配置如下:

output {
   
    elasticsearch {
        hosts => ["127.0.0.1:9200"]
        index => "logstash-%{type}-%{+YYYY.MM.dd}"
        document_type => "%{type}"
        workers => 1
        flush_size => 20
        idle_flush_time => 1
        template_overwrite => true
    }
    stdout{}
}

    這裡從兩方面分析:
    input:確認logback是否將日志持久化到redis,可使用key *來查看是否有我們專門為日志配置的logstash這個key,然後使用llen logstash來測試日志有沒有隨程序的執行而增加,確認的結果是可以查到logstash這個key,而且長度隨程序的執行而增加,那現在的問題就在 於logstash並沒有將redis中的日志取走去執行並輸出到elasticsearch中,將output中的elasticsearch的配置刪 除,只保留stdout,結果發現logstash可以正常的取走日志。

   output: input的排查說明問題出在output,然後采取最少配置方法,只配置最重要的屬性,按文檔中配置hosts再運行,結果程序運轉正常。
    我們按照https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html文章中說的來配置,注意hosts屬性,之前配置的某些屬性可能有問題,這裡采取優先級最少配置法來排查問題。

  •   elasticsearch
docker run -dit --name elasticsearch  --hostname  elasticsearch-host  -v /data:/data -p 9200:9200 -p 9300:9300 elasticsearch:latest


      elasticsearch的安裝比較奇怪,按上面的命令安裝後,在客戶端訪問http9200端口,提示拒絕訪問,端口顯示為tcp,後經過無數次安裝,無意中一次安裝成功了,正常的映射了端口,目前詳細的問題還沒有找到,等後續有機會再研究。我們看docker ps後顯示的結果,目前正常的情況下那個端口顯示為如下圖,之前出現問題時端口顯示不是:0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp而是9200/tcp, 9300/tcp。

    

  •   kibana
docker run -dit --name kibana  --hostname  kibana-host  -v /data:/data -p 5601:5601 -e ELASTICSEARCH_URL=http://192.168.21.128:9200  kibana:latest


     kibana的執行命令也是遇到配置文件指定的問題,後來將屬性直接放在命令上了,這也是後續需要解決的問題。

   

    上面四項都成功安裝後,我們的日志就可以成功的采集到elasticsearch中了。
    
 
    上面的docker在啟動後,並不具備自啟功能,做也是可以做到的。如果沒有做成自啟功能,我們也不能一個命令一個命令去重新啟動,這裡有一個命令可以一次性全部啟動docker,非常實用。

  

docker start `docker -ps -a -q`

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved