Logstash 无法连接到 MySQL 数据库

尼达卜德拉

我正在尝试使用 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插件logstash.ymllogstash.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
   }
}

日志文件

---
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

因此,当我运行 a 时,我的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 的新手,我做错了什么吗?以及如何解决这个错误。

尼达卜德拉

所以我发布这个以防有人和我有同样的问题。找到了解决办法:所以第一件事就是用MariaDB代替MySQL,看来MySQL和logstash的bug很多。我还创建了一个用户而不是作为 root 连接(这将意味着对logstash.conf文件的更改)我的docker-compose.yml目标MariaDB如下

   db:
    image: mariadb # mysql
    container_name: ph_mariadb
    restart: always
    volumes:
      - ${PWD}/ph_datalake/data/shopware:/docker-entrypoint-initdb.d
    environment:
      MYSQL_USER: "toto"
      MYSQL_PASSWORD: "123456"
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
      MYSQL_DATABASE: ecommerce

   adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

接下来,将jar包含类文件com.mysql.jdbc.Driver直接复制到jars 在我的容器中的位置。docker-compose.yml在 logstash 目标中的文件上使用了卷目标来做到这一点,因此它变为:

   logstash:
       image: docker.elastic.co/logstash/logstash:7.1.1
       links:
       - elasticsearch
       - db
       volumes:
       - ${PWD}/ls_config/logstash.conf:/usr/share/logstash/config/logstash.conf
       - ${PWD}/ls_config/logstash.yml:/usr/share/logstash/config/logstash.yml
       - ${PWD}/ls_config/mariadb-java-client-2.4.3.jar:/usr/share/logstash/logstash-core/lib/jars/mariadb-java-client-2.4.3.jar 
       command: bin/logstash-plugin install logstash-input-jdbc
       command: logstash -f /usr/share/logstash/config/logstash.conf
       depends_on:
       - elasticsearch
       - db

我的logstash.conf文件也将改变:

  • jdbc_driver_library => "./mysql-connector-java-5.1.36-bin.jar"从配置文件中删除

  • 将用户和密码更改为与 MariaDB 实例上的相同。

所以它看起来像这样:



input {
  jdbc {
    jdbc_driver_class => 'org.mariadb.jdbc.Driver'
    jdbc_connection_string => 'jdbc:mariadb://db:3306/ecommerce'
    jdbc_user => 'toto'
    jdbc_password => '123456'
    schedule => "* * * * *"
    statement => 'SELECT * from ecommerce.table;'
  }
}
output {
   elasticsearch {
        hosts => ["elasticsearch:9200"]
        user => elastic
        password => changeme
        index => "logstash"
   }
}

到这里为止,我的 logstash 设法找到了该类并启动了一个 Driver 实例进行连接,但它没有连接。出于某种原因,连接将地址解释jdbc:mariadb://db:3306/ecommerce为我的 logstash 的本地主机,这意味着当 logstash 尝试连接时,toto它会尝试连接到自己的 IP 地址。

所以解决这个问题的方法是只启动 Logstash,因为它依赖于 db (MariaDB) 和 elasticsearch 它连接 $ docker-compose up logstash

logstash_1       | [2019-08-16T11:22:12,572][INFO ][logstash.inputs.jdbc     ] (3.050417s) SELECT * from ecommerce.table;
logstash_1       | [2019-08-16T11:23:53,329][INFO ][logstash.inputs.jdbc     ] (3.014069s) SELECT * from ecommerce.table;
logstash_1       | [2019-08-16T11:25:35,980][INFO ][logstash.inputs.jdbc     ] (4.357945s) SELECT * from ecommerce.table;
logstash_1       | [2019-08-16T11:27:11,420][INFO ][logstash.inputs.jdbc     ] (3.188877s) SELECT * from ecommerce.table;
logstash_1       | [2019-08-16T11:28:50,292][INFO ][logstash.inputs.jdbc     ] (3.456620s) SELECT * from ecommerce.table;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法连接到数据库-MySQL

来自分类Dev

无法连接到数据库-MySQL

来自分类Dev

PHP-无法连接到远程MySQL数据库

来自分类Dev

无法连接到MySQL:未知数据库'logindb'

来自分类Dev

无法使用MySQLConnection连接到MySQL数据库

来自分类Dev

无法连接到MySQL数据库-PHP

来自分类Dev

无法连接到在AWS上运行的MySQL数据库

来自分类Dev

无法连接到远程MySQL数据库

来自分类Dev

错误:无法连接到MySQL数据库

来自分类Dev

使用MySQLWorkbench无法连接到(远程)MySQL数据库

来自分类Dev

无法连接到Docker容器中的MySQL数据库

来自分类Dev

无法连接到Windows上的MySQL数据库

来自分类Dev

无法连接到Android KivyMD上的mysql数据库

来自分类Dev

无法连接到mysql远程数据库

来自分类Dev

无法通过JWS应用连接到MySQL数据库

来自分类Dev

Java无法连接到mysql数据库

来自分类Dev

无法连接到phpMyAdmin MySQL数据库

来自分类Dev

无法连接到在AWS上运行的MySQL数据库

来自分类Dev

水壶,JDBC,MySQL,SSL:无法连接到数据库

来自分类Dev

无法使用Java从VM连接到mysql数据库

来自分类Dev

无法使用Cron作业连接到MySQL数据库

来自分类Dev

使用MySQLWorkbench无法连接到(远程)MySQL数据库

来自分类Dev

无法连接到 AWS-RDS MySql 数据库

来自分类Dev

连接到 UCSC 基因组 MYSQL:“无法连接到数据库”

来自分类Dev

连接到MySQL数据库错误

来自分类Dev

同时连接到mysql数据库

来自分类Dev

试图连接到mysql数据库

来自分类Dev

Ormlite连接到mysql数据库

来自分类Dev

mysql workbench无法连接到数据库,但连接测试正常