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