基于docker容器部署ELK框架

ELK简介

什么是ELK?ELK是由Elasticsearch、Logstash、Kibana 三个开源的组件组成的一个组合体,其主要特点有如下几个:

1、处理方式灵活:elasticsearch是实时全文索引,具有强大的搜索功能。

2、配置相对简单:elasticsearch全部使用JSON接口,logstash使用模块配置,kibana的配置文件部分更简单。

3、检索性能高:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。

4、集群线性扩展:elasticsearch和logstash都可以灵活线性扩展。

5、前端操作绚丽:kibana的前端设计比较绚丽,而且操作简单。

下面我们初步部署一下这个组件,初步感受一下其是个什么东东;

部署环境

我是在一台测试机器上部署的,是一台物理机,当然这个在虚拟机也可以部署,只要装好docker引擎的linux系统都应该可以部署成功;

预装环境

版本

操作系统 centos 7.6
内存 大于4G
docker-compose 1.29.2
docker 引擎 20.10.12

为了更好,更方便的部署环境,我们尽量采用基于docker的环境来部署这3个组件,这三个组件都有官方提供的docker容器包供我们使用,所以部署起来还是很方便的。

安装步骤

1.首先安装docker引擎,和docker-compose组件,具体的安装步骤这里不赘述;

2.在宿主机操作系统里执行修改/etc/fstab文件内容,注释掉这一行 /dev/mapper/centos-swap swap,如下图:这个似乎不是必须做的,但做了以后效率应该会提升;

基于docker容器部署ELK框架_第1张图片

3.然后在就是宿主机的磁盘上,建个新的文件夹,名字自己定,新建一个docker-compose.yml的文件,内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

version: '3.9'

services:

  elasticsearch:

    image: docker.elastic.co/elasticsearch/elasticsearch:7.16.2

    container_name: elasticsearch

    restart: always

    ports:

      "9200:9200"

      "9300:9300"

    volumes:

      - esdata:/usr/share/elasticsearch/data

    environment:

      - cluster.name=F5ELK-cluster

      - discovery.type=single-node

      - bootstrap.memory_lock=true

      "ES_JAVA_OPTS=-Xms512m -Xmx512m"

    networks:

      - elastic

    ulimits:

      memlock:

        soft: -1

        hard: -1

    mem_limit: 3g

  kibana:

    image: docker.elastic.co/kibana/kibana:7.16.2

    container_name: kib01-test

    ports:

      "5601:5601"

    environment:

      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200

      - server.name="kibana"

    networks:

      - elastic

  logstash:

    image: docker.elastic.co/logstash/logstash:7.16.2

    container_name: logstash

    environment:

      - MONITORING_ENABLED='monitoring.enabled'

    ports:

      "5044:5044"

      "9600:9600"

    volumes:

      - ~/pipeline/:/usr/share/logstash/pipeline/

    networks:

      - elastic

networks:

  elastic:

volumes:

  esdata:

4.定位到文件docker-compose.yml文件所在的目录,在当前路径下执行命令:docker-compose  up -d 

如下图:

基于docker容器部署ELK框架_第2张图片

 如果使用这个docker-compose部署方式有问题,可以使用docker命令的方式来部署,具体docker部署的详细过程,可以参考:

elasticsearch的docker部署

kibana的docker部署

logstash的docker部署

验证是否执行成功:

首先,我们执行命令:docker ps 看一下有几个容器在运行,如果有2个或者3个容器运行都算正常;

刚开始查看容器的时候,可能会看到3个容器在运行,包括logstash的容器,一会可能logstash的容器就退出了,这个是正常的,因为logstash这个容器默认装好一个后,就必须以交互模式运行才不会退出,以 运行的模式运行该容器就会退出的,一会我们以交互模式验证一下是否部署好就可以了;在这之前,我们得先验证一下elasticsearch这个容器中的组件是否正常运行:

1.验证elasticsearch:

在命令行里输入curl http://127.0.0.1:9200 查看响应结果,如下:

基于docker容器部署ELK框架_第3张图片

 

说明部署成功了;

当然我们用可以在浏览器里直接访问这个容器所对应的宿主机的ip和端口来进行访问验证,我这里宿主机的ip是192.168.13.64,所以在浏览器里输入:192.168.13.64:9200 ,也会看到如下响应,说明成功了;

基于docker容器部署ELK框架_第4张图片

 

2.验证Kibana

同样的,在本地命令行里输入: curl http://127.0.0.1:5601,查看响应,不报错就行,如下:

 这种验证方法不直观,更好的方法是在浏览器里验证,输入:192.168.13.64:5601,会有一次重定向跳转,到如下页面说明部署成功;

基于docker容器部署ELK框架_第5张图片

3.验证logstash

因为logstash和es配合还依赖于file

1

docker run --rm -it -p 5044:5044 -p 9600:0600 -e MONITORING_ENABLED=' monitoring.enabled' --net elastic docker.elastic.co/logstash/logstash:7.16.2  bash

以交互模式启动logstash的容器后,在容器内部,输入命令:logstash -e "input { stdin {} } output{stdout{}}"

把标准的输入输出作为logstash的输入和输出验证是否启动,界面如下:

基于docker容器部署ELK框架_第6张图片

基于docker容器部署ELK框架_第7张图片

当出现The stdin plugin is now waiting for input提示后,随便在命令行输入一些字符,回车,就会收到logstash给的响应字段,说明logstash是能正常运行的;

如果我们想让logstash和Elasticsearch能配合使用,我们需要另外一个插件filebeat;

logstash 和filebeat都具有日志收集功能,filebeat更轻量,占用资源更少,但logstash 具有filter功能,能过滤分析日志。一般都是filebeat采集日志,然后发送到MQ中,然后logstash去读取,利用filter功能过滤分析,然后存储到elasticsearch中,至于filebeat和logstash是否可以配合使用,这里时间问题就不多说了,留给后续给大家分享;

你可能感兴趣的:(开发,部署,容器,docker,elk,elasticsearch,大数据)