|
| 1 | +--- |
| 2 | +title: Ecossistema de Instrumentação |
| 3 | +aliases: |
| 4 | + - /docs/java/getting_started |
| 5 | + - /docs/java/manual_instrumentation |
| 6 | + - manual |
| 7 | + - manual_instrumentation |
| 8 | + - libraries |
| 9 | +weight: 10 |
| 10 | +description: Ecossistema de Instrumentação no OpenTelemetry Java |
| 11 | +default_lang_commit: d65798034935fcfdbdc6599b6e6d3dd942fbe62c |
| 12 | +cSpell:ignore: Logback logback |
| 13 | +--- |
| 14 | + |
| 15 | +<!-- markdownlint-disable no-duplicate-heading --> |
| 16 | + |
| 17 | +A instrumentação registra a telemetria usando a [API](../api/). O [SDK](../sdk/) |
| 18 | +é a implementação de referência embutida na API, e é |
| 19 | +[configurada](../configuration/) para processar e exportar a telemetria |
| 20 | +produzida pelas chamadas de instrumentação da API. Esta página discute o |
| 21 | +ecossistema de instrumentação no OpenTelemetry Java, incluindo recursos para |
| 22 | +usuários finais e tópicos relacionados à instrumentação: |
| 23 | + |
| 24 | +- [Categorias de instrumentação](#instrumentation-categories): Existem diversas |
| 25 | + categorias de instrumentação para diferentes casos de uso e padrões de |
| 26 | + instalação. |
| 27 | +- [Propagação de Contexto](#context-propagation): Propagação de Contexto provê |
| 28 | + uma correlação entre rastros, métricas, e logs, permitindo que os sinais se |
| 29 | + complementem. |
| 30 | +- [Convenções semânticas](#semantic-conventions): As convenções semânticas |
| 31 | + definem como produzir telemetria para operações padrão. |
| 32 | +- [Log instrumentation](#log-instrumentation) |
| 33 | + |
| 34 | +{{% alert %}} Embora as |
| 35 | +[categorias de instrumentação](#instrumentation-categories) enumerem diversas |
| 36 | +opções para instrumentar uma aplicação, nós recomendamos que os usuários iniciem |
| 37 | +com o [Agente Java](#zero-code-java-agent). O agente Java possui uma instalação |
| 38 | +simples, e automaticamente detecta e instala instrumentação de uma vasta |
| 39 | +biblioteca. {{% /alert %}} |
| 40 | + |
| 41 | +## Categorias de instrumentação {#instrumentation-categories} |
| 42 | + |
| 43 | +Existem diversas categorias de instrumentação: |
| 44 | + |
| 45 | +- [Sem código: Agente Java](#zero-code-java-agent) é uma forma de instrumentação |
| 46 | + sem código **[1]** que manipula dinamicamente o _bytecode_ da aplicação. |
| 47 | +- [Sem código: Spring Boot starter](#zero-code-spring-boot-starter) é uma forma |
| 48 | + de instrumentação sem código **[1]** que utiliza a autoconfiguração do spring |
| 49 | + para instalar [biblioteca de instrumentação](#library-instrumentation). |
| 50 | +- [Biblioteca de instrumentação](#library-instrumentation) envolve ou utiliza |
| 51 | + pontos de extensão para instrumentar uma biblioteca, exigindo que os usuários |
| 52 | + instalem e/ou adaptem o uso da biblioteca. |
| 53 | +- [Instrumentação nativa](#native-instrumentation) é incorporada diretamente em |
| 54 | + bibliotecas e frameworks. |
| 55 | +- [Instrumentação manual](#manual-instrumentation) é escrito pelos autores das |
| 56 | + aplicações, e normalmente específico para o domínio da aplicação. |
| 57 | +- [Shims](#shims) conectam dados de uma biblioteca de observabilidade a outra, |
| 58 | + normalmente _de_ alguma biblioteca para o OpenTelemetry. |
| 59 | + |
| 60 | +**[1]**: A instrumentação sem código é instalada automaticamente baseado nas |
| 61 | +bibliotecas e frameworks detectados. |
| 62 | + |
| 63 | +O projeto |
| 64 | +[opentelemetry-java-instrumentation](https://github.com/open-telemetry/opentelemetry-java-instrumentation) |
| 65 | +contém o código fonte do Agente Java, inicializador Spring Boot, e Biblioteca de |
| 66 | +instrumentação. |
| 67 | + |
| 68 | +### Sem código: Agente Java {#zero-code-java-agent} |
| 69 | + |
| 70 | +O agente do Java é uma forma de |
| 71 | +[instrumentação automática](/docs/specs/otel/glossary/#automatic-instrumentation) |
| 72 | +zero código que manipula dinamicamente o _bytecode_ da aplicação. |
| 73 | + |
| 74 | +Para uma lista de bibliotecas instrumentadas pelo agente do Java, confira a |
| 75 | +coluna _"Auto-instrumented versions"_ (versões auto-instrumentadas) em |
| 76 | +[bibliotecas suportadas](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/supported-libraries.md). |
| 77 | + |
| 78 | +Veja [Agente Java](/docs/zero-code/java/agent/) para mais detalhes. |
| 79 | + |
| 80 | +### Sem código: inicializador Spring Boot {#zero-code-spring-boot-starter} |
| 81 | + |
| 82 | +O inicializador Spring Boot é uma forma de |
| 83 | +[instrumentação automática](/docs/specs/otel/glossary/#automatic-instrumentation) |
| 84 | +zero código que aproveita a autoconfiguração do spring para instalar a |
| 85 | +[biblioteca de instrumentação](#library-instrumentation). |
| 86 | + |
| 87 | +Veja [inicializador Spring Boot](/docs/zero-code/java/spring-boot-starter/) para |
| 88 | +detalhes. |
| 89 | + |
| 90 | +### Biblioteca de instrumentação {#library-instrumentation} |
| 91 | + |
| 92 | +[Biblioteca de instrumentação](/docs/specs/otel/glossary/#instrumentation-library) |
| 93 | +envolve ou usa os pontos de extensão para instrumentar a biblioteca, obrigando |
| 94 | +os usuários a instalar e/ou adaptar o uso da biblioteca. |
| 95 | + |
| 96 | +Para uma lista de bibliotecas de instrumentação, veja a coluna _"Standalone |
| 97 | +Library Instrumentation [1]"_ (Biblioteca autônoma de instrumentação) em |
| 98 | +[bibliotecas suportadas](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/supported-libraries.md). |
| 99 | + |
| 100 | +### Instrumentação nativa {#native-instrumentation} |
| 101 | + |
| 102 | +[Instrumentação nativa](/docs/specs/otel/glossary/#natively-instrumented) é |
| 103 | +definido diretamente nas bibliotecas ou _frameworks_. O OpenTelemetry encoraja |
| 104 | +os autores de bibliotecas a adicionarem instrumentação nativa usando a |
| 105 | +[API](../api/). No longo prazo, nós esperamos que a instrumentação nativa seja o |
| 106 | +padrão, e que a instrumentação mantida pelo OpenTelemetry em |
| 107 | +[opentelemetry-java-instrumentação](https://github.com/open-telemetry/opentelemetry-java-instrumentation) |
| 108 | +seja um meio temporário de preencher a lacuna. |
| 109 | + |
| 110 | +{{% docs/languages/native-libraries "java" %}} |
| 111 | + |
| 112 | +### Instrumentação manual {#manual-instrumentation} |
| 113 | + |
| 114 | +[Instrumentação manual](/docs/specs/otel/glossary/#manual-instrumentation) é |
| 115 | +escrita pelos autores das aplicações, e normalmente específica para o domínio da |
| 116 | +aplicação. |
| 117 | + |
| 118 | +### Shims |
| 119 | + |
| 120 | +Um shim é uma instrumentação que conecta dados de uma biblioteca de |
| 121 | +observabilidade até outra, normalmente _de_ alguma biblioteca para o |
| 122 | +OpenTelemetry. |
| 123 | + |
| 124 | +Shims mantidos no ecossistema OpenTelemetry Java: |
| 125 | + |
| 126 | +| Descrição | Documentação | Sinal(s) | Artefato | |
| 127 | +| ----------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------- | |
| 128 | +| Bridge [OpenTracing](https://opentracing.io/) no OpenTelemetry | [LEIA-ME](https://github.com/open-telemetry/opentelemetry-java/tree/main/opentracing-shim) | Rastros | `io.opentelemetry:opentelemetry-opentracing-shim:{{% param vers.otel %}}` | |
| 129 | +| Bridge [Opencensus](https://opencensus.io/) no OpenTelemetry | [LEIA-ME](https://github.com/open-telemetry/opentelemetry-java/tree/main/opencensus-shim) | Rastros, Métricas | `io.opentelemetry:opentelemetry-opencensus-shim:{{% param vers.otel %}}-alpha` | |
| 130 | +| Bridge [Micrometer](https://micrometer.io/) no OpenTelemetry | [LEIA-ME](https://github.com/open-telemetry/opentelemetry-java-instrumentation/tree/main/instrumentation/micrometer/micrometer-1.5/library) | Métricas | `io.opentelemetry.instrumentation:opentelemetry-micrometer-1.5:{{% param vers.instrumentation %}}-alpha` | |
| 131 | +| Bridge [JMX](https://docs.oracle.com/javase/7/docs/technotes/guides/management/agent.html) no OpenTelemetry | [LEIA-ME](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/instrumentation/jmx-metrics/javaagent/README.md) | Métricas | `io.opentelemetry.instrumentation:opentelemetry-jmx-metrics:{{% param vers.instrumentation %}}-alpha` | |
| 132 | +| Bridge OpenTelemetry no [Prometheus Java client](https://github.com/prometheus/client_java) | [LEIA-ME](https://github.com/open-telemetry/opentelemetry-java-contrib/tree/main/prometheus-client-bridge) | Métricas | `io.opentelemetry.contrib:opentelemetry-prometheus-client-bridge:{{% param vers.contrib %}}-alpha` | |
| 133 | +| Bridge OpenTelemetry no [Micrometer](https://micrometer.io/) | [LEIA-ME](https://github.com/open-telemetry/opentelemetry-java-contrib/tree/main/micrometer-meter-provider) | Métricas | `io.opentelemetry.contrib:opentelemetry-micrometer-meter-provider:{{% param vers.contrib %}}-alpha` | |
| 134 | +| Bridge [Log4j](https://logging.apache.org/log4j/2.x/index.html) no OpenTelemetry | [LEIA-ME](https://github.com/open-telemetry/opentelemetry-java-instrumentation/tree/main/instrumentation/log4j/log4j-appender-2.17/library) | Logs | `io.opentelemetry.instrumentation:opentelemetry-log4j-appender-2.17:{{% param vers.instrumentation %}}-alpha` | |
| 135 | +| Bridge [Logback](https://logback.qos.ch/) no OpenTelemetry | [LEIA-ME](https://github.com/open-telemetry/opentelemetry-java-instrumentation/tree/main/instrumentation/logback/logback-appender-1.0/library) | Logs | `io.opentelemetry.instrumentation:opentelemetry-logback-appender-1.0:{{% param vers.instrumentation %}}-alpha` | |
| 136 | +| Bridge OpenTelemetry context no [Log4j](https://logging.apache.org/log4j/2.x/index.html) | [LEIA-ME](https://github.com/open-telemetry/opentelemetry-java-instrumentation/tree/main/instrumentation/log4j/log4j-context-data/log4j-context-data-2.17/library-autoconfigure) | Context | `io.opentelemetry.instrumentation:opentelemetry-log4j-context-data-2.17-autoconfigure:{{% param vers.instrumentation %}}-alpha` | |
| 137 | +| Bridge OpenTelemetry context no [Logback](https://logback.qos.ch/) | [LEIA-ME](https://github.com/open-telemetry/opentelemetry-java-instrumentation/tree/main/instrumentation/logback/logback-mdc-1.0/library) | Context | `io.opentelemetry.instrumentation:opentelemetry-logback-mdc-1.0:{{% param vers.instrumentation %}}-alpha` | |
| 138 | + |
| 139 | +## Propagação de Contexto {#context-propagation} |
| 140 | + |
| 141 | +As APIs do OpenTelemetry foram desenhadas para serem complementares, onde o todo |
| 142 | +é maior que a soma das partes. Cada sinal tem seus pontos fortes e juntos formam |
| 143 | +uma narrativa convincente de observabilidade. |
| 144 | + |
| 145 | +É importante ressaltar que os dados de vários sinais são interligados através do |
| 146 | +contexto de rastreamento: |
| 147 | + |
| 148 | +- Trecho são relacionados com outros trechos através do trecho pai e links, que |
| 149 | + registram os contextos de rastreamento dos trechos relacionados. |
| 150 | +- Métricas são relacionadas a trechos através de |
| 151 | + [exemplares](/docs/specs/otel/metrics/data-model/#exemplars), que registram o |
| 152 | + contexto de rastreamento de uma medição específica. |
| 153 | +- Logs são relacionados a trechos ao registrar o contexto de rastreamento nos |
| 154 | + registros de logs. |
| 155 | + |
| 156 | +Para essa correlação funcionar, o contexto de rastreamento precisa ser propagado |
| 157 | +através da aplicação (entre chamada de funções e processos), e entre limites da |
| 158 | +aplicação. A [API de contexto](../api/#context-api) facilita isso. |
| 159 | + |
| 160 | +A instrumentação deve ser escrita de uma maneira que seja ciente do contexto: |
| 161 | + |
| 162 | +- Bibliotecas que representam um ponto de entrada da aplicação (i.e. servidores |
| 163 | + HTTP, consumidores de mensagens, etc.) devem |
| 164 | + [extrair o contexto](../api/#contextpropagators) de mensagens recebidas. |
| 165 | +- Bibliotecas que representam um ponto de saída de uma aplicação (ex. clientes |
| 166 | + HTTP, produtores de mensagens, etc.) devem |
| 167 | + [injetar o contexto](../api/#contextpropagators) em mensagens de saída. |
| 168 | +- Bibliotecas devem passar implicitamente ou explicitamente o |
| 169 | + [contexto](../api/#context) através da pilha de chamadas e entre qualquer |
| 170 | + processo. |
| 171 | + |
| 172 | +## Convenção semântica {#semantic-conventions} |
| 173 | + |
| 174 | +As [convenções semânticas](/docs/specs/semconv/) definem como produzir |
| 175 | +telemetria para operações padrão. Entre outras coisas, as convenções semânticas |
| 176 | +especificam nomes e tipos de trechos, instrumentos de métrica, unidades de |
| 177 | +métricas, tipos de métricas, e atributos chave, valor, e níveis de requisitos. |
| 178 | + |
| 179 | +Ao escrever instrumentação, consulte a convenção semântica e confirme que |
| 180 | +quaisquer convenções aplicáveis ao domínio estejam sendo seguidas. |
| 181 | + |
| 182 | +O OpenTelemetry Java [publica artefatos](../api/#semantic-attributes) para |
| 183 | +auxiliar a conformidade com a convenção semântica, incluindo constantes geradas |
| 184 | +para chaves e valores de atributos. |
| 185 | + |
| 186 | +## Instrumentação de Log {#log-instrumentation} |
| 187 | + |
| 188 | +Enquanto as APIs do [LoggerProvider](../api/#loggerprovider) / |
| 189 | +[Logger](../api/#logger) são estruturalmente similares ou equivalentes às APIs |
| 190 | +de [rastros](../api/#tracerprovider) e [métricas](../api/#meterprovider), elas |
| 191 | +possuem diferentes casos de uso. A partir de agora, `LoggerProvider` / `Logger` |
| 192 | +e as classes associadas representam a |
| 193 | +[Log Bridge API](/docs/specs/otel/logs/api/), que existe para escrever |
| 194 | +anexadores de logs para conectar logs registrados através de outras APIs de log |
| 195 | +/ frameworks no OpenTelemetry. Eles não são destinados para usuários finais como |
| 196 | +um substituto para Log4j / SLF4J / Logback / etc. |
| 197 | + |
| 198 | +Eles são dois _workflows_ típicos para consumir instrumentação de logs no |
| 199 | +OpenTelemetry atendendo a diferentes requisitos de aplicação: |
| 200 | + |
| 201 | +### Direto para o Collector {#direct-to-collector} |
| 202 | + |
| 203 | +No _workflow_ direto para o Collector, logs são emitidos diretamente da |
| 204 | +aplicação para o Collector usando um protocolo de rede (ex. OTLP). Este |
| 205 | +_workflow_ é simples para configurar já que não requer nenhum componente |
| 206 | +adicional de encaminhamento de log, e permite que uma aplicação facilmente emita |
| 207 | +logs estruturados em conformidade com o |
| 208 | +[modelo de dados de log](/docs/specs/otel/logs/data-model/). No entanto, a |
| 209 | +sobrecarga necessária para as aplicações enfileirarem e exportarem os logs para |
| 210 | +um local de rede pode não ser adequada para todas as aplicações. |
| 211 | + |
| 212 | +Para usar este _workflow_: |
| 213 | + |
| 214 | +- Instale o conector apropriado de log. **[1]** |
| 215 | +- Configure o OpenTelemetry [Log SDK](../sdk/#sdkloggerprovider) para exportar |
| 216 | + registros de logs para o destino desejado (o |
| 217 | + [Collector](https://github.com/open-telemetry/opentelemetry-collector) ou |
| 218 | + outro). |
| 219 | + |
| 220 | +**[1]**: Anexadores de Logs são um tipo de [shim](#shims) que conecta logs de um |
| 221 | +_framework_ no SDK de Logs do OpenTelemetry. Veja os items "Bridge Log4j em |
| 222 | +OpenTelemetry", "Bridge Logback em OpenTelemetry". Veja |
| 223 | +[Exemplo de Anexadores de Logs](https://github.com/open-telemetry/opentelemetry-java-docs/tree/main/log-appender) |
| 224 | +para demonstração de uma variedade de cenários. |
| 225 | + |
| 226 | +### Via arquivo ou stdout {#via-file-or-stdout} |
| 227 | + |
| 228 | +No _workflow_ para arquivos ou _stdout_, os logs são gravados em arquivos ou na |
| 229 | +saída _standout_. Outro componente (ex. FluentBit) é responsável por ler / |
| 230 | +acompanhar os logs, convertê-los para um formato mais estruturado, e |
| 231 | +encaminhá-los para um destino, como um Collector. Este _workflow_ pode ser |
| 232 | +preferível em situações onde os requisitos da aplicação não permitem sobrecarga |
| 233 | +adicional da abordagem [direto para o Collector](#direct-to-collector). No |
| 234 | +entanto, isso requer que todos os campos de logs necessários para processamento |
| 235 | +posterior sejam codificados nos logs, e este componente lendo os logs os |
| 236 | +interprete no [modelo de dados de log](/docs/specs/otel/logs/data-model). A |
| 237 | +instalação e configuração dos componentes de encaminhamento de log está fora do |
| 238 | +escopo deste documento. |
| 239 | + |
| 240 | +Correlação de Logs com rastros está disponível instalando um [shim](#shims) para |
| 241 | +conectar o contexto do OpenTelemetry no log framework. Veja os items "Bridge |
| 242 | +OpenTelemetry contexto em Log4j", "Bridge OpenTelemetry contexto em Logback". |
0 commit comments