結合Docker快速搭建ELK日誌收集分析平臺

結合Docker快速搭建ELK日誌收集分析平臺

2017-03-27 09:39 閱讀 172 評論 0

作者:馬哥Linux運維-Eason

ELK Stack

ELK (Elasticsearch + Logstash + Kibana),是一個開源的日誌收集平臺,用於收集各種客戶端日誌文件在同一個平臺上面做數據分析。

Introduction

Elasticsearch, 基於json分析搜索引擎
Logstash, 動態數據收集管道
Kibana, 可視化視圖將elasticsearh所收集的data通過視圖展現

工作流程

Background

起初我們搭建ELK platform都是通過rpm包或者repo的形式直接setup在服務器機器上面,這給運維後期帶來的一個問題就是,每起一個新的ELK platform都需要重新setup在新的機器上面,而從運維的角度去減少這樣的重複性effort變得異常突出,下面是根據我自身的經驗來介紹如何通過docker solution去快速啓動一個新的ELK platform,而無需重新setup。

Prerequisite

1.Clone GIT folder到本地,branch: master

建議放在user HOME下面,eg:/home/user1/

2.根據你的需求選擇配置環境變量
a. Elasticsearch + Logstash + Kibana 運行在同一個機器下面,相關配置文件 : ~/elasticstack/.env

b. Elasticsearch + Logstash + Kibana 分別分開運行在不同的機器下面,各自相關的配置文件如下:

  • Elasticsearch: ~/elasticstack/elasticsearch/.env

  • Logstash: ~/elasticstack/logstash/.env

  • Kibana: ~/elasticstack/kibana/.env

上述配置文件包含的配置屬性均屬於基本配置屬性,爲了可以更方便的修改配置文件,結合docker-compose自動搜索並加載.env的特性,將ELK所需要的基本配置抽離出來作爲單個.env文件來修改配置,而不需要通過逐個配置文件進行修改,下面對上述基本屬性簡單描述:

  • environment: 用來區分ELK platform的當前環境,通常有qa/prod,你也可以根據自己的情況指定爲自己想要的value

  • E_LOCAL_DATA_PATH: 設置elasticsearch data存儲在宿主機的相對路勁或者絕對路徑,默認爲/usr/data/

  • L_ELASTICSEARCH_HOST_ENV: 由於docker-compose裏邊設置了network_mode等於host,使得方便同一臺機器上面方便logstash和elasticsearch通信,所以如果logstash和elasticsearch跑在同一臺機器上面(a),可以直接使用localhost來指定連接elasticsearch host;如果logstash和elasticsearch在不同機器上(b),則需要指定對應elasticsearch所在機器的hostname

  • K_ELASTICSEARCH_HOST_IP: 和L_ELASTICSEARCH_HOST_ENV一樣由於network_mode等於host,如果kibana和elasticsearch在同一臺機器上,只需要指定0.0.0.0 or 127.0.0.1(經過多次試驗,由於kibana自身加載yaml配置文件的方式貌似無法通過$獲取環境變量,而是單純獲取對應properties的string,所以這裏通過extra_link的方式在kibana的container裏邊添加了一個DNS record,所以需要使用IP而不是hostname);相應的如果處於不同的機器(b),需指定elasticsearch所在機器的IP。
    以上配置屬性都是啓動ELK所需要的基本配置,如果有需要更多的配置,可以手動修改相應的配置文件或者聯繫微信lexmay 或email: [email protected]

3.配置完成後,使用docker-compose啓動ELK service
關於docker-compose文件,通常不需要改動,你也可以根據自己的需求添加container的properties,你可以在docker-compose文件裏看到上面配置的屬性都當成環境變量傳遞進去,eg: ~/elasticstack/docker-compose.yml:

以上所用到的p_w_picpath都是自己構建然後放在hub.docker.com官網repository,相應Dockerfile構建如下 :

  • elasticsearh: ~/elasticstack/elasticsearch/Dockerfile

  • logstash: ~/elasticstack/logstash/Dockerfile

  • kibana: ~/elasticstack/kibana/Dockerfile

a. 運行在同一個機器,相關compose文件: ~/elasticstack/docker-compose.yml

b. 分開運行不同機器,相關compose文件:
Elasticsearch: ~/elasticstack/elasticsearch/docker-compose.yml
Logstash: ~/elasticstack/logstash/docker-compose.yml
Kibana: ~/elasticstack/kibana/docker-compose.yml

  • eg:

Elasticsearch in host1:

Logstash in host2:

Kibana in host3:

4.通過kibana host+5601端口訪問查看啓動效果,<kibana host>:5601

成功啓動

如果看到上述界面,說明配置啓動成功,你可以看到Unable to fetch mapping. Do you have indices match…,是因爲還沒有使用beats plugin將log發送到logstash或者elasticsearch,所以不能建立index。

** 文章所有步驟都是經過實踐檢驗並可行,若有問題,下方請評論。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章