Logstash Docker 环境下的配置指南

Logstash 是一个强大且灵活的工具,常用于数据收集、处理和转发。通过 Docker 部署 Logstash,可以大大简化其安装和配置过程。本文将介绍如何在 Docker 环境下配置 Logstash,包括所需的 Docker 环境准备、配置文件的创建、Docker Compose 的使用以及示例。

1. 准备 Docker 环境

首先需要确保你的系统上已经安装了 Docker 和 Docker Compose。你可以使用以下命令来检查 Docker 是否已安装:

docker --version

如果没有安装 Docker,可以访问 [Docker 官方网站]( 进行安装。

接下来,确保 Docker Compose 也已安装:

docker-compose --version

如未安装,可以参考 [Docker Compose 官方文档]( 进行安装。

2. 创建 Logstash 配置文件

在 Logstash 中,配置文件通常由三个部分组成:输入(Input)、过滤器(Filter)和输出(Output)。以下是一个简单的配置示例,假设我们要读取一个 JSON 文件,进行处理后输出到 Elasticsearch。

首先,创建一个目录用于存放 Logstash 的配置文件:

mkdir logstash-config
cd logstash-config

然后,在该目录下创建一个名为 logstash.conf 的文件,内容如下:

input {
  file {
    path => "/usr/share/logstash/data/sample.json"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

filter {
  json {
    source => "message"
  }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "logstash-sample-%{+YYYY.MM.dd}"
  }
  stdout {
    codec => rubydebug
  }
}

上述配置做了以下几件事情:

  • 从指定的 JSON 文件中读取数据
  • 将文件中的内容解析为 JSON 结构
  • 将处理后的数据输出到 Elasticsearch,同时也在控制台打印输出

3. 创建 Dockerfile 和 Entrypoint

在同一目录下,创建一个 Dockerfile 文件,用于构建 Logstash 镜像,内容如下:

FROM docker.elastic.co/logstash/logstash:7.17.0

COPY logstash.conf /usr/share/logstash/pipeline/logstash.conf

此外,创建一个 docker-compose.yml 文件来管理 Docker 容器,内容如下:

version: '3'
services:
  logstash:
    build: .
    volumes:
      - ./data:/usr/share/logstash/data
    ports:
      - "5044:5044"
    depends_on:
      - elasticsearch

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"

上述配置定义了两个服务:Logstash 和 Elasticsearch。Logstash 将读取名为 sample.json 的文件,并将处理后的数据送入 Elasticsearch。

4. 整体架构图

使用 Mermaid 的类图功能来展示 Logstash 和其依赖关系的结构:

classDiagram
  class Logstash {
    +process(input)
    +filter(input)
    +output(data)
  }
  class Input {
    +readFile()
  }
  class Filter {
    +transform()
  }
  class Output {
    +sendToElasticsearch()
  }
  Logstash --> Input
  Logstash --> Filter
  Logstash --> Output

在上面的类图中,Logstash 作为中央处理单元,通过输入接收数据,经过过滤后再输出到 Elasticsearch。

5. 运行容器

logstash-config 目录下使用以下命令构建并运行容器:

docker-compose up --build

运行后,Logstash 将会读取 data/sample.json 文件并将数据发送到 Elasticsearch。

6. 数据流程时序图

使用 Mermaid 的旅行图展示在整个过程中数据的流动:

journey
    title Logstash 数据处理过程
    section 数据输入
      从JSON文件读取数据: 5: Logstash
    section 数据处理
      解析JSON格式: 4: Logstash
      数据格式转换: 4: Logstash
    section 数据输出
      发送数据到Elasticsearch: 5: Logstash
      控制台输出结果: 5: Logstash 

在这个旅行图中,我们可以清晰地看出在数据处理的每个阶段中 Logstash 的工作流程。

7. 验证数据是否成功输入 Elasticsearch

为了确保数据已成功写入 Elasticsearch,你可以使用以下命令来查看结果:

curl -X GET "localhost:9200/logstash-sample-*/_search?pretty"

如果数据输入成功,你将会看到 Elasticsearch 返回的相关 JSON 数据。

结论

通过上述步骤,我们成功在 Docker 环境下搭建了 Logstash,并实现了从 JSON 文件读取数据、进行处理以及输出到 Elasticsearch 的完整流程。利用 Docker,可以轻松管理和扩展 Logstash 服务。希望这篇文章能帮助你快速上手 Logstash 的 Docker 部署与配置,如有任何问题,请随时反馈。