結(jié)合docker快速搭建啟動ELK日志收集平臺

關鍵詞: docker docker-compose elasticsearch logstash kibana elk

請大家移步最新版本:http://m.itdecent.cn/p/2787b4c98687

ELK Stack

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

Introduction

Elasticsearch, 基于json分析搜索引擎
Logstash, 動態(tài)數(shù)據(jù)收集管道
Kibana, 可視化視圖將elasticsearh所收集的data通過視圖展現(xiàn)

工作流程

Background

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

Prerequisite

OS : Centos 7.x
Docker engine > 1.12.x
Docker-compose > 1.11.x
  1. Clone GIT folder到本地,branch: master
    建議放在user HOME下面,eg:/home/user1/
$ cd ~
$ git clone https://github.com/easonlau02/elasticstack.git
  1. 根據(jù)你的需求選擇配置環(huán)境變量
    a. Elasticsearch + Logstash + Kibana 運行在同一個機器下面,相關配置文件 : ~/elasticstack/.env
# ~/elasticstack/.env

# environment propertiese, for distinguishing
environment=prod

# elascticsearch-image, change data path in host machine, default as /use/data/
E_LOCAL_DATA_PATH=/usr/data/

# logstash-image
## If docker-compose file set network_mode as host, can access elasticsearch via localhost. For 3 components are in one machine, need to set as localhost
L_ELASTICSEARCH_HOST_ENV=localhost

# kibana-image
## If docker-compose file set network_mode as host, can access elasticsearch via localhost ip. For 3 components are in one machine, need to set as localhost ip : 127.0.0.1 or 0.0.0.0
K_ELASTICSEARCH_HOST_IP=127.0.0.1

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

# ~/elasticstack/elasticsearch/.env

# environment propertiese, for distinguishing
environment=prod

# elascticsearch-image, change data path in host machine, default as /use/data/
E_LOCAL_DATA_PATH=/usr/data/
# ~/elasticstack/logstash/.env

# environment propertiese, for distinguishing
environment=prod

# logstash-image
## Specify elasticsearch host, if the same machine, set it as localhost, 
## if not, set specific host name. 
## To make sure no firewall to access elasticsearch:9200
L_ELASTICSEARCH_HOST_ENV=localhost
# ~/elasticstack/kibana/.env

# environment propertise, for distinguishing
environment=prod

# for kibana-image
## Specify elasticsearch host, if the same machine, set it as 127.0.0.0 or 0.0.0.0, if not, set specific host IP. To make sure no firewall to access elasticsearchIP:9200
K_ELASTICSEARCH_HOST_IP=127.0.0.1

上述配置文件包含的配置屬性均屬于基本配置屬性,為了可以更方便的修改配置文件,結(jié)合docker-compose自動搜索并加載.env的特性,將ELK所需要的基本配置抽離出來作為單個.env文件來修改配置,而不需要通過逐個配置文件進行修改,下面對上述基本屬性簡單描述:
* environment: 用來區(qū)分ELK platform的當前環(huán)境,通常有qa/prod,你也可以根據(jù)自己的情況指定為自己想要的value
* E_LOCAL_DATA_PATH: 設置elasticsearch data存儲在宿主機的相對路勁或者絕對路徑,默認為/usr/data/
* L_ELASTICSEARCH_HOST_ENV: 由于docker-compose里邊設置了network_mode等于host,使得方便同一臺機器上面方便logstashelasticsearch通信,所以如果logstashelasticsearch跑在同一臺機器上面(a),可以直接使用localhost來指定連接elasticsearch host;如果logstashelasticsearch在不同機器上(b),則需要指定對應elasticsearch所在機器的hostname
* K_ELASTICSEARCH_HOST_IP:L_ELASTICSEARCH_HOST_ENV一樣由于network_mode等于host,如果kibanaelasticsearch在同一臺機器上,只需要指定0.0.0.0 or 127.0.0.1(經(jīng)過多次試驗,由于kibana自身加載yaml配置文件的方式貌似無法通過$獲取環(huán)境變量,而是單純獲取對應properties的string,所以這里通過extra_link的方式在kibana的container里邊添加了一個DNS record,所以需要使用IP而不是hostname);相應的如果處于不同的機器(b),需指定elasticsearch所在機器的IP。
以上配置屬性都是啟動ELK所需要的基本配置,如果有需要更多的配置,可以手動修改相應的配置文件或者聯(lián)系微信lexmay 或 email : eason.lau02@hotmail.com

  1. 配置完成后,使用docker-compose啟動ELK service
    關于docker-compose文件,通常不需要改動,你也可以根據(jù)自己的需求添加container的properties,你可以在docker-compose文件里看到上面配置的屬性都當成環(huán)境變量傳遞進去,eg: ~/elasticstack/docker-compose.yml
    version: '2'
    services:
    elasticsearch:
      image: eason02/elasticsearch:5.0.1
      ...
      environment:
        - env=${environment}
      volumes:
        ...
        - ${E_LOCAL_DATA_PATH}:/usr/share/elasticsearch/data
        ...
      ...
    logstash:
      image: eason02/logstash:5.0.1
      ...
      environment:
        - env=${environment}
        ...
      ...
    kibana:
      image: eason02/kibana:5.0.1
      ...
      environment:
        - env=${environment}
      extra_hosts:
        - "elasticsearchHost:*${K_ELASTICSEARCH_HOST_IP}*"
        ...
    

以上所用到的image都是自己構(gòu)建然后放在hub.docker.com官網(wǎng)repository,相應Dockerfile構(gòu)建如下 :

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

$ cd ~/elasticstack/
$ docker-compose up -d

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

  • eg:
    Elasticsearch in host1:
    $ cd ~/elasticstack/elasticsearch
    $ docker-compose up -d
    
    Logstash in host2:
    $ cd ~/elasticstack/logstash
    $ docker-compose up -d
    
    Kibana in host3:
    $ cd ~/elasticstack/kibana
    $ docker-compose up -d
    
  1. 通過kibana host+5601端口訪問查看啟動效果,<kibana host>:5601
    成功啟動

    如果看到上述界面,說明配置啟動成功,你可以看到Unable to fetch mapping. Do you have indices match...,是因為還沒有使用beats plugin將log發(fā)送到logstash或者elasticsearch,所以不能建立index。下一篇文章將會介紹已同樣的方式一鍵setup beats plugin,用來發(fā)送log到ELK《一鍵啟動 filebeat 5.1.1 集成 logstash》

** 文章所有步驟都是經(jīng)過實踐檢驗并可行,若有問題,下方請評論。

——END——
作者 : Eason,專注各種技術、平臺、集成,不滿現(xiàn)狀,喜歡改改改
文章、技術合作
Email : eason.lau02@hotmail.com

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

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容