1. 程式人生 > 其它 >Logstash:在 Docker 中部署 Logstash

Logstash:在 Docker 中部署 Logstash

文章轉載自: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 中去。