opentelemetry-specification
Polly
Our great sponsors
opentelemetry-specification | Polly | |
---|---|---|
99 | 52 | |
3,596 | 12,970 | |
1.0% | 1.3% | |
9.2 | 9.8 | |
about 24 hours ago | 2 days ago | |
Makefile | C# | |
Apache License 2.0 | BSD 3-clause "New" or "Revised" License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
opentelemetry-specification
-
OpenTelemetry Journey #00 - Introduction to OpenTelemetry
It means that the OpenTelemetry project provides not only a specification to define the contract between the applications, collectors, and telemetry databases, but also a set of APIs, SDKs, and tools like instrumentation libraries (for different languages), collectors, operators, etc. OpenTelemetry is open-source and vendor-agnostic, so the project is not tied to any specific vendor or cloud provider.
-
Migrating to OpenTelemetry
Sure, happy to provide more specifics!
Our main issue was the lack of a synchronous gauge. The officially supported asynchronous API of registering a callback function to report a gauge metric is very different from how we were doing things before, and would have required lots of refactoring of our code. Instead, we wrote a wrapper that exposes a synchronous-like API: https://gist.github.com/yolken-airplane/027867b753840f7d15d6....
It seems like this is a common feature request across many of the SDKs, and it's in the process of being fixed in some of them (https://github.com/open-telemetry/opentelemetry-specificatio...)? I'm not sure what the plans are for the golang SDK specifically.
Another, more minor issue, is the lack of support for "constant" attributes that are applied to all metrics. We use these to identify the app, among other use cases, so we added wrappers around the various "Add", "Record", "Observe", etc. calls that automatically add these. (It's totally possible that this is supported and I missed it, in which case please let me know!).
Overall, the SDK was generally well-written and well-documented, we just needed some extra work to make the interfaces more similar to the ones were were using before.
-
OpenTelemetry Exporters - Types and Configuration Steps
OpenTelemetry is an open-source collection of tools, APIs, and SDKs that aims to standardize the way we generate and collect telemetry data. It follows a specification-driven development. The OpenTelemetry specification has design and implementation guidelines for how the instrumentation libraries should be implemented. In addition, it provides client libraries in all the major programming languages that follow the specification.
-
OpenTelemetry in 2023
Two problems with OpenTelemetry:
1. It doesn't know what the hell it is. Is it a semantic standard? Is a protocol? It is a facade? What layer of abstraction does it provide? Answer: All of the above! All the things! All the layers!
2. No one from OpenTelemetry has actually tried instrumenting a library. And if they have, they haven't the first suggestion on how instrumenters should actually use metrics, traces, and logs. Do you write to all three? To one? I asked this question two years ago, not a single response. [1]
[1] https://github.com/open-telemetry/opentelemetry-specificatio...
-
Tracetest Analyzer: Identify patterns and issues with code instrumentation
OpenTelemetry Specification GitHub
-
OpenTelemetry vs. OpenMetrics: Which semantic convention should you use?
One update to this: we proposed replacing the count suffix in OpenTelemetry with total to match Prometheus/OpenMetrics. That discussion resulted in the count suffix being removed from the OpenTelemetry semantic conventions. We'll soon update our metric from being called function.calls.count to just function.calls and the generated Prometheus queries will refer to function_calls_total. That resolves one of the main conflicts between the two specs.
-
OpenTelemetry Logs status?
This is your best bet if you want to track status updates: https://github.com/open-telemetry/opentelemetry-specification/issues/2911
-
Distributed Tracing with OpenTelemetry - Part I
OpenTelemetry is a standard for implementing telemetry in your applications. It provides a specification, containing the requirements that all implementations should follow as well as some implementations for major languages, including an API and a SDK to interact with it.
-
Observability - ApostropheCMS, OpenTelemetry, and New Relic
At this point, we are about to do the real work where we have to configure OpenTelemetry and export telemetry data to New Relic. Exporting this kind of data relies on a specific protocol; the OpenTelemetry Protocol or OTLP.
-
OpenTelemetry Logs - A Complete Introduction & Implementation
OpenTelemetry provides instrumentation libraries for your application. The development of these libraries is guided by the OpenTelemetry specification. The OpenTelemetry specification describes the cross-language requirements and design expectations for all OpenTelemetry implementations in various programming languages.
Polly
-
The Retry Pattern and Retry Storm Anti-pattern
In our applications, we should wrap all requests to remote services in code that implements a retry policy that follows one of the strategies I listed earlier. If you are a .NET developer like myself, you may be familiar with the Polly library. Golang has a library called Retry, and there are numerous third-party libraries for Python and Java.
-
Http calls on mobile, what is the preferred way / best practice
Another question that rises is, would it be better to use some HttpClient package to handle the requests, like Refit in combination with Polly. But then again, it seems Refit also uses the HttpClient factory, which was a bad thing according to the previous?
-
[Question] HttpClient does not recover from error
D'Oh! Sorry, not PolySharp. I meant Polly. Too many similarly-named libraries!
-
I thought "Availability Groups" would be 100% "seamless"
Everywhere I've worked with AGs, we've worked with the application team to add retry logic to help make things a bit more seamless to end users. There are libraries out there that can make this pretty easy - Polly is one that I've used a few times, but there are others.
-
Do you really need "microservices"?
Fallacy 1: The network is reliable. If system 2 works perfectly well, but is not accessible for service 1 due to network issues, service 2 is still unavailable. This is why timeouts, service breakers and retry policies exist. A great tool for .NET to handle common network issues is Polly, but even when using a tool like this, the network is still not completely reliable.
-
Only "exit 1" if VISIBLE errors are thrown during script invocation, ignoring try/catch blocks
I see. Then I don't have any better idea right now, but I do want to suggest that if your script is mostly API calls and you want to be able to deal with failures then take a look at the polly library: https://github.com/App-vNext/Polly
-
Getting back into C# after a hiatus, any good reading material recommendations to get back up to speed? Been using Kotlin recently, and got quite a lot of experience in engineering.
Runs in containers nicely, has good integration with Kafka, RabbitMQ, gRPC, etc. for Microservices communication. Implements resiliency patterns you'd want in Microservices via Polly. Has a decent Dependency Injection framework built in by default.
-
What your hidden nuget gems ?
It's in no way hidden. But I use Polly all the time.
-
Message Queueing
Depending if the sender or the reciever is down, you can also try Polly http://www.thepollyproject.org/
- How To Implement Retries Without Cluttering Your Code
What are some alternatives?
Sentry - Developer-first error tracking and performance monitoring
MediatR - Simple, unambitious mediator implementation in .NET
Serilog - Simple .NET logging with fully-structured events
Hangfire - An easy way to perform background job processing in .NET and .NET Core applications. No Windows Service or separate process required
zipkin - Zipkin is a distributed tracing system
FluentValidation - A popular .NET validation library for building strongly-typed validation rules.
pino - 🌲 super fast, all natural json logger
Redis - Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps.
Refit - The automatic type-safe REST library for .NET Core, Xamarin and .NET. Heavily inspired by Square's Retrofit library, Refit turns your REST API into a live interface.
otel-with-apache-pulsar - Example of application that produces and consumes events to/from Apache Pulsar. Traces from the transactions are captured using OpenTelemetry and sent to Elastic Observability.
Flurl.Http - Fluent URL builder and testable HTTP client for .NET