3

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

该文档显示了使用 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 跟踪?

4

1 回答 1

2

我认为一种方法是使用 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 你可能想要使用它。

于 2018-04-04T08:35:45.593 回答