【问题标题】:Can I use AWS-XRay to trace MySQL queries without Tomcat or Spring?我可以在没有 Tomcat 或 Spring 的情况下使用 AWS-XRay 来跟踪 MySQL 查询吗?
【发布时间】:2018-04-03 20:39:17
【问题描述】:

我正在 AWS Lambda 中运行一些 SQL 查询,并希望利用 AWS-XRay 的跟踪功能来获取有关这些调用的更多详细信息。

This documentation 显示了使用 Spring 和 Tomcat 进行配置的示例,但在我明显的无服务器且应该是轻量级的 Lambda 中使用这两种方法都没有意义。以下是我目前建立连接的方式:

public Connection getDatabaseConnection(String jdbcUrl, String dbUser, String dbPassword) throws SQLException
{
    return DriverManager.getConnection(jdbcUrl, dbUser, dbPassword);
}

try (Connection connection = getDatabaseConnection(getJdbcUrl(), getDbUser(), getDbPassword()))
{
    try(ResultSet results = connection.createStatement().executeQuery("SELECT stuff FROM whatever LIMIT 1))
    {
        return (results.getLong(1));
    }
}

有没有办法在我的用例中利用 AWS-XRay SQL 跟踪?

【问题讨论】:

  • 我最近在 Apache Camel 中添加了 XRay 支持,并添加了一些注释,说明如何在不需要 Tomcat 拦截器的情况下在PR ticket 中实现与 MySQL 语句拦截器相同的结果

标签: java amazon-web-services aws-lambda aws-xray


【解决方案1】:

我认为一种方法是使用 MySQL 语句拦截器: https://github.com/spullara/mysql-connector-java/blob/master/src/main/java/com/mysql/jdbc/StatementInterceptor.java

您可以在 preProcess() 方法中使用 AWSXRay.beginSubsegment(),然后在 postProcess() 中使用 AWSXRay.endSubsegment()。

将是对开源的AWS X-Ray SDK for Java 的一个很好的补充。 以防万一你让它工作。

X-Ray 基于 Spring 的实现参考:DataSource based intereceptor

您可以使用 statementinterceptors 属性作为连接 URL 的一部分来截取此处记录的语句: https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html

更新 我的队友指出,可以使用更新版本的 StatementInterceptor: https://github.com/spullara/mysql-connector-java/blob/master/src/main/java/com/mysql/jdbc/StatementInterceptorV2.java 您可能想要使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-19
    • 2017-10-09
    • 1970-01-01
    • 2020-08-06
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多