Carpe Diem

備忘録

OpenTelemetryでのSampling

概要

トレーシングで重要なのがSamplingです。
単純に全データを計測するとコストが増えたりパフォーマンスに影響が出たりします。

OpenTelemetryではSamplingに対する仕様が決まっているので、それに基づいて具体的な実装を紹介します。

OpenTelemetry Specification - Sampling

環境

  • Go v1.20.2
  • go.opentelemetry.io/otel/trace v1.14.0

前提知識

サンプリング手法

サンプリングには大きく2つのタイプがあります。
Head basedとTail basedです。

ref: https://newrelic.com/jp/blog/best-practices/distributed-tracing-and-sampling

続きを読む

Bridgeを使ってOpenCensusのSpanをOpenTelemetryに取り込む

概要

OpenTelemetryはOpenCensusやOpenTracingをまとめた形で生まれたので、既にOpenCensusやOpenTracingの形で実装されたライブラリは移行するのが大変です。
例えばGCPの各SDKは基本的にOpenCensusで実装されています。

そのようなライブラリを使用する際に

といったBridgeを使うことで簡単にOpenTelemetry用のSpanとして取り込むことができます。

環境

  • Go v1.20.2
  • go.opentelemetry.io/otel/trace v1.14.0
続きを読む

OpenTelemetryで分散トレーシング

概要

マイクロサービス構成など分散システムにおいて分散トレーシングを行いたい場合は、サービス間でのContextの伝播が必要になります。

OpenTelemetryでサービス間での伝播をしたい場合の実装方法を説明します。

環境

  • Go v1.20.2
  • go.opentelemetry.io/otel/trace v1.14.0

今回のアーキテクチャイメージは以下です。

続きを読む

OpenTelemetryのTraceをGoで試してみる

概要

OpenTelemetryはObservabilityの三本柱であるLogs、Metrics、Tracesをベンダーに依存せず実装するための仕様&実装です。

今回はそのうちのTracesをGoで試してみます。

環境

  • Go v1.20.2
  • go.opentelemetry.io/otel/trace v1.14.0

前提知識

登場人物

OpenTelemetryでは以下の要素があります。

登場人物 役割
Tracer Provider Tracerを提供する。またトレース情報のExport先を管理したり、トレースに共通で付けたい属性データを管理する
Tracer Spanを生成する
Span 各操作におけるトレース情報
Trace Exporter トレース情報の出力先。標準出力だったり、Jaegerのような分散トレース可視化ツールなど
Trace Context Spanの関連付け(Child of, Follows from)をする上で伝播させる必要のあるデータ
続きを読む

ShellCheckでシェルスクリプトをLint

背景

普段プログラミングでは特定の言語を使っていますが、シェルスクリプトはビルドスクリプトをいじる時くらいしか使わず都度検索して調べ直す事が多いです。

また使い方が間違っていてもテストする文化が浸透していないため、期待しない挙動になっていても気が付かないケースも多々あります。
ShellSpecBatsといったテストフレームワークはあるものの、そこまで複雑なことをさせないためテストはいいかとなりがち)

そういった課題を解決できるツールとしてShellCheckがあります。

環境

  • shellcheck 0.9.0

ShellCheck

ShellCheckはシェルスクリプトのLinter(静的解析ツール)です。

Playgroundが用意されており、↓で手軽にチェックできます。

ShellCheck – shell script analysis tool

続きを読む

yttでテンプレートの変数に外部ファイルから値を注入する

背景

前回はyttに基本的な使い方を説明しました。

christina04.hatenablog.com

今回は少し実践的に、変数を外部ファイルとして扱ってサービス毎だったりdev/prdといった環境毎にYAMLを生成できるようにします。

環境

  • ytt 0.44.3

イメージ図

前回はテンプレートにベタ書きしていた値を変数に入れていましたが、今回は外部ファイルから注入します。
フローとしては以下で、一番最初に処理されます。

ref: https://carvel.dev/ytt/docs/v0.44.0/how-it-works/

※今回Overlaysは扱わないです

続きを読む

yttでテンプレートからYAMLを生成【基本編】

背景

  • 似たようなYAMLを毎回コピペするのは運用が辛い
  • ConfigMapのYAMLをdev, stg, prdで出し分けたい
  • CircleCIのpath filteringでparameterを自動的に増やしたい

といったようなケースでは、似たようなYAMLをパラメータだけ変更して自動生成したくなります。
そのような時はyttというツールが課題を解決できます。

Carvel - Carvel - ytt

環境

  • ytt 0.44.3

yttとは

Bazelでも使用されているStarlark言語をベースとしたYAMLのテンプレート&パッチツールです。

yttの良い点としては

  • Go製でシングルバイナリなのでインストールが楽
  • テンプレート機能がある
    • 変数を外部ファイルで扱えるのでサービス毎であったり、dev/prdといった個別化が可能
  • オーバーレイ(パッチ)機能があるのでベースのテンプレートを柔軟に編集できる
  • 関数定義ができるのでアンカーで頑張らずともモジュール化ができる

といったところでしょうか。

続きを読む