· 18 min read
  1. 初始化项目目录
npm init -y
pnpm i -D typescript ts-node ts-node-dev @types/node


npm install typescript -g 

tsc init

“scripts”: { “build”: “tsc”, “dev”: “ts-node-dev –respawn ./src/index.ts”, “start”: “ts-node ./src/index.ts” },

{ “annotations”: { “list”: [ { “builtIn”: 1, “datasource”: { “type”: “datasource”, “uid”: “grafana” }, “enable”: true, “hide”: true, “iconColor”: “rgba(0, 211, 255, 1)”, “name”: “Annotations & Alerts”, “target”: { “limit”: 100, “matchAny”: false, “tags”: [], “type”: “dashboard” }, “type”: “dashboard” } ] }, “description”: “gRPC-go service monitoring”, “editable”: true, “fiscalYearStartMonth”: 0, “gnetId”: 14765, “graphTooltip”: 0, “id”: 25, “links”: [], “liveNow”: false, “panels”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “fieldConfig”: { “defaults”: { “mappings”: [ { “options”: { “0”: { “text”: “:(” }, “1”: { “text”: “:)” } }, “type”: “value” }, { “options”: { “match”: “null”, “result”: { “text”: “N/A” } }, “type”: “special” } ], “thresholds”: { “mode”: “absolute”, “steps”: [ { “color”: “green”, “value”: null } ] }, “unit”: “none” }, “overrides”: [] }, “gridPos”: { “h”: 5, “w”: 6, “x”: 0, “y”: 0 }, “id”: 15, “links”: [], “maxDataPoints”: 100, “options”: { “colorMode”: “value”, “graphMode”: “area”, “justifyMode”: “auto”, “orientation”: “auto”, “reduceOptions”: { “calcs”: [ “lastNotNull” ], “fields”: “”, “values”: false }, “text”: {}, “textMode”: “auto” }, “pluginVersion”: “9.1.2”, “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “expr”: “sum(up{job="$job",})”, “format”: “time_series”, “instant”: false, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “”, “refId”: “A” } ], “title”: “Up”, “type”: “stat” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “fieldConfig”: { “defaults”: { “color”: { “mode”: “thresholds” }, “mappings”: [ { “options”: { “match”: “null”, “result”: { “text”: “N/A” } }, “type”: “special” } ], “max”: 1, “min”: 0, “thresholds”: { “mode”: “absolute”, “steps”: [ { “color”: “green”, “value”: null } ] }, “unit”: “percentunit” }, “overrides”: [] }, “gridPos”: { “h”: 5, “w”: 6, “x”: 6, “y”: 0 }, “id”: 12, “links”: [], “maxDataPoints”: 100, “options”: { “colorMode”: “value”, “graphMode”: “area”, “justifyMode”: “auto”, “orientation”: “auto”, “reduceOptions”: { “calcs”: [ “lastNotNull” ], “fields”: “”, “values”: false }, “text”: {}, “textMode”: “auto” }, “pluginVersion”: “9.1.2”, “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “1 - ((sum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_type="unary",grpc_code="Internal"}[$interval])) + \nsum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_type="unary",grpc_code="Unknown"}[$interval])) +\nsum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_type="unary",grpc_code="Unavailable"}[$interval])) + \nsum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_type="unary",grpc_code="Unimplemented"}[$interval]))\n) / sum(rate(grpc_server_started_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_type="unary"}[$interval])))”, “format”: “time_series”, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “”, “range”: true, “refId”: “A” } ], “title”: “Success”, “type”: “stat” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “description”: “”, “fieldConfig”: { “defaults”: { “mappings”: [], “thresholds”: { “mode”: “absolute”, “steps”: [ { “color”: “green”, “value”: null } ] }, “unit”: “reqps” }, “overrides”: [] }, “gridPos”: { “h”: 5, “w”: 6, “x”: 12, “y”: 0 }, “id”: 14, “links”: [], “maxDataPoints”: 100, “options”: { “colorMode”: “value”, “graphMode”: “area”, “justifyMode”: “auto”, “orientation”: “auto”, “reduceOptions”: { “calcs”: [ “lastNotNull” ], “fields”: “”, “values”: false }, “text”: {}, “textMode”: “auto” }, “pluginVersion”: “9.1.2”, “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “sum(rate(grpc_server_started_total{job="$job",kubernetes_namespace="$namespace",app="$app"}[$interval]))”, “format”: “time_series”, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “”, “range”: true, “refId”: “A” } ], “title”: “RPS”, “type”: “stat” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “fieldConfig”: { “defaults”: { “color”: { “mode”: “thresholds” }, “mappings”: [ { “options”: { “match”: “null”, “result”: { “index”: 0, “text”: “N/A” } }, “type”: “special” } ], “thresholds”: { “mode”: “absolute”, “steps”: [ { “color”: “green”, “value”: null } ] }, “unit”: “s” }, “overrides”: [] }, “gridPos”: { “h”: 5, “w”: 6, “x”: 18, “y”: 0 }, “id”: 75, “links”: [], “maxDataPoints”: 100, “options”: { “colorMode”: “value”, “graphMode”: “area”, “justifyMode”: “auto”, “orientation”: “auto”, “reduceOptions”: { “calcs”: [ “lastNotNull” ], “fields”: “”, “values”: false }, “text”: {}, “textMode”: “auto” }, “pluginVersion”: “9.1.2”, “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “histogram_quantile(0.95, \n sum(rate(grpc_server_handling_seconds_bucket{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_type="unary"}[$interval])) by (le)\n)”, “format”: “time_series”, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “95%”, “range”: true, “refId”: “A” } ], “title”: “Latency”, “type”: “stat” }, { “collapsed”: false, “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “gridPos”: { “h”: 1, “w”: 24, “x”: 0, “y”: 5 }, “id”: 72, “panels”: [], “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “refId”: “A” } ], “title”: “Go Stats”, “type”: “row” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “fieldConfig”: { “defaults”: { “color”: { “mode”: “palette-classic” }, “custom”: { “axisCenteredZero”: false, “axisColorMode”: “text”, “axisLabel”: “”, “axisPlacement”: “auto”, “barAlignment”: 0, “drawStyle”: “line”, “fillOpacity”: 10, “gradientMode”: “none”, “hideFrom”: { “legend”: false, “tooltip”: false, “viz”: false }, “lineInterpolation”: “linear”, “lineWidth”: 1, “pointSize”: 5, “scaleDistribution”: { “type”: “linear” }, “showPoints”: “never”, “spanNulls”: false, “stacking”: { “group”: “A”, “mode”: “none” }, “thresholdsStyle”: { “mode”: “off” } }, “mappings”: [], “thresholds”: { “mode”: “absolute”, “steps”: [ { “color”: “green”, “value”: null } ] }, “unit”: “short” }, “overrides”: [] }, “gridPos”: { “h”: 8, “w”: 12, “x”: 0, “y”: 6 }, “id”: 32, “links”: [], “options”: { “legend”: { “calcs”: [], “displayMode”: “list”, “placement”: “bottom”, “showLegend”: false }, “tooltip”: { “mode”: “multi”, “sort”: “none” } }, “pluginVersion”: “8.0.6”, “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “avg(go_goroutines{job="$job",kubernetes_namespace="$namespace",app="$app"})”, “format”: “time_series”, “interval”: “”, “intervalFactor”: 2, “legendFormat”: “{{instance}}”, “metric”: “go_goroutines”, “range”: true, “refId”: “A”, “step”: 4 } ], “title”: “Goroutines”, “type”: “timeseries” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “fieldConfig”: { “defaults”: { “color”: { “mode”: “palette-classic” }, “custom”: { “axisCenteredZero”: false, “axisColorMode”: “text”, “axisLabel”: “”, “axisPlacement”: “auto”, “barAlignment”: 0, “drawStyle”: “line”, “fillOpacity”: 10, “gradientMode”: “none”, “hideFrom”: { “legend”: false, “tooltip”: false, “viz”: false }, “lineInterpolation”: “linear”, “lineWidth”: 1, “pointSize”: 5, “scaleDistribution”: { “type”: “linear” }, “showPoints”: “never”, “spanNulls”: false, “stacking”: { “group”: “A”, “mode”: “none” }, “thresholdsStyle”: { “mode”: “off” } }, “mappings”: [], “thresholds”: { “mode”: “absolute”, “steps”: [ { “color”: “green”, “value”: null } ] }, “unit”: “s” }, “overrides”: [] }, “gridPos”: { “h”: 8, “w”: 12, “x”: 12, “y”: 6 }, “id”: 30, “links”: [], “options”: { “legend”: { “calcs”: [], “displayMode”: “list”, “placement”: “bottom”, “showLegend”: true }, “tooltip”: { “mode”: “multi”, “sort”: “none” } }, “pluginVersion”: “8.0.6”, “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “avg(go_gc_duration_seconds{job="$job",kubernetes_namespace="$namespace",app="$app"}) by (quantile)”, “format”: “time_series”, “interval”: “”, “intervalFactor”: 2, “legendFormat”: “{{quantile}}”, “metric”: “go_gc_duration_seconds”, “range”: true, “refId”: “A”, “step”: 4 } ], “title”: “GC duration”, “type”: “timeseries” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “description”: “”, “fieldConfig”: { “defaults”: { “color”: { “mode”: “palette-classic” }, “custom”: { “axisCenteredZero”: false, “axisColorMode”: “text”, “axisLabel”: “”, “axisPlacement”: “auto”, “barAlignment”: 0, “drawStyle”: “line”, “fillOpacity”: 10, “gradientMode”: “none”, “hideFrom”: { “legend”: false, “tooltip”: false, “viz”: false }, “lineInterpolation”: “linear”, “lineWidth”: 1, “pointSize”: 5, “scaleDistribution”: { “type”: “linear” }, “showPoints”: “never”, “spanNulls”: false, “stacking”: { “group”: “A”, “mode”: “none” }, “thresholdsStyle”: { “mode”: “off” } }, “mappings”: [], “thresholds”: { “mode”: “absolute”, “steps”: [ { “color”: “green”, “value”: null } ] }, “unit”: “bytes” }, “overrides”: [ { “matcher”: { “id”: “byName”, “options”: “alloc rate” }, “properties”: [ { “id”: “unit”, “value”: “Bps” } ] } ] }, “gridPos”: { “h”: 8, “w”: 12, “x”: 0, “y”: 14 }, “id”: 34, “links”: [], “options”: { “legend”: { “calcs”: [], “displayMode”: “list”, “placement”: “bottom”, “showLegend”: true }, “tooltip”: { “mode”: “multi”, “sort”: “none” } }, “pluginVersion”: “8.0.6”, “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “avg(go_memstats_alloc_bytes{job="$job",kubernetes_namespace="$namespace",app="$app"})”, “interval”: “”, “intervalFactor”: 2, “legendFormat”: “bytes allocated”, “metric”: “go_memstats_alloc_bytes”, “range”: true, “refId”: “A”, “step”: 4 }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “avg(rate(go_memstats_alloc_bytes_total{job="$job",kubernetes_namespace="$namespace",app="$app"}[$interval]))”, “interval”: “”, “intervalFactor”: 2, “legendFormat”: “alloc rate”, “metric”: “go_memstats_alloc_bytes_total”, “range”: true, “refId”: “B”, “step”: 4 }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “avg(go_memstats_stack_inuse_bytes{job="$job",kubernetes_namespace="$namespace",app="$app"})”, “interval”: “”, “intervalFactor”: 2, “legendFormat”: “stack inuse”, “metric”: “go_memstats_stack_inuse_bytes”, “range”: true, “refId”: “C”, “step”: 4 }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “avg(go_memstats_heap_inuse_bytes{job="$job",kubernetes_namespace="$namespace",app="$app"})”, “hide”: false, “interval”: “”, “intervalFactor”: 2, “legendFormat”: “heap inuse”, “metric”: “go_memstats_heap_inuse_bytes”, “range”: true, “refId”: “D”, “step”: 4 } ], “title”: “Memory”, “type”: “timeseries” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “fieldConfig”: { “defaults”: { “color”: { “mode”: “palette-classic” }, “custom”: { “axisCenteredZero”: false, “axisColorMode”: “text”, “axisLabel”: “”, “axisPlacement”: “auto”, “barAlignment”: 0, “drawStyle”: “line”, “fillOpacity”: 10, “gradientMode”: “none”, “hideFrom”: { “legend”: false, “tooltip”: false, “viz”: false }, “lineInterpolation”: “linear”, “lineWidth”: 2, “pointSize”: 5, “scaleDistribution”: { “type”: “linear” }, “showPoints”: “never”, “spanNulls”: false, “stacking”: { “group”: “A”, “mode”: “none” }, “thresholdsStyle”: { “mode”: “off” } }, “mappings”: [], “thresholds”: { “mode”: “absolute”, “steps”: [ { “color”: “green”, “value”: null } ] }, “unit”: “none” }, “overrides”: [ { “matcher”: { “id”: “byName”, “options”: “wait time” }, “properties”: [ { “id”: “unit”, “value”: “s” } ] } ] }, “gridPos”: { “h”: 8, “w”: 12, “x”: 12, “y”: 14 }, “id”: 70, “links”: [], “options”: { “legend”: { “calcs”: [], “displayMode”: “list”, “placement”: “bottom”, “showLegend”: true }, “tooltip”: { “mode”: “multi”, “sort”: “none” } }, “pluginVersion”: “8.0.6”, “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “exemplar”: true, “expr”: “avg(go_sql_stats_connections_in_use{job="$job"})”, “interval”: “”, “intervalFactor”: 2, “legendFormat”: “inuse conn”, “refId”: “A” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “avg(go_sql_stats_connections_idle{job="$job"})”, “interval”: “”, “intervalFactor”: 2, “legendFormat”: “idle conn”, “range”: true, “refId”: “B” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “exemplar”: true, “expr”: “avg(go_sql_stats_connections_open{job="$job"})”, “interval”: “”, “intervalFactor”: 2, “legendFormat”: “open conn”, “refId”: “C” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “exemplar”: true, “expr”: “avg(rate(go_sql_stats_connections_waited_for{job="$job"}[$interval]))”, “interval”: “”, “intervalFactor”: 2, “legendFormat”: “wait conn”, “refId”: “D” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “exemplar”: true, “expr”: “avg(rate(go_sql_stats_connections_blocked_seconds{job="$job"}[$interval]))”, “interval”: “”, “legendFormat”: “wait time”, “refId”: “E” } ], “title”: “DB connection”, “type”: “timeseries” }, { “collapsed”: false, “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “gridPos”: { “h”: 1, “w”: 24, “x”: 0, “y”: 22 }, “id”: 74, “panels”: [], “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “refId”: “A” } ], “title”: “gRPC Service Stats”, “type”: “row” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “fieldConfig”: { “defaults”: { “color”: { “mode”: “palette-classic” }, “custom”: { “axisCenteredZero”: false, “axisColorMode”: “text”, “axisLabel”: “”, “axisPlacement”: “auto”, “barAlignment”: 0, “drawStyle”: “points”, “fillOpacity”: 10, “gradientMode”: “none”, “hideFrom”: { “legend”: false, “tooltip”: false, “viz”: false }, “lineInterpolation”: “linear”, “lineWidth”: 1, “pointSize”: 5, “scaleDistribution”: { “type”: “linear” }, “showPoints”: “never”, “spanNulls”: false, “stacking”: { “group”: “A”, “mode”: “none” }, “thresholdsStyle”: { “mode”: “off” } }, “mappings”: [], “max”: 1, “min”: 0, “thresholds”: { “mode”: “absolute”, “steps”: [ { “color”: “green”, “value”: null } ] }, “unit”: “percentunit” }, “overrides”: [] }, “gridPos”: { “h”: 8, “w”: 12, “x”: 0, “y”: 23 }, “id”: 76, “links”: [], “options”: { “legend”: { “calcs”: [], “displayMode”: “list”, “placement”: “right”, “showLegend”: true }, “tooltip”: { “mode”: “multi”, “sort”: “none” } }, “pluginVersion”: “8.0.6”, “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “sum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary",grpc_code="OK"}[$interval]))\n/ sum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary"}[$interval]))”, “format”: “time_series”, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “OK”, “range”: true, “refId”: “A” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “(sum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary",grpc_code="InvalidArgument"}[$interval])) +\nsum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary",grpc_code="NotFound"}[$interval])) + \nsum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary",grpc_code="AlreadyExists"}[$interval])) + \nsum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary",grpc_code="Unauthenticated"}[$interval])) +\nsum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary",grpc_code="PermissionDenied"}[$interval])) + \nsum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary",grpc_code="FailedPrecondition"}[$interval]))\n)/ sum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary"}[$interval]))”, “format”: “time_series”, “hide”: false, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “ClientError”, “range”: true, “refId”: “B” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “(sum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary",grpc_code="Internal"}[$interval])) +\nsum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary",grpc_code="Unknown"}[$interval])) + \nsum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary",grpc_code="Unavailable"}[$interval])) +\nsum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary",grpc_code="Unimplemented"}[$interval]))\n)/ sum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary"}[$interval]))”, “format”: “time_series”, “hide”: false, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “ServerError”, “range”: true, “refId”: “C” } ], “title”: “Status”, “type”: “timeseries” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “fieldConfig”: { “defaults”: { “color”: { “mode”: “palette-classic” }, “custom”: { “axisCenteredZero”: false, “axisColorMode”: “text”, “axisLabel”: “”, “axisPlacement”: “auto”, “barAlignment”: 0, “drawStyle”: “points”, “fillOpacity”: 10, “gradientMode”: “none”, “hideFrom”: { “legend”: false, “tooltip”: false, “viz”: false }, “lineInterpolation”: “linear”, “lineWidth”: 1, “pointSize”: 5, “scaleDistribution”: { “type”: “linear” }, “showPoints”: “never”, “spanNulls”: false, “stacking”: { “group”: “A”, “mode”: “none” }, “thresholdsStyle”: { “mode”: “off” } }, “mappings”: [], “max”: 1, “min”: 0, “thresholds”: { “mode”: “absolute”, “steps”: [ { “color”: “green”, “value”: null } ] }, “unit”: “percentunit” }, “overrides”: [] }, “gridPos”: { “h”: 8, “w”: 12, “x”: 12, “y”: 23 }, “id”: 26, “links”: [], “options”: { “legend”: { “calcs”: [], “displayMode”: “list”, “placement”: “right”, “showLegend”: true }, “tooltip”: { “mode”: “multi”, “sort”: “none” } }, “pluginVersion”: “8.0.6”, “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “sum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary"}[$interval])) by (grpc_code)\n/ ignoring(grpc_code) group_left sum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary"}[$interval]))”, “format”: “time_series”, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “{{grpc_code}}”, “range”: true, “refId”: “A” } ], “title”: “Status distribution”, “type”: “timeseries” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “fieldConfig”: { “defaults”: { “color”: { “mode”: “palette-classic” }, “custom”: { “axisCenteredZero”: false, “axisColorMode”: “text”, “axisPlacement”: “auto”, “barAlignment”: 0, “drawStyle”: “line”, “fillOpacity”: 10, “gradientMode”: “none”, “hideFrom”: { “legend”: false, “tooltip”: false, “viz”: false }, “lineInterpolation”: “linear”, “lineWidth”: 1, “pointSize”: 5, “scaleDistribution”: { “type”: “linear” }, “showPoints”: “never”, “spanNulls”: false, “stacking”: { “group”: “A”, “mode”: “none” }, “thresholdsStyle”: { “mode”: “off” } }, “mappings”: [], “thresholds”: { “mode”: “absolute”, “steps”: [ { “color”: “green”, “value”: null } ] }, “unit”: “reqps” }, “overrides”: [ { “matcher”: { “id”: “byName”, “options”: “{grpc_method="GetScenario", grpc_service="proto.scenario.v2.ScenarioService"}” }, “properties”: [ { “id”: “color”, “value”: { “fixedColor”: “#F2495C”, “mode”: “fixed” } } ] } ] }, “gridPos”: { “h”: 8, “w”: 12, “x”: 0, “y”: 31 }, “id”: 2, “links”: [], “options”: { “legend”: { “calcs”: [], “displayMode”: “list”, “placement”: “right”, “showLegend”: true }, “tooltip”: { “mode”: “multi”, “sort”: “none” } }, “pluginVersion”: “8.0.6”, “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: false, “expr”: “sum(rate(grpc_server_started_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service"}[$interval])) by (grpc_service,grpc_method) “, “format”: “time_series”, “instant”: false, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “{{grpc_service}}.{{grpc_method}}”, “range”: true, “refId”: “A” } ], “title”: “RPS”, “type”: “timeseries” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “fieldConfig”: { “defaults”: { “color”: { “mode”: “palette-classic” }, “custom”: { “axisCenteredZero”: false, “axisColorMode”: “text”, “axisLabel”: “”, “axisPlacement”: “auto”, “barAlignment”: 0, “drawStyle”: “points”, “fillOpacity”: 10, “gradientMode”: “none”, “hideFrom”: { “legend”: false, “tooltip”: false, “viz”: false }, “lineInterpolation”: “linear”, “lineWidth”: 1, “pointSize”: 5, “scaleDistribution”: { “type”: “linear” }, “showPoints”: “auto”, “spanNulls”: false, “stacking”: { “group”: “A”, “mode”: “none” }, “thresholdsStyle”: { “mode”: “off” } }, “mappings”: [], “max”: 1, “min”: 0, “thresholds”: { “mode”: “absolute”, “steps”: [ { “color”: “green”, “value”: null } ] }, “unit”: “percentunit” }, “overrides”: [] }, “gridPos”: { “h”: 8, “w”: 12, “x”: 12, “y”: 31 }, “id”: 78, “links”: [], “options”: { “legend”: { “calcs”: [], “displayMode”: “list”, “placement”: “right”, “showLegend”: true }, “tooltip”: { “mode”: “multi”, “sort”: “none” } }, “pluginVersion”: “8.0.6”, “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “sum(rate(grpc_server_started_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service"}[$interval])) by (grpc_service,grpc_method) \n/ ignoring(grpc_service,grpc_method) group_left sum(rate(grpc_server_started_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service"}[$interval]))”, “format”: “time_series”, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “{{grpc_service}}.{{grpc_method}}”, “range”: true, “refId”: “A” } ], “title”: “Request distribution”, “type”: “timeseries” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “fieldConfig”: { “defaults”: { “color”: { “mode”: “palette-classic” }, “custom”: { “axisCenteredZero”: false, “axisColorMode”: “text”, “axisLabel”: “”, “axisPlacement”: “auto”, “barAlignment”: 0, “drawStyle”: “line”, “fillOpacity”: 10, “gradientMode”: “none”, “hideFrom”: { “legend”: false, “tooltip”: false, “viz”: false }, “lineInterpolation”: “linear”, “lineWidth”: 1, “pointSize”: 5, “scaleDistribution”: { “type”: “linear” }, “showPoints”: “never”, “spanNulls”: false, “stacking”: { “group”: “A”, “mode”: “none” }, “thresholdsStyle”: { “mode”: “off” } }, “mappings”: [], “thresholds”: { “mode”: “absolute”, “steps”: [ { “color”: “green”, “value”: null } ] }, “unit”: “s” }, “overrides”: [] }, “gridPos”: { “h”: 8, “w”: 12, “x”: 0, “y”: 39 }, “id”: 77, “links”: [], “options”: { “legend”: { “calcs”: [], “displayMode”: “list”, “placement”: “right”, “showLegend”: true }, “tooltip”: { “mode”: “multi”, “sort”: “none” } }, “pluginVersion”: “8.0.6”, “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “histogram_quantile(0.95, \n sum(rate(grpc_server_handling_seconds_bucket{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary"}[$interval])) by (grpc_service,grpc_method,le)\n)”, “format”: “time_series”, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “{{grpc_service}}.{{grpc_method}}”, “range”: true, “refId”: “A” } ], “title”: “Latency”, “type”: “timeseries” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “fieldConfig”: { “defaults”: { “color”: { “mode”: “palette-classic” }, “custom”: { “axisCenteredZero”: false, “axisColorMode”: “text”, “axisLabel”: “”, “axisPlacement”: “auto”, “barAlignment”: 0, “drawStyle”: “line”, “fillOpacity”: 10, “gradientMode”: “none”, “hideFrom”: { “legend”: false, “tooltip”: false, “viz”: false }, “lineInterpolation”: “linear”, “lineStyle”: { “fill”: “solid” }, “lineWidth”: 1, “pointSize”: 5, “scaleDistribution”: { “type”: “linear” }, “showPoints”: “never”, “spanNulls”: false, “stacking”: { “group”: “A”, “mode”: “none” }, “thresholdsStyle”: { “mode”: “off” } }, “mappings”: [], “thresholds”: { “mode”: “absolute”, “steps”: [ { “color”: “green”, “value”: null } ] }, “unit”: “s” }, “overrides”: [] }, “gridPos”: { “h”: 8, “w”: 12, “x”: 12, “y”: 39 }, “id”: 16, “links”: [], “options”: { “legend”: { “calcs”: [], “displayMode”: “list”, “placement”: “right”, “showLegend”: true }, “tooltip”: { “mode”: “multi”, “sort”: “none” } }, “pluginVersion”: “8.0.6”, “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “histogram_quantile(0.99, \n sum(rate(grpc_server_handling_seconds_bucket{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary"}[$interval])) by (le)\n)”, “format”: “time_series”, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “99%”, “range”: true, “refId”: “A” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “histogram_quantile(0.95, \n sum(rate(grpc_server_handling_seconds_bucket{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary"}[$interval])) by (le)\n)”, “format”: “time_series”, “hide”: false, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “95%”, “range”: true, “refId”: “B” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “histogram_quantile(0.90, \n sum(rate(grpc_server_handling_seconds_bucket{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary"}[$interval])) by (le)\n)”, “format”: “time_series”, “hide”: false, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “90%”, “range”: true, “refId”: “E” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “histogram_quantile(0.75, \n sum(rate(grpc_server_handling_seconds_bucket{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary"}[$interval])) by (le)\n)”, “format”: “time_series”, “hide”: false, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “75%”, “range”: true, “refId”: “C” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “histogram_quantile(0.50, \n sum(rate(grpc_server_handling_seconds_bucket{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary"}[$interval])) by (le)\n)”, “format”: “time_series”, “hide”: false, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “50%”, “range”: true, “refId”: “D” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “histogram_quantile(0.25, \n sum(rate(grpc_server_handling_seconds_bucket{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary"}[$interval])) by (le)\n)”, “format”: “time_series”, “hide”: false, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “25%”, “range”: true, “refId”: “F” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “histogram_quantile(0.10, \n sum(rate(grpc_server_handling_seconds_bucket{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type="unary"}[$interval])) by (le)\n)”, “format”: “time_series”, “hide”: false, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “10%”, “range”: true, “refId”: “G” } ], “title”: “Latency distribution”, “type”: “timeseries” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “fieldConfig”: { “defaults”: { “color”: { “mode”: “palette-classic” }, “custom”: { “axisCenteredZero”: false, “axisColorMode”: “text”, “axisLabel”: “”, “axisPlacement”: “auto”, “barAlignment”: 0, “drawStyle”: “line”, “fillOpacity”: 10, “gradientMode”: “none”, “hideFrom”: { “legend”: false, “tooltip”: false, “viz”: false }, “lineInterpolation”: “linear”, “lineWidth”: 1, “pointSize”: 5, “scaleDistribution”: { “type”: “linear” }, “showPoints”: “never”, “spanNulls”: false, “stacking”: { “group”: “A”, “mode”: “none” }, “thresholdsStyle”: { “mode”: “off” } }, “mappings”: [], “thresholds”: { “mode”: “absolute”, “steps”: [ { “color”: “green”, “value”: null } ] }, “unit”: “ops” }, “overrides”: [] }, “gridPos”: { “h”: 8, “w”: 12, “x”: 0, “y”: 47 }, “id”: 80, “links”: [], “options”: { “legend”: { “calcs”: [], “displayMode”: “list”, “placement”: “right”, “showLegend”: true }, “tooltip”: { “mode”: “multi”, “sort”: “none” } }, “pluginVersion”: “8.0.6”, “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “sum(rate(grpc_server_msg_sent_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type!="unary"}[$interval]))”, “format”: “time_series”, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “sent”, “range”: true, “refId”: “A” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “sum(rate(grpc_server_msg_received_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service",grpc_type!="unary"}[$interval]))”, “format”: “time_series”, “hide”: false, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “received”, “range”: true, “refId”: “B” } ], “title”: “RPC stream ops”, “type”: “timeseries” }, { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “fieldConfig”: { “defaults”: { “color”: { “mode”: “palette-classic” }, “custom”: { “axisCenteredZero”: false, “axisColorMode”: “text”, “axisLabel”: “”, “axisPlacement”: “auto”, “barAlignment”: 0, “drawStyle”: “points”, “fillOpacity”: 10, “gradientMode”: “none”, “hideFrom”: { “legend”: false, “tooltip”: false, “viz”: false }, “lineInterpolation”: “linear”, “lineWidth”: 1, “pointSize”: 5, “scaleDistribution”: { “type”: “linear” }, “showPoints”: “never”, “spanNulls”: false, “stacking”: { “group”: “A”, “mode”: “none” }, “thresholdsStyle”: { “mode”: “off” } }, “mappings”: [], “max”: 1, “min”: 0, “thresholds”: { “mode”: “absolute”, “steps”: [ { “color”: “green”, “value”: null } ] }, “unit”: “percentunit” }, “overrides”: [] }, “gridPos”: { “h”: 8, “w”: 12, “x”: 12, “y”: 47 }, “id”: 79, “links”: [], “options”: { “legend”: { “calcs”: [], “displayMode”: “list”, “placement”: “right”, “showLegend”: true }, “tooltip”: { “mode”: “multi”, “sort”: “none” } }, “pluginVersion”: “8.0.6”, “targets”: [ { “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “editorMode”: “code”, “exemplar”: true, “expr”: “sum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service="$grpc_service"}[$interval])) by (grpc_type)\n/ ignoring(grpc_type) group_left sum(rate(grpc_server_handled_total{job="$job",kubernetes_namespace="$namespace",app="$app",grpc_service=~"$grpc_service"}[$interval]))”, “format”: “time_series”, “interval”: “”, “intervalFactor”: 1, “legendFormat”: “{{grpc_type}}”, “range”: true, “refId”: “A” } ], “title”: “RPC type distribution”, “type”: “timeseries” } ], “refresh”: “30s”, “schemaVersion”: 37, “style”: “dark”, “tags”: [ “gRPC”, “go” ], “templating”: { “list”: [ { “current”: { “selected”: false, “text”: “kubernetes-service-endpoints”, “value”: “kubernetes-service-endpoints” }, “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “definition”: “label_values(grpc_server_handled_total{job="kubernetes-service-endpoints"},job)”, “hide”: 2, “includeAll”: false, “multi”: false, “name”: “job”, “options”: [], “query”: { “query”: “label_values(grpc_server_handled_total{job="kubernetes-service-endpoints"},job)”, “refId”: “StandardVariableQuery” }, “refresh”: 1, “regex”: “”, “skipUrlSync”: false, “sort”: 0, “tagValuesQuery”: “”, “tagsQuery”: “”, “type”: “query”, “useTags”: false }, { “current”: { “selected”: false, “text”: “xcore”, “value”: “xcore” }, “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “definition”: “label_values(grpc_server_handled_total{job="$job"},kubernetes_namespace)”, “description”: “K8s Namespace”, “hide”: 0, “includeAll”: false, “label”: “Namespace”, “multi”: false, “name”: “namespace”, “options”: [], “query”: { “query”: “label_values(grpc_server_handled_total{job="$job"},kubernetes_namespace)”, “refId”: “StandardVariableQuery” }, “refresh”: 2, “regex”: “”, “skipUrlSync”: false, “sort”: 0, “type”: “query” }, { “current”: { “selected”: false, “text”: “xobj-dataset”, “value”: “xobj-dataset” }, “datasource”: { “type”: “prometheus”, “uid”: “P1809F7CD0C75ACF3” }, “definition”: “label_values(grpc_server_handled_total{kubernetes_namespace="$namespace"},app)”, “hide”: 0, “includeAll”: false, “label”: “app”, “multi”: false, “name”: “app”, “options”: [], “query”: { “query”: “label_values(grpc_server_handled_total{kubernetes_namespace="$namespace"},app)”, “refId”: “StandardVariableQuery” }, “refresh”: 2, “regex”: “”, “skipUrlSync”: false, “sort”: 0, “type”: “query” }, { “current”: { “selected”: false, “text”: “All”, “value”: “$__all” }, “definition”: “label_values(grpc_server_handled_total{kubernetes_namespace="$namespace",app="$app"},grpc_service)”, “hide”: 0, “includeAll”: true, “label”: “gRPC Service”, “multi”: true, “name”: “grpc_service”, “options”: [], “query”: { “query”: “label_values(grpc_server_handled_total{kubernetes_namespace="$namespace",app="$app"},grpc_service)”, “refId”: “StandardVariableQuery” }, “refresh”: 1, “regex”: “”, “skipUrlSync”: false, “sort”: 0, “type”: “query” }, { “auto”: false, “auto_count”: 30, “auto_min”: “10s”, “current”: { “selected”: false, “text”: “1h”, “value”: “1h” }, “hide”: 0, “name”: “interval”, “options”: [ { “selected”: false, “text”: “5m”, “value”: “5m” }, { “selected”: false, “text”: “10m”, “value”: “10m” }, { “selected”: false, “text”: “15m”, “value”: “15m” }, { “selected”: false, “text”: “30m”, “value”: “30m” }, { “selected”: true, “text”: “1h”, “value”: “1h” } ], “query”: “5m,10m,15m,30m,1h”, “queryValue”: “”, “refresh”: 2, “skipUrlSync”: false, “type”: “interval” } ] }, “time”: { “from”: “now-7d”, “to”: “now” }, “timepicker”: { “hidden”: false, “refresh_intervals”: [ “10s”, “15s”, “30s”, “1m”, “5m”, “10m”, “15m” ], “time_options”: [ “5m”, “15m”, “1h”, “6h”, “12h”, “24h”, “2d”, “7d”, “30d” ] }, “timezone”: “”, “title”: “gRPC-go”, “uid”: “gn38yKZnk”, “version”: 15, “weekStart”: "” }

Bang
Authors
Professor of Artificial Intelligence
My research interests include distributed robotics, mobile computing and programmable matter.