1import { ApifyClient } from 'apify-client';
2
3
4
5const client = new ApifyClient({
6 token: '<YOUR_API_TOKEN>',
7});
8
9
10const input = {
11 "metricInventory": `{
12 "metrics": [
13 {
14 "name": "http_server_requests_total",
15 "type": "counter",
16 "series": 12000,
17 "scrapeInterval": "30s",
18 "labels": {
19 "service": 8,
20 "route": 40,
21 "method": 5,
22 "status_code": 6,
23 "pod": 60,
24 "env": [
25 "prod",
26 "staging"
27 ]
28 }
29 },
30 {
31 "name": "http_server_request_duration_seconds",
32 "type": "histogram",
33 "buckets": 14,
34 "series": 32000,
35 "labels": {
36 "service": 8,
37 "route": 40,
38 "method": 5,
39 "pod": 60,
40 "env": [
41 "prod",
42 "staging"
43 ]
44 }
45 },
46 {
47 "name": "grpc_server_handled_total",
48 "type": "counter",
49 "series": 6000,
50 "labels": {
51 "grpc_service": 10,
52 "grpc_method": 50,
53 "grpc_code": 17,
54 "pod": 60
55 }
56 },
57 {
58 "name": "go_memstats_alloc_bytes",
59 "type": "gauge",
60 "series": 60,
61 "labels": {
62 "service": 8,
63 "pod": 60
64 }
65 },
66 {
67 "name": "go_memstats_heap_inuse_bytes",
68 "type": "gauge",
69 "series": 60,
70 "labels": {
71 "service": 8,
72 "pod": 60
73 }
74 },
75 {
76 "name": "go_memstats_sys_bytes",
77 "type": "gauge",
78 "series": 60,
79 "labels": {
80 "service": 8,
81 "pod": 60
82 }
83 },
84 {
85 "name": "kafka_consumer_lag",
86 "type": "gauge",
87 "series": 3000,
88 "labels": {
89 "topic": 30,
90 "partition": 50,
91 "consumer_group": 4,
92 "pod": 20
93 }
94 }
95 ]
96}`,
97 "dashboards": [
98 {
99 "title": "Service Overview",
100 "time": {
101 "from": "now-6h",
102 "to": "now"
103 },
104 "templating": {
105 "list": [
106 {
107 "name": "service",
108 "type": "query",
109 "query": "label_values(http_server_requests_total, service)"
110 }
111 ]
112 },
113 "panels": [
114 {
115 "id": 1,
116 "title": "Request rate",
117 "targets": [
118 {
119 "refId": "A",
120 "expr": "sum by (service) (rate(http_server_requests_total{env=\"prod\", service=~\"$service\"}[$__rate_interval]))"
121 }
122 ]
123 },
124 {
125 "id": 2,
126 "title": "p99 latency",
127 "targets": [
128 {
129 "refId": "A",
130 "expr": "histogram_quantile(0.99, sum by (le, service) (rate(http_server_request_duration_seconds_bucket{env=\"prod\"}[$__rate_interval])))"
131 }
132 ]
133 },
134 {
135 "id": 3,
136 "type": "row",
137 "title": "Kafka",
138 "collapsed": true,
139 "panels": [
140 {
141 "id": 4,
142 "title": "Lag by topic",
143 "targets": [
144 {
145 "refId": "A",
146 "expr": "max by (topic) (kafka_consumer_lag)"
147 }
148 ]
149 }
150 ]
151 }
152 ]
153 }
154 ],
155 "ruleFiles": [
156 "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"
157 ]
158};
159
160
161const run = await client.actor("michiganpublictech/metric-usage-optimizer").call(input);
162
163
164console.log('Results from dataset');
165console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
166const { items } = await client.dataset(run.defaultDatasetId).listItems();
167items.forEach((item) => {
168 console.dir(item);
169});
170
171