OTel: add trace_flags to JSON log records so unsampled trace ids are recognizable
Les mainteneurs répondent en général sous 1 jour
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 82/100
- Type d'issue
- Fonctionnalité
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- python
- Domaine
- observability
Piste de recherche
Commence par lire otel.trace_fields() et les tests test_trace_fields_inside_span et test_json_mode_adds_trace_ids ; l’issue mentionne également docs/api-reference/observability.md. Vérifie comment le contexte du span expose les indicateurs de trace, puis exécute les tests concernés. Le travail est terminé lorsque les enregistrements de logs JSON incluent l’indicateur W3C en minuscules sur deux chiffres, qu’un test ALWAYS_OFF attend "00" et que la documentation Logs explique cette valeur.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Follow-up to #7668 (fixes #6903).
Problem
#7668 adds trace_id and span_id to JSON log records written inside an OpenTelemetry span. It does not add trace_flags.
A span that is not sampled still has a valid span context. So its log records get ids, but the tracing backend never stores that trace. A reader then searches for a trace that does not exist, and the log line gives no sign of why.
This case is normal in Reflex. The event span uses a parent-based sampler by default, so a client traceparent with the sampled flag off gives an unsampled span. A ratio sampler (OTEL_TRACES_SAMPLER=traceidratio) does the same for most spans.
Repro
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.sampling import ALWAYS_OFF
from reflex_base import otel
otel.enable(tracer_provider=TracerProvider(sampler=ALWAYS_OFF))
with otel._tracer.start_as_current_span("x") as span:
print(span.is_recording()) # False
print(otel.trace_fields()) # {'trace_id': '...', 'span_id': '...'}, no sampled flag
Proposed change
Add trace_flags to otel.trace_fields(), as the OpenTelemetry spec "Trace Context in Non-OTLP Log Formats" recommends. Use the W3C format: two lowercase hex digits, "01" when sampled, "00" when not.
"trace_flags": f"{span_context.trace_flags:02x}",
- Extend
test_trace_fields_inside_spanandtest_json_mode_adds_trace_idsto check the field. - Add a test with an
ALWAYS_OFFsampler that expects"trace_flags": "00". - Add the field to the "Logs" section of
docs/api-reference/observability.md, with one sentence on what"00"means.
- Langage dominant
- Python
- Étoiles
- 29k
- Forks
- 1.8k
- Merge moyen
- 2 j 22 h
- PR mergées (30 j)
- 143
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de reflex-dev/reflex
-
Operations on a list[T] | None var throw when the value is NonePeut-être pris @masenf l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
reflex-dev/reflex#7826 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
reflex-dev/reflex#7825 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
PropsBase nested serialization applies parent include/exclude filters to child fieldsPeut-être pris @harsh21234i l’a pris il y a 1 jour. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
reflex-dev/reflex#7787 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
0.9.12 changelog follow-ups: the #7132 "_get_was_touched" entry describes unreachable behaviour, #7115's hasattr/getattr change is undocumented, #7131's wordingPeut-être à nouveau libre Une pull request pour cette issue a été fermée sans être fusionnée. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
reflex-dev/reflex#7260 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
ClientStateVar: a component that mounts while the value is non-default never re-renders on the push back to the defaultPeut-être à nouveau libre Une pull request pour cette issue a été fermée sans être fusionnée. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
reflex-dev/reflex#6823 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de reflex-dev/reflex
Issues similaires
-
[Bug]: graphify query loads every language extractor just for _file_stem (about 34 ms per call)Peut-être pris @rohit-jsfreaky l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Graphify-Labs/graphify#5160 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
-
Variable declared without a value suppresses ${VAR:-default} expansionPeut-être pris @Omarinho12345 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
theskumar/python-dotenv#750 ·
Les mainteneurs répondent en général sous 12 jours
-
Minor bug: Main page buttonOuvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
-
[Bug]: Upfront audit metrics accept out-of-range budgets and return impossible probabilitiesOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
UKGovernmentBEIS/control-arena#947 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
jasonacox/Powerwall-Dashboard#897 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour