Golang的OpenTelemetry自动测量工具(附代码示例)

102 阅读1分钟

otelinji

OpenTelemetry auto-instrumentation tool for Golang

OpenTelemetry auto-instrumentation tool for Golang OpenTelemetry auto-instrumentation tool for Golang OpenTelemetry auto-instrumentation tool for Golang OpenTelemetry auto-instrumentation tool for Golang

OpenTelemetry的自动测量工具。它为所有导出的函数注入一个通用的跟踪块。

特点是:

  • 支持自定义模板。例如:模板
  • 如果函数包含一个名为err 的结果参数,那么err 将被记录在跨度中。
  • 它支持不同名称的ctx 参数。
  • 这也可以与OpenTracing一起使用,但需要一个自定义模板。
  • 利用创造力,这可以用于在函数开始时的任何插入。

安装

MacOS/Linux HomeBrew

brew install hedhyw/main/otelinji

Deb/RPM

最新的DEB和RPM包可以在发布页面上找到。

进展

go install github.com/hedhyw/otelinji/cmd/otelinji@latest

来源

git clone git@github.com:hedhyw/otelinji.git
cd gherkingen
task build # Requires https://taskfile.dev/
cp ./bin/gherkingen /usr/local/bin
chmod +x /usr/local/bin

使用方法

基本用法

注入该层并重写文件(注意,一定要先提交所有的修改)。

  • otelinji -filename input_file.go > input_file.go

  • otelinji -w -filename input_file.go

    或在docker中

  • docker run \
      --rm \
      --read-only \
      --network none \
      --rm \
      --volume $PWD:/host \
      hedhyw/otelinji:latest \
      -filename /host/internal/pkg/assets/assets_test.go
    

递归运行

为当前目录下的所有Go文件运行:

# It will inject the layer to all exported functions.
# It will ignore vendor and .git folders, test and generated files.

find . -name "*.go" \
    | grep -v "vendor/\|.git/\|_test.go" \
    | xargs -n 1 -t otelinji -w -filename

在docker中也是如此:

docker run \
      --rm \
      --read-only \
      --network none \
      --volume $PWD:/host \
      --entrypoint sh \
      hedhyw/otelinji:latest \
      -c " \
            find /host -name \"*.go\" \
            | grep -v \"vendor/\|.git/\|_test.go\" \
            | xargs -n 1 -t /app/otelinji -w -filename \
      "

帮助

otelinji --help

Usage of otelinji:
  -filename string
        golang file [required]
  -skip-generated DO NOT EDIT
        skip files with DO NOT EDIT comment (default true)
  -template string
        path to template file [optional] (default "@/otel")
  -w    write result to file [optional]