私有部署服务支持Prometheus监控功能,服务创建者和用户都可以通过该功能查看资源和应用的监控大盘、获取具体监控数据。本文介绍私有部署服务如何接入阿里云托管的Prometheus监控。
背景信息
Prometheus监控是阿里云可观测监控Prometheus版服务提供的管理Prometheus数据采集和数据存储分析的逻辑单元,每个Prometheus实例提供对应的Prometheus数据采集配置、时序数据库实例、Dashboard监控大盘和报警配置等。更多信息,请参见什么是可观测监控 Prometheus 版。
准备工作
创建支持Prometheus监控功能的私有部署服务前,需要先完成集成组件和RemoteWrite Prometheus实例的创建。
创建集成组件。
服务商提供Prometheus的接入信息给到计算巢技术支持(技术支持钉钉群:31045016300),由计算巢技术支持创建一个该服务的Prometheus集成组件。接入信息填写的内容,请参见计算巢服务:接入阿里云Prometheus的配置文档(ISV填写)。
重要创建完成后,技术支持会提供该组件的名称和配置参数,请妥善保存,在后续创建服务时,需要填写。
创建RemoteWrite Prometheus实例。
服务商在服务商账号下启用ARMS服务并在ARMS控制台创建RemoteWrite Prometheus实例。关于创建RemoteWrite Prometheus实例的详细操作,请参见Prometheus实例 for 通用。
说明RemoteWrite Prometheus实例创建完成后,您需要复制并保存生成的Remote Write内网地址。
服务商可以为每个服务创建一个RemoteWrite Prometheus实例,也可以所有服务共用一个RemoteWrite Prometheus实例,计算巢对服务和Prometheus实例的映射关系不做限制。
创建支持Prometheus监控功能的私有部署服务
登录计算巢控制台。
在左侧导航栏中,选择我的服务,并在我的服务页面中选择我创建的服务,然后单击创建新服务。
在创建新服务页面,选择私有部署服务并设置服务信息。
此处只列举自定义运维需要特别配置的参数,其他参数,请参见创建私有部署服务。
在录入模板的模板内容区域,填写模板内容。模板内容的详细信息,请参见模板示例。
用户在创建服务实例时需要在安全组中开放Prometheus实例采集数据的端口,Prometheus实例才能拉取数据。因此,在填写服务模板时,必须包含安全组且在安全组的入方向需要添加如下两个规则:
正向访问端,需要开启内网访问的端口,源地址是VPC的CIDR Block。
反向访问端,用于Prometheus控制台访问Agent,源地址是固定的100.64.0.0/10。
安全组模板示例如下:
SecurityGroup: Type: ALIYUN::ECS::SecurityGroup Properties: SecurityGroupName: securityGroup VpcId: Ref: VpcId SecurityGroupIngress: - PortRange: '-1/-1' Priority: 1 IpProtocol: all SourceCidrIp: 192.168.0.0/24 NicType: intranet - PortRange: '-1/-1' Priority: 1 IpProtocol: all SourceCidrIp: 100.xx.x.x/10 NicType: intranet
若需要用户创建新的VPC,则需要在模板中增加ALIYUN::ARMS::ManagedPrometheus类型的资源。若需要用户选择已有VPC,则模板中无需增加资源。更多信息,参见ALIYUN::ARMS::ManagedPrometheus。
在运维区域,选中需要用户授权,并选择全部权限或监控权限。
说明只有用户授予全部权限或监控权限后,服务商才可以查看用户的监控数据。
在监控区域的Prometheus监控处,启用Prometheus监控功能。
在集成组件名称处,填写计算巢技术支持在创建集成组件时提供的组件名称。
在集成组件配置参数处,填写准备工作步骤1中计算巢技术支持提供的集成组件配置参数内容。
在RemoteWrite地址处,选择RemoteWrite配置地域并填写准备工作步骤2中创建的RemoteWrite内网地址。
说明RemoteWrite配置所选地域必须包含在部署地域中。
服务商需要在每个部署地域下至少创建一个Prometheus RemoteWrite实例,只有设置了Remote Write地址的部署地域才能看到监控数据。
单击创建服务,并在弹出的确认弹窗中单击确定。
创建完成后,可以在服务详情页查看Prometheus监控配置。除了在创建服务时填写的配置外,还包括自动为服务商创建的该服务对应的Grafana大盘链接,通过此链接可查看Remote Write实例中的Grafana大盘。
创建并查看服务实例
以用户的身份创建和查看服务实例来验证服务的Prometheus监控功能。
创建服务实例。
此处只列举需要特别配置的参数,创建服务实例的详细操作,请参见创建私有部署服务实例。
在Prometheus配置区域,打开启用开关,开启Prometheus监控功能。
说明用户侧是否启用该功能只对自身有影响,对服务侧的监控功能无影响。
Prometheus监控功能的计费方式为单独计费。详细信息,请参见计费概述。
单击下一步:确认订单,在信息确认界面,确认依赖检查信息。
查看服务实例
服务实例创建成功之后,在服务实例详情页可以查看Prometheus监控的相关配置。可以在此修改用户侧是否启用Prometheus监控,如果开启了Prometheus监控,可以通过查看大盘数据跳转到Grafana。
说明若服务升级后配置了Prometheus监控功能,在旧版本下创建的服务实例也支持升级到新版本,并自动为服务实例开启Prometheus功能。
模板示例
ROSTemplateFormatVersion: '2015-09-01'
Description:
en: Use the existing VPC、VSWitch, create 1 SLB, 2 ECS instances, and bind all ECS instances to the SLB.
zh-cn: 使用已有VPC、VSWitch,创建1个SLB、2个ECS实例,并将所有ECS实例绑定到SLB上。
Parameters:
ZoneId:
Type: String
AssociationProperty: ALIYUN::ECS::Instance::ZoneId
AssociationPropertyMetadata:
ComputeNestNetworkConfigZone: true
Label:
en: VSwitch Availability Zone
zh-cn: 交换机可用区
VpcId:
AssociationProperty: ALIYUN::ECS::VPC::VPCId
Type: String
Description:
en: Please search the ID starting with (vpc-xxx) from console-Virtual Private Cloud
zh-cn: 现有虚拟专有网络的实例ID
Label:
en: VPC ID
zh-cn: 专有网络VPC实例ID
VSwitchId:
AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
AssociationPropertyMetadata:
VpcId: ${VpcId}
ZoneId: ${ZoneId}
Type: String
Description:
en: Instance ID of existing business network switches, console-Virtual Private Cloud-VSwitches under query
zh-cn: 现有业务网络交换机的实例ID
Label:
en: VSwitch ID
zh-cn: 交换机实例ID
EcsInstanceType:
Type: String
Label:
en: Instance Type
zh-cn: 实例类型
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceChargeType: ${InstanceChargeType}
InstancePassword:
NoEcho: true
Type: String
Description:
en: Server login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)
zh-cn: 服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)
AllowedPattern: '[0-9A-Za-z\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$'
Label:
en: Instance Password
zh-cn: 实例密码
ConstraintDescription:
en: Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)
zh-cn: 长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)
MinLength: 8
MaxLength: 30
AssociationProperty: ALIYUN::ECS::Instance::Password
PayType:
Type: String
Label:
en: ECS Instance Charge Type
zh-cn: 付费类型
Default: PostPaid
AllowedValues:
- PostPaid
- PrePaid
AssociationProperty: ChargeType
AssociationPropertyMetadata:
LocaleKey: InstanceChargeType
PayPeriodUnit:
Type: String
Description:
en: The long cycle of purchasing resources. <br>Week is a Week and Month is a Month. <br> The default value is month.<br><b><font color='red'> When ECS instance types are PrePaid valid </b></font>
zh-cn: 购买资源时长的周期。<br>Week为周,Month为月<br>默认值为月<br><b><font color='red'>当ECS实例类型为PrePaid有效</b></font>
Label:
en: Pay Period Unit
zh-cn: 购买资源时长周期
Default: Month
AllowedValues:
- Month
- Year
AssociationProperty: PayPeriodUnit
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
PayPeriod:
Type: Number
Label:
en: Period
zh-cn: 购买资源时长
Default: 1
AllowedValues:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
AssociationProperty: PayPeriod
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
LoadBalancerSpec:
Type: String
AssociationProperty: ALIYUN::SLB::Instance::InstanceType
Label:
en: LoadBalancer Specifications
zh-cn: 负载均衡实例规格
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
Resources:
SecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName: securityGroup
VpcId:
Ref: VpcId
SecurityGroupIngress:
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
SourceCidrIp: 192.168.0.0/24
NicType: intranet
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
SourceCidrIp: 100.64.0.0/10
NicType: intranet
WaitCondition:
Type: ALIYUN::ROS::WaitCondition
Properties:
Count: 1
Handle:
Ref: WaitConditionHandle
Timeout: 300
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
Properties:
InstanceChargeType:
Ref: PayType
PeriodUnit:
Ref: PayPeriodUnit
Period:
Ref: PayPeriod
IoOptimized: optimized
SystemDiskCategory: cloud_essd
SystemDiskSize: 200
DiskMappings:
- Category: cloud_essd
Size: 200
VpcId:
Ref: VpcId
ZoneId:
Ref: ZoneId
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitchId
MaxAmount: 2
ImageId: centos_7
InstanceType:
Ref: EcsInstanceType
Password:
Ref: InstancePassword
AllocatePublicIP: false
UserData:
Fn::Sub:
- |
#!/bin/bash
# 挂盘到/disk1
cat >> /root/InitDataDisk.sh << "EOF"
#!/bin/bash
echo "p
n
p
w
" | fdisk -u /dev/vdb
EOF
/bin/bash /root/InitDataDisk.sh
rm -f /root/InitDataDisk.sh
rm -f InitDataDisk.sh
mkfs -t ext4 /dev/vdb1
cp /etc/fstab /etc/fstab.bak
mkdir /disk1
echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\\\"//g'` /disk1 ext4 defaults 0 0 >> /etc/fstab
mount -a
# 这里配置安装脚本
yum install -y nginx
# 配置启动脚本
systemctl start nginx.service
# 执行成功回调WaitCondition结束waitCondition的等待
${CurlCli} -d "{\"Data\" : \"Success\", \"status\" : \"SUCCESS\"}"
- CurlCli:
Fn::GetAtt:
- WaitConditionHandle
- CurlCli
Slb:
Type: ALIYUN::SLB::LoadBalancer
Properties:
VpcId:
Ref: VpcId
VSwitchId:
Ref: VSwitchId
LoadBalancerName:
Fn::Join:
- '-'
- - slb
- Ref: ALIYUN::StackName
PayType:
Ref: PayType
PricingCycle:
Ref: PayPeriodUnit
Duration:
Ref: PayPeriod
AddressType: intranet
LoadBalancerSpec:
Ref: LoadBalancerSpec
AutoPay: true
EipSlbAddress:
Type: ALIYUN::VPC::EIP
Properties:
Name:
Ref: ALIYUN::StackName
InternetChargeType: PayByTraffic
Bandwidth: 100
EipSlbAddressAssociation:
Type: ALIYUN::VPC::EIPAssociation
Properties:
InstanceId:
Ref: Slb
AllocationId:
Ref: EipSlbAddress
SlbBackendServerAttachment:
DependsOn:
- EcsInstanceGroup
Type: ALIYUN::SLB::BackendServerAttachment
Properties:
BackendServerList:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
LoadBalancerId:
Ref: Slb
BackendServerWeightList:
- 100
- 100
SlbListener:
DependsOn:
- Slb
Type: ALIYUN::SLB::Listener
Properties:
Persistence:
CookieTimeout: 60
StickySession: 'on'
PersistenceTimeout: 180
XForwardedFor: 'off'
StickySessionType: insert
ListenerPort: 80
Bandwidth: -1
HealthCheck:
HttpCode: http_2xx,http_3xx,http_4xx,http_5xx
HealthCheckType: tcp
UnhealthyThreshold: 3
Timeout: 5
HealthyThreshold: 3
Port: 80
URI: /
Interval: 2
LoadBalancerId:
Ref: Slb
BackendServerPort: 80
Protocol: tcp
Outputs:
Endpoint:
Description:
zh-cn: 对外暴露的公网IP地址
en: Public IP Addresses
Value:
Fn::Sub:
- http://${ServerAddress}
- ServerAddress:
Fn::GetAtt:
- EipSlbAddress
- EipAddress
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- ZoneId
Label:
default:
zh-cn: 可用区配置
en: Zone Configuration
- Parameters:
- VpcId
- VSwitchId
Label:
default:
zh-cn: 选择已有基础资源配置
en: Choose existing Infrastructure Configuration
- Parameters:
- PayType
- PayPeriodUnit
- PayPeriod
Label:
default:
en: PayType Configuration
zh-cn: 付费类型
- Parameters:
- EcsInstanceType
- InstancePassword
Label:
default:
en: Instance Configure
zh-cn: ECS实例配置
- Parameters:
- LoadBalancerSpec
Label:
default:
en: SLB Configure
zh-cn: 负载均衡配置