What is Observability? (観測可能性とは何か?)
- 観測可能性によって、私たちは外側の世界からシステムを理解することができる
- アプリケーションはsignalを発する
- OpenTelemetryは、システムを観測可能にするために、アプリケーションコードが計装されるメカニズム
Reliability & Metrics (信頼性とメトリクス)
- Telemetry: システムから放出される、その動作に関するデータのこと。データはトレース、メトリクス、ログの形式で提供される。
Understanding Distributed Tracing (分散トレーシングについて理解する)
- log: サービスや他のコンポーネントから発せられるタイムスタンプのあるメッセージ
- distributed trace (trace):マイクロサービスやサーバーレスアプリケーションのような複数サービス構成を通過して伝搬するようなリクエストによって取られるパスの記録のこと
Context Propagation (コンテキストの伝搬)
- コンテキストの伝搬があれば、シグナルがどこで生み出されようとも、お互いを紐づけられることが可能
- Context: コンテキストは、送受信サービス(または実行ユニット)がある信号と別の信号を関連付けるための情報を含むオブジェクトである。
Create and launch an HTTP server
package main
import (
"log"
"net/http"
)
func main() {
http.HandleFunc("/rolldice", rolldice)
log.Fatal(http.ListenAndServe(":8080", nil))
}
package main
import (
"io"
"log"
"math/rand"
"net/http"
"strconv"
)
func rolldice(w http.ResponseWriter, req *http.Request) {
roll := 1 + rand.Intn(6)
resp := strconv.Itoa(roll) + "\n"
if _, err := io.WriteString(w, resp); err != nil {
log.Panicf("Write failed: %v\n", err)
}
}
![alt text](https://raw.githubusercontent.com/k3forx/opentelemetry/main/image.png)
Add OpenTelemetry Instrumentation
go get "go.opentelemetry.io/otel" \
"go.opentelemetry.io/otel/exporters/stdout/stdoutmetric" \
"go.opentelemetry.io/otel/exporters/stdout/stdouttrace" \
"go.opentelemetry.io/otel/propagation" \
"go.opentelemetry.io/otel/sdk/metric" \
"go.opentelemetry.io/otel/sdk/resource" \
"go.opentelemetry.io/otel/sdk/trace" \
"go.opentelemetry.io/otel/semconv/v1.24.0" \
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
Using instrumentation libraries