Last active
October 17, 2025 21:41
-
-
Save tchellomello/f1198e56a186b96d4d3695daafdfe3f6 to your computer and use it in GitHub Desktop.
SQL SQLite3 Datadog APM Runner - https://github.com/DataDog/trace-examples/tree/master/go/sql/mattn/go-sqlite3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Build stage | |
| FROM golang:1.23-alpine AS builder | |
| # Install build dependencies | |
| RUN apk add --no-cache gcc musl-dev sqlite-dev | |
| WORKDIR /app | |
| # Copy source code | |
| COPY main.go ./ | |
| RUN go mod init example.com/m/v2 | |
| RUN go mod tidy | |
| # Build the application | |
| RUN CGO_ENABLED=1 go build -o sqlite-tracer main.go | |
| # Runtime stage | |
| FROM alpine:latest | |
| # Install runtime dependencies | |
| RUN apk add --no-cache sqlite-libs ca-certificates | |
| WORKDIR /app | |
| # Copy binary from builder | |
| COPY --from=builder /app/sqlite-tracer . | |
| # Copy entrypoint.sh | |
| COPY entrypoint.sh /app/entrypoint.sh | |
| RUN chmod +x /app/entrypoint.sh | |
| # Run in a loop | |
| ENTRYPOINT ["/app/entrypoint.sh"] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/sh | |
| export SLEEP=${SLEEP_TIME:-60} | |
| while true; do | |
| echo "Running sqlite-tracer..." | |
| ./sqlite-tracer | |
| echo "Waiting $SLEEP seconds before next run..." | |
| sleep $SLEEP | |
| done |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // Copied from the github.com/mattn/go-sqlite3 example | |
| package main | |
| import ( | |
| "context" | |
| "fmt" | |
| "log" | |
| "os" | |
| sqlite "github.com/mattn/go-sqlite3" // Setup application to use Sqlite | |
| sqltrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/database/sql" | |
| "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" | |
| ) | |
| func main() { | |
| serviceName := os.Getenv("DD_SERVICE") | |
| if serviceName == "" { | |
| serviceName = "sqlite-example" | |
| } | |
| tracer.Start(tracer.WithDebugMode(true), tracer.WithServiceName(serviceName)) | |
| defer tracer.Stop() | |
| sqltrace.Register( | |
| "sqlite", | |
| &sqlite.SQLiteDriver{}, | |
| sqltrace.WithServiceName(serviceName)) | |
| os.Remove("./foo.db") | |
| db, err := sqltrace.Open("sqlite", "./foo.db") | |
| if err != nil { | |
| log.Fatal(err) | |
| } | |
| defer db.Close() | |
| // Create a root span, giving name, server and resource. | |
| span, ctx := tracer.StartSpanFromContext( | |
| context.Background(), | |
| "my-query", | |
| tracer.SpanType("db"), | |
| tracer.ResourceName("initial-access"), | |
| ) | |
| defer span.Finish() | |
| sqlStmt := ` | |
| create table foo (id integer not null primary key, name text); | |
| delete from foo; | |
| ` | |
| _, err = db.ExecContext(ctx, sqlStmt) | |
| if err != nil { | |
| log.Printf("%q: %s\n", err, sqlStmt) | |
| return | |
| } | |
| tx, err := db.BeginTx(ctx, nil) | |
| if err != nil { | |
| log.Fatal(err) | |
| } | |
| stmt, err := tx.PrepareContext(ctx, "insert into foo(id, name) values(?, ?)") | |
| if err != nil { | |
| log.Fatal(err) | |
| } | |
| defer stmt.Close() | |
| for i := 0; i < 100; i++ { | |
| _, err = stmt.ExecContext(ctx, i, fmt.Sprintf("Number: %03d", i)) | |
| if err != nil { | |
| log.Fatal(err) | |
| } | |
| } | |
| tx.Commit() | |
| rows, err := db.QueryContext(ctx, "select id, name from foo") | |
| if err != nil { | |
| log.Fatal(err) | |
| } | |
| defer rows.Close() | |
| for rows.Next() { | |
| var id int | |
| var name string | |
| err = rows.Scan(&id, &name) | |
| if err != nil { | |
| log.Fatal(err) | |
| } | |
| fmt.Println(id, name) | |
| } | |
| err = rows.Err() | |
| if err != nil { | |
| log.Fatal(err) | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| apiVersion: apps/v1 | |
| kind: Deployment | |
| metadata: | |
| name: sqlite-tracer | |
| labels: | |
| app: sqlite-tracer | |
| spec: | |
| tolerations: | |
| - operator: Exists | |
| replicas: 10 | |
| selector: | |
| matchLabels: | |
| app: sqlite-tracer | |
| template: | |
| metadata: | |
| labels: | |
| app: sqlite-tracer | |
| spec: | |
| containers: | |
| - name: sqlite-tracer | |
| image: tchellomello/sqlite3-tracer-datadog-apm:v0.0.1 | |
| env: | |
| - name: DD_AGENT_HOST | |
| valueFrom: | |
| fieldRef: | |
| fieldPath: status.hostIP | |
| - name: DD_TRACE_AGENT_PORT | |
| value: "8126" | |
| # Service identification | |
| - name: DD_SERVICE | |
| value: "sqlite-example" | |
| - name: DD_ENV | |
| value: "development" | |
| - name: DD_VERSION | |
| value: "1.0.0" | |
| - name: DD_TRACE_ENABLED | |
| value: "true" | |
| - name: DD_RUNTIME_METRICS_ENABLED | |
| value: "true" | |
| - name: DD_LOGS_INJECTION | |
| value: "true" | |
| - name: DD_TRACE_SAMPLE_RATE | |
| value: "1.0" | |
| - name: DD_PROFILING_ENABLED | |
| value: "true" | |
| resources: | |
| requests: | |
| memory: "128Mi" | |
| cpu: "100m" | |
| limits: | |
| memory: "128Mi" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment