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