【发布时间】:2019-11-25 06:05:01
【问题描述】:
我正在尝试使用 logstash 在 MySQL 数据库和 Elasticsearch 之间同步数据。
为此,我创建了一个 docker-compose 文件,该文件为 Elasticsearch、MySQL 和 Logstash 创建容器。
这是文件:
docker-compose.yml
version: '3.1'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.1.1
container_name: pelasticsearch
environment:
- discovery.type=single-node
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- elasticsearch:/home/django/elasticsearch
ports:
- 9200:9200
db:
image: mysql
container_name: pmysqldb
command: --default-authentication-plugin=mysql_native_password
restart: always
volumes:
- ${PWD}/pdata/data:/docker-entrypoint-initdb.d
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: ecommerce
adminer:
image: adminer
restart: always
ports:
- 8080:8080
logstash:
image: docker.elastic.co/logstash/logstash:7.1.1
links:
- elasticsearch
volumes:
- ${PWD}/ls_config:/usr/share/logstash/config/
command: bin/logstash-plugin install logstash-input-jdbc
command: logstash -f /usr/share/logstash/config/logstash.conf
depends_on:
- elasticsearch
volumes:
elasticsearch:
我还有logstash.yml 和logstash.conf 文件来配置我的logstash 插件。
logstash.conf
input {
jdbc {
jdbc_driver_library => "./mysql-connector-java-5.1.36-bin.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/ecommerce"
jdbc_user => "root"
jdbc_password => "exmaple"
schedule => "* * * * *"
statement => "SELECT * from ecommerce.table;"
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
user => elastic
password => changeme
}
}
logstash.yml
---
http.host: '0.0.0.0'
xpack.monitoring.elasticsearch.hosts: [ "elasticsearch:9200"]
xpack.monitoring.elasticsearch.username: elastic
xpack.monitoring.elasticsearch.password: changeme
xpack.monitoring.enabled: true
所以,当我运行 docker-compose up 时,我的所有容器都在运行,包括 logstash,但是当 logstash 尝试运行 conf 文件时,它似乎无法加载驱动程序并返回如下错误:
logstash_1 | 2056 LogStash::ConfigurationError
logstash_1 | 2056 com.mysql.jdbc.Driver not loaded. Are you sure you've included the correct jdbc driver in :jdbc_driver_library?
logstash_1 | 2056 /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-input-jdbc-4.3.13/lib/logstash/plugin_mixins/jdbc/jdbc.rb:163:in `open_jdbc_connection'
由于我是 docker 和 logstash 的新手,我做错了什么吗?以及如何解决这个错误。
【问题讨论】:
-
您使用的是哪个平台?
-
你所说的“平台”到底是什么意思?
-
windows/Linux平台
-
我相信连接字符串应该是
jdbc:mysql://db:3306/ecommerce -
顺便说一句,我认为您应该将驱动程序复制到图像中,以便可以拾取它。所以为基于docker.elastic.co/logstash/logstash:7.1.1的新镜像创建一个Dockerfile :)
标签: mysql docker elasticsearch docker-compose logstash