Elastic:运用 Docker 安装 Elastic Stack 并采集日志文件

本文介绍如何使用Docker快速部署ElasticStack组件,包括Filebeat、Logstash、Elasticsearch和Kibana,并通过一个样例项目演示了完整的部署流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

尽管在之前的文章中,我好些文章讲述如何使用 Docker 来安装 Elastic Stack。在今天的文章中,我想使用 Docker 来安装所有的需要用到的 Elastic Stack 元件:

  • Filebeat
  • Logstash
  • Elasticsearch
  • Kibana

我们使用的架构是:

为了方便大家学习,你可以在 github 下载仓库:

git clone https://github.com/liu-xiao-guo/elasticstack-lab

整个项目的文件如下:

$ pwd
/Users/liuxg/data/elasticstack-lab
$ ls -al
total 48
drwxr-xr-x   11 liuxg  staff   352 Jan 18 16:53 .
drwxr-xr-x  149 liuxg  staff  4768 Jan 18 16:44 ..
-rw-r--r--@   1 liuxg  staff  6148 Jan 18 16:44 .DS_Store
-rw-r--r--    1 liuxg  staff    29 Jan 18 16:39 .env
drwxr-xr-x   14 liuxg  staff   448 Jan 18 17:11 .git
-rw-r--r--    1 liuxg  staff  1617 Jan 18 16:52 README.md
-rw-r--r--    1 liuxg  staff  1160 Jan 18 16:59 docker-compose.yml
drwxr-xr-x    3 liuxg  staff    96 Jan 18 16:26 filebeat
-rw-r--r--    1 liuxg  staff   232 Jan 18 17:03 filebeat.Dockerfile
drwxr-xr-x    3 liuxg  staff    96 Jan 18 17:26 logs
drwxr-xr-x    4 liuxg  staff   128 Jan 18 16:45 logstash
$ tree -L 3
.
├── README.md
├── docker-compose.yml
├── filebeat
│   └── filebeat.yml
├── filebeat.Dockerfile
├── logs
│   └── sample.log
└── logstash
    ├── logstash.conf
    └── logstash.yml

在上面:

  • docker-compose.yml 是启动各个 Elastic Stack 容器的
  • filebeat.yml 是 Filebeat 的配置文件
  • filebeat.Dockerfile 是用来编译 Filebeat 的镜像的
  • sample.log 是我们需要采集的日志文件
  • logstash.conf 及 logstash.yml 是 Logstash 的配置文件

我们可以参考 README.md 文件来进行操作。在默认的情况下,我们使用最新的 7.16.2 版本来进行练习。如果你想使用其它的版本,请修改 .env 里的版本,同时需要修改在 filebeat.Dockerfile 里的 Filebeat 的版本以保持一致。 

docker-compose.yml

version: '2.2'
services:
  logstash:
    container_name: logstash
    image: docker.elastic.co/logstash/logstash:${ELASTIC_STACK_VERSION}
    ports:
      - 5044:5044
    environment:
      SERVER_NAME: logstash.local
    volumes:
      - ./logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
      - ./logstash/logstash.yml:/usr/share/logstash/config/logstash.yml
    networks:
      - esnet
  filebeat:
    container_name: filebeat
    build:
      context: .
      dockerfile: filebeat.Dockerfile
    volumes:
      - ./logs:/var/log
    networks:
      - esnet
  kibana:
    image: docker.elastic.co/kibana/kibana:${ELASTIC_STACK_VERSION}
    ports:
      - 5601:5601
    networks:
      - esnet
  elasticsearch:
    container_name: elasticsearch
    image: docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_STACK_VERSION}
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      - discovery.type=single-node
      - cluster.name=docker-
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    networks:
      - esnet
networks:
  esnet:

我们也可以针对 logstash 的部分做如下的修改。在这里,我们直接使用 logstash 命令来启动配置文件:

docker-compose.yml

version: '2.2'
services:
  logstash:
    container_name: logstash
    image: docker.elastic.co/logstash/logstash:${ELASTIC_STACK_VERSION}
    ports:
      - 5044:5044
      - 9600:9600
    environment:
      SERVER_NAME: logstash.local
    volumes:
      - ./logstash/:/logstash_dir
    command: logstash -f /logstash_dir/logstash.conf
    environment:
      - LS_JAVA_OPTS: "-Xmx512m -Xms512m"    
    depends_on:
      - elasticsearch
    networks:
      - esnet
  filebeat:
    container_name: filebeat
    build:
      context: .
      dockerfile: filebeat.Dockerfile
    volumes:
      - ./logs:/var/log
    networks:
      - esnet
  kibana:
    image: docker.elastic.co/kibana/kibana:${ELASTIC_STACK_VERSION}
    ports:
      - 5601:5601
    networks:
      - esnet
  elasticsearch:
    container_name: elasticsearch
    image: docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_STACK_VERSION}
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      - discovery.type=single-node
      - cluster.name=docker-
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    networks:
      - esnet
networks:
  esnet:

在下载完整个仓库后,我们可以使用如下的命令来启动 Elastic Stack:

docker-compose up

当然前提是我们必须启动 Docker。

启动过后,我们可以看到如上所示的画面。

我们在浏览器中,打开地址 http://localhost:5601/ 进入到 Kibana。我们在 DevTools 里打入如下的命令:

GET _cat/indices

我们可以看到一个叫做 sample-2022.01.18 的索引。而它里面文档的内容是:

GET sample-2022.01.18/_search

 

这个和我们之前的 sample.log 的内容进行比较:

通过这个练习,我们了解如何使用 Docker 来部署 Elastic Stack,并使用 Pipeline:Filebeat => Logstash => Elasticsearch。针对我们实际的使用,我们需要根据自己的情况修改 Logstash 及 Filebeat 的配置文件。

参考:

【1】GitHub - shazforiot/Elasticsearch-logstash-Kibana-Docker-Compose: Create ELK stack using Docker Compose

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值