You can use Managed Service for Prometheus to view predefined dashboards and performance metrics for ACK Edge clusters. This topic describes how to connect an ACK Edge cluster to Managed Service for Prometheus.
Prerequisites
An ACK Edge cluster, version 1.18.8-aliyunedge.1 or later.
Ensure that the ack-arms-prometheus component in the ACK Edge cluster is version 1.1.4 or later. If not, upgrade the ack-arms-prometheus component.
If your cluster runs a version earlier than 1.26, ensure that port forwarding is enabled for Node Exporter port 9100 and GPU Exporter port 9445 in the
kube-system/edge-tunnel-server-cfgConfigMap. The following configuration is required:http-proxy-ports: 9445 https-proxy-ports: 9100
Introduction to Managed Service for Prometheus monitoring
Managed Service for Prometheus is fully integrated with the open source Prometheus ecosystem. It supports monitoring for a wide range of components, provides various predefined dashboards, and a fully managed Prometheus service. With Managed Service for Prometheus, you do not need to build your own monitoring system or manage underlying issues such as data storage, data visualization, and O&M.
ACK Edge clusters support Container Monitoring Basic Edition.
View Grafana dashboards in Managed Service for Prometheus
-
Log on to the ACK console. In the left navigation pane, click Clusters.
On the Clusters page, click the name of the target cluster. In the left-side navigation pane, choose .
NoteIf this is your first time logging in, follow the on-screen instructions and click Install below the component. The console automatically installs the add-on and checks the dashboards. After the installation is complete, the console redirects you to the Prometheus Monitoring details page.
On the Prometheus Monitoring page, you can use the built-in dashboards, such as Node Monitoring, Application Monitoring, and GPU Monitoring, to view monitoring data for nodes, applications, and GPUs in the cluster.
Configure Prometheus alert rules
Create alert rules to receive real-time notifications for specific events. You can send notifications through various channels, such as phone calls, emails, text messages, DingTalk, WeCom, and webhooks, which helps you proactively identify exceptions. Alerts are routed through notification policies to the appropriate contacts or contact groups.
For more information about how to create a DingTalk robot, see DingTalk Robot.
For more information about how to create a WeCom robot, see WeCom Robot.
Step 1: Create a contact
-
Log on to the ARMS console. In the left-side navigation pane, choose .
On the Contacts tab, click Create Contact.
In the Create Contact dialog box, configure the parameters and click Confirm.
Parameter
Description
Name
The name of the contact.
Phone Number
Allows the contact to receive alert notifications by phone call and text message.
NoteOnly verified phone numbers can be used for phone call notifications in a notification policy. To learn how to verify a phone number, see Verify a phone number.
Email
Allows the contact to receive alert notifications by email.
ImportantYou can create up to 100 contacts.
Step 2: Create a Prometheus alert rule
Create a static threshold alert rule
The static threshold check type provides preset metrics. By selecting an existing metric, you can quickly create an alert rule.
Log on to the ARMS console.
In the navigation pane on the left, choose .
On the Prometheus Alert Rules page, click Create Prometheus Alert Rule.
On the Create Prometheus Alert Rule page, configure the alert parameters and click Save.
Parameter
Description
Example
Alert Name
The name of the alert.
prod-cluster-container-cpu-alert
Check Type
Select Static threshold.
Static threshold
Prometheus Instance
Select the Prometheus instance for which you want to create the alert.
Production Cluster
Alert Group
Select an alert group.
Different Prometheus types support different alert groups. The available alert group options change based on the selected Prometheus instance type.
Kubernetes Workloads
Alert Metric
Select the metric for which you want to configure the alert. Each alert group corresponds to different metrics.
Container CPU utilization
Alert Condition
Set the conditions that trigger an alert event based on the predefined content of the alert metric.
The alert condition is met when container CPU utilization is
greater than80%.Filter Condition
Define the scope of the alert rule based on the alert metric. An alert event is triggered when any resource that meets the filter conditions satisfies the alert rule.
The following filter conditions are available:
Traverse: The alert rule applies to all resources in the current Prometheus instance. Traverse is the default filter condition.
Equal To: After you select this condition, enter a specific resource name. The alert rule applies only to that resource. You cannot enter multiple resource names.
Not Equal To: After you select this condition, enter a specific resource name. The alert rule applies to all resources except the specified one. You cannot enter multiple resource names.
Match Regular Expression: After you select this condition, enter a regular expression to match resource names as needed. The alert rule applies to all resources that match the regular expression.
Do Not Match Regular Expression: After you select this condition, enter a regular expression to match resource names as needed. The alert rule filters out all resources that match the regular expression.
NoteAfter you set the filter conditions, the Data Preview area appears.
The filter condition cannot exceed 300 characters.
Traverse
Data Preview
The Data Preview area displays the Prometheus Query Language (PromQL) statement that corresponds to the alert condition. It also shows the values of the monitoring metric as a time series curve.
By default, only the real-time value of one resource is displayed. You can select a target resource and a time range in the filter box of this area to view values for different resources and time ranges.
NoteThe alert threshold appears as a red straight line on the time series curve. The part of the curve that meets the alert threshold is displayed in dark red, and the part that does not is displayed in blue.
Hover over the time series curve to view the resource details at a specific point in time.
Select a time range on the time series curve to view the curve for that period.
None
Duration
If an alert condition is met, an alert event is triggered immediately: An alert event is triggered if any data point meets the threshold.
An alert event is triggered only after an alert condition persists for N minutes: An alert event is triggered only if the time that the threshold is met is greater than or equal to N minutes.
You cannot configure the duration in seconds. This is a product limitation and is expected behavior.
1
Alert Level
Customize the alert level. The default alert level is Default. The severity increases from Default, P4, P3, P2, to P1.
Default
Alert Content
The alert information that users receive. You can use Go template syntax to customize alert parameter variables in the alert content.
Namespace: {{$labels.namespace}} / Pod: {{$labels.pod_name}} / Container: {{$labels.container}} CPU utilization {{$labels.metrics_params_opt_label_value}} {{$labels.metrics_params_value}}%, Current value: {{ printf "%.2f" $value }}%
Alert Notification
Simple Mode: You can set the Notification Receiver, Notification Period, and Whether to Resend Notifications.
Standard Mode:
Do not specify a notification policy: If you select this option, after you create the alert rule, you can create a new notification policy on the Notification Policy page and specify matching rules and matching conditions, such as the alert rule name, to match the alert rule. When the alert rule is triggered and generates an alert event, the alert information is sent to the contacts or contact groups specified in the notification policy. For more information, see Notification policies.
Specify a notification policy: If you select this option, ARMS automatically adds a matching rule to the corresponding notification policy. The matching rule content is the alert rule ID, which is presented as the alert rule name. This ensures that alert events generated by the current alert rule are matched by the selected notification policy.
ImportantQuickly specifying a notification policy only ensures that alert events from the current alert rule are matched by the selected notification policy and that corresponding alerts are generated. However, events from the current alert rule may also be matched by other notification policies that are configured with fuzzy matching, which also generates alerts. The relationship between alert events and notification policies is a many-to-many mapping.
Do not specify a notification rule
Advanced Settings
Alert Check Interval
The interval at which the system checks the alert rule to determine if the data meets the alert conditions. The default is 1 minute, and the minimum is 1 minute. Even if you enter a value less than 1 minute, such as 15 seconds, the system still performs the check every 1 minute. This is a product limitation and is expected behavior.
1
Check after data is complete
Yes
No
Yes
Tags
Set tags for the alert. The tags can be used as options for notification policy matching rules.
None
Annotations
Set annotations for the alert.
None
Create an alert rule with custom PromQL
To monitor metrics not available in the static threshold list, use the custom PromQL check type to create an alert rule.
On the Create Prometheus Alert Rule page, configure the following alert parameters and click Save.
Parameter | Description | Example |
Alert Name | The name of the alert. | Pod CPU usage is greater than 8% |
Check Type | Set to Custom PromQL query. | Custom PromQL query |
Prometheus Instance | Select the Prometheus instance for which you want to create the alert. | None |
Reference Alert Group | Select an alert group. Different Prometheus types support different alert groups. The available alert group options change based on the selected Prometheus instance type. | Kubernetes Workload |
Reference Alert Metric | Optional. Reference metrics provide custom PromQL configurations for common metrics. Select a similar metric to pre-fill the fields. Then, modify the configuration as needed. The Reference Metric parameter automatically filters the supported alert metrics based on the selectedPrometheus instance type. | Pod disk usage alert |
Custom PromQL Statement | Use a PromQL statement to set the alert rule expression. | Namespace: {{$labels.namespace}}/Pod: {{$labels.pod_name}}/Disk device: {{$labels.device}} usage exceeds 90%, current value {{ printf "%.2f" $value }}%max(container_fs_usage_bytes{pod!="", namespace!="arms-prom",namespace!="monitoring"}) by (pod_name, namespace, device)/max(container_fs_limit_bytes{pod!=""}) by (pod_name,namespace, device) * 100 > 90 |
Data Preview | The Data Preview area displays the Prometheus Query Language (PromQL) statement that corresponds to the alert condition. It also shows the values of the monitoring metric as a time series curve. By default, only the real-time value of one resource is displayed. You can select a target resource and a time range in the filter box of this area to view values for different resources and time ranges. Note
| None |
Duration |
Configuring the duration in seconds is not supported. This is a product limitation and is expected behavior. | 1 |
Alert Level | Customize the alert level. The default alert level is Default. The severity increases from Default, P4, P3, P2, to P1. | Default |
Alert Content | The alert information that users receive. Use Go template syntax to customize parameter variables in the alert content. The following example shows a template for a pod restart alert. This helps you configure readable notification content: Namespace: {{$labels.namespace}}/Pod: {{$labels.pod_name}} restarted more than {{ $labels.metrics_params_value}} times in {{$labels.metrics_params_time}} minutes. Current restarts: {{ $value }} | Namespace: {{$labels.namespace}}/Pod: {{$labels.pod_name}}/Disk device: {{$labels.device}} usage exceeds 90%, current value {{ printf "%.2f" $value }}% |
Alert Notification |
| Do not specify a notification rule |
Advanced Settings | ||
Alert Check Period | The interval, in minutes, for checking the alert rule. The minimum value is 1 minute. If you enter a value less than 1 minute, such as 15 seconds, the system still checks every 1 minute. This is a product limitation and is expected behavior. | 1 |
Check After Data Is Complete |
| Yes |
Tags | Set tags for the alert. The tags can be used as options for notification policy matching rules. | None |
Annotations | Set annotations for the alert. | None |
FAQ
How do I check the ack-arms-prometheus add-on version?
-
Log on to the ACK console. In the left navigation pane, click Clusters.
-
On the Clusters page, click the name of your cluster. In the left navigation pane, click Components and Add-ons .
On the Add-ons page, click the Logs and Monitoring tab and find the ack-arms-prometheus add-on.
The current version is displayed on the component card. If a new version is available, click Upgrade to update the component.
NoteThe Upgrade button is displayed only if the installed component is not the latest version.
ACK Edge cluster: How does it obtain monitoring data?
In edge computing scenarios, edge nodes are typically located in relatively isolated, on-premises data center environments. This means the cloud-based VPC and the edge nodes operate in separate networks. The Prometheus Agent deployed in the cloud cannot directly access the endpoints of edge-side components like Node Exporter and GPU Exporter to collect metrics. Starting from ack-arms-prometheus version 1.1.4, the built-in cloud-native O&M communication component Tunnel in ACK Edge clusters allows ack-arms-prometheus to automatically establish a data collection channel between the cloud and the edge.
Why does the GPU monitoring deployment fail?
GPU monitoring deployment can fail if the GPU node has taints. To resolve this issue, first check the node's taints.
Run the following command to check the taints of the target GPU node.
If the GPU node has custom taints, you can find the related entries. This example uses a taint with a
keyoftest-key, avalueoftest-value, and aneffectofNoSchedule:kubectl describe node cn-beijing.47.100.***.***Expected output:
Taints:test-key=test-value:NoScheduleHandle the GPU node taints in one of the following two ways:
Run the following command to remove the taint from the GPU node.
kubectl taint node cn-beijing.47.100.***.*** test-key=test-value:NoSchedule-Declare a toleration for the taint to allow pods to be scheduled to the node.
# 1. Run the following command to edit the ack-prometheus-gpu-exporter DaemonSet. kubectl edit daemonset -n arms-prom ack-prometheus-gpu-exporter # 2. Add the following fields to the YAML file to declare the toleration for the taint. # Other fields are omitted. # The `tolerations` field is added above the `containers` field and at the same level. tolerations: - key: "test-key" operator: "Equal" value: "test-value" effect: "NoSchedule" containers: # Other fields are omitted.
How to completely remove ARMS-Prometheus resources
Deleting only the namespace of Managed Service for Prometheus leaves residual configurations after the resources are deleted. This affects reinstallation. You can perform the following operations to completely and manually delete the residual ARMS-Prometheus configurations.
Delete the arms-prom namespace.
kubectl delete namespace arms-promDelete the ClusterRoles.
kubectl delete ClusterRole arms-kube-state-metrics kubectl delete ClusterRole arms-node-exporter kubectl delete ClusterRole arms-prom-ack-arms-prometheus-role kubectl delete ClusterRole arms-prometheus-oper3 kubectl delete ClusterRole arms-prometheus-ack-arms-prometheus-role kubectl delete ClusterRole arms-pilot-prom-k8s kubectl delete ClusterRole gpu-prometheus-exporter kubectl delete ClusterRole o11y:addon-controller:role kubectl delete ClusterRole arms-aliyunserviceroleforarms-clusterroleDelete the ClusterRoleBindings.
kubectl delete ClusterRoleBinding arms-node-exporter kubectl delete ClusterRoleBinding arms-prom-ack-arms-prometheus-role-binding kubectl delete ClusterRoleBinding arms-prometheus-oper-bind2 kubectl delete ClusterRoleBinding arms-kube-state-metrics kubectl delete ClusterRoleBinding arms-pilot-prom-k8s kubectl delete ClusterRoleBinding arms-prometheus-ack-arms-prometheus-role-binding kubectl delete ClusterRoleBinding gpu-prometheus-exporter kubectl delete ClusterRoleBinding o11y:addon-controller:rolebinding kubectl delete ClusterRoleBinding arms-kube-state-metrics-agent kubectl delete ClusterRoleBinding arms-node-exporter-agent kubectl delete ClusterRoleBinding arms-aliyunserviceroleforarms-clusterrolebindingDelete the Roles and RoleBindings.
kubectl delete Role arms-pilot-prom-spec-ns-k8s kubectl delete Role arms-pilot-prom-spec-ns-k8s -n kube-system kubectl delete RoleBinding arms-pilot-prom-spec-ns-k8s kubectl delete RoleBinding arms-pilot-prom-spec-ns-k8s -n kube-system
After you delete the resources, return to the ACK console, choose Operations > Add-ons, and reinstall the ack-arms-prometheus add-on.