Моя текущая настройка: приложение Spring Boot (версия 3.1.5) с Micrometer, отправляющее трассировки, метрики и (в идеале) все журналы в Docker-контейнер otel/opentelemetry-collector-contrib.
Кажется, все работает, за исключением того, что мне не удается заставить приложение Spring Boot отправлять журналы сборщику OTEL.
Поскольку я не смог найти очень четких инструкций, как это сделать, Я просто соединяю вещи, например из этих двух и других:
https://github.com/open-telemetry/opent ... ssues/7723
https://github.com/ff-sdesai/distribute ... ck.xml#L17
и надеюсь, что это работает... но это не так, поэтому я здесь:
application.yml
spring:
output:
ansi:
enabled: always
(...)
# Micrometer tracing
management:
tracing:
sampling:
probability: 1.0
otlp:
tracing:
endpoint: http://localhost:4318/v1/traces
metrics:
export:
url: http://localhost:4318/v1/metrics
endpoints:
web:
exposure:
include: "*"
(...)
logging:
pattern:
console: '[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} [%X{traceId}] [%X{spanId}] - %msg%n'
level: '%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]'
logback.xml
%black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1}): trace_id: %X{traceId}
span_id: %X{spanId} %msg%n%throwable
${LOGS}/up-user-service.log
%d %p %C{1} [%t] %m%n
${LOGS}/archived/up-user-service-%d{yyyy-MM-dd}.%i.log
10MB
%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} serviceName: %X{serviceName} requestId: %X{requestId} trace_id: %X{traceId} span_id: %X{spanId} - %msg%n
pom.xml
(...)
org.springframework.boot
spring-boot-starter-actuator
io.micrometer
micrometer-tracing
io.micrometer
micrometer-tracing-bridge-otel
io.opentelemetry
opentelemetry-exporter-otlp
io.opentelemetry.instrumentation
opentelemetry-logback-appender-1.0
2.1.0-alpha
runtime
io.opentelemetry
opentelemetry-exporter-otlp-logs
1.26.0-alpha
io.opentelemetry.instrumentation
opentelemetry-logback-1.0
1.9.2-alpha
runtime
(...)
ПРИМЕЧАНИЕ. Мне интересно, связана ли эта проблема, а не связана ли она с отсутствием спандидов и трассировок в некоторых журналах. Ни у кого из них их нет, за исключением, например, случаев, когда я вхожу в пользовательский диапазон. Это пример класса, пробующего различные функции, включая создание интервалов:
TestApi.java
@Slf4j
@RestController
class TestApi {
@Autowired
private ObservationRegistry observationRegistry;
@Autowired
private Tracer tracer;
@Autowired
private MeterRegistry meterRegistry;
@GetMapping("test")
void test() {
System.out.println("### MY TEST ###");
log.info("@@@@@ TEST LOMBOK LOGGER @@@@@");
}
@GetMapping("exception")
void exception() throws Exception {
throw new Exception("CUSTOM EXCEPTION");
}
@GetMapping("custom_span") // WORKS
void customSpan() throws Exception {
Observation observation = Observation.createNotStarted("my-custom-operation", this.observationRegistry);
observation.lowCardinalityKeyValue("my-tag", "my-value");
observation.observe(() -> {
System.out.println("### HOW LONG DID IT TAKE? ###");
log.info("@@@@@ HOW LONG DID IT TAKE? @@@@@");
});
}
// So, what is Baggage? The spec defines a standard HTTP header to propagate the application-defined properties associated with a distributed request.
@GetMapping("custom_baggage")
void customBaggage() {
try (BaggageInScope scope = this.tracer.createBaggageInScope("my-baggage-key", "my-baggage-value")) {
System.out.println("### IS IT BAGGAGING? ###");
log.info("@@@@@ IS IT BAGGAGING? @@@@@");
log.info("Contains the following baggage {}", tracer.getAllBaggage());
}
}
@GetMapping("custom_metric")
void customMetric() { // TODO: TO BE TESTED WITH A COMPATIBLE METRIC UI
log.info("CREATING CUSTOM METRIC");
List list = new ArrayList();
meterRegistry.gauge("list.size", Tags.empty(), list.size());
list.add(1);
list.add(2);
list.add(3);
}
}
config.yaml
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
exporters:
logging:
loglevel: debug
jaeger:
endpoint: jaeger-service:14250
tls:
insecure: true
service:
pipelines:
traces:
receivers: [otlp]
exporters: [logging, jaeger]
metrics:
receivers: [otlp]
exporters: [logging]
logs:
receivers: [ otlp ]
exporters: [logging]
Подробнее здесь: https://stackoverflow.com/questions/781 ... elemetry-t
Как отправить журналы Lombok @Slf4j и журналы System.out.println() в открытую телеметрию через Micrometer ⇐ JAVA
Программисты JAVA общаются здесь
1770727957
Anonymous
Моя текущая настройка: приложение Spring Boot (версия 3.1.5) с Micrometer, отправляющее трассировки, метрики и (в идеале) все журналы в Docker-контейнер otel/opentelemetry-collector-contrib.
Кажется, все работает, за исключением того, что мне не удается заставить приложение Spring Boot отправлять журналы сборщику OTEL.
Поскольку я не смог найти очень четких инструкций, как это сделать, Я просто соединяю вещи, например из этих двух и других:
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7723
https://github.com/ff-sdesai/distributed-tracing-spring/blob/ee36dcd78ce9c0b517355642af3c5e0b8b6d67d0/spring-cloud-sleuth-otel-slf4j/src/main/resources/logback.xml#L17
и надеюсь, что это работает... но это не так, поэтому я здесь:
[b]application.yml[/b]
spring:
output:
ansi:
enabled: always
(...)
# Micrometer tracing
management:
tracing:
sampling:
probability: 1.0
otlp:
tracing:
endpoint: http://localhost:4318/v1/traces
metrics:
export:
url: http://localhost:4318/v1/metrics
endpoints:
web:
exposure:
include: "*"
(...)
logging:
pattern:
console: '[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} [%X{traceId}] [%X{spanId}] - %msg%n'
level: '%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]'
[b]logback.xml[/b]
%black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1}): trace_id: %X{traceId}
span_id: %X{spanId} %msg%n%throwable
${LOGS}/up-user-service.log
%d %p %C{1} [%t] %m%n
${LOGS}/archived/up-user-service-%d{yyyy-MM-dd}.%i.log
10MB
%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} serviceName: %X{serviceName} requestId: %X{requestId} trace_id: %X{traceId} span_id: %X{spanId} - %msg%n
[b]pom.xml[/b]
(...)
org.springframework.boot
spring-boot-starter-actuator
io.micrometer
micrometer-tracing
io.micrometer
micrometer-tracing-bridge-otel
io.opentelemetry
opentelemetry-exporter-otlp
io.opentelemetry.instrumentation
opentelemetry-logback-appender-1.0
2.1.0-alpha
runtime
io.opentelemetry
opentelemetry-exporter-otlp-logs
1.26.0-alpha
io.opentelemetry.instrumentation
opentelemetry-logback-1.0
1.9.2-alpha
runtime
(...)
[b]ПРИМЕЧАНИЕ.[/b] Мне интересно, связана ли эта проблема, а не связана ли она с отсутствием спандидов и трассировок в некоторых журналах. Ни у кого из них их нет, за исключением, например, случаев, когда я вхожу в пользовательский диапазон. Это пример класса, пробующего различные функции, включая создание интервалов:
[b]TestApi.java[/b]
@Slf4j
@RestController
class TestApi {
@Autowired
private ObservationRegistry observationRegistry;
@Autowired
private Tracer tracer;
@Autowired
private MeterRegistry meterRegistry;
@GetMapping("test")
void test() {
System.out.println("### MY TEST ###");
log.info("@@@@@ TEST LOMBOK LOGGER @@@@@");
}
@GetMapping("exception")
void exception() throws Exception {
throw new Exception("CUSTOM EXCEPTION");
}
@GetMapping("custom_span") // WORKS
void customSpan() throws Exception {
Observation observation = Observation.createNotStarted("my-custom-operation", this.observationRegistry);
observation.lowCardinalityKeyValue("my-tag", "my-value");
observation.observe(() -> {
System.out.println("### HOW LONG DID IT TAKE? ###");
log.info("@@@@@ HOW LONG DID IT TAKE? @@@@@");
});
}
// So, what is Baggage? The spec defines a standard HTTP header to propagate the application-defined properties associated with a distributed request.
@GetMapping("custom_baggage")
void customBaggage() {
try (BaggageInScope scope = this.tracer.createBaggageInScope("my-baggage-key", "my-baggage-value")) {
System.out.println("### IS IT BAGGAGING? ###");
log.info("@@@@@ IS IT BAGGAGING? @@@@@");
log.info("Contains the following baggage {}", tracer.getAllBaggage());
}
}
@GetMapping("custom_metric")
void customMetric() { // TODO: TO BE TESTED WITH A COMPATIBLE METRIC UI
log.info("CREATING CUSTOM METRIC");
List list = new ArrayList();
meterRegistry.gauge("list.size", Tags.empty(), list.size());
list.add(1);
list.add(2);
list.add(3);
}
}
[b]config.yaml[/b]
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
exporters:
logging:
loglevel: debug
jaeger:
endpoint: jaeger-service:14250
tls:
insecure: true
service:
pipelines:
traces:
receivers: [otlp]
exporters: [logging, jaeger]
metrics:
receivers: [otlp]
exporters: [logging]
logs:
receivers: [ otlp ]
exporters: [logging]
Подробнее здесь: [url]https://stackoverflow.com/questions/78126482/how-to-send-lombok-slf4j-logs-and-system-out-println-logs-to-open-telemetry-t[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия