为了账号安全,请及时绑定邮箱和手机立即绑定

结合docker快速搭建启动ELK日志收集平台

标签:
Docker

关键词: docker docker-compose elasticsearch logstash kibana elk

请大家移步最新版本:https://www.jianshu.com/p/2787b4c98687

ELK Stack

ELK (Elasticsearch +  Logstash + Kibana),是一个开源的日志收集平台,用于收集各种客户端日志文件在同一个平台上面做数据分析

Introduction

Elasticsearch, 基于json分析搜索引擎
Logstash, 动态数据收集管道
Kibana, 可视化视图将elasticsearh所收集的data通过视图展现

webp

工作流程

Background

起初我们搭建ELK platform都是通过rpm包或者repo的形式直接setup在服务器机器上面,这给运维后期带来的一个问题就是,每起一个新的ELK platform都需要重新setup在新的机器上面,而从运维的角度去减少这样的重复性effort变得异常突出,下面是根据我自身的经验来介绍如何通过docker solution去快速启动一个新的ELK platform,而无需重新setup。

Prerequisite

OS : Centos 7.xDocker engine > 1.12.xDocker-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. 根据你的需求选择配置环境变量
    a. Elasticsearch + Logstash + Kibana 运行在同一个机器下面,相关配置文件 : ~/elasticstack/.env

# ~/elasticstack/.env# environment propertiese, for distinguishingenvironment=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 localhostL_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.0K_ELASTICSEARCH_HOST_IP=127.0.0.1

b. Elasticsearch + Logstash + Kibana 分别分开运行在不同的机器下面,各自相关的配置文件如下:

# ~/elasticstack/elasticsearch/.env# environment propertiese, for distinguishingenvironment=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 distinguishingenvironment=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:9200L_ELASTICSEARCH_HOST_ENV=localhost
# ~/elasticstack/kibana/.env# environment propertise, for distinguishingenvironment=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:9200K_ELASTICSEARCH_HOST_IP=127.0.0.1

上述配置文件包含的配置属性均属于基本配置属性,为了可以更方便的修改配置文件,结合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,使得方便同一台机器上面方便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(经过多次试验,由于kibana自身加载yaml配置文件的方式貌似无法通过$获取环境变量,而是单纯获取对应properties的string,所以这里通过extra_link的方式在kibana的container里边添加了一个DNS record,所以需要使用IP而不是hostname);相应的如果处于不同的机器(b),需指定elasticsearch所在机器的IP。
以上配置属性都是启动ELK所需要的基本配置,如果有需要更多的配置,可以手动修改相应的配置文件或者联系微信lexmay 或 email : eason.lau02@hotmail.com

  1. 配置完成后,使用docker-compose启动ELK service
    关于docker-compose文件,通常不需要改动,你也可以根据自己的需求添加container的properties,你可以在docker-compose文件里看到上面配置的属性都当成环境变量传递进去,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都是自己构建然后放在hub.docker.com官网repository,相应Dockerfile构建如下 :

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

    webp

    成功启动


    如果看到上述界面,说明配置启动成功,你可以看到Unable to fetch mapping. Do you have indices match...,是因为还没有使用beats plugin将log发送到logstash或者elasticsearch,所以不能建立index。下一篇文章将会介绍已同样的方式一键setup beats plugin,用来发送log到ELK《一键启动 filebeat 5.1.1 集成 logstash》

** 文章所有步骤都是经过实践检验并可行,若有问题,下方请评论。

——END——
作者 :  Eason,专注各种技术、平台、集成,不满现状,喜欢改改改
文章、技术合作



作者:eason02
链接:https://www.jianshu.com/p/d22849f4d323


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消