JDBC spans report the whole host list as the host for multi-host connection URLs

Ouverte Adaptée aux débutants
#4,616 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@RaphaelFakhri y travaille déjà.

Depuis le 3/11/2026.

  • #4617 par @RaphaelFakhri — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
70/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
Active
Stack technique
java
Domaine
observability

Piste de recherche

L’issue nomme ConnectionMetaData.parse et présente des URL PostgreSQL et H2 avec plusieurs hôtes, mais ne nomme aucun fichier source ni fichier de test. Commencez par localiser le code d’analyse des URL et les tests existants pour les URL MySQL et MariaDB avec plusieurs hôtes, puis vérifiez comment les hôtes et les ports PostgreSQL et H2 sont analysés. Le travail sera terminé lorsque le premier hôte et son port seront indiqués pour les exemples de l’issue, avec des tests couvrant les deux formats d’URL.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

agent-java community triage

The JDBC plugin parses the connection URL that DatabaseMetaData.getURL() returns to fill the destination and database fields of JDBC spans. When the URL lists more than one host, as in PostgreSQL failover/load balancing URLs or H2 cluster URLs, the parser treats the full comma-separated host list as a single host.

For example, jdbc:postgresql://myhost1:666,myhost2:777/database produces:

  • host: myhost1:666,myhost2:777 (expected myhost1)
  • port: 5432, the default (expected 666)

jdbc:h2:tcp://server1:9101,server2:9102/~/sample produces host server1:9101,server2:9102 and port -1.

The PostgreSQL driver returns the original connection URL from getURL(), so every span on such a connection reports this host and port in destination.address, destination.port and the service target. The MySQL and MariaDB parsers already use the first host of a multi-host URL.

Steps to reproduce

  1. Connect to PostgreSQL with a multi-host URL, for example jdbc:postgresql://host1:5432,host2:5432/db?targetServerType=primary.
  2. Run a query while a transaction is active.
  3. Inspect the JDBC span: destination.address is host1:5432,host2:5432.

The same result is visible in a unit test:

ConnectionMetaData metadata = ConnectionMetaData.parse("jdbc:postgresql://myhost1:666,myhost2:777/database").build();
metadata.getHost(); // "myhost1:666,myhost2:777"
metadata.getPort(); // 5432

Expected behavior

The agent uses the first host and its port, as it already does for MySQL and MariaDB multi-host URLs.

Environment

  • Agent version: current main (1.57.2-SNAPSHOT)
  • Drivers: PostgreSQL JDBC (multi-host URLs), H2 (cluster URLs)
Langage dominant
Java
Étoiles
592
Forks
340
Merge moyen
2 j 17 h
PR mergées (30 j)
17

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de elastic/apm-agent-java

Toutes les issues de elastic/apm-agent-java

Issues similaires

Plus d'issues Java

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.