Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion Masa.Contrib.sln
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Contrib.Storage.Object
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Storage", "Storage", "{165391A5-034E-4894-8084-8DF7D4AA7518}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.Contrib.Configuration.AutoMap.NoArgumentConstructor.Tests", "test\Masa.Contrib.Configuration.AutoMap.NoArgumentConstructor.Tests\Masa.Contrib.Configuration.AutoMap.NoArgumentConstructor.Tests.csproj", "{B8358ED1-C95A-4EC0-9756-FB32C931F204}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Contrib.Configuration.AutoMap.NoArgumentConstructor.Tests", "test\Masa.Contrib.Configuration.AutoMap.NoArgumentConstructor.Tests\Masa.Contrib.Configuration.AutoMap.NoArgumentConstructor.Tests.csproj", "{B8358ED1-C95A-4EC0-9756-FB32C931F204}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Masa.BuildingBlocks.Observability", "src\BuildingBlocks\MASA.BuildingBlocks\src\Observability\Masa.BuildingBlocks.Observability\Masa.BuildingBlocks.Observability.csproj", "{E4BBDD80-010C-4A4F-8D71-54012C0B237E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Masa.Contrib.Observability.Opentelemetry.Logging", "src\Observability\Masa.Contrib.Observability.Opentelemetry.Logging\Masa.Contrib.Observability.Opentelemetry.Logging.csproj", "{86BC5A1E-FE3F-4A53-A522-FE0E4515BB8E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand Down Expand Up @@ -676,6 +680,22 @@ Global
{B8358ED1-C95A-4EC0-9756-FB32C931F204}.Release|Any CPU.Build.0 = Release|Any CPU
{B8358ED1-C95A-4EC0-9756-FB32C931F204}.Release|x64.ActiveCfg = Release|Any CPU
{B8358ED1-C95A-4EC0-9756-FB32C931F204}.Release|x64.Build.0 = Release|Any CPU
{E4BBDD80-010C-4A4F-8D71-54012C0B237E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E4BBDD80-010C-4A4F-8D71-54012C0B237E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E4BBDD80-010C-4A4F-8D71-54012C0B237E}.Debug|x64.ActiveCfg = Debug|Any CPU
{E4BBDD80-010C-4A4F-8D71-54012C0B237E}.Debug|x64.Build.0 = Debug|Any CPU
{E4BBDD80-010C-4A4F-8D71-54012C0B237E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E4BBDD80-010C-4A4F-8D71-54012C0B237E}.Release|Any CPU.Build.0 = Release|Any CPU
{E4BBDD80-010C-4A4F-8D71-54012C0B237E}.Release|x64.ActiveCfg = Release|Any CPU
{E4BBDD80-010C-4A4F-8D71-54012C0B237E}.Release|x64.Build.0 = Release|Any CPU
{86BC5A1E-FE3F-4A53-A522-FE0E4515BB8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{86BC5A1E-FE3F-4A53-A522-FE0E4515BB8E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{86BC5A1E-FE3F-4A53-A522-FE0E4515BB8E}.Debug|x64.ActiveCfg = Debug|Any CPU
{86BC5A1E-FE3F-4A53-A522-FE0E4515BB8E}.Debug|x64.Build.0 = Debug|Any CPU
{86BC5A1E-FE3F-4A53-A522-FE0E4515BB8E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{86BC5A1E-FE3F-4A53-A522-FE0E4515BB8E}.Release|Any CPU.Build.0 = Release|Any CPU
{86BC5A1E-FE3F-4A53-A522-FE0E4515BB8E}.Release|x64.ActiveCfg = Release|Any CPU
{86BC5A1E-FE3F-4A53-A522-FE0E4515BB8E}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -761,6 +781,8 @@ Global
{97532A33-A591-4DF5-A2C0-72527B78ED82} = {38E6C400-90C0-493E-9266-C1602E229F1B}
{165391A5-034E-4894-8084-8DF7D4AA7518} = {42DF7AAC-362C-48F4-B76A-BDEEEFF17CC9}
{B8358ED1-C95A-4EC0-9756-FB32C931F204} = {9EEE31DA-3165-4CB3-AAE9-27CC3A4DE669}
{E4BBDD80-010C-4A4F-8D71-54012C0B237E} = {DC578D74-98F0-4F19-A230-CFA8DAEE0AF1}
{86BC5A1E-FE3F-4A53-A522-FE0E4515BB8E} = {75050CBC-A0F2-408A-A582-54EF37450B29}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {40383055-CC50-4600-AD9A-53C14F620D03}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="OpenTelemetry" Version="1.2.0" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.2.0" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs" Version="1.0.0-rc8" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\BuildingBlocks\MASA.BuildingBlocks\src\Observability\Masa.BuildingBlocks.Observability\Masa.BuildingBlocks.Observability.csproj" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using Masa.BuildingBlocks.Observability.Logging;

namespace Masa.Contrib.Observability.Opentelemetry.Logging
{
public class MasaOpenTelemetryLogOptions: MasaLoggingOptions
{

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace OpenTelemetry.Resources
{
internal class MasaResourceSemanticConventions
{
public const string AttributeServiceProjectName = "service.project.name";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using OpenTelemetry.Exporter;
using OpenTelemetry.Logs;

namespace Microsoft.Extensions.Logging
{
public static class OpenTelemetryLoggingExtensions
{
public static ILoggingBuilder AddMasaOpenTelemetry(this ILoggingBuilder builder, Action<OpenTelemetryLoggerOptions> configure, Action<OtlpExporterOptions>? exportConfigure = null)
{
builder = builder.AddOpenTelemetry(options =>
{
options.IncludeScopes = true;
if (configure != null)
configure.Invoke(options);
options.AddOtlpExporter(exportConfigure);
});

return builder;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
[中](README.zh-CN.md) | EN

## Opentelemetry.Logging

Example:

1. loggingadd project support,added based on [Openteletry specification](https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/common)contracted project support;
2. Added by default[OtlpExporter](https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlpexporter)export,And log data is stored in Elasticsearch by default. If you need to modify the data storage medium, please refer to the configuration to modify.


```C#
Install-Package Masa.Contrib.Observability.Opentelemetry.Logging
```

1. Project support:

```C#
using OpenTelemetry.Resources;
using OpenTelemetry.Logs;

var builder = WebApplication.CreateBuilder(args);

builder.Logging.AddOpenTelemetry(options =>
{
options.SetResourceBuilder(ResourceBuilder.CreateDefault().AddMasaService(
serviceName: "service.example1",
serviceProjectId: "masa.stack.auth",
serviceVersion: "1.0.0"
));
options.AddConsoleExporter();
});

var app = builder.Build();

app.MapGet("/", (ILogger<Program> logger) =>
{
logger.LogInformation("Hello World!");
return "Hello World!";
});

app.Run();

partial class Program { }
```

After running, you can see the project configuration information just now in the console output:
```
info: Program[0]
Hello World!
LogRecord.TraceId: 6678d6ff3b922948e0d6de47b1beaf80
LogRecord.SpanId: 3c04a4585635b5ec
LogRecord.Timestamp: 2022-04-24T06:36:13.2218113Z
LogRecord.EventId: 0
LogRecord.EventName:
LogRecord.CategoryName: Program
LogRecord.LogLevel: Information
LogRecord.TraceFlags: None
LogRecord.State: Hello World!
Resource associated with LogRecord:
service.project.id: masa.stack.auth
service.name: service.example1
service.version: 1.0.0
service.instance.id: 2871cd69-a78b-4169-8b72-b30fb17c17f3
```


2. OTLP Expoter Configration

```C#
builder.Logging.AddMasaOpenTelemetry(options =>
{
options.SetResourceBuilder(ResourceBuilder.CreateDefault().AddMasaService(
serviceName: "service.example1",
serviceProjectId: "masa.stack.auth",
serviceVersion: "1.0.0"
));
}, exportConfigure => {
exportConfigure.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf;
exportConfigure.Endpoint = new Uri("http://localhost:4317");
});
```
Detailed configuration reference[Opentelemetry Exporters](https://opentelemetry.io/docs/collector/configuration/#exporters).
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
中 | [EN](README.md)

## Opentelemetry.Logging

用例:

1. logging添加项目支持,添加了基于 [Openteletry specification](https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/common)约定的项目支持;
2. 默认添加了[OtlpExporter](https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlpexporter)导出,并且日志数据默认存储到Elasticsearch,如果需要修改数据存储介质,请参考配置进行修改。



```C#
Install-Package Masa.Contrib.Observability.Opentelemetry.Logging
```

1. 项目支持:

```C#
using OpenTelemetry.Resources;
using OpenTelemetry.Logs;

var builder = WebApplication.CreateBuilder(args);

builder.Logging.AddOpenTelemetry(options =>
{
options.SetResourceBuilder(ResourceBuilder.CreateDefault().AddMasaService(
serviceName: "service.example1",
serviceProjectId: "masa.stack.auth",
serviceVersion: "1.0.0"
));
options.AddConsoleExporter();
});

var app = builder.Build();

app.MapGet("/", (ILogger<Program> logger) =>
{
logger.LogInformation("Hello World!");
return "Hello World!";
});

app.Run();

partial class Program { }
```

运行后可以在控制台输出中看到刚才项目配置信息:
```
info: Program[0]
Hello World!
LogRecord.TraceId: 6678d6ff3b922948e0d6de47b1beaf80
LogRecord.SpanId: 3c04a4585635b5ec
LogRecord.Timestamp: 2022-04-24T06:36:13.2218113Z
LogRecord.EventId: 0
LogRecord.EventName:
LogRecord.CategoryName: Program
LogRecord.LogLevel: Information
LogRecord.TraceFlags: None
LogRecord.State: Hello World!
Resource associated with LogRecord:
service.project.id: masa.stack.auth
service.name: service.example1
service.version: 1.0.0
service.instance.id: 2871cd69-a78b-4169-8b72-b30fb17c17f3
```


2. OTLP Expoter配置

```C#
builder.Logging.AddMasaOpenTelemetry(options =>
{
options.SetResourceBuilder(ResourceBuilder.CreateDefault().AddMasaService(
serviceName: "service.example1",
serviceProjectId: "masa.stack.auth",
serviceVersion: "1.0.0"
));
}, exportConfigure => {
exportConfigure.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf;
exportConfigure.Endpoint = new Uri("http://localhost:4317");
});
```
详细配置参考[Opentelemetry Exporters](https://opentelemetry.io/docs/collector/configuration/#exporters)。
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using Masa.Contrib.Observability.Opentelemetry.Logging;

namespace OpenTelemetry.Resources
{
public static class ResourceBuilderExtenstions
{
public static ResourceBuilder AddMasaService(
this ResourceBuilder resourceBuilder,
MasaOpenTelemetryLogOptions options)
{
if (options == null)
{
throw new ArgumentException("Must not be null or empty", nameof(options));
}

resourceBuilder = resourceBuilder.AddService(options.ServiceName, options.ServiceNameSpace, options.ServerVersion, true, options.ServiceInstanceId);

if (!string.IsNullOrEmpty(options.ProjectName))
{
resourceBuilder.AddAttributes(new KeyValuePair<string, object>[] { new KeyValuePair<string, object>(MasaResourceSemanticConventions.AttributeServiceProjectName, options.ProjectName) });
}
return resourceBuilder;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="OpenTelemetry" Version="1.2.0" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.2.0" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs" Version="1.0.0-rc8" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\..\BuildingBlocks\MASA.BuildingBlocks\src\Observability\Masa.BuildingBlocks.Observability\Masa.BuildingBlocks.Observability.csproj" />
</ItemGroup>

</Project>