2023-01-01から1年間の記事一覧
背景 Alpine Linuxはデフォルトではtzdataが含まれていないため、以下のような package main import ( "log" "time" ) func main() { loc, err := time.LoadLocation("Asia/Tokyo") if err != nil { log.Fatal("%w", err) } log.Printf("%v", loc) } time.Lo…
背景 christina04.hatenablog.com のように設定ファイルをYAMLで管理するパターンは良くありますが、設定項目が増えるほど運用つらくなるので、あまり弄らない項目に対してはデフォルトを用意し、値がなければそれを設定したいケースがあります。 イメージと…
概要 OpenTelemetryでは直接ExportせずにCollectorと呼ばれるProxyを挟むことで以下のことが可能になります。 アプリケーションコードでExport先を意識しなくて済み、ベンダーロックインを避けることができる データを一元的に管理できる アプリケーションや…
概要 Obsidianというメモアプリを使っていますが、 基本はMacBook Proでメモする たまにiPadで見たりメモすることもある という使い方に加え、 パッと思いついたアイデアはスマホ(Android)で書く といった使い方もしたくなりました。 しかし iCloudでデー…
概要 Bigtableは数十億行、数千列規模に拡張可能な分散型NoSQLですが、 特定のカラムファミリのみ持つ行を全て抽出する といった時にcbt(CLIツール)やSDKではiterateしてデータをハンドリングするため、大規模データ分析の用途では使いづらさがあります。 そ…
背景 次のようなwildcardを含んだpathをフレームワークに頼らず、自前で実装する場合にどうパターンマッチさせるか考えてみます。 /users/:id /articles/:id/comments 単純に考えると正規表現で次のようなパターンを使ってforループで回す、といったものがあ…
背景 gRPCを利用していると、デプロイを含む一時的なネットワーク断で以下のようなエラーが発生することがあります。 rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp xxx: connect: connection …
概要 複数の案を試す際にA/Bテストがありますが、検証期間中はずっと同じ割合で試行しなければいけないため、もし悪い案であった場合に全体としてその期間損失を生むことになります。 そのような損失を少なくしつつ、良いと思われる案を優先的に試行するアル…
概要 トレーシングで重要なのがSamplingです。 単純に全データを計測するとコストが増えたりパフォーマンスに影響が出たりします。 OpenTelemetryではSamplingに対する仕様が決まっているので、それに基づいて具体的な実装を紹介します。 OpenTelemetry Spec…
概要 OpenTelemetryはOpenCensusやOpenTracingをまとめた形で生まれたので、既にOpenCensusやOpenTracingの形で実装されたライブラリは移行するのが大変です。 例えばGCPの各SDKは基本的にOpenCensusで実装されています。 そのようなライブラリを使用する際…
概要 マイクロサービス構成など分散システムにおいて分散トレーシングを行いたい場合は、サービス間でのContextの伝播が必要になります。 OpenTelemetryでサービス間での伝播をしたい場合の実装方法を説明します。 環境 Go v1.20.2 go.opentelemetry.io/otel…
概要 OpenTelemetryはObservabilityの三本柱であるLogs、Metrics、Tracesをベンダーに依存せず実装するための仕様&実装です。 今回はそのうちのTracesをGoで試してみます。 環境 Go v1.20.2 go.opentelemetry.io/otel/trace v1.14.0 前提知識 登場人物 Open…
背景 普段プログラミングでは特定の言語を使っていますが、シェルスクリプトはビルドスクリプトをいじる時くらいしか使わず都度検索して調べ直す事が多いです。 また使い方が間違っていてもテストする文化が浸透していないため、期待しない挙動になっていて…
背景 前回はyttに基本的な使い方を説明しました。 christina04.hatenablog.com 今回は少し実践的に、変数を外部ファイルとして扱ってサービス毎だったりdev/prdといった環境毎にYAMLを生成できるようにします。 環境 ytt 0.44.3 イメージ図 前回はテンプレー…
背景 似たようなYAMLを毎回コピペするのは運用が辛い ConfigMapのYAMLをdev, stg, prdで出し分けたい CircleCIのpath filteringでparameterを自動的に増やしたい といったようなケースでは、似たようなYAMLをパラメータだけ変更して自動生成したくなります。…
背景 仕事だと定期的にPCを交換しますが、そのたびにsshキーを全て最初から登録し直すのは非常に大変です。 かといって.sshをdotfilesとしてGitHubに管理したり、手動でコピーするのも転送経路をどうするかとか前PCから消し忘れたりとセキュリティ的に心配に…
概要 MongoDB AtlasではContinuous Cloud Backupという機能を用いることでRPO(Recovery Point Objective)を1分にすることが可能です。 Dedicated Cluster Backups — MongoDB Atlas その他のストレージやデータベースではPoint in Time Recover/Restoreとい…
概要 christina04.hatenablog.com ではEnvoyでのCircuit Breakerの設定や挙動について説明しました。 IstioではDataPlaneにEnvoyを使っているので同じ様にCircuit Breakerを使えますが、設定するコンポーネントとしてはDestination Ruleになります。 Istio /…