Hướng dẫn chạy logstash trên docker
git clone https://github.com/deviantony/docker-elk.git
cd docker-elk/
Ở đây mình chỉ chạy logstash thôi nên sửa lại file docker-compose chút
version: '3.2'
services:
logstash_openvpn:
build:
context: logstash/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./logstash/config/logstash.yml
target: /usr/share/logstash/config/logstash.yml
read_only: true
- type: bind
source: ./logstash/config/pipelines.yml
target: /usr/share/logstash/config/pipelines.yml
read_only: true
- type: bind
source: ./logstash/pipeline
target: /usr/share/logstash/pipeline
read_only: true
ports:
- "5041:5044"
- "3514:3514"
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
networks:
- elk
networks:
elk:
driver: bridge
volumes:
elasticsearch:
Ở đây mình custom port và “./logstash/config/pipelines.yml” để chạy multi file config pipeline trong đó có multi input, filter, output
Trong một lớp học elk của itforvn mình được chia sẽ làm sao để phân tách nhiều input, filter, output trong cùng 1 logstash thì có cách bạn có thể if else đặt thêm type cho kiểm nhận log:
https://thachnuida.com/2016/12/04/push-nginx-log-to-elasticsearch-by-using-logstash/
Nhưng mà mình thì muốn là tạo nhiều file rời rạc để quản lý thay vì viết 1 file quá dài
Chúng ta cùng tìm hiểu file pipelines.yml
# This file is where you define your pipelines. You can define multiple.
# For more information on multiple pipelines, see the documentation:
# https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
- pipeline.id: main
path.config: "/usr/share/logstash/pipeline/logstash.conf"
- pipeline.id: syslog
path.config: "/usr/share/logstash/pipeline/syslog.conf"
Ở đây mình chia thành 2 pipeline.id khách nhau và các config trong logstash.conf sẽ không hề ảnh hướng đến syslog.conf
file mặc định sẽ dưới đây
# This file is where you define your pipelines. You can define multiple.
# For more information on multiple pipelines, see the documentation:
# https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
- pipeline.id: main
path.config: "/usr/share/logstash/pipeline/"
Các file trong thư mục /usr/share/logstash/pipeline/ thì chạy chung 1 pipeline.id nên nếu có nhiều file config thì chúng sẽ ghi đè lên nhau và rất dễ sung đột hoặc mất log cần thiết.
Điều này là rất cần thiết vì 1 container logstash khá là nặng:

Chúng ta cần tận dụng tối đa khả năng multiple của logstash