| name | adobe-observability |
| description | Set up comprehensive observability for Adobe API integrations with
Prometheus metrics, OpenTelemetry traces, structured logging, and
alert rules covering Firefly, PDF Services, and Photoshop APIs.
Trigger with phrases like "adobe monitoring", "adobe metrics",
"adobe observability", "monitor adobe", "adobe alerts", "adobe tracing".
|
| allowed-tools | Read, Write, Edit |
| version | 1.6.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","design","adobe"] |
| compatibility | Designed for Claude Code |
Adobe Observability
Overview
Set up comprehensive observability for Adobe API integrations covering four pillars: metrics (Prometheus), traces (OpenTelemetry), logs (structured JSON), and alerts. Each Adobe API has different latency profiles requiring specific monitoring.
Prerequisites
- Prometheus or compatible metrics backend
- OpenTelemetry SDK (
@opentelemetry/api)
- Grafana or similar dashboarding tool
- AlertManager or PagerDuty for alerts
Instructions
Step 1: Define Key Metrics by API
| Metric | Type | Labels | Description |
|---|
adobe_ims_token_requests_total | Counter | status | Token generation attempts |
adobe_api_requests_total | Counter | api,operation,status | API calls by type |
adobe_api_duration_seconds | Histogram | api,operation | Latency per operation |
adobe_api_errors_total | Counter | api,error_code | Errors by code (401,403,429,500) |
adobe_job_poll_count | Histogram | api | Polls before async job completes |
adobe_rate_limit_retries_total | Counter | api | 429 retries |
adobe_pdf_transactions_used | Gauge | — | Monthly PDF Services usage |
Step 2: Instrumented Adobe Client
import { Counter, Histogram, Gauge, Registry } from 'prom-client';
const registry = new Registry();
apiRequests = ({
: ,
: ,
: [, , ] ,
: [registry],
});
apiDuration = ({
: ,
: ,
: [, ] ,
: [, , , , , , , ],
: [registry],
});
apiErrors = ({
: ,
: ,
: [, ] ,
: [registry],
});
instrumentedAdobeCall<T>(
: ,
: ,
: <T>
): <T> {
timer = apiDuration.({ api, operation });
{
result = ();
apiRequests.({ api, operation, : });
result;
} (: ) {
errorCode = error. || error. || ;
apiRequests.({ api, operation, : });
apiErrors.({ api, : (errorCode) });
error;
} {
();
}
}
image = (, ,
({ : })
);