docker-compose 搭建ELK spring-boot

docker-compose 搭建ELK

本文主要是參考別人博客橙数,并迭代記錄一些原文沒有遇到或者說明的問題,供自己以后有相關(guān)問題來查看奠旺,并分享給大家

個(gè)人而言响疚,docker-compose 相對(duì) docker 分開部署簡單忿晕,可以一步到位银受。所以選擇docker-compose搭建宾巍。

如果有遇到什么問題顶霞,請查看最后的問題記錄锣吼!

環(huán)境說明

? 云機(jī)-Debian10

docker 安裝

? 請參考:https://www.runoob.com/docker/debian-docker-install.html玄叠,講的非常好读恃!

docker-compose安裝

? 請參考:https://www.runoob.com/docker/docker-compose.html寺惫,這里我也再次說明一下吧胆数。<u>主要解決服務(wù)器從github下載會(huì)很慢的問題必尼。所以下面將直接從github下載判莉,再復(fù)制到服務(wù)器上</u>

  1. 直接從github安裝

    下載地址:https://github.com/docker/compose/releases券盅,選定一個(gè)版本然后下載膛檀。

  2. 下載docker-compose-Linux-x86_64 linux的版本

1582798022(1).jpg
  1. 將下載的文件復(fù)制到云機(jī)上(使用scp或者用圖形化界面都可以)

    scp ./docker-compose-Linux-x86_64 root@192.168.1.13:/usr/local/bin/docker-compose
    
  2. 賦予可執(zhí)行權(quán)限

    如何debian提示sudo command not found泳炉,直接不用sudo或者安裝一個(gè):apt-get install sudo

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. 創(chuàng)建軟鏈

    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    
  4. 測試安裝是否成功

    docker-compose --version
    

安裝ELK環(huán)境

  • 安裝ELK

    • 創(chuàng)建ELK的docker-compose目錄

      mkdir /usr/software/elk
      
    • 從github拉取搭建ELK的腳本

      該項(xiàng)目是使用Docker和Docker Compose 運(yùn)行最新版本的[Elastic Stack]

      git clone https://github.com/deviantony/docker-elk.git
      
    • 進(jìn)入剛剛clone下來的文件夾

      cd docker-elk
      
    • 啟動(dòng)容器

      首次啟動(dòng)最好不要后臺(tái)啟動(dòng)(守護(hù)進(jìn)程)花鹅,我們最好直接查看他啟動(dòng)的日志情況:

      方式1(可以查看到日志刨肃,首次創(chuàng)建最好使用這個(gè)真友,等觀察啟動(dòng)沒問題再使用后臺(tái)啟動(dòng)):

      docker-compose up
      

      方式1(守護(hù)進(jìn)程):

      docker-compose up -d
      

      一般控制臺(tái)沒有異常輸出盔然,那么就代表啟動(dòng)成功了:

      Successfully started Logstash API endpoint {:port=>9600}
      

      查看docker容器運(yùn)行狀況:

      docker ps
      
      1582855756(1).jpg

各個(gè)服務(wù)端口運(yùn)行情況如下:

名稱 端口 說明
Logstash TCP input 5000 用于應(yīng)用傳入數(shù)據(jù)進(jìn)入logstash的端口
Elasticsearch HTTP 9200 是ES節(jié)點(diǎn)與外部通訊使用的端口轻纪。它是http協(xié)議的RESTful接口;各種CRUD操作都是走的該端口,如查詢:http://localhost:9200/user/_search
Elasticsearch TCP transport 9300 是ES節(jié)點(diǎn)之間通訊使用的端口刻帚。它是tcp通訊端口崇众,集群間和TCPclient都走的它。java程序中使用ES時(shí)锰蓬,在配置文件中要配置該端口
Kibana 5601 Kibana的Web界面入口
  • 登入Kibana 界面

    下面就是可以見到成果的時(shí)候了芹扭!在網(wǎng)頁輸入服務(wù)器的地址:http://192.168.1.13:5601舱卡。

    登入默認(rèn)的就是es的用戶密碼轮锥,用戶名:elastic要尔,密碼:changeme

    如果是云機(jī)的外網(wǎng)ip赵辕,而且沒辦法連通的話匆帚,那么優(yōu)先考慮云機(jī)服務(wù)商的安全組的配置吸重,再考慮防火墻,Debian本身的沒有開啟防火墻的颜矿。所以骑疆,麻煩到云服務(wù)商的安全組配置箍铭,開放5601接口

  • 配置ELK參數(shù)诈火,讓spring boot應(yīng)用的日志可以輸入到logstash中

    • 進(jìn)入logstash配置文件所在目錄

      cd /home/xijie/app/myelk/dokcer-elk/logstash/pipeline
      
    • 打開配置文件

      vim logstash.conf
      
    • 修改內(nèi)容如下:

      這里和原來的博文區(qū)別就在于冷守,添加了es的權(quán)限驗(yàn)證,因?yàn)閐ocker-compose中默認(rèn)開啟了 X-Pack的安全驗(yàn)證亮钦,如果不添加啟動(dòng)會(huì)沒辦法連接上的

      input{
              tcp {
                      mode => "server"
                      port => 5000
                      codec => json_lines
                      tags => ["data-http"]
              }
      }
      filter{
          json{
              source => "message"
              remove_field => ["message"]
          }
      }
      output{
          if "data-http" in [tags]{
              elasticsearch{
                  hosts=> ["elasticsearch:9200"]
                  index => "data-http-%{+YYYY.MM.dd}"
                  user => "elastic"
                  password => "changeme"
              }
              stdout{codec => rubydebug}
          }
      }
      

      參數(shù)說明參考文章:

      標(biāo)簽 說明
      input(logstash進(jìn)數(shù)據(jù)接口) 使用的是tcp,說明springboot客戶端需要將日志傳遞到該接口巡语,該接口正是logstash服務(wù)器接口淮菠。
      filter(數(shù)據(jù)過濾器) 將message字段去掉合陵,只是為了當(dāng)展示springboot的http請求接口的數(shù)據(jù)更加規(guī)整拥知,而不是全部展示在message字段中
      output(數(shù)據(jù)出去接口) 將數(shù)據(jù)傳遞給了elasticsearch低剔,這里使用了if襟齿,當(dāng)判斷所出數(shù)據(jù)為所指定tag猜欺,才進(jìn)行下面的配置拷窜。特別要注意index的配置,該值在kibana中需要使用笋妥,這里指定的index值為:data-http挽鞠,要注意該值與tag是沒有關(guān)系的信认,要注意區(qū)分嫁赏。
    • 返回源目錄油挥,重啟容器

      cd /usr/software/elk/docker-elk
      
      docker-compose restart
      
  • 配置spring-boot應(yīng)用

    • 添加logstash依賴

      <dependency>
              <groupId>net.logstash.logback</groupId>
               <artifactId>logstash-logback-encoder</artifactId>
               <version>5.2</version>
      </dependency>
      
    • 添加logstash配置攘乒,修改/添加logback.xml文件惋鹅,內(nèi)容如下:

      這里盡量簡單闰集,就是為了打通spring-boot和logstash武鲁,打通了一切都好理解了沐鼠。

      <?xml version="1.0" encoding="UTF-8"?>
      <configuration>
          <include resource="org/springframework/boot/logging/logback/base.xml" />
          <root level="INFO">
              <appender-ref ref="CONSOLE" />
          </root>
          <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
              <!--配置logStash 服務(wù)地址饲梭,可以寫成配置的形式排拷,但是為了方便,就直接寫死在這里-->
              <destination>192.168.1.13:5000</destination>
              <!-- 日志輸出編碼 -->
              <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
          </appender>
          <!--定義elk日志的名稱布蔗,需要上傳的則使用該logger-->
          <logger name="elk_logger" level="INFO" additivity="false">
              <appender-ref ref="LOGSTASH"/><!--輸出到logstash-->
              <appender-ref ref="CONSOLE"/><!--同時(shí)輸出到控制臺(tái)-->
          </logger>
      </configuration>
      
      
    • 在業(yè)務(wù)代碼中纵揍,使用配置好的elk_logger打印泽谨,就可以同時(shí)把日志輸出到logstash吧雹,并且存入ES了雄卷。

      ....
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      ....
      private static Logger logger = LoggerFactory.getLogger("elk_logger");//必須是這個(gè)名字
      
      ...
      logger.info("我是一個(gè)簡易的spring-boot連接ELK的應(yīng)用");
      ...
      

      以上完整的例子代碼在這里:github

  • 配置Kibana丁鹉,現(xiàn)在只要服務(wù)器通過指定的Tag打印日志妒潭,日志信息將會(huì)上傳logstash解析,并且存儲(chǔ)到elasticsearch揣钦,然后只需要kibana配置對(duì)應(yīng)的elasticsearch的index即可看到所需的日志信息雳灾。

    通過瀏覽器訪問kibana台谢,http://192.168.1.13:5601俯邓,然后點(diǎn)擊最下面的management暑竟,再點(diǎn)擊Kibanaindex_patterns

1582877894(1).jpg

? 創(chuàng)建index_patterns

?
1582878470(1).jpg

? 接下來掺喻,在index pattern框中填入上述創(chuàng)建ElK時(shí)logstash配置文件中的index信息:data-http-*

1582878795(1).jpg

? 注意樱溉!如果ES沒有數(shù)據(jù)是無法添加索引的构订!所以要確保之前的操作能夠成功,如果不能寫入空凸,請查看文章最下面的參考。

? 選擇@timestamp字段作為時(shí)間篩選字段寸痢。

1582878988(1).jpg

? 點(diǎn)擊最上面的指南針的圖標(biāo)(Discover)呀洲,然后選中data-http*索引就能夠看到對(duì)應(yīng)的日志了。

?
1582879209(1).jpg

以上啼止,spring-boot結(jié)合ELK的系統(tǒng)就搭建完成了道逗!

錯(cuò)誤記錄

我在搭建的過程中,遇到了以下的坑献烦,浪費(fèi)了我比較多時(shí)間

  1. spring-boot無法寫入logstash滓窍,但是spring-boot應(yīng)用能正常啟動(dòng),Kibana頁面能夠正常訪問巩那。

    這種情況吏夯,一般不會(huì)是應(yīng)用的問題此蜈,因?yàn)閼?yīng)用部分配置非常簡單!就算有錯(cuò)噪生,在啟動(dòng)的時(shí)候也會(huì)非常明顯裆赵,所以很有可能就是在ELK服務(wù)那邊。

    查看ELK日志

    這一點(diǎn)跺嗽,很重要战授!我就是一個(gè)個(gè)ELK服務(wù)看日志,才發(fā)現(xiàn)了問題桨嫁,日志體現(xiàn)如下:不斷的刷日志植兰;出現(xiàn)以下錯(cuò)誤:

    [2020-02-28T08:46:26,997][ERROR][io.netty.util.concurrent.DefaultPromise.rejectedExecution] Failed to submit a listener notification task. Event loop shut down?
    java.util.concurrent.RejectedExecutionException: event executor terminated
    

    以上的日志的原因是,貌似有多個(gè)logstash實(shí)例同時(shí)啟動(dòng)在同一端口璃吧,導(dǎo)致了死循環(huán)钉跷。可以參考:https://github.com/elastic/elasticsearch/issues/27226肚逸,上面說In case anyone (like me) lands here with the same error: check that you're not trying to run multiple instances of Logstash on the same port!

    對(duì)于我爷辙,原因如下:

    我把原來的logstash的配置備份一份,文件結(jié)構(gòu)如下:

    logstash.conf logstash.conf.bak

    于是朦促,我就把logstash.conf.bak刪除膝晾,再啟動(dòng)就可以了!

  2. logstash啟動(dòng)失敗务冕,logstash連接es失敗

    日志表現(xiàn)如下:

    [2020-02-27T08:34:46,451][WARN ][logstash.outputs.elasticsearch] Attempted to resurrect connection to dead ES instance, but got an error. {:url=>"http://elasticsearch:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError, :error=>"Got response code '401' contacting Elasticsearch at URL 'http://elasticsearch:9200/'"}
    

    解決方案:修改logstash.conf文件血当,添加es的權(quán)限驗(yàn)證信息

    vi /home/xijie/app/myelk/dokcer-elk/logstash/pipeline/logstash.conf
    

    內(nèi)容如下:

    input{
            tcp {
                    mode => "server"
                    port => 5000
                    codec => json_lines
                    tags => ["data-http"]
            }
    }
    filter{
        json{
            source => "message"
            remove_field => ["message"]
        }
    }
    output{
        if "data-http" in [tags]{
            elasticsearch{
                hosts=> ["elasticsearch:9200"]
                index => "data-http-%{+YYYY.MM.dd}"
                user => "elastic"
                password => "changeme"
            }
            stdout{codec => rubydebug}
        }
    }
    

    以上關(guān)鍵在于,添加了es的user和password:

     elasticsearch{
         hosts=> ["elasticsearch:9200"]
         index => "data-http-%{+YYYY.MM.dd}"
         user => "elastic"
         password => "changeme"
     }
    

    總結(jié)

    ? 通過docker-compose能夠快速的搭建ELK環(huán)境禀忆,然后再通過logstash的jar可以非常方便的將應(yīng)用的日志推送到logstash臊旭,下面我會(huì)繼續(xù)熟悉Kibana的使用。

    參考

    docker部署ELK(logstash箩退、elasticsearch离熏、kibana),監(jiān)控日志
    https://github.com/deviantony/docker-elk/issues/446

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末戴涝,一起剝皮案震驚了整個(gè)濱河市滋戳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啥刻,老刑警劉巖奸鸯,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異可帽,居然都是意外死亡娄涩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門映跟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蓄拣,“玉大人扬虚,你說我怎么就攤上這事⊥溲粒” “怎么了孔轴?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長碎捺。 經(jīng)常有香客問我路鹰,道長,這世上最難降的妖魔是什么收厨? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任晋柱,我火速辦了婚禮,結(jié)果婚禮上诵叁,老公的妹妹穿的比我還像新娘雁竞。我一直安慰自己,他們只是感情好拧额,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布碑诉。 她就那樣靜靜地躺著,像睡著了一般侥锦。 火紅的嫁衣襯著肌膚如雪进栽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天恭垦,我揣著相機(jī)與錄音快毛,去河邊找鬼。 笑死番挺,一個(gè)胖子當(dāng)著我的面吹牛唠帝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播玄柏,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼襟衰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了禁荸?” 一聲冷哼從身側(cè)響起右蒲,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赶熟,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陷嘴,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡映砖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了灾挨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邑退。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡竹宋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出地技,到底是詐尸還是另有隱情蜈七,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布莫矗,位于F島的核電站飒硅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏作谚。R本人自食惡果不足惜三娩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妹懒。 院中可真熱鬧雀监,春花似錦、人聲如沸眨唬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匾竿。三九已至瓦宜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搂橙,已是汗流浹背歉提。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留区转,地道東北人苔巨。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像废离,于是被迫代替她去往敵國和親侄泽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容