$API_TOKEN=<YOUR_API_TOKEN>
$cat > input.json << 'EOF'
<{
< "metricInventory": "{\n \"metrics\": [\n {\n \"name\": \"http_server_requests_total\",\n \"type\": \"counter\",\n \"series\": 12000,\n \"scrapeInterval\": \"30s\",\n \"labels\": {\n \"service\": 8,\n \"route\": 40,\n \"method\": 5,\n \"status_code\": 6,\n \"pod\": 60,\n \"env\": [\n \"prod\",\n \"staging\"\n ]\n }\n },\n {\n \"name\": \"http_server_request_duration_seconds\",\n \"type\": \"histogram\",\n \"buckets\": 14,\n \"series\": 32000,\n \"labels\": {\n \"service\": 8,\n \"route\": 40,\n \"method\": 5,\n \"pod\": 60,\n \"env\": [\n \"prod\",\n \"staging\"\n ]\n }\n },\n {\n \"name\": \"grpc_server_handled_total\",\n \"type\": \"counter\",\n \"series\": 6000,\n \"labels\": {\n \"grpc_service\": 10,\n \"grpc_method\": 50,\n \"grpc_code\": 17,\n \"pod\": 60\n }\n },\n {\n \"name\": \"go_memstats_alloc_bytes\",\n \"type\": \"gauge\",\n \"series\": 60,\n \"labels\": {\n \"service\": 8,\n \"pod\": 60\n }\n },\n {\n \"name\": \"go_memstats_heap_inuse_bytes\",\n \"type\": \"gauge\",\n \"series\": 60,\n \"labels\": {\n \"service\": 8,\n \"pod\": 60\n }\n },\n {\n \"name\": \"go_memstats_sys_bytes\",\n \"type\": \"gauge\",\n \"series\": 60,\n \"labels\": {\n \"service\": 8,\n \"pod\": 60\n }\n },\n {\n \"name\": \"kafka_consumer_lag\",\n \"type\": \"gauge\",\n \"series\": 3000,\n \"labels\": {\n \"topic\": 30,\n \"partition\": 50,\n \"consumer_group\": 4,\n \"pod\": 20\n }\n }\n ]\n}",
< "dashboards": [
< {
< "title": "Service Overview",
< "time": {
< "from": "now-6h",
< "to": "now"
< },
< "templating": {
< "list": [
< {
< "name": "service",
< "type": "query",
< "query": "label_values(http_server_requests_total, service)"
< }
< ]
< },
< "panels": [
< {
< "id": 1,
< "title": "Request rate",
< "targets": [
< {
< "refId": "A",
< "expr": "sum by (service) (rate(http_server_requests_total{env=\"prod\", service=~\"$service\"}[$__rate_interval]))"
< }
< ]
< },
< {
< "id": 2,
< "title": "p99 latency",
< "targets": [
< {
< "refId": "A",
< "expr": "histogram_quantile(0.99, sum by (le, service) (rate(http_server_request_duration_seconds_bucket{env=\"prod\"}[$__rate_interval])))"
< }
< ]
< },
< {
< "id": 3,
< "type": "row",
< "title": "Kafka",
< "collapsed": true,
< "panels": [
< {
< "id": 4,
< "title": "Lag by topic",
< "targets": [
< {
< "refId": "A",
< "expr": "max by (topic) (kafka_consumer_lag)"
< }
< ]
< }
< ]
< }
< ]
< }
< ],
< "ruleFiles": [
< "groups:\n - name: service-alerts\n rules:\n - alert: HighErrorRate\n expr: |\n sum by (service) (rate(http_server_requests_total{env=\"prod\", status_code=~\"5..\"}[5m]))\n / sum by (service) (rate(http_server_requests_total{env=\"prod\"}[5m])) > 0.05\n for: 10m\n annotations:\n summary: \"High error rate on {{ $labels.service }}\"\n"
< ]
<}
<EOF
$curl "https://api.apify.com/v2/actors/michiganpublictech~metric-usage-optimizer/runs?token=$API_TOKEN" \
< -X POST \
< -d @input.json \
< -H 'Content-Type: application/json'