Scientist
opentelemetry-specification
Scientist | opentelemetry-specification | |
---|---|---|
18 | 99 | |
7,335 | 3,614 | |
0.3% | 1.0% | |
1.9 | 9.2 | |
18 days ago | 4 days ago | |
Ruby | Makefile | |
MIT License | Apache License 2.0 |
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.
Scientist
-
Crates that run multiple versions of a function and ensures the return value is the same?
For some google-fu, the ruby / .NET equivalent of this is https://github.com/github/scientist / https://github.com/scientistproject/Scientist.net
-
Scientist: A Ruby library for carefully refactoring critical paths
The readme (here https://github.com/github/scientist#alternatives) doesn't mention, but here is one for Rust: https://crates.io/crates/scientisto
-
Test Against Reality
Something I've learned in Ruby land (prob standard in other places, forgive my ignorance) that seems a bit different than what the article advocates for (fake services):
- Write your service wrapper (eg your logic to interact with Twilio)
- Call the service and record API outputs, save those as fixtures that will be returned as responses in your tests without hitting the real thing (eg VCR, WebMock)
- You can now run your tests against old responses (this runs your logic except for getting a real response from the 3rd party; this approach leaves you exposed to API changes or you have edge cases not handled)
For the last part, two approaches to overcome this:
- Wrap any new logic in try/catch and report to Sentry: you avoid breaking prod and get info on new edge cases you didn't cover (this may not be feasible if the path where you're inserting new logic into does not work at all without the new feature; address this with thoughtful design/rollout of new features)
- Run new logic side by side to see what happens to the new logic when running in production (https://github.com/github/scientist)
I use the first approach bc small startup.
-
Real-World Engineering Challenges: Migrations
Check out GitHub scientist if you are doing a migration with a ruby based system: https://github.com/github/scientist
Great support and functionality for testing differences between two systems of record.
-
Rethinking Testing
As far as this idea, I have seen this before in a few different forms. The closest thing that I've personally witnessed being used is the scientist gem for Ruby applications. You have to do it manually, but you can instrument your code to compare old and new versions of some code. It also does some fancy stuff like randomly choosing which version gets run, almost like an A/B test. I wonder if there's a similar library for Python?
-
axum-strangler initial release
Not sure what OP had in mind, but for my dream strangler (that's a phrase I never expected to use), I'd love functionality like github's scientist library; basically, the ability to implement a route, continue to serve most requests through the original service, but duplicate a small percentage to the new implementation, compare the outputs of the two services, and log wherever the responses differ, so you get live production tests to exercise the new service without impacting users.
-
Using Scientist to Refactor Critical Ruby on Rails Code
However, the good news is that it’s easy and safe to do so in Ruby and Rails using the Scientist gem. Scientist's name is based on the scientific method of conducting experiments to verify a given hypothesis. In this case, our hypothesis is that the new code does the job.
-
Book notes: Turn the Ship Around!
Github scientist.
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.
What are some alternatives?
Rubocop - A Ruby static code analyzer and formatter, based on the community Ruby style guide. [Moved to: https://github.com/rubocop/rubocop]
Sentry - Developer-first error tracking and performance monitoring
Coverband - Ruby production code coverage collection and reporting (line of code usage)
Serilog - Simple .NET logging with fully-structured events
SimpleCov - Code coverage for Ruby with a powerful configuration library and automatic merging of coverage across test suites
zipkin - Zipkin is a distributed tracing system
Rubycritic - A Ruby code quality reporter
pino - 🌲 super fast, all natural json logger
Traceroute - A Rake task gem that helps you find the unused routes and controller actions for your Rails 3+ app
Hangfire - An easy way to perform background job processing in .NET and .NET Core applications. No Windows Service or separate process required
Flog - Flog reports the most tortured code in an easy to read pain report. The higher the score, the more pain the code is in.
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.