为部署在容器服务Kubernetes版中的PHP应用安装ARMS PHP Agent后,即可对PHP应用进行应用拓扑、调用链路追踪、异常事务和慢事务监控及SQL分析等监控。本文介绍如何为容器服务Kubernetes版PHP应用安装Agent。

获取应用监控License Key

请在ARMS控制台获取应用的License Key,后续步骤中将会用到。

  1. 登录ARMS控制台
  2. 在左侧导航栏选择应用监控 > 应用列表,在顶部菜单栏选择目标地域,然后在应用列表页面右上角单击接入应用
  3. 接入应用页面顶部复制License Key。
    应用监控LicenseKey

安装ARMS应用监控组件

按照以下步骤安装ARMS应用监控组件ack-arms-pilot。

  1. 登录容器服务Kubernetes版控制台
  2. 在左侧导航栏选择市场 > 应用目录,在右侧页面单击ack-arms-pilot
  3. 应用目录 - ack-arms-pilot页面上,在右侧的创建面板中选择目标集群,并单击创建

为容器服务Kubernetes版授权

接下来要为容器服务Kubernetes版授予ARMS资源的访问权限。

  1. 使用主账号登录容器服务Kubernetes版控制台
  2. 在左侧导航栏选择集群 > 集群,在集群列表页面上的目标集群右侧操作列单击管理
    Manage Cluster
  3. 在目标集群的集群信息页面上单击集群资源页签,然后单击Worker RAM角色右侧的链接。
    Worker RAM Link
  4. 在访问控制RAM控制台的RAM角色管理页面上,单击权限管理页签上的目标权限策略名称。
  5. 策略内容页签上单击修改策略内容,并在右侧的修改策略内容面板将以下内容添加到策略内容中,最后单击确定
    {
       "Action": "arms:*",
       "Resource": "*",
       "Effect": "Allow"
    }
    Modify RAM Authorization

安装Hercules Deploy组件上报PHP应用数据

  1. 在本地新建一个YAML文件并命名为hercules.yaml,然后将以下内容拷贝至该YAML文件中。
    apiVersion: v1
    kind: Namespace
    metadata:
      name: arms-pilot
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: arms-hercules
      namespace: arms-pilot
      labels:
        app: arms-hercules
    spec:
      replicas: 2
      strategy:
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 1
      selector:
        matchLabels:
          app: arms-hercules
      template:
        metadata:
          labels:
            app: arms-hercules
        spec:
          containers:
            - name: arms-hercules
              image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-hercules:v1.0
              imagePullPolicy: Always
              command: [ "/root/hercules" ]
              args:
                - '-d'
              resources:
                requests:
                  cpu: 2
                  memory: 2048Mi
                limits:
                  cpu: 2
                  memory: 2048Mi
              ports:
                - name: arms-hercules
                  containerPort: 11234
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: arms-hercules-service
      namespace: arms-pilot
    spec:
      type: ClusterIP
      ports:
        - port: 11234
          protocol: TCP
          targetPort: 11234
      selector:
        app: arms-hercules
          

    其中,您需要根据所在地域将YAML文件中的image的值替换为以下地址。

    地域 下载地址
    杭州
    registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-hercules:v1.1
    上海
    registry.cn-shanghai.aliyuncs.com/arms-docker-repo/arms-hercules:v1.1
    青岛
    registry.cn-qingdao.aliyuncs.com/arms-docker-repo/arms-hercules:v1.1
    北京
    registry.cn-beijing.aliyuncs.com/arms-docker-repo/arms-hercules:v1.1
    张家口
    registry.cn-zhangjiakou.aliyuncs.com/arms-docker-repo/arms-hercules:v1.1
    深圳
    registry.cn-shenzhen.aliyuncs.com/arms-docker-repo/arms-hercules:v1.1
    香港
    registry.cn-hongkong.aliyuncs.com/arms-docker-repo/arms-hercules:v1.1
    新加坡
    registry.ap-southeast-1.aliyuncs.com/arms-docker-repo/arms-hercules:v1.1
  2. 执行以下命令,安装Hercules Deploy组件。
    kubectl create -f hercules.yaml
    说明 如果执行命令后提示Namespace已存在,请忽略。

为PHP应用开启ARMS应用监控

  1. 容器服务Kubernetes版控制台左侧导航栏选择应用 > 无状态
  2. 无状态(Deployment)页面右上角单击使用模板创建
  3. 使用模板创建页面上选择集群命名空间示例模板,并在模板(YAML格式)中将以下annotations添加到spec > template > metadata层级下。
    annotations:
      armsPilotAutoEnable: "on"
      armsPilotCreateAppName: "<your-deployment-name>"
      armsAppType: PHP                                
    说明 请将<your-deployment-name>替换为您的应用名称。
  4. (本步骤仅限首次安装时)在和您的应用相同的命名空间下,创建arms-<yourAppName>.ini ConfigMap文件,并将以下内容复制至该文件中。
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: arms-<yourAppName>.ini
      namespace: <yourAppNamespace>
    data:
      arms.ini: |
        extension=/usr/local/arms/arms-php-agent/arms-[x.y].so
        [ARMS]
        arms.enable=1
        arms.app_name=<yourAppName>
        arms.license_key=<yourLicenseKey>
        arms.agent_env=PHPK8S
        arms.network_type=tcp
        arms.tcp_host=arms-hercules-service.arms-pilot
        arms.tcp_port=11234
    说明
    • 请将<yourAppName>替换为您的应用名称。
    • 请将<yourAppNamespace>替换为您应用所在的命名空间。
    • 请将<yourLicenseKey>替换为您在ARMS控制台的接入应用页面获取的LicenseKey。
    • extension=/usr/local/arms/arms-php-agent/arms-[x.y].so配置中,arms-[x.y].so[x.y]为PHP应用的版本,支持的版本值为5.4、5.5、5.6、7.0、7.1、7.2和7.3。
    • 如果您的容器镜像是Alpine Linux系统,请将arms-[x.y].so改为arms-[x.y]-alpine.so,其中[x.y]支持的版本值为5.5、5.6、7.0、7.1、7.2和7.3。
    • 该ConfigMap文件与应用属于一一对应关系,如果需要接入其他应用,请重新创建一份单独的配置,并在不需要使用时删除该文件。
  5. arms-<yourAppName>.ini ConfigMap配置项添加到应用Deploymentspec > template > spec > containers配置下,将mountPath设置为PHP配置文件扫描目录路径。
    volumeMounts:
    - mountPath: /etc/php/7.2/fpm/conf.d/arms.ini
      name: arms-ini
      subPath: arms.ini

    其中/etc/php/7.2/fpm/conf.d/为PHP应用的配置加载目录地址,接着在spec > template > spec > volumes下添加以下内容。

    volumes:
    - name: arms-ini
      configMap:
        name: arms-<yourAppName>.ini
    说明 如果PHP没有配置文件扫描路径,请将arms-<yourAppName>.ini配置项内容合并到应用的php.ini中。
    容器服务Kubernetes版控制台无状态(Deployment)有状态(StatefulSet)页面上,如果目标应用的操作列出现ARMS控制台按钮,则表示Agent安装成功。ARMS Console Button
    说明操作列没有出现ARMS控制台按钮,请检查您是否已授权容器服务访问ARMS资源。

卸载Agent

  1. 可选:如果需要临时暂停Agent,则将步骤5添加的ConfigMap文件删除,然后再重新部署应用即可。
  2. 如果需要卸载Agent,则删除步骤2添加的Hercules Deploy组件和步骤5添加的ConfigMap文件。

更多信息

若您还有其他问题,可加入我们的钉钉答疑群:23328286。