Logstash:在 Docker 中部署 Logstash
阅读原文时间:2023年07月09日阅读:1

文章转载自:https://elasticstack.blog.csdn.net/article/details/116516923

创建一个目录 docker-logstash。在该目录下,有如下的文件:

$ pwd
/data/docker-logstash
$ ls -al
total 16
drwxr-xr-x    5 liuxg  staff   160 May  7 22:13 .
drwxr-xr-x  132 liuxg  staff  4224 May  7 21:58 ..
-rw-r--r--    1 liuxg  staff    29 May  7 21:59 .env
-rw-r--r--    1 liuxg  staff  1039 May  7 22:37 docker-compose.yml
drwxr-xr-x    3 liuxg  staff    96 May  7 22:18 logstash_pipeline
$ tree -L 3
.
├── docker-compose.yml
└── logstash_pipeline
    └── ports.conf

在该目录中,它有一个 .env 文件。它里面定义了一个在 docker-compose.yml 需要用到的环境变量:

$ cat .env
ELASTIC_STACK_VERSION=7.12.1

通过使用 ELASTIC_STACK_VERSION 来定义我们想要的 Elastic Stack 的版本。

创建一个叫做 docker-compose.yml 的文件:

version: '3.7'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_STACK_VERSION}
    container_name: es01
    environment:
      - discovery.type=single-node
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic

  kibana:
    image: docker.elastic.co/kibana/kibana:${ELASTIC_STACK_VERSION}
    container_name: kibana
    ports: ['5601:5601']
    networks: ['elastic']
    environment:
      - SERVER_NAME=kibana.localhost
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - I18N_LOCALE=zh-CN
    depends_on: ['elasticsearch']

  logstash:
    image: logstash:${ELASTIC_STACK_VERSION}
    ports:
      - 5000:5000
    volumes:
      - type: bind
        source: ./logstash_pipeline/
        target: /usr/share/logstash/pipeline
        read_only: true
    networks:
      - elastic        

volumes:
  esdata01:
    driver: local

networks:
  elastic:
    driver: bridge

针对 Logstash 的安装,我们定义了一个 port 5000,这样我们在 Logstash 的配置文件中可以使用 TCP 的地址 5000 把数据传入到 Logstash 的 pipeline 中,并进行处理。同时,我们使用 volumes 的定义,把本地目录 logstash_pipeline 中的文件 bind 到 Logstash 的 /usr/share/logstash/pipeline 目录中,从而使得在 logstash_pipeline 中所定义的 pipeline 能够在 Logstash 启动后自动运行起来。

接下来看看在 logstash_pipeline 目录中定义的 ports.conf 文件:

# ports.conf
input {
    tcp {
        port => 5000
    }
}

output {
    elasticsearch {
        hosts => ["elasticsearch:9200"]
        index => "hello-logstash-docker"
    }
}

这个配置文件非常简单。它接受来自 port 5000 的数据,并直接发到 Elasticsearch 中去。