-
Notifications
You must be signed in to change notification settings - Fork 69
feat: Add structured internal logging for debugging for Geneva-uploader #472
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 7 commits
Commits
Show all changes
24 commits
Select commit
Hold shift + click to select a range
9ce17b5
initial logs
lalitb 984acfc
fix
lalitb 4a15d01
fix
lalitb d28885b
format
lalitb 4d70368
fix
lalitb 86d2ae0
fix
lalitb 1156ece
fmt
lalitb 956261d
Merge branch 'main' into add-geneva-logs
utpilla 2daa2bd
Update opentelemetry-exporter-geneva/geneva-uploader/src/config_servi…
lalitb 01fa7b4
Update opentelemetry-exporter-geneva/geneva-uploader/src/config_servi…
lalitb 0a6ed0b
Update opentelemetry-exporter-geneva/geneva-uploader/src/config_servi…
lalitb 5f880dc
Update opentelemetry-exporter-geneva/geneva-uploader/src/config_servi…
lalitb 61019a8
Update opentelemetry-exporter-geneva/geneva-uploader/src/config_servi…
lalitb 9d4ba4f
Update opentelemetry-exporter-geneva/geneva-uploader/src/config_servi…
lalitb b84ef98
Update opentelemetry-exporter-geneva/geneva-uploader/src/config_servi…
lalitb e6f094a
Update opentelemetry-exporter-geneva/geneva-uploader/src/client.rs
lalitb 86af6df
Update opentelemetry-exporter-geneva/geneva-uploader/src/client.rs
lalitb e04d0a2
Update opentelemetry-exporter-geneva/geneva-uploader/src/client.rs
lalitb be5fafa
Update opentelemetry-exporter-geneva/geneva-uploader/src/client.rs
lalitb 4370e3f
Update opentelemetry-exporter-geneva/geneva-uploader/src/client.rs
lalitb bce88b7
Update opentelemetry-exporter-geneva/geneva-uploader/src/client.rs
lalitb 2220a2f
fix
lalitb d9e33f8
fix info/debug usage
lalitb 6650e1f
fix the attribute order
lalitb File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -7,6 +7,7 @@ use crate::payload_encoder::otlp_encoder::OtlpEncoder; | |
| use opentelemetry_proto::tonic::logs::v1::ResourceLogs; | ||
| use opentelemetry_proto::tonic::trace::v1::ResourceSpans; | ||
| use std::sync::Arc; | ||
| use tracing::{debug, info}; | ||
|
|
||
| /// Public batch type (already LZ4 chunked compressed). | ||
| /// Produced by `OtlpEncoder::encode_log_batch` and returned to callers. | ||
|
|
@@ -44,13 +45,25 @@ pub struct GenevaClient { | |
|
|
||
| impl GenevaClient { | ||
| pub fn new(cfg: GenevaClientConfig) -> Result<Self, String> { | ||
| info!( | ||
| name: "client.new", | ||
| target: "geneva-uploader", | ||
| "Initializing GenevaClient with endpoint={}, namespace={}, account={}", | ||
| cfg.endpoint, cfg.namespace, cfg.account | ||
| ); | ||
|
|
||
| // Validate MSI resource presence for managed identity variants | ||
| match cfg.auth_method { | ||
| AuthMethod::SystemManagedIdentity | ||
| | AuthMethod::UserManagedIdentity { .. } | ||
| | AuthMethod::UserManagedIdentityByObjectId { .. } | ||
| | AuthMethod::UserManagedIdentityByResourceId { .. } => { | ||
| if cfg.msi_resource.is_none() { | ||
| debug!( | ||
lalitb marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| name: "client.new.validate_msi_resource", | ||
| target: "geneva-uploader", | ||
| "Validation failed: msi_resource must be provided for managed identity auth" | ||
| ); | ||
| return Err( | ||
| "msi_resource must be provided for managed identity auth".to_string() | ||
| ); | ||
|
|
@@ -71,10 +84,15 @@ impl GenevaClient { | |
| auth_method: cfg.auth_method, | ||
| msi_resource: cfg.msi_resource, | ||
| }; | ||
| let config_client = Arc::new( | ||
| GenevaConfigClient::new(config_client_config) | ||
| .map_err(|e| format!("GenevaConfigClient init failed: {e}"))?, | ||
| ); | ||
| let config_client = | ||
| Arc::new(GenevaConfigClient::new(config_client_config).map_err(|e| { | ||
| debug!( | ||
lalitb marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| name: "client.new.config_client_init", | ||
| target: "geneva-uploader", | ||
| "GenevaConfigClient init failed: {}", e | ||
|
||
| ); | ||
| format!("GenevaConfigClient init failed: {e}") | ||
| })?); | ||
|
|
||
| let source_identity = format!( | ||
| "Tenant={}/Role={}/RoleInstance={}", | ||
|
|
@@ -95,8 +113,21 @@ impl GenevaClient { | |
| config_version: config_version.clone(), | ||
| }; | ||
|
|
||
| let uploader = GenevaUploader::from_config_client(config_client, uploader_config) | ||
| .map_err(|e| format!("GenevaUploader init failed: {e}"))?; | ||
| let uploader = | ||
| GenevaUploader::from_config_client(config_client, uploader_config).map_err(|e| { | ||
| debug!( | ||
| name: "client.new.uploader_init", | ||
| target: "geneva-uploader", | ||
| "GenevaUploader init failed: {}", e | ||
lalitb marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| ); | ||
| format!("GenevaUploader init failed: {e}") | ||
| })?; | ||
|
|
||
| info!( | ||
| name: "client.new.complete", | ||
| target: "geneva-uploader", | ||
| "GenevaClient initialized successfully" | ||
| ); | ||
|
|
||
| Ok(Self { | ||
| uploader: Arc::new(uploader), | ||
|
|
@@ -110,38 +141,88 @@ impl GenevaClient { | |
| &self, | ||
| logs: &[ResourceLogs], | ||
| ) -> Result<Vec<EncodedBatch>, String> { | ||
| debug!( | ||
| name: "client.encode_and_compress_logs", | ||
| target: "geneva-uploader", | ||
| "Encoding and compressing {} resource logs", logs.len() | ||
lalitb marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| ); | ||
|
|
||
| let log_iter = logs | ||
| .iter() | ||
| .flat_map(|resource_log| resource_log.scope_logs.iter()) | ||
| .flat_map(|scope_log| scope_log.log_records.iter()); | ||
|
|
||
| self.encoder | ||
| .encode_log_batch(log_iter, &self.metadata) | ||
| .map_err(|e| format!("Compression failed: {e}")) | ||
| .map_err(|e| { | ||
| debug!( | ||
| name: "client.encode_and_compress_logs.error", | ||
| target: "geneva-uploader", | ||
| "Log compression failed: {}", e | ||
lalitb marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| ); | ||
| format!("Compression failed: {e}") | ||
| }) | ||
| } | ||
|
|
||
| /// Encode OTLP spans into LZ4 chunked compressed batches. | ||
| pub fn encode_and_compress_spans( | ||
| &self, | ||
| spans: &[ResourceSpans], | ||
| ) -> Result<Vec<EncodedBatch>, String> { | ||
| debug!( | ||
| name: "client.encode_and_compress_spans", | ||
| target: "geneva-uploader", | ||
| "Encoding and compressing {} resource spans", spans.len() | ||
lalitb marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| ); | ||
|
|
||
| let span_iter = spans | ||
| .iter() | ||
| .flat_map(|resource_span| resource_span.scope_spans.iter()) | ||
| .flat_map(|scope_span| scope_span.spans.iter()); | ||
|
|
||
| self.encoder | ||
| .encode_span_batch(span_iter, &self.metadata) | ||
| .map_err(|e| format!("Compression failed: {e}")) | ||
| .map_err(|e| { | ||
| debug!( | ||
| name: "client.encode_and_compress_spans.error", | ||
| target: "geneva-uploader", | ||
| "Span compression failed: {}", e | ||
lalitb marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| ); | ||
| format!("Compression failed: {e}") | ||
| }) | ||
| } | ||
|
|
||
| /// Upload a single compressed batch. | ||
| /// This allows for granular control over uploads, including custom retry logic for individual batches. | ||
| pub async fn upload_batch(&self, batch: &EncodedBatch) -> Result<(), String> { | ||
| debug!( | ||
| name: "client.upload_batch", | ||
| target: "geneva-uploader", | ||
| event_name = %batch.event_name, | ||
| size = batch.data.len(), | ||
| "Uploading batch" | ||
| ); | ||
|
|
||
| self.uploader | ||
| .upload(batch.data.clone(), &batch.event_name, &batch.metadata) | ||
| .await | ||
| .map(|_| ()) | ||
| .map_err(|e| format!("Geneva upload failed: {e} Event: {}", batch.event_name)) | ||
| .map(|_| { | ||
| debug!( | ||
| name: "client.upload_batch.success", | ||
| target: "geneva-uploader", | ||
| event_name = %batch.event_name, | ||
| "Successfully uploaded batch" | ||
| ); | ||
| }) | ||
| .map_err(|e| { | ||
| debug!( | ||
| name: "client.upload_batch.error", | ||
| target: "geneva-uploader", | ||
| event_name = %batch.event_name, | ||
| error = %e, | ||
| "Geneva upload failed" | ||
| ); | ||
| format!("Geneva upload failed: {e} Event: {}", batch.event_name) | ||
| }) | ||
| } | ||
| } | ||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.