Set "events" for dynamo_* event metrics (#64749)

* Set "events" for dynamo_* event metrics

* Ensure events label for dynamo events metric
This commit is contained in:
Jeff Anderson
2026-04-24 15:28:47 +00:00
committed by GitHub
parent bfb1b9cb93
commit a1478ef54c
2 changed files with 70 additions and 1 deletions
+1 -1
View File
@@ -328,7 +328,7 @@ func New(ctx context.Context, cfg Config) (*Log, error) {
},
}),
awsconfig.WithAPIOptions(awsmetrics.MetricsMiddleware()),
awsconfig.WithAPIOptions(dynamometrics.MetricsMiddleware(dynamometrics.Backend)),
awsconfig.WithAPIOptions(dynamometrics.MetricsMiddleware(dynamometrics.Events)),
}
if cfg.CredentialsProvider != nil {
@@ -42,6 +42,8 @@ import (
"github.com/google/uuid"
"github.com/gravitational/trace"
"github.com/jonboulle/clockwork"
"github.com/prometheus/client_golang/prometheus"
dto "github.com/prometheus/client_model/go"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@@ -892,6 +894,73 @@ func TestEndpoints(t *testing.T) {
}
}
func TestNew_UsesEventsMetricsLabel(t *testing.T) {
// Don't t.Parallel(), this test reads global Prometheus counters.
ctx := context.Background()
before, err := getDynamoRequestsByTypeLabel("events")
require.NoError(t, err)
mux := http.NewServeMux()
mux.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusTeapot)
}))
server := httptest.NewServer(mux)
t.Cleanup(server.Close)
b, err := New(ctx, Config{
Region: "us-west-1",
Tablename: "teleport-test",
UIDGenerator: utils.NewFakeUID(),
// Intentionally pass endpoint without scheme to exercise normalization.
Endpoint: strings.TrimPrefix(server.URL, "http://"),
Insecure: true,
CredentialsProvider: aws.CredentialsProviderFunc(func(ctx context.Context) (aws.Credentials, error) {
return aws.Credentials{}, nil
}),
})
assert.ErrorContains(t, err, fmt.Sprintf("StatusCode: %d", http.StatusTeapot))
assert.Nil(t, b, "backend not nil")
after, err := getDynamoRequestsByTypeLabel("events")
require.NoError(t, err)
require.Greater(t, after, before, "expected dynamo metrics type=events to increase")
}
func getDynamoRequestsByTypeLabel(typeLabel string) (float64, error) {
families, err := prometheus.DefaultGatherer.Gather()
if err != nil {
return 0, trace.Wrap(err)
}
var count float64
for _, family := range families {
if family.GetName() != "dynamo_requests_total" {
continue
}
for _, metric := range family.GetMetric() {
if getMetricLabelValue(metric, "type") != typeLabel {
continue
}
if counter := metric.GetCounter(); counter != nil {
count += counter.GetValue()
}
}
}
return count, nil
}
func getMetricLabelValue(metric *dto.Metric, name string) string {
for _, label := range metric.GetLabel() {
if label.GetName() == name {
return label.GetValue()
}
}
return ""
}
func TestStartKeyBackCompat(t *testing.T) {
const (
oldStartKey = `{"date":"2023-04-27","iterator":{"CreatedAt":{"B":null,"BOOL":null,"BS":null,"L":null,"M":null,"N":"1682583778","NS":null,"NULL":null,"S":null,"SS":null},"CreatedAtDate":{"B":null,"BOOL":null,"BS":null,"L":null,"M":null,"N":null,"NS":null,"NULL":null,"S":"2023-04-27","SS":null},"EventIndex":{"B":null,"BOOL":null,"BS":null,"L":null,"M":null,"N":"0","NS":null,"NULL":null,"S":null,"SS":null},"SessionID":{"B":null,"BOOL":null,"BS":null,"L":null,"M":null,"N":null,"NS":null,"NULL":null,"S":"4bc51fd7-4f0c-47ee-b9a5-da621fbdbabb","SS":null}}}`