From 8a8e323ca763d3b48f010f7c325d1d0335106390 Mon Sep 17 00:00:00 2001 From: robbluo Date: Thu, 13 Aug 2026 11:19:45 +0800 Subject: [PATCH] feat(observability): collect process system metrics Add a hostmetrics process pipeline for long-lived AKernel and YuanRong components. Export CPU, memory, file descriptor, thread, and uptime metrics with pod, node, role, and normalized component labels. Classify goruntime processes as frontend or scheduler by runtime ID. Delete command-line attributes before remote write so arguments are not exported. Provision a Grafana dashboard for process CPU, memory, file descriptors, threads, and uptime with node, pod, role, and component filters. Signed-off-by: robbluo --- AGENTS.md | 6 +- builder/config/otel-collector-config.yaml | 83 +++ .../systemd_services/otel_collector.service | 2 +- .../core/files/otel-collector/config.yaml | 83 +++ .../templates/frontend/akernel_frontend.yaml | 15 + .../core/templates/master/akernel_master.yaml | 15 + .../dashboards/akernel-process-resources.json | 511 ++++++++++++++++++ deploy/standalone/start.sh | 1 + 8 files changed, 712 insertions(+), 4 deletions(-) create mode 100644 deploy/akernel/charts/monitor/dashboards/akernel-process-resources.json diff --git a/AGENTS.md b/AGENTS.md index 0dbedbd..0a85bfe 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -387,9 +387,9 @@ python sdk/python/benchmarks/sandbox_pressure.py \ in the same change so future agents receive current guidance. - Use Conventional Commits with a concise title and a prose body explaining what changed and why; do not create title-only commits. Keep a blank line - between title and body, wrap the body for terminal readability, and sign - commits with `git commit -s` to include the Developer Certificate of Origin - sign-off. + between title and body, limit every commit-message line to 72 characters, + and sign commits with `git commit -s` to include the Developer Certificate + of Origin sign-off. Mechanically check line lengths before pushing. - Keep unrelated dirty files out of commits, especially local deployment state, generated binaries, Terraform state, kubeconfigs, tokens, and private registry configuration. diff --git a/builder/config/otel-collector-config.yaml b/builder/config/otel-collector-config.yaml index d946d7b..9e6f071 100644 --- a/builder/config/otel-collector-config.yaml +++ b/builder/config/otel-collector-config.yaml @@ -26,6 +26,55 @@ receivers: http: endpoint: 0.0.0.0:4318 + # ────────────────────────────────────────────────────────────────────── + # hostmetrics/process: system metrics for long-lived AKernel/YuanRong processes + # Linux exposes process names through /proc//status and truncates them + # to 15 characters, hence the optional suffixes below. Per-sandbox runsc + # processes are deliberately excluded to keep metric cardinality bounded. + # ───────────────────────────────────────────────────────────────────── + hostmetrics/process: + collection_interval: 15s + scrapers: + process: + include: + names: + - '^(function_(master|proxy)|datasystem_work(er)?|goruntime|meta_service|iam_server|sandboxd|distill_fs|etcd|otelcol-contrib)$' + match_type: regexp + scrape_process_delay: 10s + mute_process_all_errors: true + resource_attributes: + process.parent_pid: + enabled: false + process.executable.path: + enabled: false + process.command: + enabled: false + process.command_line: + # Used transiently by transform/process_component to distinguish + # frontend and scheduler goruntime processes, then removed before export. + enabled: true + process.owner: + enabled: false + metrics: + process.cpu.time: + enabled: true + process.cpu.utilization: + enabled: true + process.memory.usage: + enabled: true + process.memory.virtual: + enabled: true + process.memory.utilization: + enabled: true + process.disk.io: + enabled: false + process.open_file_descriptors: + enabled: true + process.threads: + enabled: true + process.uptime: + enabled: true + # ───────────────────────────────────────────────────────────────────── # filelog/spdlog: C++ glog-style logs # ───────────────────────────────────────────────────────────────────── @@ -373,6 +422,36 @@ processors: value: ${env:AKERNEL_ENV:-default} action: upsert + resource/process_context: + attributes: + - key: service.name + value: akernel-process + action: upsert + - key: service.instance.id + value: ${env:POD_NAME:-unknown} + action: upsert + - key: akernel_role + value: ${env:AKERNEL_ROLE:-unknown} + action: upsert + - key: k8s.pod.name + value: ${env:POD_NAME:-unknown} + action: upsert + - key: k8s.namespace.name + value: ${env:POD_NAMESPACE:-default} + action: upsert + - key: k8s.node.name + value: ${env:NODE_NAME:-unknown} + action: upsert + + transform/process_component: + error_mode: ignore + metric_statements: + - 'set(resource.attributes["component.name"], resource.attributes["process.executable.name"])' + - 'set(resource.attributes["component.name"], "ds_worker") where IsMatch(resource.attributes["process.executable.name"], "^datasystem_work(er)?$")' + - 'set(resource.attributes["component.name"], "frontend") where resource.attributes["process.executable.name"] == "goruntime" and IsMatch(resource.attributes["process.command_line"], "(^|\\s)-runtimeId=frontend_libruntime(\\s|$)")' + - 'set(resource.attributes["component.name"], "scheduler") where resource.attributes["process.executable.name"] == "goruntime" and IsMatch(resource.attributes["process.command_line"], "(^|\\s)-runtimeId=scheduler_libruntime(\\s|$)")' + - 'delete_key(resource.attributes, "process.command_line")' + exporters: otlphttp/loki: endpoint: http://${env:LOKI_ENDPOINT:-loki:3100}/otlp @@ -417,3 +496,7 @@ service: receivers: [otlp] processors: [memory_limiter, resource, batch] exporters: [prometheusremotewrite] + metrics/process: + receivers: [hostmetrics/process] + processors: [memory_limiter, resource, resource/process_context, transform/process_component, batch] + exporters: [prometheusremotewrite] diff --git a/builder/systemd_services/otel_collector.service b/builder/systemd_services/otel_collector.service index 25caf84..c1f2ca7 100644 --- a/builder/systemd_services/otel_collector.service +++ b/builder/systemd_services/otel_collector.service @@ -9,7 +9,7 @@ Type=simple # memory-limiter threshold so GC can react before telemetry is refused. Environment=GOMAXPROCS=8 Environment=GOMEMLIMIT=1400MiB -PassEnvironment=AKERNEL_ENV YR_LOG_PATH PROMETHEUS_ENDPOINT LOKI_ENDPOINT TEMPO_ENDPOINT +PassEnvironment=AKERNEL_ENV AKERNEL_ROLE NODE_NAME POD_NAME POD_NAMESPACE YR_LOG_PATH PROMETHEUS_ENDPOINT LOKI_ENDPOINT TEMPO_ENDPOINT ExecStartPre=/bin/bash -c 'for i in 1 2 3 4 5; do [ -f /etc/otel-collector/otel_config.yaml ] && break; sleep 1; done; [ -f /etc/otel-collector/otel_config.yaml ] && ln -sf /etc/otel-collector/otel_config.yaml /home/yuanrong/otel_config.yaml || true' ExecStart=/usr/local/bin/otelcol-contrib --config=/home/yuanrong/otel_config.yaml ExecReload=/bin/kill -HUP $MAINPID diff --git a/deploy/akernel/charts/core/files/otel-collector/config.yaml b/deploy/akernel/charts/core/files/otel-collector/config.yaml index abc5824..9bd386c 100644 --- a/deploy/akernel/charts/core/files/otel-collector/config.yaml +++ b/deploy/akernel/charts/core/files/otel-collector/config.yaml @@ -26,6 +26,55 @@ receivers: http: endpoint: 0.0.0.0:4318 + # ───────────────────────────────────────────────────────────────────── + # hostmetrics/process: system metrics for long-lived AKernel/YuanRong processes + # Linux exposes process names through /proc//status and truncates them + # to 15 characters, hence the optional suffixes below. Per-sandbox runsc + # processes are deliberately excluded to keep metric cardinality bounded. + # ─────────────────────────────────────────────────────────────────── + hostmetrics/process: + collection_interval: 15s + scrapers: + process: + include: + names: + - '^(function_(master|proxy)|datasystem_work(er)?|goruntime|meta_service|iam_server|sandboxd|distill_fs|etcd|otelcol-contrib)$' + match_type: regexp + scrape_process_delay: 10s + mute_process_all_errors: true + resource_attributes: + process.parent_pid: + enabled: false + process.executable.path: + enabled: false + process.command: + enabled: false + process.command_line: + # Used transiently by transform/process_component to distinguish + # frontend and scheduler goruntime processes, then removed before export. + enabled: true + process.owner: + enabled: false + metrics: + process.cpu.time: + enabled: true + process.cpu.utilization: + enabled: true + process.memory.usage: + enabled: true + process.memory.virtual: + enabled: true + process.memory.utilization: + enabled: true + process.disk.io: + enabled: false + process.open_file_descriptors: + enabled: true + process.threads: + enabled: true + process.uptime: + enabled: true + # ───────────────────────────────────────────────────────────────────── # filelog/spdlog: C++ glog-style logs # ───────────────────────────────────────────────────────────────────── @@ -369,6 +418,36 @@ processors: value: ${env:AKERNEL_ENV:-default} action: upsert + resource/process_context: + attributes: + - key: service.name + value: akernel-process + action: upsert + - key: service.instance.id + value: ${env:POD_NAME:-unknown} + action: upsert + - key: akernel_role + value: ${env:AKERNEL_ROLE:-unknown} + action: upsert + - key: k8s.pod.name + value: ${env:POD_NAME:-unknown} + action: upsert + - key: k8s.namespace.name + value: ${env:POD_NAMESPACE:-default} + action: upsert + - key: k8s.node.name + value: ${env:NODE_NAME:-unknown} + action: upsert + + transform/process_component: + error_mode: ignore + metric_statements: + - 'set(resource.attributes["component.name"], resource.attributes["process.executable.name"])' + - 'set(resource.attributes["component.name"], "ds_worker") where IsMatch(resource.attributes["process.executable.name"], "^datasystem_work(er)?$")' + - 'set(resource.attributes["component.name"], "frontend") where resource.attributes["process.executable.name"] == "goruntime" and IsMatch(resource.attributes["process.command_line"], "(^|\\s)-runtimeId=frontend_libruntime(\\s|$)")' + - 'set(resource.attributes["component.name"], "scheduler") where resource.attributes["process.executable.name"] == "goruntime" and IsMatch(resource.attributes["process.command_line"], "(^|\\s)-runtimeId=scheduler_libruntime(\\s|$)")' + - 'delete_key(resource.attributes, "process.command_line")' + exporters: otlphttp/loki: endpoint: http://${env:LOKI_ENDPOINT:-loki:3100}/otlp @@ -413,3 +492,7 @@ service: receivers: [otlp] processors: [memory_limiter, resource, batch] exporters: [prometheusremotewrite] + metrics/process: + receivers: [hostmetrics/process] + processors: [memory_limiter, resource, resource/process_context, transform/process_component, batch] + exporters: [prometheusremotewrite] diff --git a/deploy/akernel/charts/core/templates/frontend/akernel_frontend.yaml b/deploy/akernel/charts/core/templates/frontend/akernel_frontend.yaml index 2b02967..9064679 100644 --- a/deploy/akernel/charts/core/templates/frontend/akernel_frontend.yaml +++ b/deploy/akernel/charts/core/templates/frontend/akernel_frontend.yaml @@ -89,6 +89,21 @@ spec: env: - name: AKERNEL_ROLE value: "frontend" + - name: NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + - name: POD_NAMESPACE + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + - name: POD_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name - name: LITEBUS_DATA_KEY valueFrom: secretKeyRef: diff --git a/deploy/akernel/charts/core/templates/master/akernel_master.yaml b/deploy/akernel/charts/core/templates/master/akernel_master.yaml index de37591..e19c723 100644 --- a/deploy/akernel/charts/core/templates/master/akernel_master.yaml +++ b/deploy/akernel/charts/core/templates/master/akernel_master.yaml @@ -79,6 +79,21 @@ spec: env: - name: AKERNEL_ROLE value: "master" + - name: NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + - name: POD_NAMESPACE + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + - name: POD_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name {{- if .Values.frontend.enabled }} - name: ENABLE_FAAS_FRONTEND value: "false" diff --git a/deploy/akernel/charts/monitor/dashboards/akernel-process-resources.json b/deploy/akernel/charts/monitor/dashboards/akernel-process-resources.json new file mode 100644 index 0000000..eba6a18 --- /dev/null +++ b/deploy/akernel/charts/monitor/dashboards/akernel-process-resources.json @@ -0,0 +1,511 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "AKernel component CPU, memory, file descriptor, thread, and uptime metrics collected by the OTel process receiver.", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": null, + "links": [], + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "CPU utilization summed across process states.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "drawStyle": "line", + "fillOpacity": 12, + "lineWidth": 2, + "showPoints": "never", + "spanNulls": true + }, + "min": 0, + "max": 1, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "legend": { + "calcs": ["lastNotNull", "max"], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (k8s_node_name, k8s_pod_name, component_name) (process_cpu_utilization_ratio{job=\"akernel-process\",akernel_env=~\"$akernel_env\",k8s_node_name=~\"$k8s_node_name\",k8s_pod_name=~\"$k8s_pod_name\",akernel_role=~\"$akernel_role\",component_name=~\"$component_name\"})", + "legendFormat": "{{k8s_node_name}} / {{k8s_pod_name}} / {{component_name}}", + "range": true, + "refId": "A" + } + ], + "title": "CPU utilization by component", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "Resident physical memory reported by each process.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "drawStyle": "line", + "fillOpacity": 12, + "lineWidth": 2, + "showPoints": "never", + "spanNulls": true + }, + "min": 0, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 0 + }, + "id": 2, + "options": { + "legend": { + "calcs": ["lastNotNull", "max"], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (k8s_node_name, k8s_pod_name, component_name) (process_memory_usage_bytes{job=\"akernel-process\",akernel_env=~\"$akernel_env\",k8s_node_name=~\"$k8s_node_name\",k8s_pod_name=~\"$k8s_pod_name\",akernel_role=~\"$akernel_role\",component_name=~\"$component_name\"})", + "legendFormat": "{{k8s_node_name}} / {{k8s_pod_name}} / {{component_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Resident memory by component", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "Open file descriptors currently held by each process.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "drawStyle": "line", + "fillOpacity": 12, + "lineWidth": 2, + "showPoints": "never", + "spanNulls": true + }, + "min": 0, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 3, + "options": { + "legend": { + "calcs": ["lastNotNull", "max"], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (k8s_node_name, k8s_pod_name, component_name) (process_open_file_descriptors{job=\"akernel-process\",akernel_env=~\"$akernel_env\",k8s_node_name=~\"$k8s_node_name\",k8s_pod_name=~\"$k8s_pod_name\",akernel_role=~\"$akernel_role\",component_name=~\"$component_name\"})", + "legendFormat": "{{k8s_node_name}} / {{k8s_pod_name}} / {{component_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Open file descriptors by component", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "Thread count reported by each process.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "drawStyle": "line", + "fillOpacity": 12, + "lineWidth": 2, + "showPoints": "never", + "spanNulls": true + }, + "min": 0, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 8 + }, + "id": 4, + "options": { + "legend": { + "calcs": ["lastNotNull", "max"], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (k8s_node_name, k8s_pod_name, component_name) (process_threads{job=\"akernel-process\",akernel_env=~\"$akernel_env\",k8s_node_name=~\"$k8s_node_name\",k8s_pod_name=~\"$k8s_pod_name\",akernel_role=~\"$akernel_role\",component_name=~\"$component_name\"})", + "legendFormat": "{{k8s_node_name}} / {{k8s_pod_name}} / {{component_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Threads by component", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "Seconds since each process started.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "drawStyle": "line", + "fillOpacity": 0, + "lineWidth": 2, + "showPoints": "never", + "spanNulls": true + }, + "min": 0, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 16 + }, + "id": 5, + "options": { + "legend": { + "calcs": ["lastNotNull", "min"], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (k8s_node_name, k8s_pod_name, component_name) (process_uptime_seconds{job=\"akernel-process\",akernel_env=~\"$akernel_env\",k8s_node_name=~\"$k8s_node_name\",k8s_pod_name=~\"$k8s_pod_name\",akernel_role=~\"$akernel_role\",component_name=~\"$component_name\"})", + "legendFormat": "{{k8s_node_name}} / {{k8s_pod_name}} / {{component_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Process uptime", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "description": "Current resident memory snapshot for the selected components.", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": true + }, + "mappings": [], + "noValue": "N/A", + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 16 + }, + "id": 6, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": ["sum"], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Value" + } + ] + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "editorMode": "code", + "expr": "topk(50, sum by (k8s_node_name, k8s_pod_name, akernel_role, component_name) (process_memory_usage_bytes{job=\"akernel-process\",akernel_env=~\"$akernel_env\",k8s_node_name=~\"$k8s_node_name\",k8s_pod_name=~\"$k8s_pod_name\",akernel_role=~\"$akernel_role\",component_name=~\"$component_name\"}))", + "format": "table", + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "A" + } + ], + "title": "Current resident memory snapshot", + "type": "table" + } + ], + "preload": false, + "refresh": "15s", + "schemaVersion": 42, + "tags": [ + "akernel", + "otel", + "process", + "resources", + "cpu", + "memory", + "file-descriptors" + ], + "templating": { + "list": [ + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "definition": "label_values(process_memory_usage_bytes{job=\"akernel-process\"}, akernel_env)", + "includeAll": true, + "label": "Environment", + "multi": true, + "name": "akernel_env", + "options": [], + "query": { + "query": "label_values(process_memory_usage_bytes{job=\"akernel-process\"}, akernel_env)", + "refId": "Prometheus-akernel-env-Variable" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "definition": "label_values(process_memory_usage_bytes{job=\"akernel-process\",akernel_env=~\"$akernel_env\"}, k8s_node_name)", + "includeAll": true, + "label": "Node", + "multi": true, + "name": "k8s_node_name", + "options": [], + "query": { + "query": "label_values(process_memory_usage_bytes{job=\"akernel-process\",akernel_env=~\"$akernel_env\"}, k8s_node_name)", + "refId": "Prometheus-node-Variable" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "definition": "label_values(process_memory_usage_bytes{job=\"akernel-process\",akernel_env=~\"$akernel_env\",k8s_node_name=~\"$k8s_node_name\"}, k8s_pod_name)", + "includeAll": true, + "label": "Pod", + "multi": true, + "name": "k8s_pod_name", + "options": [], + "query": { + "query": "label_values(process_memory_usage_bytes{job=\"akernel-process\",akernel_env=~\"$akernel_env\",k8s_node_name=~\"$k8s_node_name\"}, k8s_pod_name)", + "refId": "Prometheus-pod-Variable" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "definition": "label_values(process_memory_usage_bytes{job=\"akernel-process\",akernel_env=~\"$akernel_env\",k8s_node_name=~\"$k8s_node_name\",k8s_pod_name=~\"$k8s_pod_name\"}, akernel_role)", + "includeAll": true, + "label": "Role", + "multi": true, + "name": "akernel_role", + "options": [], + "query": { + "query": "label_values(process_memory_usage_bytes{job=\"akernel-process\",akernel_env=~\"$akernel_env\",k8s_node_name=~\"$k8s_node_name\",k8s_pod_name=~\"$k8s_pod_name\"}, akernel_role)", + "refId": "Prometheus-role-Variable" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "definition": "label_values(process_memory_usage_bytes{job=\"akernel-process\",akernel_env=~\"$akernel_env\",k8s_node_name=~\"$k8s_node_name\",k8s_pod_name=~\"$k8s_pod_name\",akernel_role=~\"$akernel_role\"}, component_name)", + "includeAll": true, + "label": "Component", + "multi": true, + "name": "component_name", + "options": [], + "query": { + "query": "label_values(process_memory_usage_bytes{job=\"akernel-process\",akernel_env=~\"$akernel_env\",k8s_node_name=~\"$k8s_node_name\",k8s_pod_name=~\"$k8s_pod_name\",akernel_role=~\"$akernel_role\"}, component_name)", + "refId": "Prometheus-component-Variable" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "AKernel Process Resources", + "uid": "akernel-process-resources", + "version": 1 +} diff --git a/deploy/standalone/start.sh b/deploy/standalone/start.sh index 7467e5f..c87faec 100755 --- a/deploy/standalone/start.sh +++ b/deploy/standalone/start.sh @@ -265,6 +265,7 @@ start_node_container() { --privileged \ --net bridge \ --restart always \ + -e AKERNEL_ROLE="standalone" \ -e AKS_LOCAL_MODE="true" \ -e TRAEFIK_MODE="etcd" \ -e TRAEFIK_HTTP_ENTRYPOINT="web" \