アプリ開発備忘録

PlayStationMobile、Android、UWPの開発備忘録

【環境作成】Logstashで遊ぼう

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のバージョンを指定して、jdbcmavenからダウンロードしてきて配置します。

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