Quick reminder that people are still finding the fediverse, so keep coming back to you contact lists on the various sites you follow them to see their new handles.
Mine is
@martindotnet
@hachyderm
.io
Them: "I won't use C# because of Microsoft, they're evil and might start charging me."
Also them: "I develop my Typescript codebase using VSCode and store it on Github, then I publish my packages to NPM".
Once again, for those in the back...
* WSL exists and just works, no dual boot for Linux.
*
#dotnet
runs on Linux, ARM, and even scratch containers flawlessly
* VScode and Rider are great editors/IDEs for C#
* People other than Microsoft can make good .NET libraries
Are people honestly saying that a startup, hiring 6 devs and paying them, is worried about paying $49/month/dev for an IDE?
Like, that feels like a failed startup to me?
They're likely paying >$50k each, plus probably getting them an M3 ($2k).
But $49 is a blocker? Seriously?
The amount of times I've been asked about the performance impacts of adding telemetry to
#dotnet
applications using
#opentelemetry
I had to actually write a post on it.
TL;DR it's small, and if you're bothered at that level, maybe consider moving Rust.
I still don't get what people complain about when it comes to
#dotnet
being hard to do cross platform.
I've been coding on Windows, deploying to Linux for ~5 years, since netcore 2.1 (maybe earlier).
What's so hard?
So that works... Aspire dashboard running without the full Aspire App framework.
So hopefully a nice replacement for not having to use Jaeger.
Next step...
services.AddAspireDashboard(); So that it configures OpenTelemetry too.
Aspire for any app in development
#dotnetconf
I'm Martin, I've been programming since the mid 90s for some really successful companies. I couldn't even begin to explain what a monad is.
You don't need to know about them, you're fine, keep doing what you're doing and being awesome.
Say it with me "CosmosDB is not SQL Server"
Devs: "Cosmos is way more expensive than SQL Server"
Me: "You used it like SQL Server didn't you..."
Seriously, it might have a SQL API, but it's not a Relational DB, stop using it like one.
I actually have no idea what a quick sort is, maybe I did once?
If you're worried about whether people know how to do it from memory, and you're working in high-level language, you're doing it wrong.
It doesn't show aptitude. It shows you're a horrible person to work for
Ok, so this is pretty fun, I've opened a project I created back in 2008, WCF (duplex), .NET 3.5, Winforms, lets look at what I did right and wrong!
Lets start with projects... why so many? I got 4 projects down the list before I hit actual code.
Just nerd sniped an Engineering Lead by giving him a
@honeycombio
heat map query and showing him how to drill into some of the traces... the messages back were glorious...
"But that one is taking ages, what's happe... oh... the api is hitting that one... that's not right.."
Original Definition of
#Observability
:
"Understanding the internal state of your system from the outputs it gives you"
Co-opted Definition of
#Observability
:
"SeNd uS aLL YoUR LogS aNd wE WiLl GiVe YoU 200% oBsErVaBiLiTY"
As someone with an authorative voice and someone who's had titles that seem to make people listen, it's hard to be opinionated without it coming across as a dictatorship where people must do it your way, here's what I've done to try and combat that.
My new series on
#OpenTelemetry
Best Practices is out, first up Naming, the easy one! Because naming things is the easy part right?
These should be coming out once a week for the next month or so. Agent/Auto-Instrumentation vs Coded/Manual for next week!
If you buy a book on
#microservices
, and it's one single book should you trust the author?
Surely it should be multiple separate books, and a single book that contains the index, contents and glossary pointing to all the other books, and can be read independently?
Everytime I hear ".NET doesn't have X" when its a library or a class, I cringe a little, what they actually mean is "Microsoft haven't developed X in the BCL"
You don't get "Java doesn't X" unless it's to do with the language.
Those things exist, just not produced by Microsoft.
If Typescript "could" compile to the CLR, therefore becomes "just another .NET language".
Since it's cross platform, will run faster than on node, so it would make sense to switch from node
Do we think that the Typescript devs would appreciate being referred to as .NET devs?
There you go, Adding the Aspire dashboard to an existing single App... I'll get a Nuget pushed tomorrow, and hopefully some fixes.
Next, get it running in a docker-container standalone.
Apparently there are still people in the
#dotnet
world that haven't heard of OpenTelemetry...
So apparently I'm not shouting loud enough. Message received :D
Based on a tonne of feedback, OpenTelemetry is setting a DevEx group to work on increasing the usability of the SDKs.
OTel is functional, and stable, but the DevEx can be lacking, specifically in Go/JS/TS, but also .NET.
I'm tackling the .NET side! excited to see what we can do
PSA for
#opentelemetry
#dotnet
users! The HTTP instrumentation libraries are no longer in pre-release!
v1.7.0 of the core and HTTP instrumentations have been released. There's a couple of breaking changes you should look at though!
If I had to put my finger on "why Honeycomb" it would have to be democratisation of production debugging focus we have.
Debugging production is everyone's responsibility and that's a big focus for us. It's a consideration when we're building all our features.
I want Aspire talks that aren't using a basic demo.
I don't believe there are production usecases that make sense for the manifest/azd at scale, and certainly not the dashboard (if you're using a real provider, not AppInsights)
I want to be proven wrong, but all talks are basic
The revolution is happening! OpenTelemetry adoption in .NET is taking off, 3 big libraries in the last couple of weeks that have added intentional, and purposeful, tracing and Metrics to them.
Is this the year of
#OpenTelemetry
and
#dotnet
?
Well would you look at that
@davidfowl
! My PR to add OpenTelemetry to the .NET RabbitMQ library has been merged. Next up: some improvements to OTel baggage propagation (hi
@MartinDotNet
) and some docs + examples! I'll also look at getting this integrated into Aspire (unless
Having spent the last week fighting
#AWS
, I'm come to the (unpopular opinion) that it's not a platform built for developer, rather, it's built for infrastructure engineers.
@migueldeicaza
Microsoft had a storage outage, at the same time, Crowdstrike pushed an update that broke the whole Internet.
Lots of people linking the 2.
You know those company demos every month that no one signs up for?
I signed up for the WEEKLY demo
@honeycombio
this week, and I'm being told to keep it short as we have too many...
"I think we're going to need a bigger slot in future"
God I fucking love it here.
#culture
I hate having to send responses like this to conferences. This is the work people, it's not just throwing up a sessionize page and then picking stuff out.
It's hard, I get it, but ask for help, don't put your head in the sand and shrug when it doesn't happen.
This is the extension for
#dotnet
#aspire
I created to add the OpenTelemetry Collector.
This will:
* Spin up a collector
* Mount the config
* Inject the Aspire dashboard endpoint as an exporter
* Inject the collector as the exporter for the apps
#opentelemetry
#o11y
On Wednesday I got the
#MVPBuzz
email! Totally honoured to become part of the community of amazing people that make the ecosystem great.
It's recognition of the work I've been doing to evangelise
#dotnet
and also
#observability
in the Microsoft space. That means a lot.
My focus will be on showing developers that Observability isn't just for SRE's and production. Showing how it can help in the development process and help engineers build operable software from day 1 of your project.
@MatthewEGunter
@ghohpe
@Pfft11523769
@BrandonLive
@mipsytipsy
Infrastructure is cheap compared to people. Optimising for reducing cognitive load of the engineering team is the biggest accelerator I've seen in all the companies I've worked with.
It's as true in code as it is in architecture, people focused solely on architecture miss that.
Finally released my OpenTelemetry Collector plugin/component for Aspire on Nuget. With this, you'll be able to have a collector and play with configs to see how they affect the telemetry produced by looking at the dashboard.
It will automatically wire up
Overages on SaaS products shouldn't end your business. Incorrectly configuring your logging, or adding a high-cardinality label to a metric, has almost ended some companies.
I believe you shouldn't fear your telemetry solution, which is why we don't charge for overages/spikes
The getting started docs for
#OpenTelemetry
and
#dotnet
have had a major update to make it a lot easier to follow and be inline with good practices.
Do let me know if there's something missing here or something you'd like to see!
What's that??? oh it's just
@JetBrainsRider
running inside WSL2 natively, no biggie.
This is seriously cool... the power of WSL2, and the power of Rider/Resharper. No remoting, just running it inside WSL2.
Me and
@ICooper
are planning a joint talk about Messaging, Events and Observability, what would you like to see?
The general idea is the "how" but also the "why is it useful" and some of the decisions you'll have with different approaches like links vs parents and clean code
NDC London is in January, CFP is open, and here's an offer for all of you aspiring speakers...
I'll pre-review any abstracts, just DM me.
We get a tonne of submissions, my job is to fill the pipeline with awesome people.
#cfp
#speaking
@mipsytipsy
People praise the full service solutions CD solutions with auto updating ASG from a UI...
But if they new how many big businesses they use everyday are held together by "shitty bash scripts", they'd fall off their Aeron chairs.
A bit late (for obvious reasons), but I've been a bit absent due to this... Unicorn Bubblegum Thwaites (kids chose the name... We'll probably refer to him as Samuel), the first 9 month project I've delivered early (by 2 weeks)...
By popular* demand, here is the picture that's the basis for my
#askMissO11y
header image ().
*my new 250 "high quality" followers that
@hannes_lowette
got me definitely wanted this.
The single best piece of advice I can give when building
#observability
in your code with
#OpenTelemetry
is to use constants in the code for attributes
What you're doing is creating an index for you app. You're ensuring consistency so that you can query effectively
#dotnet
ProTip: If you're going to send someone production credentials in clear text, on Teams...
First... maybe don't?
Second... Don't do it in a group chat
Third... Maybe not in a group chat with the Head of Security in it?
Amazing seeing people discover custom-built fakes and stubs and being amazed at how much simpler their code and tests are.
It goes to show that Moqing has been cargo culted and essentially misunderstood as to why it's useful.
Mocking is useful, but it has a niche usecase.
This is my issue with the "no Friday deploys" crowd.
It's perpetuates the idea that it's somehow acceptable to deploy that risky code on some other day.
That it's fine to ruin someone's evening, but my god, don't ruin the weekend that would be unacceptable.
@CTerevinto
@toddhgardner
If you're worried about your employees weekends... what about their evenings? Do those matter less? Are you fine that work time is dedicated to chasing deployment errors?
If you're worried that the deployment will ruin someone's weekend, don't deploy that code on Monday either!
Every time I hear about a new tool that allows people to automatically get "
#observability
" from their application without changing any code, I cry a little inside.
No tool knows your application better than you, they're all a compromise if you're not adding your own context.
It's up on nuget now, and works great. There's still some tweaking to happen though. Right now, it's recording the spans and logs from the Dashboard application itself, which isn't ideal and creates a bit of a loop, but feel free to try it out!
I got some inspiration last night for this..
What if all your xunit tests, and test cases, were also traces?
See the trace for the code you're calling, if it's WebAppFactory, see the full web call in a trace.
#dotnet
#opentelemetry
Someone
@dotnetdaysro
asked if adding Activity and
@opentelemetry
in
#dotnet
had a performance hit, so I've been putting together a blog on it, and proving my assumption that it's minimal... about 25ns apparently.
More analysis needed, but it's looking correct right now
To those suggesting that if you're on Linux, you're immune to what happened with the outage yesterday...
A similar issue happened with the same company on Debian machines in April with a Linux kernel update.
The only difference? Linux admins/users are a different breed.
Did you know that
#OpenTelemetry
has stability for the tracing signal across all languages (except Rust and PHP which are nearly there)?
In addition,
#dotnet
and
#java
have stability for
#Tracing
,
#Metrics
and
#Logging
If you've not adopted it yet, why? Vendor support?
OH in the
#kcdc2023
speaker room: ChatGPT is the ultimate IT consultancy... it says plausible things that are wrong with so much confidence that it's believable.
And that's forgetting about the fact that Rider exists, and you can run without it (omnisharp is still as good).
I can understand not wanting to work with MS tech due to the shady OSS practices, and other stuff, but stop talking about IDEs being the blocker.
@TedsTechTed
At the early stage startup (which is what this talking about) a <1% opex increase for software licencing should not influence a decision.
If it does, I'd be questioning the viability of the startup.
So I'm a huge fan of Aspire already, but the dashboard is the true triumph.
The orchestration side promotes bad habits of building tightly coupled distributed monoliths in my opinion. The idea that you can't debug a single app, you need the full system scope.
1/6
@mipsytipsy
Anyone who applied for a role with me and said they want to be an "Architect" always got an grilling.
It's not a role, it's a responsibility, one that everyone in the team should take on at different times, for different things.
The acceptances are going out for
#ndclondon
2020, and unfortunately, so are the rejections.
If you weren't chosen, you should know that 9 of us went through over 1000 submissions to fill just 90 slots. 1/3
It's really interesting watching the
#dotnet
community discover observability in real-time. Watching them start to realise the value of "good" telemetry, telemetry that has their specific context. Starting to see what's beyond the old school APM agents and monitoring platforms
Building a secure
#opentelemetry
collector just got easier!
Now, all you need to do is provide a standard collector config and you can have a custom, secure build.
Introducing the OCB-config-builder and it's container image! This is how simple it is to create a new image
This is a cool trick with
#dotnet
for simplifying APIs.
Add an Extension method to the Add() of your dictionary type and you can add objects easier and contain the logic.
This pulls a property, but your object could define it's key on a method just as easily.
Blogged: Evil Monkeypatching in C# with Rosyln Source Generators
According to
@markrendle
this is evil, and I shouldn't be doing it, and neither should you.
#dotnet
#roslyn
#evil
@krisnova
Everyone should be on-call, if you're not, you're actively saying that your shit is for someone else's to deal with.
Instead of "I'm not doing on call because <insert lame excuse>" try saying "I'm too important to do on call, let someone else deal with my bugs", see how it flies
Would anyone be interested in attending a panel/conversation about observability and OpenTelemetry? I'm thinking a Zoom session for people to asking questions, and joining in a moderated conversation about it?
TIL that creates spans/activities for the inbound request, even if you don't listen to the source/tracer.
This is because they have logic that bypasses the standards (their standards) if you have logging enabled.
To disable it:
My daughter is donating her hair to The Little Princess Trust. They create wigs for children who have lost theirs through cancer treatment.
She's been growing it for 2 years so "it will make even better wigs!"
She's also fundraising for them too!
This is a super cool usecase of using
#OpenTelemetry
to monitor usage of endpoints marked as Obsolete.
I can envisage using this with SLOs to measure when certain tenants/users/clients are using endpoints and make sure they're migrating off them.
During this weekend my blog got a facelift :) and I also published a new article about obsoleting and safely removing unused endpoints in
#aspnet
using
#otel
and visualizing the metrics via
#Aspire
. Check it out here
Are any
#dotnet
devs still logging to stdout and files in production, intentionally? if so, why? there are much better ways to get that data to the destinations. Unless you're working in an offline environment, that feels pointless?
Still stuck in the past? embrace traces and
#OpenTelemetry
, you'll never look back. Forget about the "3 pillars", true
#observability
can be achieved with only 1 signal, traces.
The only question you need to ask someone who's only stayed at jobs less than 2 years is what did they actually have to support.
If all they've done is build and build, they've never felt the real pain of making the wrong decision, that makes seniors and principals.
Part 2 of my
#OpenTelemetry
Best Practices coffee series is out
This one covers Auto vs. Coded instrumentation, when each is useful and also the value you get from each
As always, let me know what else you want covered in the series
Next up, data prep!
Just installed
@Tailscale
as a VPN client with a subnet router for my local network, and that was RIDICULOUSLY easy.
Like... when did VPNs become easier than printers?
@JamesNK
Are you saying there's not a more readable way to write this that results in the same compiled code, or equivalent code with the same performance profile?
Recognising your own privilege when advising people who see you as successful is consistently one of the hardest things.
It's not malicious, it's just hard to constantly think about the lucky breaks, the right place right time, and also the small things that enabled you.