Logstashでの動作確認を簡単に行うための環境をDockerで作成します。
作ったものは以下にあります。
https://github.com/matsudamper/logstash_lab
docker-compose.yml
jdbcドライバをダウンロードしてファイル配置するのをDockerfileで行います。
パスワードやらユーザーやらを環境変数にセットします。ローカルのポートにアクセスするための設定も入れます。
version: '2' services: logstash: build: context: . dockerfile: Dockerfile environment: - DB_USER= - DB_PASSWORD= - JDBC_CONNECTION_STRING=jdbc:mysql://host.docker.internal:3306/schema?useUnicode=true&characterEncoding=utf8&connectionTimezone=SERVER&useCursorFetch=true - JDBC_DRIVER_CLASS=com.mysql.cj.jdbc.Driver - XPACK_MONITORING_ENABLED=false volumes: - ./pipeline/:/usr/share/logstash/pipeline/ extra_hosts: - host.docker.internal:host-gateway
Dockerfile
logstashとjdbcのバージョンを指定して、jdbcはmavenからダウンロードしてきて配置します。
FROM docker.elastic.co/logstash/logstash:7.17.11 ARG jdbc_version="8.0.33" ARG jdbc_jar_dir="/usr/share/logstash/logstash-core/lib/jars/" ENV JDBC_DRIVER_JAR="${jdbc_jar_dir}connector-j.jar" RUN curl -fsSL -o connector-j.jar https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/${jdbc_version}/mysql-connector-j-${jdbc_version}.jar RUN mv connector-j.jar "${jdbc_jar_dir}connector-j.jar"
jdbc_test.conf
後はlogstashのファイルです。環境変数にセットしたものを設定しています。ざっと確認するために出力はstdoutに設定しています。あとはSQLをいじって動作確認をします。
input { jdbc { jdbc_connection_string => "${JDBC_CONNECTION_STRING}" jdbc_user => "${DB_USER}" jdbc_password => "${DB_PASSWORD}" jdbc_driver_library => "${JDBC_DRIVER_JAR}" jdbc_driver_class => "${JDBC_DRIVER_CLASS}" statement => " SELECT * from user " jdbc_fetch_size => 5000 use_column_value => true tracking_column => user_id last_run_metadata_path => "/tmp/jdbc_test_last_run_metadata_path" } } filter { mutate { remove_field => [ "hoge" ] } } output { stdout { codec => json } }
起動
後は起動して動作を確認します。オプションは適宜調整します。
docker compose up --build --force-recreate