銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

.NET

OpenTelemetry .NETを理解する (9) .NET 7でのOpenTelemetry対応の強化

この記事はOpenTelemetry Advent Calendarの6日目の記事です。 qiita.com 先日リリースされた .NET 7ではObservabilityへの投資がリリースブログに項目にあります。 devblogs.microsoft.com .NETにおけるOpenTelemetry対応は、.NET本体ではなくOpenTelemetry…

.NET 7で導入されたビルトインコンテナサポートを試してみた

.NET 7になって .NET SDKだけでコンテナのビルドができるようになりました。 devblogs.microsoft.com このブログの最初にある通り、Microsoft.NET.Build.Containers というライブラリを追加すると利用できる機能ですが、(temporary)とあるのでそのうち不要に…

.NET 7についてまとめてみた

自分の勉強がてらまとめています。公式ブログを日本語で、すぐ目を通せることを目的にしています。この記事では.NET 7のテーマについてまとめています。 devblogs.microsoft.com .NET 7の新機能 シナリオ ユニファイド 1つの基本ライブラリ .NET 7をターゲッ…

OpenTelemetry .NETを理解する (8) 手動でのトレースの接続例: Azure Service Busを経由したアプリ間でトレースをつなげる

複数サービス間での分散トレースは、必要な情報をサービス間で伝搬するContext Propagationによって実現されています。 opentelemetry.io HTTPでサービスを呼び出している場合、HTTPヘッダーを利用して伝搬させることがほとんどで、最近になってW3C Trace Co…

OpenTelemetry .NETを理解する (7) おさらいとASP .NET Coreでの計装サンプル公開

ここでいちどおさらいです。 OpenTelemetry .NETの現在地 GitHubのページで確認できる通り、Logs、Metrics、Tracesの3要素ともStableになりました。 github.com が、注意書きにある通り、ILoggerなどのログフレームワークから出力されたログを取り込む OpenT…

OpenTelemetry .NETを理解する (6) コード修正不要な自動計装ライブラリを利用する

前回の投稿から時間が空きましたが、今回は今までとは違う方法での計装を試してみます。 今までの方法は、ソースコードの修正を前提とするものでした。トレース、ログ、メトリクスの1つ1つを詳細に計測するコードは必要なく、例えばASP.NET Coreに対応した計…

OpenTelemetry .NETを理解する (5) HttpClientによる外部通信処理を計測する

前回はスパンに情報を追加しました。 tech.tanaka733.net 次にトレースをさらにスパンで区切ってどの処理に時間がかかっているか計測することにします。スパンは作業の単位で区切ります。原理的には1メソッド1スパンで記録することもできますが、計測のオー…

OpenTelemetry .NETを理解する (4) Spanに情報を追加する

今回は、第2回目で計装したコードを基に、計測したSpanに情報を追加してみます。 tech.tanaka733.net 以下のコードを出発点にします。 app.MapGet("/weatherforecast", (ILogger<Program> logger, HttpContext context) => { var forecast = Enumerable.Range(1, 5).S</program>…

OpenTelemetry .NET ハンズオンを行いました

C# Tokyoでの企画でOpenTelemetryの初心者向けハンズオンを行いました。 csharp-tokyo.connpass.com OpenTelemetry .NETについての発表資料はこちらです。 202202 open telemetry .net handson from Takayoshi Tanaka www.slideshare.net ハンズオン課題はこ…

OpenTelemetry .NETを理解する (2) ASP.NET CoreにOpenTelemetryをまずいれてみる

今回からは実際にOpenTelemetry .NETを使って計測してみることにします。まずは、ASP.NET Core (.NET 6)を題材にします。 OpenTelemetryのドキュメントと重なる部分も多いのであわせて参照してみてください。 opentelemetry.io 最初の計装 まずは、計測対象…

.NET 5 関連の新機能をまとめてみた

11月の.NET Confでリリースが予定されているされた .NET 5 関連の新機能をできるだけまとめてみました。ASP.NET CoreとEF Coreは除いています。 リリースにあわせていくつか更新しています。 そしてそんな .NET 5に興味のある方はぜひこちらのイベントにご参…

System.Text.JsonやJson.NET で一部だけキーが可変なJSONを処理する

とあるREST APIのエンドポイントが /values/xxx みたいなエンドポイントに対して次のような形式のJSONを返します(実際にはこの3倍くらい属性があり、listの中の配列も多数あります)。XXXで指定した名前の値のリストを取得するというイメージで、この名前のパ…

ISUCON9の参考実装をC# (ASP.NET Core 3.1)に書き換えてみた

ISUCONは説明不要の一大イベントだと思います。簡単にいうと、お題に従いより高速なWebアプリケーションを構築するコンテストです。昨年行われたISUCON9の本戦問題についてはこちらに記事があります。 isucon.net さて、このISUCON9、参加者は予め用意されて…

.NET Standard の HttpClientで送信時のBodyをgzip圧縮したい

HttpClientでPOSTやPUTのような送信を行う場合に、Bodyで送信するコンテンツをGZip圧縮したいと思ったのですが、意外とすぐに使えるサンプルコードが見当たりませんでした。 docs.microsoft.com とりあえず動くコードは書けたので、メモしておきたいと思いま…

NupkgファイルをGiHub PackageにPublishするGitHub Actionを作りました

github.com というGitHub Actionを公開しました。 作った背景ですが、まずGitHub Actionsの中でGitHub PackageにNuGetパッケージを公開する手順は、Windows限定で昨日の記事に書きました。 tech.tanaka733.net 公開リポジトリならWindowsでも無料なので気に…

NupkgファイルをGiHub PackageにPublishするGitHub Actionを作りました

github.com というGitHub Actionを公開しました。 作った背景ですが、まずGitHub Actionsの中でGitHub PackageにNuGetパッケージを公開する手順は、Windows限定で昨日の記事に書きました。 tech.tanaka733.net 公開リポジトリならWindowsでも無料なので気に…

NupkgファイルをGiHub PackageにPublishするGitHub Actionを作りました

github.com というGitHub Actionを公開しました。 作った背景ですが、まずGitHub Actionsの中でGitHub PackageにNuGetパッケージを公開する手順は、Windows限定で昨日の記事に書きました。 tech.tanaka733.net 公開リポジトリならWindowsでも無料なので気に…

GitHub Actionsで作成したNuGetパッケージをGitHub Packagesに公開する

久しぶりにNuGetパッケージを公開したくなったのですが、最近だとGitHubで公開しているのならGitHub Actionsでビルドするのが簡単なようです。 tech.guitarrapc.com 最終的には作成したパッケージは nuget.org に公開するのですが、いったんprivateなNuGetリ…

ASP.NET Core 3 Web APIで例外をスローして、指定したステータスのレスポンスを返す

ASP.NET Core Web APIでアプリケーションロジック内では例外を投げておいて、共通処理として例外をキャッチして例外に応じたステータスコードとメッセージのレスポンスを返したい場合があるかと思います。ASP.NET Framework やCore 2.2まであったHttpRespons…

DateTimeとTimeSpanの書式文字列が違うという話

知ってればそれだけなのですが、System.DateTimeとSystem.TimeSpanでは指定できる書式文字列が異なります。知らずによくわからないエラーを出して一瞬困りました。 たとえば、DateTimeオブジェクトで時間のところで HH:mm:ss という形式で出力したい場合は次…

.NET Core で暗号論的疑似乱数生成器を使ってソルトを作成し、PBKDF2でパスワードのハッシュ化を試みる

この時代、自前でパスワードの管理などしたくはないのですが、しないといけないケースもあるでしょう。最低限やらないといけないこととしては、ソルト生成した上でハッシュ化したパスワードを保存することではないでしょうか。.NET Coreでこれらの処理を行う…

.NET CoreでUTCのISO8601形式の時刻文字列から指定のタイムゾーンに変換する

例えば 2020-03-23T12:00:00.000Z というUTCでのISO8601形式の文字列をパースしたうえで、指定したタイムゾーンでの時間に変換したいとします。2020-03-23T12:00:00.000Zであれば、日本標準時(UTC+9)で2020年3月23日21時です。これは次のようなコードで処理…

.NET CoreでWindowsとLinuxでタイムゾーンを識別するID表記が異なるという話

最近、ASP.NET CoreでTimeZoneまわりのコード書いてて遭遇しました。以前このブログ読んだ記憶はあるのですが、すっかり忘れていました。そして、.NET Core 3でもそのままなんだなというのがわかりました。 devblogs.microsoft.com .NET Coreで特定のTimeZon…

Visual Studio 2019 Launch Event in Tokyoで.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能について話しました

Visual Studio 2019 Launch Event in Tokyoを開催しまして、登壇もしました。 connpass.com 発表資料はこちらです。 .NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能 from Takayoshi Tanaka www.slideshare.net 今回、手持ちのノートPC…

.NET Core on OpenShift でのHTTPSサポートの紹介

ひとりAdvent Calendar 14日目です。 adventar.org ASP.NET Core 2.1からHTTPS対応の改善が入っています。 blogs.msdn.microsoft.com OpenShift上の.NET Coreでもこれをサポートするサンプルが提供されていて以下のブログで解説されています。それを紹介して…

.NET Core コンソールアプリをOpenShiftのcronjobとして動かす

ひとりAdent Calendar13日目です。 adventar.org 昨日紹介したbinary artifactsのビルドを使って、.NET Core コンソールアプリをcronjobとして動かしてみます。

OpenShift で ASP.NET CoreアプリをBinary Artifactsとしてデプロイしてみる

ひとりAdvent Calendar 12日目です。 adventar.org 今日は手元でビルトした.NET CoreアプリのバイナリをアップロードしてOpenShiftにデプロイできるBinary Artifactsデプロイを試してみます。

.NET Coreでダンプファイルを解析できる ClrMD を試してみた

ひとりAdvent Calendar 11日目です。 adventar.org ClrMDと呼ばれているMicrosoft.Diagnostics.Runtime.dllが.NET Coreに対応したと聞いて試してみました。プロセスへのアタッチやダンプファイルの解析で、SOS and PSSCORといったツールを使ってやっているこ…

.NET Coreにおける新元号対応について

MVPグローバルサミットに参加している最中に新元号対応が気になったのでマイクロソフトのエンジニアに聞いてみたら、publicなissueで議論しようということだったので立ててみました。するとあっという間に回答が来たので、日本語で簡単にまとめてみようと思…

FedoraやRHELの.NET CoreでVisual Studio CodeでのC# コード編集支援機能が使えない場合の対処法

.NET Core 2.0でRHELもcsproj形式をサポートしたり、Fedoraもサポートされるようになったのですが、Red HatやFedoraコミュニティから提供されている.NET Core SDKを入れた状態でVisual Studio CodeでC#プロジェクトを開いてもプロジェクトをロードできないと…