使用Docker搭建ELK日志系统

零,前言

本文主要是参考 dockerinfo 该文进行了ELK日志系统的搭建,其中docker的配置文件也主要由该博客提供,本人做的只是在这个文章的基础上,删除了部分本文不需要的,同时记下了搭建过程中的一些问题。

关于ELK,本文不做过多的介绍,详细可以查看官网,这里先贴出我们一般的ELK日志系统的架构图


ElasticSearch是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。这是一个建立在全文搜索引擎 Apache Lucene基础上的搜索引擎。

Logstash是一个具有实时渠道能力的数据收集引擎,主要用于日志的收集,过滤与解析,并将其存入ElasticSearch中。

Kibana是一款 基于Apache开源协议,为ElasticSearch提供分析和可视化的Web平台,它可以在Elasticsearch的索引中查找,交互数据,并生成各种维度的表图。 

在实际应用中,使用Logstash来收集日志,往往面临开销大的问题,所以实际中往往会用Filebeat来做为日志收集器,而Logstash负责过滤与解析。此时架构图如下:



实现本文的日志系统所需的环境要求:系统环境是ubuntu 16.04(也可以是其他),需要安装如下的软件(软件必需)

  • docker
  • cocker-compose
实验中,所有的配置文件都可以从 github 下载

一,搭建Elasticsearch
首先我们来看搭建这个部件时所需要的 docker-compose.yml文件的内容
version: '2'
services:
  elasticsearch:
    image: elasticsearch:2.2.0
    container_name: elasticsearch 
    restart: always
    network_mode: "bridge"
    ports:
      - "9200:9200"
      - "9300:9300"
    volumes:
       - ./data:/usr/share/elasticsearch/datadocker-file

这里我们主要解析下两下ports和volumes,首先9200端口是主要对外向外暴露的端口,对外提供http服务;9300端口是作为交互的TCP商品;而卷的映射是是将日志索引文件的存储目录目录挂载到主机的目录,防止因容器挂掉或是重启导致历史日志文件丢失。

保存上面的文件后,我们直接运行docker-compose up -d    命令,便以后台的方式启动了我们的Elasticcsearch,命令行会显示执行是否成功。

为了可视化的验证下我们的Elasticsearch是否创建成功,我们可以输入 IP:9200,如果部署正常的话,是可以看到一串Json数据的。同时也可以输入IP:9200/_search?pretty,这是利用Elasticsearch的搜索功能,显示了目前Elasticsearch存储的数据,当然目前是没有数据的。


二,Logstash配置
首先一样来看 docker-compose.yml的配置
version: '2'
services:
  logstash:
    image: logstash:2.2.0-1
    container_name: logstash 
    restart: always
    network_mode: "bridge"
    ports:
      - "5044:5044"
      # - "4560:4560"
      - "8080:8080"
    volumes:
      - ./conf:/config-dir
      - ./patterns:/opt/logstash/patterns
    external_links:
      - elasticsearch:elasticsearch
    command: logstash -f /config-dir


其中暴露的5044端口是用来接收来自Filebeat收集的日志数据,8080用于接收来自插件Logstash-input-http的日志数据;挂载 conf 目录,用于添加我们自定义的配置文件,patterns用于添加我们自定义的grok规则文件;同时设置外部连接,与elasticsearch容器进行连接,用来传送数据;

相关的输入输出配置文件如下
01-input.conf
input {
  beats {
    port => 5044
    type => "log"
  }

  http {
    port => 8080
  }
}

02-output.conf
output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
  }
}


同时为了方便后面测试容器之间是否有连接,我们加入如下的配置文件 logstash-es-simple.conf
input {
  stdin {}
}
output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
  }
  stdout {
    codec => rubydebug 
  }
}
配置好 docker-compose.yml文件后,运行docker-compose up -d 便以后台方式启动。


三,测试 Logstash与Elasticsearch联通性

为了测试已经启动的这两上容器是否已经联通,我们需要进入到Logstash的镜像中去,首先查看它的容器IDdocker ps ; 得到ID号后,运行命令 sudo docker exec -it ID号 /bin/bash   便 可以进入到容器环境中,进入后,我们直接 cd conf-dir 进入到我们的配置文件目录,里面有我们在外面已经设置好的配置文件,输入 命令 logstash agent -f logstash-es-simple.conf   显示成功后,可以输入任何字符,查看是否有返回值;然后我们可以直接查看 IP:9200/_search?pretty来查看是否有新数据添加。

相关的命令截图如下:


成功运行上面的过程之后,可以查看下ip:9200/_search?pretty,可以看到我们的Elasticsearch里面已经多了我们刚刚添加的两条记录。

测试完毕。


四,搭建Filebeat

还是首先来看下Filebeat的docker-compose.yml配置文件

version: '2'
services:
  filebeat:
    image: olinicola/filebeat:1.0.1 
    container_name: filebeat 
    restart: always
    network_mode: "bridge"
    extra_hosts:
      - "logstash:192.168.0.102" //这里的IP要是真实的IP,不能是127.0.0.1
    volumes:
      - ./conf/filebeat.yml:/etc/filebeat/filebeat.yml
      - ./registry:/etc/registry
      - /tmp:/tmp



其中挂载的tmp目录是用来测试的。

除了上面的docker-compose.yml文件之后,我们还要添加一个filebeat.yml文件,内容如下:

filebeat:
  prospectors:
    -
      paths:
          - /tmp/test.log
      input_type: log
      tail_files: true
  registry_file: /etc/registry/mark
output:
  logstash:
    hosts: ["logstash:5044"]
shipper:
  name: n31
logging:
  files:
    rotateeverybytes: 10485760 # = 10MB

这个文件的作用主要是用来定义收集哪里的文件日志。

保存完毕之后,就直接运行docker-compose up -d就可以了。


五,测试Filebeat,Logstash,Elasticsearch的连通性

为了测试这步的连通性,我们的做法是通过往/tmp目录下面的文件写入日志数据(模拟)来看看我们的logstash是否可以正常接收

命令如下:

# 1.创建日志文件
touch /tmp/test.log

# 2.向日志文件中写入一条nginx访问日志
echo '127.0.0.1 - - [13/Mar/2017:22:57:14 +0800] "GET / HTTP/1.1" 200 3700 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36" "-"' >> /tmp/test.log


如果正常的话,稍过一会,查看 IP:9200/_search?pretty里面应该就会多出一条我们刚刚添加的日志记录了。


六,Kibana配置

其docker-compose.yml配置文件如下:

version: '2'
services:
  kibana:
    image: kibana:4.4.0
    container_name: kibana 
    restart: always
    network_mode: "bridge"
    ports:
      - "5601:5601"
    external_links:
      - elasticsearch:elasticsearch



保存后,直接运行docker-compose up -d就可以了。

访问 http://IP:5601 (这里的IP是布署的机子的IP),点击create建立索引,然后查看Discover,可以看到我们的Elasticsearch存储的全部数据(Kibana会默认显示15分钟内的日志数据,在页面 排右上角可以调整这个时长)。


参考:

https://github.com/jasonGeng88/blog/blob/master/201703/elk.md

http://www.dockerinfo.net/3683.html



  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值