Skip to content

Commit

Permalink
Merge branch 'main' into Yun-Ting/HashSet-Dict-Benchmark
Browse files Browse the repository at this point in the history
  • Loading branch information
cijothomas authored Oct 12, 2021
2 parents 5e86bc0 + 90d2906 commit 5934dcd
Show file tree
Hide file tree
Showing 10 changed files with 400 additions and 147 deletions.
27 changes: 22 additions & 5 deletions docs/metrics/customizing-the-sdk/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ then it is recommended to simply not add that `Meter` using `AddMeter`.
})
```

#### Select specific dimensions
#### Select specific tags

When recording a measurement from an instrument, all the tags that were provided
are reported as dimensions for the given metric. Views can be used to
Expand All @@ -183,6 +183,22 @@ with the metric are of interest to you.
MyFruitCounter.Add(2, new("name", "lemon"), new("color", "yellow"));
MyFruitCounter.Add(2, new("name", "apple"), new("color", "green"));
...

// If you provide an empty `string` array as `TagKeys` to the `MetricStreamConfiguration`
// the SDK will drop all the dimensions associated with the metric
.AddView(
instrumentName: "MyFruitCounter",
metricStreamConfiguration: new MetricStreamConfiguration
{
TagKeys = new string[] { },
})

...
// both "name" and "color" are dropped
MyFruitCounter.Add(1, new("name", "apple"), new("color", "red"));
MyFruitCounter.Add(2, new("name", "lemon"), new("color", "yellow"));
MyFruitCounter.Add(2, new("name", "apple"), new("color", "green"));
...
```

```csharp
Expand All @@ -205,10 +221,11 @@ with the metric are of interest to you.
#### Specify custom bounds for Histogram

By default, the bounds used for a Histogram are [`{ 0, 5, 10, 25, 50, 75, 100,
250, 500, 1000 }`](../../../src/OpenTelemetry/Metrics/Metric.cs#L25). Views can
be used to provide custom bounds for a Histogram. The measurements are then
aggregated against the custom bounds provided instead of the the default bounds.
This requires the use of `HistogramConfiguration`.
250, 500,
1000}`](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#explicit-bucket-histogram-aggregation).
Views can be used to provide custom bounds for a Histogram. The measurements are
then aggregated using the custom bounds provided instead of the the default
bounds. This requires the use of `HistogramConfiguration`.

```csharp
// Change Histogram bounds to count measurements under the following buckets:
Expand Down
1 change: 1 addition & 0 deletions examples/Console/Examples.Console.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -37,5 +37,6 @@
<ProjectReference Include="$(RepoRoot)\src\OpenTelemetry.Exporter.Jaeger\OpenTelemetry.Exporter.Jaeger.csproj" />
<ProjectReference Include="$(RepoRoot)\src\OpenTelemetry.Exporter.InMemory\OpenTelemetry.Exporter.InMemory.csproj" />
<ProjectReference Include="$(RepoRoot)\src\OpenTelemetry.Exporter.Prometheus\OpenTelemetry.Exporter.Prometheus.csproj" />
<ProjectReference Include="$(RepoRoot)\src\OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs\OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs.csproj" />
</ItemGroup>
</Project>
10 changes: 9 additions & 1 deletion examples/Console/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,13 @@ public class Program
/// <param name="args">Arguments from command line.</param>
public static void Main(string[] args)
{
Parser.Default.ParseArguments<JaegerOptions, ZipkinOptions, PrometheusOptions, MetricsOptions, GrpcNetClientOptions, HttpClientOptions, RedisOptions, ZPagesOptions, ConsoleOptions, OpenTelemetryShimOptions, OpenTracingShimOptions, OtlpOptions, InMemoryOptions>(args)
Parser.Default.ParseArguments<JaegerOptions, ZipkinOptions, PrometheusOptions, MetricsOptions, LogsOptions, GrpcNetClientOptions, HttpClientOptions, RedisOptions, ZPagesOptions, ConsoleOptions, OpenTelemetryShimOptions, OpenTracingShimOptions, OtlpOptions, InMemoryOptions>(args)
.MapResult(
(JaegerOptions options) => TestJaegerExporter.Run(options.Host, options.Port),
(ZipkinOptions options) => TestZipkinExporter.Run(options.Uri),
(PrometheusOptions options) => TestPrometheusExporter.Run(options.Port, options.DurationInMins),
(MetricsOptions options) => TestMetrics.Run(options),
(LogsOptions options) => TestLogs.Run(options),
(GrpcNetClientOptions options) => TestGrpcNetClient.Run(),
(HttpClientOptions options) => TestHttpClient.Run(),
(RedisOptions options) => TestRedis.Run(options.Uri),
Expand Down Expand Up @@ -169,6 +170,13 @@ internal class OtlpOptions
public string Protocol { get; set; }
}

[Verb("logs", HelpText = "Specify the options required to test Logs")]
internal class LogsOptions
{
[Option("useExporter", Default = "otlp", HelpText = "Options include otlp or console.", Required = false)]
public string UseExporter { get; set; }
}

[Verb("inmemory", HelpText = "Specify the options required to test InMemory Exporter")]
internal class InMemoryOptions
{
Expand Down
79 changes: 79 additions & 0 deletions examples/Console/TestLogs.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
// <copyright file="TestLogs.cs" company="OpenTelemetry Authors">
// Copyright The OpenTelemetry Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using OpenTelemetry;
using OpenTelemetry.Logs;

namespace Examples.Console
{
internal class TestLogs
{
internal static object Run(LogsOptions options)
{
using var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry((opt) =>
{
opt.IncludeFormattedMessage = true;
if (options.UseExporter.ToLower() == "otlp")
{
/*
* Prerequisite to run this example:
* Set up an OpenTelemetry Collector to run on local docker.
*
* Open a terminal window at the examples/Console/ directory and
* launch the OpenTelemetry Collector with an OTLP receiver, by running:
*
* - On Unix based systems use:
* docker run --rm -it -p 4317:4317 -v $(pwd):/cfg otel/opentelemetry-collector:0.33.0 --config=/cfg/otlp-collector-example/config.yaml
*
* - On Windows use:
* docker run --rm -it -p 4317:4317 -v "%cd%":/cfg otel/opentelemetry-collector:0.33.0 --config=/cfg/otlp-collector-example/config.yaml
*
* Open another terminal window at the examples/Console/ directory and
* launch the OTLP example by running:
*
* dotnet run logs --useExporter otlp
*
* The OpenTelemetry Collector will output all received metrics to the stdout of its terminal.
*
*/

// Adding the OtlpExporter creates a GrpcChannel.
// This switch must be set before creating a GrpcChannel/HttpClient when calling an insecure gRPC service.
// See: https://docs.microsoft.com/aspnet/core/grpc/troubleshoot#call-insecure-grpc-services-with-net-core-client
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);

opt.AddOtlpExporter();
}
else
{
opt.AddConsoleExporter();
}
});
});

var logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation("Hello from {name} {price}.", "tomato", 2.99);
return null;
}
}
}
3 changes: 3 additions & 0 deletions examples/Console/otlp-collector-example/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,6 @@ service:
metrics:
receivers: [otlp]
exporters: [logging]
logs:
receivers: [otlp]
exporters: [logging]
Loading

0 comments on commit 5934dcd

Please sign in to comment.