Отключить AWS X-Ray в приложении Java

Я ищу возможность отключить AWS X-Ray в моем приложении java, чтобы он не создавал / не записывал какой-либо сегмент. Приложение Java построено при весенней загрузке и развернуто на EC2.

Как глобальный рекордер, чтобы отключить выборку и обработать все входящие запросы. Причина в том, что наше приложение иногда будет развертываться в клиентской среде AWS, и они не хотят, чтобы трассировка была включена.

Я видел, что есть возможность отключить Xray для python (AWS_XRAY_SDK_ENABLED https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-python-configuration.html), но я не смог ' найти аналогичный вариант для java.


person Nilesh Patil    schedule 14.02.2020    source источник


Ответы (2)


К сожалению, прямого способа отключить трассировку с помощью X-Ray SDK для Java нет. В нашем бэклоге есть реализация аналогичного типа переменной среды для Java SDK. Хотя это и утомительно, лучший способ, который я видел, как клиенты реализуют обходной путь, - это сделать свою инструментальную логику зависимой от вашей собственной переменной среды / системы. Например:

AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard();

if (myTracingEnvVar == true) {
  client = client.withRequestHandlers(new TracingHandler(AWSXRay.getGlobalRecorder()));
}

client.build();

Очевидно, это далеко не удобно. Если хотите, мы всегда открыты для получения запросов на GitHub.

person William Armiros    schedule 21.02.2020
comment
таким образом он отключит только globalrecorder, но если xray-клиента нет (в среде, отличной от AWS), приложение все равно будет пытаться отправить следы клиенту, и в журнале будет ошибка. Я пытался полностью отключить рентген .. - person Nilesh Patil; 26.02.2020
comment
К сожалению, в настоящее время X-Ray SDK для Java нельзя полностью отключить так, как вы описываете. Это функция, которую нам предстоит реализовать. Моя лучшая рекомендация, пока мы не выпустим такую ​​функцию, - использовать какое-нибудь условие, подобное тому, которое я описал. - person William Armiros; 03.03.2020
comment
Спасибо, Уильям. Мы еще не интегрировали AWS xray, пытаясь понять, какой из них лучше подходит для нашего приложения. - person Nilesh Patil; 04.03.2020

Вы можете использовать аннотацию Spring @ConditionalOnProperty в классах, где у вас есть конфигурация xray:

@Configuration
@ConditionalOnProperty(
    value = "AWS_XRAY_SDK_ENABLED",
    havingValue = "true",
    matchIfMissing = false)
public class XRayConfig { ... }

@Aspect
@Component
@ConditionalOnProperty(
    value = "AWS_XRAY_SDK_ENABLED",
    havingValue = "true",
    matchIfMissing = false)
public class XRayInspector extends AbstractXRayInterceptor { ... }

Это позволяет вам создавать bean-компоненты условно на основе наличия и значения свойства конфигурации.

person Alba Asca    schedule 12.11.2020