基于docker部署的微服務架構(七): 部署ELK日志統(tǒng)計分析系統(tǒng)

前言

上一篇 基于docker部署的微服務架構(六): 日志統(tǒng)一輸出到kafka中間件 中,已經把分散在各個項目中的日志集中輸出到了 kafka 中間件,可以在 kafka 中查看所有項目的日志。這種在控制臺查看日志的方式很不方便,也不直觀,搜索功能也很弱,不能滿足日志統(tǒng)計分析的需求。下邊來搭建 ELK 日志統(tǒng)計分析系統(tǒng),通過 kibana 提供的web頁面來查看日志。
簡單介紹下 ELKELKelasticsearch、 logstash、kibana 的簡稱,這三種工具各司其職,一起協(xié)作完成日志統(tǒng)計分析的功能。

  • logstash 日志收集管道,把日志導入到 elasticsearch
  • elasticsearch 存儲日志,并提供基于 Lucene 的全文檢索功能
  • kibana 提供日志數據展示界面和各種統(tǒng)計圖表

之前已經把日志都輸出到 kafkabasic-log topic 下,只需要使用 logstashkafka 中的數據導入到 elasticsearch 即可。

搭建ELK

啟動 elasticsearchdocker 容器:

elasticsearch 容器比較簡單,只需要掛載一個數據卷用來存儲數據即可。

運行 docker pull elasticsearch:5.0.1 下載 elasticsearch 目前最新的鏡像文件。
在宿主機上創(chuàng)建掛載目錄 mkdir -p /elasticsearch/data,用于存儲數據。
運行

    docker run -d --name elasticsearch \
    --volume /etc/localtime:/etc/localtime \
    --volume /elasticsearch/data:/usr/share/elasticsearch/data \
    --publish 9200:9200 \
    --publish 9300:9300 \
    elasticsearch:5.0.1

啟動 elasticsearch 容器。
啟動時如果報 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144],修改配置文件 vim /etc/sysctl.conf,增加 vm.max_map_count=655360。保存之后運行 sysctl -p。重新啟動 elasticsearch 容器。

啟動 logstashdocker 容器:

logstash 容器需要使用自定義的鏡像,用 CMD 指定加載配置文件,才能在啟動容器的時候使用 -d 參數運行在后臺。直接在 docker run -d 的時候指定配置文件,在容器啟動之后會自動退出,不知道是不是 bug,但是使用自定義鏡像可以解決這個問題。
運行 docker pull logstash:5.0.1-1 下載 logstash 目前最新的鏡像文件。
在宿主機上創(chuàng)建掛載目錄 mkdir -p /logstash/config-dir,用于存放 logstash 的配置文件。
在目錄中創(chuàng)建 logstash.conf 配置文件,文件內容:

    input {
      kafka {
        bootstrap_servers => "kafka:9092"
        group_id => "logstash"
        topics => ["basic-log"]
      }
    }

    output {
      stdout {}
      elasticsearch {
          hosts => ["elasticsearch:9200"]
      }
    }

配置文件配置了一個 input 數據輸入源,從 kafkabasic-log topic 讀取數據。
配置了兩個 output 輸出源:

  • stdout 控制臺輸出,把從 input 讀取的數據輸出到 logstash 控制臺
  • elasticsearch 把從 input 讀取的數據輸出到 elasticsearch

這里的 kafkaelasticsearch 通過 docker--link 連接。
創(chuàng)建 Dockerfile 文件,指定加載 logstash.conf 配置文件,Dockerfile 文件內容:

FROM logstash:5.0.1-1
CMD ["-f", "/config-dir/logstash.conf"]

Dockerfile 所在的目錄運行 docker build -t my-logstash:5.0.1-1 .,創(chuàng)建自定義的 logstash 鏡像 my-logstash,使用 my-logstash 鏡像就可以通過 -d 參數讓容器運行在后臺了。

elasticsearch 容器已經啟動的情況下,運行

    docker run -d --name logstash \
    --volume /etc/localtime:/etc/localtime \
    --volume /logstash/config-dir:/config-dir \
    --link kafka \
    --link elasticsearch \
    my-logstash:5.0.1-1  

因為配置了 stdout 輸出,容器啟動之后,可以通過 docker logs -f logstash容器ID 查看從 kafka 中讀取的日志數據。
最后只需要再啟動 kibana 就可以在web頁面中查看日志數據了。

啟動 kibanadocker 容器:

kibana 容器只需要連接 elasticsearch 即可。
運行 docker pull kibana:5.0.1 下載 kibana 目前最新的鏡像文件。
elasticsearch 容器已經啟動的情況下,運行

docker run -d --name kibana \
--volume /etc/localtime:/etc/localtime \
--link elasticsearch \
--publish 5601:5601

kibana 容器啟動成功之后,就可以訪問 http://宿主機IP:5601 打開 kibana 的頁面了。
可以在 kibana 中看到所有的日志數據。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容