私有部署服务接入Prometheus监控使用说明

私有部署服务支持Prometheus监控功能,服务创建者和用户都可以通过该功能查看资源和应用的监控大盘、获取具体监控数据。本文介绍私有部署服务如何接入阿里云托管的Prometheus监控。

背景信息

Prometheus监控是阿里云可观测监控Prometheus版服务提供的管理Prometheus数据采集和数据存储分析的逻辑单元,每个Prometheus实例提供对应的Prometheus数据采集配置、时序数据库实例、Dashboard监控大盘和报警配置等。更多信息,请参见什么是可观测监控 Prometheus 版

准备工作

创建支持Prometheus监控功能的私有部署服务前,需要先完成集成组件和RemoteWrite Prometheus实例的创建。

  1. 创建集成组件。

    服务商提供Prometheus的接入信息给到计算巢技术支持(技术支持钉钉群:31045016300),由计算巢技术支持创建一个该服务的Prometheus集成组件。接入信息填写的内容,请参见计算巢服务:接入阿里云Prometheus的配置文档(ISV填写)

    重要

    创建完成后,技术支持会提供该组件的名称和配置参数,请妥善保存,在后续创建服务时,需要填写。

  2. 创建RemoteWrite Prometheus实例。

    服务商在服务商账号下启用ARMS服务并在ARMS控制台创建RemoteWrite Prometheus实例。关于创建RemoteWrite Prometheus实例的详细操作,请参见Prometheus实例 for 通用

    说明
    • RemoteWrite Prometheus实例创建完成后,您需要复制并保存生成的Remote Write内网地址。

    • 服务商可以为每个服务创建一个RemoteWrite Prometheus实例,也可以所有服务共用一个RemoteWrite Prometheus实例,计算巢对服务和Prometheus实例的映射关系不做限制。

    内网地址

创建支持Prometheus监控功能的私有部署服务

  1. 登录计算巢控制台

  2. 在左侧导航栏中,选择我的服务,并在我的服务页面中选择我创建的服务,然后单击创建新服务

  3. 创建新服务页面,选择私有部署服务并设置服务信息。

    此处只列举自定义运维需要特别配置的参数,其他参数,请参见创建私有部署服务

    1. 录入模板模板内容区域,填写模板内容。模板内容的详细信息,请参见模板示例

      用户在创建服务实例时需要在安全组中开放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

    2. 运维区域,选中需要用户授权,并选择全部权限监控权限

      说明

      只有用户授予全部权限监控权限后,服务商才可以查看用户的监控数据。

      2023-11-14_10-59-01.png

    3. 监控区域的Prometheus监控处,启用Prometheus监控功能。

    4. 集成组件名称处,填写计算巢技术支持在创建集成组件时提供的组件名称。

    5. 集成组件配置参数处,填写准备工作步骤1中计算巢技术支持提供的集成组件配置参数内容。

    6. RemoteWrite地址处,选择RemoteWrite配置地域并填写准备工作步骤2中创建的RemoteWrite内网地址。

      说明
      • RemoteWrite配置所选地域必须包含在部署地域中。

      • 服务商需要在每个部署地域下至少创建一个Prometheus RemoteWrite实例,只有设置了Remote Write地址的部署地域才能看到监控数据。

      Prometheus监控

  4. 单击创建服务,并在弹出的确认弹窗中单击确定

    创建完成后,可以在服务详情页查看Prometheus监控配置。除了在创建服务时填写的配置外,还包括自动为服务商创建的该服务对应的Grafana大盘链接,通过此链接可查看Remote Write实例中的Grafana大盘。2023-11-14_11-02-16.png

创建并查看服务实例

以用户的身份创建和查看服务实例来验证服务的Prometheus监控功能。

  1. 创建服务实例。

    此处只列举需要特别配置的参数,创建服务实例的详细操作,请参见创建私有部署服务实例

    1. Prometheus配置区域,打开启用开关,开启Prometheus监控功能。

      说明
      • 用户侧是否启用该功能只对自身有影响,对服务侧的监控功能无影响。

      • Prometheus监控功能的计费方式为单独计费。详细信息,请参见计费概述

      Prometheus监控

    2. 单击下一步:确认订单,在信息确认界面,确认依赖检查信息。2023-11-14_11-29-55.png

  2. 查看服务实例

    服务实例创建成功之后,在服务实例详情页可以查看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: 负载均衡配置