Skip to content

Commit 197c092

Browse files
mattsainsreyang
andauthored
Geneva exporter: Support resource attributes in log exporter (#3646)
Co-authored-by: Reiley Yang <reyang@microsoft.com>
1 parent 5865003 commit 197c092

File tree

13 files changed

+1157
-443
lines changed

13 files changed

+1157
-443
lines changed

src/OpenTelemetry.Exporter.Geneva/CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
## Unreleased
44

55
* Add ResourceFieldNames to filter resource attributes to send to Geneva
6-
([#3552](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/3552))
6+
([#3552](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/3552),
7+
[#3646](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/3646))
78

89
## 1.14.0
910

src/OpenTelemetry.Exporter.Geneva/GenevaExporterOptions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ public IReadOnlyDictionary<string, string>? TableNameMappings
107107

108108
/// <summary>
109109
/// Gets or sets prepopulated fields.
110+
///
111+
/// Pre-populated fields are fields that are added as dedicated fields to every record, unless it would conflict with a log or trace field that is marked as a custom field.
110112
/// </summary>
111113
public IReadOnlyDictionary<string, object> PrepopulatedFields
112114
{

src/OpenTelemetry.Exporter.Geneva/GenevaLogExporter.cs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using OpenTelemetry.Exporter.Geneva.Tld;
1010
using OpenTelemetry.Internal;
1111
using OpenTelemetry.Logs;
12+
using OpenTelemetry.Resources;
1213

1314
namespace OpenTelemetry.Exporter.Geneva;
1415

@@ -17,10 +18,10 @@ namespace OpenTelemetry.Exporter.Geneva;
1718
/// </summary>
1819
public class GenevaLogExporter : GenevaBaseExporter<LogRecord>
1920
{
21+
internal readonly IDisposable Exporter;
2022
internal bool IsUsingUnixDomainSocket;
2123

2224
private readonly ExportLogRecordFunc exportLogRecord;
23-
private readonly IDisposable exporter;
2425

2526
private bool isDisposed;
2627

@@ -46,7 +47,7 @@ public GenevaLogExporter(GenevaExporterOptions options)
4647
var eventHeaderLogExporter = new EventHeaderLogExporter(options);
4748
this.IsUsingUnixDomainSocket = false;
4849
this.exportLogRecord = eventHeaderLogExporter.Export;
49-
this.exporter = eventHeaderLogExporter;
50+
this.Exporter = eventHeaderLogExporter;
5051
return;
5152
#else
5253
throw new ArgumentException("Exporting data in user_events is only supported for .NET 8 or later on Linux.");
@@ -90,17 +91,21 @@ public GenevaLogExporter(GenevaExporterOptions options)
9091

9192
if (useMsgPackExporter)
9293
{
93-
var msgPackLogExporter = new MsgPackLogExporter(options);
94+
var msgPackLogExporter = new MsgPackLogExporter(options, () =>
95+
{
96+
// this is not equivalent to passing a method reference, because the ParentProvider could change after the constructor.
97+
return this.ParentProvider?.GetResource() ?? Resource.Empty;
98+
});
9499
this.IsUsingUnixDomainSocket = msgPackLogExporter.IsUsingUnixDomainSocket;
95100
this.exportLogRecord = msgPackLogExporter.Export;
96-
this.exporter = msgPackLogExporter;
101+
this.Exporter = msgPackLogExporter;
97102
}
98103
else
99104
{
100105
var tldLogExporter = new TldLogExporter(options);
101106
this.IsUsingUnixDomainSocket = false;
102107
this.exportLogRecord = tldLogExporter.Export;
103-
this.exporter = tldLogExporter;
108+
this.Exporter = tldLogExporter;
104109
}
105110
}
106111

@@ -124,7 +129,7 @@ protected override void Dispose(bool disposing)
124129
{
125130
try
126131
{
127-
this.exporter.Dispose();
132+
this.Exporter.Dispose();
128133
}
129134
catch (Exception ex)
130135
{

src/OpenTelemetry.Exporter.Geneva/GenevaTraceExporter.cs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using OpenTelemetry.Exporter.Geneva.MsgPack;
77
using OpenTelemetry.Exporter.Geneva.Tld;
88
using OpenTelemetry.Internal;
9+
using OpenTelemetry.Resources;
910

1011
namespace OpenTelemetry.Exporter.Geneva;
1112

@@ -16,8 +17,9 @@ public class GenevaTraceExporter : GenevaBaseExporter<Activity>
1617
{
1718
internal readonly bool IsUsingUnixDomainSocket;
1819

20+
internal readonly IDisposable Exporter;
21+
1922
private readonly ExportActivityFunc exportActivity;
20-
private readonly IDisposable exporter;
2123

2224
private bool isDisposed;
2325

@@ -68,17 +70,21 @@ public GenevaTraceExporter(GenevaExporterOptions options)
6870

6971
if (useMsgPackExporter)
7072
{
71-
var msgPackTraceExporter = new MsgPackTraceExporter(options, this.ParentProvider.GetResource);
73+
var msgPackTraceExporter = new MsgPackTraceExporter(options, () =>
74+
{
75+
// this is not equivalent to passing a method reference, because the ParentProvider could change after the constructor.
76+
return this.ParentProvider?.GetResource() ?? Resource.Empty;
77+
});
7278
this.IsUsingUnixDomainSocket = msgPackTraceExporter.IsUsingUnixDomainSocket;
7379
this.exportActivity = msgPackTraceExporter.Export;
74-
this.exporter = msgPackTraceExporter;
80+
this.Exporter = msgPackTraceExporter;
7581
}
7682
else
7783
{
7884
var tldTraceExporter = new TldTraceExporter(options);
7985
this.IsUsingUnixDomainSocket = false;
8086
this.exportActivity = tldTraceExporter.Export;
81-
this.exporter = tldTraceExporter;
87+
this.Exporter = tldTraceExporter;
8288
}
8389
}
8490

@@ -102,7 +108,7 @@ protected override void Dispose(bool disposing)
102108
{
103109
try
104110
{
105-
this.exporter.Dispose();
111+
this.Exporter.Dispose();
106112
}
107113
catch (Exception ex)
108114
{

0 commit comments

Comments
 (0)