本文为服务商介绍计算巢全托管服务-ACK部署方案中业务监控和报警的配置方案。
ACK部署方案中的托管版单租服务(每个用户独享集群)和托管版多租服务(多个用户共享集群)接入Prometheus的解决方案一致,都是通过配置ACK集群中的Prometheus的租户指标转发能力,实现用户侧和服务商侧均能看到服务实例的监控指标。(技术支持钉钉群:31045016300)
工作原理
计算巢采用了阿里云ARMS提供的Prometheus多租监控的方案。
阿里云Prometheus服务内置了多租能力支持,在采集侧agent端会根据workload资源(支持Pod/Namespace级别)上特定的租户标签来区分租户指标,不同租户的指标会分发到租户对应的云服务实例中。
存储侧天然支持多租隔离特征。接入的服务商需要在相应的租户workload资源上打上规定的“租户标签”即可。
计算巢的全托管多租服务实例是以namespace来隔离各个租户的资源的,当对Namespace打上相应的租户标签,后端程序可实现租户的指标自动转发到租户对应的云服务实例中。
另外通过设置服务商的RemoteWrite,可以把租户的监控数据再投递一份到服务商的账号下,即可实现服务商查看所有租户的监控数据,租户仅可查看自己的监控数据。
操作步骤
步骤一:配置ACK集群的Prometheus组件
Prometheus本身不支持指标转发功能,阿里云托管的Prometheus进行额外的配置后,才能将与用户应用相关的监控指标转发给具体的用户。
托管版单租场景
在托管版单租场景中,计算巢将此配置过程封装为ROS模板的一个模块,您可直接在ROS模板中使用。
在创建服务时将此模板内容集成至ROS模板中,模板的示例及说明如下所示。
模板示例:
ClusterArmsConfig: Type: 'MODULE::ACS::ComputeNest::AckArmsConfig' Version: v1 Properties: ClusterId: Fn::If: - Condition: CreateACKCondition - Ref: ManagedKubernetesCluster - Ref: ClusterId WhetherSupplierNeedMetric: true AccessKeyID: LTAI**************** AccessKeySecret: yourAccessKeySecret SupplierAliuid: 15634578xxxxxx
参数说明:
WhetherSupplierNeedMetric
:表示服务商是否需要收到租户的数据,如果服务商也需要收到租户的指标,则需要设置为true
。如果WhetherSupplierNeedMetric
为true
,则需要配置AccessKeyID
、AccessKeySecret
和SupplierAliuid
这三个属性,SupplierAliuid
为服务商的阿里uid,AccessKeyID和AccessKeySecret都为服务商的AK。重要您可以为AK设置如下权限,仅允许调用
arms:GetPrometheusApiToken
接口,用于监控场景下的数据采集或查询。此配置在满足监控需求的同时,遵循最小权限原则,有效降低安全风险。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "arms:GetPrometheusApiToken" ], "Resource": "*" } ] }
SyncServiceMonitor
: 是否自动同步集群中的ServiceMonitor
。您可通过设置此选项来选择监听的Service
,具体操作,请参见通过ServiceMonitor创建服务发现。SyncPodMonitor
:是否自动同步集群中的PodMonitor
。
(可选)如果是通过ROS模板新建的ACK集群,需要在ROS模板的ACK资源中添加Addons参数,如下图所示。
托管版多租场景
在托管版多租场景中,计算巢提供的服务ACK全托管多租场景-容器基础资源部署,您可以通过创建服务实例的方式,完成ACK集群的Prometheus配置。
您可以为AK设置如下权限,仅允许调用 arms:GetPrometheusApiToken
接口,用于监控场景下的数据采集或查询。此配置在满足监控需求的同时,遵循最小权限原则,有效降低安全风险。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"arms:GetPrometheusApiToken"
],
"Resource": "*"
}
]
}
步骤二:配置ROS模板
需要创建一个以服务实例ID为名称的命名空间,并给该命名空间打上租户标签。
说明其中
tenant_userid
、tenant_clusterid
、tenant_token
和tenant_cloudproductcode
为租户标签的key
,模板中只需填写固定的占位符即可。该命名空间的名称设置为{{ serviceInstanceId }}占位符,表示以创建出来的服务实例的serviceInstanceId
命名。ClusterNameSpaceApplication: Type: ALIYUN::CS::ClusterApplication Properties: YamlContent: Fn::Sub: - | apiVersion: v1 kind: Namespace metadata: name: '${Name}' labels: tenant_userid: '{{ aliUid }}' tenant_clusterid: '{{ tenantClusterId }}' tenant_token: '{{ tenantToken }}' tenant_cloudproductcode: '{{ tenantCloudProductCode }}' - Name: '{{ serviceInstanceId }}' ClusterId: Fn::If: - Condition: CreateACKCondition - Ref: ManagedKubernetesCluster - Ref: ClusterId
重要服务商的应用要部署在上述创建的命名空间下,才能实现应用的监控指标分发到租户。
(可选)如果是托管单租场景,ROS模板中要引用上述
AckArmsConfig
模块,为每个新创建的ACK集群配置Prometheus。(可选)如果是自定义监控指标,可以通过HTTP端口透出或者Exporter暴露,但暴露指标的
Service
也必须以{{ serviceInstanceId }}
命名, 且定义一个ServiceMonitor
用于服务发现,以下是通过mysqld-exporter采集MySQL监控指标时对应的Service
和ServiceMonitor
的示例。apiVersion: v1 kind: Service metadata: name: {{ serviceInstanceId }} labels: io.mysql.service: {{ serviceInstanceId }} spec: selector: app: mysql ports: - protocol: TCP port: 3306 targetPort: 3306 name: mysql - protocol: TCP port: 9104 targetPort: 9104 name: mysql-exporter type: LoadBalancer
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: prometheus-service-monitor annotations: arms.prometheus.io/discovery: 'true' labels: prometheus-service-monitor: prometheus-service-monitor spec: selector: matchLabels: io.mysql.service: {{ serviceInstanceId }} namespaceSelector: matchNames: - {{ serviceInstanceId }} endpoints: - port: mysql-exporter scheme: http path: /metrics interval: 10s scrapeTimeout: 10s
步骤三:配置Grafana大盘
目前一个服务实例只支持展示一个大盘,如果服务商有多个大盘,需要将多个大盘组合成一个大盘,大盘需要满足一个规则:
设置大盘的一个固定变量为Namespace
,且大盘通过Namespace这个全局变量筛选各个应用的监控指标。在阿里云托管版的Grafana创建大盘,得到此大盘的链接。
步骤四:配置产品标识和对应的大盘链接
托管版多租服务使用计算巢提供的Prometheus能力,需要设置服务标识和监控大盘信息:
服务标识:表示服务在监控系统中的唯一标识,目前cn-mariadb这个产品标识用于测试,所有服务共享使用该产品标识。目前cn-mariadb已开通杭州和中国香港两个地域,并支持在这两个地域下测试。
说明服务上线需要使用专用服务标识的,请加入文章开头的技术支持群获取技术支持。
监控大盘设置包括监控大盘标题和Grafana大盘链接,监控大盘信息与服务标识是对应关系,大盘链接为上述创建大盘的链接,大盘标题为上述配置的大盘的标题。
说明这里的配置目前需要一定的手工配置,请加入技术支持群获取支持。
下是示例服务中使用
cn-mariadb
产品标识的配置信息。
步骤五:配置告警
访问ARMS-Prometheus监控控制台,创建Prometheus告警规则模板。具体操作,请参见创建Prometheus告警规则模板。
创建完成后,在控制台的网络请求中获取TemplateId,获取方式如下图所示。
重要只有在图中①处,通过筛选搜索才会出现②处的请求。
ROS模板中编排告警模板,通过ALIYUN::ARMS::ApplyAlertRuleTemplate资源将此告警模板应用到ACK集群中,即可实现在ACK集群中创建对应的告警规则,ROS模板示例如下所示。
ROSTemplateFormatVersion: '2015-09-01' Description: en: ApplyAlertRule zh-cn: ApplyAlertRule Parameters: ClusterIds: AssociationPropertyMetadata: Parameter: Required: true Type: String Description: en: The ID of the Prometheus Instance. Description: en: The IDs list of Prometheus Instances. Default: Null MinLength: 1 Required: false MaxLength: 100 AssociationProperty: List[Parameter] Type: Json TemplateIds: AssociationPropertyMetadata: Parameter: Required: true Type: String Description: en: The ID of the Prometheus alert rule template. Description: en: The IDs list of Prometheus alert rule templates. Default: Null MinLength: 1 Required: false MaxLength: 100 AssociationProperty: List[Parameter] Type: Json Resources: ApplyAlertRuleTemplate: Type: ALIYUN::ARMS::ApplyAlertRuleTemplate Properties: ClusterIds: Ref: ClusterIds TemplateIds: Ref: TemplateIds
步骤六:查看监控
服务实例部署完成后,用户侧和服务商侧均能在服务实例详情页查看监控大盘。
用户侧:
服务商侧: