Skip to content

Instantly share code, notes, and snippets.

@tchellomello
Last active October 17, 2025 21:41
Show Gist options
  • Select an option

  • Save tchellomello/f1198e56a186b96d4d3695daafdfe3f6 to your computer and use it in GitHub Desktop.

Select an option

Save tchellomello/f1198e56a186b96d4d3695daafdfe3f6 to your computer and use it in GitHub Desktop.
# 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"]
#!/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
// 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)
}
}
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