Yape
Yape

Reputation: 1

Problem configuring zipkin on docker yaml file with mysql

I'm here looking for some help. I'm trying to start a docker-compose config with a yaml file. I have an sql instance working with other services, but when I try to connect with zipkin (debug activated) I can see a message as follows:

DEBUG [/] 1 --- [ng-tasks-1-1019] z.s.i.h.ComponentHealth : ServiceConfigurationError: org.mariadb.jdbc.plugin.AuthenticationPlugin: Provider org.mariadb.jdbc.plugin.authentication.addon.SendGssApiAuthPacket could not be instantiated

If I send anything to zipkin it throws a stack trace error like this:

java.util.ServiceConfigurationError: org.mariadb.jdbc.plugin.AuthenticationPlugin: Provider org.mariadb.jdbc.plugin.authentication.addon.SendGssApiAuthPacket could not be instantiated at java.base/java.util.ServiceLoader.fail(Unknown Source) ~[?:?] at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(Unknown Source) ~[?:?] at java.base/java.util.ServiceLoader$ProviderImpl.get(Unknown Source) ~[?:?] at java.base/java.util.ServiceLoader$3.next(Unknown Source) ~[?:?] at org.mariadb.jdbc.plugin.authentication.AuthenticationPluginLoader.get(AuthenticationPluginLoader.java:32) ~[mariadb-java-client-3.4.1.jar:?] at org.mariadb.jdbc.client.impl.StandardClient.authenticationHandler(StandardClient.java:282) ~[mariadb-java-client-3.4.1.jar:?] at org.mariadb.jdbc.client.impl.StandardClient.(StandardClient.java:226) ~[mariadb-java-client-3.4.1.jar:?] at org.mariadb.jdbc.Driver.connect(Driver.java:68) ~[mariadb-java-client-3.4.1.jar:?] at org.mariadb.jdbc.Driver.connect(Driver.java:92) ~[mariadb-java-client-3.4.1.jar:?] at org.mariadb.jdbc.Driver.connect(Driver.java:26) ~[mariadb-java-client-3.4.1.jar:?] at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) ~[HikariCP-5.1.0.jar:?] at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) ~[HikariCP-5.1.0.jar:?] at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) ~[HikariCP-5.1.0.jar:?] at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) ~[HikariCP-5.1.0.jar:?] at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) ~[HikariCP-5.1.0.jar:?] at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) ~[HikariCP-5.1.0.jar:?] at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) ~[HikariCP-5.1.0.jar:?] at zipkin2.storage.mysql.v1.HasTraceIdHigh.test(HasTraceIdHigh.java:33) ~[zipkin-storage-mysql-v1-3.4.3.jar:?] at zipkin2.storage.mysql.v1.Schema.(Schema.java:41) ~[zipkin-storage-mysql-v1-3.4.3.jar:?] at zipkin2.storage.mysql.v1.MySQLStorage.schema(MySQLStorage.java:122) ~[zipkin-storage-mysql-v1-3.4.3.jar:?] at zipkin2.storage.mysql.v1.MySQLStorage.spanConsumer(MySQLStorage.java:146) ~[zipkin-storage-mysql-v1-3.4.3.jar:?] at zipkin2.collector.Collector.store(Collector.java:190) ~[zipkin-collector-3.4.3.jar:?] at zipkin2.collector.Collector$StoreSpans.run(Collector.java:219) ~[zipkin-collector-3.4.3.jar:?] at com.linecorp.armeria.common.DefaultContextAwareRunnable.run(DefaultContextAwareRunnable.java:45) ~[armeria-1.31.0.jar:?] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:?] at java.base/java.util.concurrent.FutureTask.run(Unknown Source) ~[?:?] at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) ~[?:?] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.115.Final.jar:4.1.115.Final] at java.base/java.lang.Thread.run(Unknown Source) [?:?] Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.mariadb.jdbc.plugin.authentication.addon.SendGssApiAuthPacket at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method) ~[?:?] at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unknown Source) ~[?:?] at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.ensureClassInitialized(Unknown Source) ~[?:?] at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newConstructorAccessor(Unknown Source) ~[?:?] at java.base/jdk.internal.reflect.ReflectionFactory.newConstructorAccessor(Unknown Source) ~[?:?] at java.base/java.lang.reflect.Constructor.acquireConstructorAccessor(Unknown Source) ~[?:?] at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Unknown Source) ~[?:?] at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:?] ... 30 more Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.NoClassDefFoundError: org/ietf/jgss/GSSException [in thread "armeria-common-blocking-tasks-1-1"] at org.mariadb.jdbc.plugin.authentication.addon.SendGssApiAuthPacket.(SendGssApiAuthPacket.java:30) ~[mariadb-java-client-3.4.1.jar:?] at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method) ~[?:?] at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unknown Source) ~[?:?] at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.ensureClassInitialized(Unknown Source) ~[?:?] at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newConstructorAccessor(Unknown Source) ~[?:?] at java.base/jdk.internal.reflect.ReflectionFactory.newConstructorAccessor(Unknown Source) ~[?:?] at java.base/java.lang.reflect.Constructor.acquireConstructorAccessor(Unknown Source) ~[?:?] at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Unknown Source) ~[?:?] at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:?] at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(Unknown Source) ~[?:?] at java.base/java.util.ServiceLoader$ProviderImpl.get(Unknown Source) ~[?:?] at java.base/java.util.ServiceLoader$3.next(Unknown Source) ~[?:?] at org.mariadb.jdbc.plugin.authentication.AuthenticationPluginLoader.get(AuthenticationPluginLoader.java:32) ~[mariadb-java-client-3.4.1.jar:?] at org.mariadb.jdbc.client.impl.StandardClient.authenticationHandler(StandardClient.java:282) ~[mariadb-java-client-3.4.1.jar:?] at org.mariadb.jdbc.client.impl.StandardClient.(StandardClient.java:226) ~[mariadb-java-client-3.4.1.jar:?] at org.mariadb.jdbc.Driver.connect(Driver.java:68) ~[mariadb-java-client-3.4.1.jar:?] at org.mariadb.jdbc.Driver.connect(Driver.java:92) ~[mariadb-java-client-3.4.1.jar:?] at org.mariadb.jdbc.Driver.connect(Driver.java:26) ~[mariadb-java-client-3.4.1.jar:?] at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) ~[HikariCP-5.1.0.jar:?] at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) ~[HikariCP-5.1.0.jar:?] at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) ~[HikariCP-5.1.0.jar:?] at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) ~[HikariCP-5.1.0.jar:?] at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) ~[HikariCP-5.1.0.jar:?] at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) ~[HikariCP-5.1.0.jar:?] at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) ~[HikariCP-5.1.0.jar:?] at zipkin2.storage.mysql.v1.MySQLStorage.check(MySQLStorage.java:150) ~[zipkin-storage-mysql-v1-3.4.3.jar:?] at zipkin2.server.internal.health.ComponentHealth.ofComponent(ComponentHealth.java:22) ~[classes/:?] at zipkin2.server.internal.health.ZipkinHealthController.lambda$health$1(ZipkinHealthController.java:62) ~[classes/:?] at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(Unknown Source) ~[?:?] ... 8 more

I have tried:

The only way I made zipkin work was launching "on memory". What am I doing wrong?

this is part of my yaml file:

networks:
  env_prod:
    driver: bridge  
    #activate ipv6
    driver_opts: 
      com.docker.network.enable_ipv6: "true"
    #IP Adress Manager
    ipam: 
        driver: default
        config:
        - 
          subnet: 172.16.232.0/24
          gateway: 172.16.232.1
        - 
          subnet: "2001:3974:3979::/64"
          gateway: "2001:3974:3979::1"

services:
  mysql:
    container_name: mysql
    image: mysql:8
    restart: always
    networks:
      - env_prod
    expose:
      - 3306

  zipkin:
    container_name: zipkin
    image: openzipkin/zipkin:latest
    restart: always
    networks:
      - env_prod
    ports:
      - 9411:9411
    environment:
      - JAVA_OPTS=-Dlogging.level.zipkin2=DEBUG -Dlogging.level.org.springframework=DEBUG
      - STORAGE_TYPE=mysql
      - MYSQL_HOST=mysql
      - MYSQL_DB=zipkin
      - MYSQL_USER=zipkin
      - MYSQL_PASS=zipkinpass
      - MYSQL_USE_SSL=false

thanks in advance for all your help!

Upvotes: 0

Views: 29

Answers (1)

Yape
Yape

Reputation: 1

I couldn't make it work with any of the 3 dbs I mentioned. But then, I looked into the image working of zipkin and I found that the "MySql" connection actually is a "MariaDB" connection. So I started up a container with this DB and almost worked, just didn't created the necessary tables.

This is my yaml:

zipkin-storage:
    container_name: zipkin_storage
    image: mariadb:10.6.20-ubi9
    restart: always
    deploy:
      resources:
        limits: 
          cpus: "0.3"
          memory: 100M
    networks:
      - env_prod
    expose:
      - 3306
    environment:
      MARIADB_ROOT_PASSWORD: zipkin_root
      MARIADB_DATABASE: zipkin
      MARIADB_USER: zipkin
      MARIADB_PASSWORD: zipkinpass
    volumes:
      - /Users/myusr/Dockers/zipkin_storage/init-zipkin.sql:/docker-entrypoint-initdb.d/init-zipkin.sql

  zipkin:
    container_name: zipkin
    image: openzipkin/zipkin:latest
    restart: always
    networks:
      - env_prod
    ports:
      - 9411:9411
    environment:
      - STORAGE_TYPE=mysql
      - MYSQL_HOST=zipkin-storage
      - MYSQL_DB=zipkin
      - MYSQL_USER=zipkin
      - MYSQL_PASS=zipkinpass

Where init-zipkin.sql is just the creation script:

USE zipkin;

CREATE TABLE `zipkin_annotations` (
  `trace_id_high` bigint(20) NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
  `trace_id` bigint(20) NOT NULL COMMENT 'coincides with zipkin_spans.trace_id',
  `span_id` bigint(20) NOT NULL COMMENT 'coincides with zipkin_spans.id',
  `a_key` varchar(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1',
  `a_value` blob DEFAULT NULL COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB',
  `a_type` int(11) NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation',
  `a_timestamp` bigint(20) DEFAULT NULL COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp',
  `endpoint_ipv4` int(11) DEFAULT NULL COMMENT 'Null when Binary/Annotation.endpoint is null',
  `endpoint_ipv6` binary(16) DEFAULT NULL COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address',
  `endpoint_port` smallint(6) DEFAULT NULL COMMENT 'Null when Binary/Annotation.endpoint is null',
  `endpoint_service_name` varchar(255) DEFAULT NULL COMMENT 'Null when Binary/Annotation.endpoint is null',
  UNIQUE KEY `trace_id_high` (`trace_id_high`,`trace_id`,`span_id`,`a_key`,`a_timestamp`) COMMENT 'Ignore insert on duplicate',
  KEY `trace_id_high_2` (`trace_id_high`,`trace_id`,`span_id`) COMMENT 'for joining with zipkin_spans',
  KEY `trace_id_high_3` (`trace_id_high`,`trace_id`) COMMENT 'for getTraces/ByIds',
  KEY `endpoint_service_name` (`endpoint_service_name`) COMMENT 'for getTraces and getServiceNames',
  KEY `a_type` (`a_type`) COMMENT 'for getTraces and autocomplete values',
  KEY `a_key` (`a_key`) COMMENT 'for getTraces and autocomplete values',
  KEY `trace_id` (`trace_id`,`span_id`,`a_key`) COMMENT 'for dependencies job'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci ROW_FORMAT=COMPRESSED;

CREATE TABLE `zipkin_dependencies` (
  `day` date NOT NULL,
  `parent` varchar(255) NOT NULL,
  `child` varchar(255) NOT NULL,
  `call_count` bigint(20) DEFAULT NULL,
  `error_count` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`day`,`parent`,`child`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci ROW_FORMAT=COMPRESSED;

CREATE TABLE `zipkin_spans` (
  `trace_id_high` bigint(20) NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
  `trace_id` bigint(20) NOT NULL,
  `id` bigint(20) NOT NULL,
  `name` varchar(255) NOT NULL,
  `remote_service_name` varchar(255) DEFAULT NULL,
  `parent_id` bigint(20) DEFAULT NULL,
  `debug` bit(1) DEFAULT NULL,
  `start_ts` bigint(20) DEFAULT NULL COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL',
  `duration` bigint(20) DEFAULT NULL COMMENT 'Span.duration(): micros used for minDuration and maxDuration query',
  PRIMARY KEY (`trace_id_high`,`trace_id`,`id`),
  KEY `trace_id_high` (`trace_id_high`,`trace_id`) COMMENT 'for getTracesByIds',
  KEY `name` (`name`) COMMENT 'for getTraces and getSpanNames',
  KEY `remote_service_name` (`remote_service_name`) COMMENT 'for getTraces and getRemoteServiceNames',
  KEY `start_ts` (`start_ts`) COMMENT 'for getTraces ordering and range'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci ROW_FORMAT=COMPRESSED;

SELECT 'Tablas creadas correctamente.' AS Info;

Upvotes: 0

Related Questions