도커에서 로그스태쉬가 안되서 문제를 파악 보았더니 크게 두가지 오류가 있었다.
volumes:
- ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
- ./logstash/pipeline:/usr/share/logstash/pipeline
- ./drivers:/usr/share/logstash/drivers
./drivers 파일을 컨테이너가 읽을 수 있게 바꾸어줌
config 파일도
jdbc {
jdbc_driver_library => "/usr/share/logstash/drivers/postgresql-42.7.3.jar"
jdbc_driver_class => "org.postgresql.Driver"
jdbc_connection_string => "jdbc:postgresql://postgres:5432/postgres"
jdbc_user => "postgres"
jdbc_password => "postgres"
schedule => "* * * * *"
statement => "SELECT * FROM your_table"
}
바꾸어 줬더니 경로를 못읽어서 일어나는 에러는 나오지 않았다.
그래서 Dockerfile을 생성 후
FROM logstash:latest
# PostgreSQL JDBC 드라이버 다운로드
ADD https://jdbc.postgresql.org/download/postgresql-42.7.3.jar /usr/share/logstash/drivers/postgresql-42.7.3.jar
# 파일 권한 설정
USER root
RUN chown logstash:logstash /usr/share/logstash/drivers/postgresql-42.7.3.jar
RUN chmod 644 /usr/share/logstash/drivers/postgresql-42.7.3.jar
# logstash 사용자로 전환
USER logstash
드라이버 파일을 읽을때 루트계정으로 읽고 실행된 후에 로그스태쉬 계정으로 전환되게 바꾸었다