阿里云Ingress组件支持将您的所有HTTP请求日志记录到标准输出中。同时,阿里云打通Ingress组件访问日志服务与阿里云日志服务,从而您可以使用日志服务快速创建日志分析和监控大盘。本文介绍如何使用Ingress Dashboard与ARMS进行联动排查。

前提条件

实现Ingress Dashboard监控前,您需要先安装日志组件。以下为安装日志组件的两种方法:
  • 如果您还没有创建集群,您可以在创建集群时,选中使用日志服务安装Ingress 组件以及创建Ingress Dashboard
  • 如果您已创建集群,您需要在组件管理页面安装日志组件。更多信息,请参见通过日志服务采集Kubernetes容器日志

步骤一:查看Ingress日志与报表

  1. 登录日志服务控制台
  2. Project列表区域,选择创建集群时设置的日志Project,单击名称进入日志Project页面(默认创建的project名称为k8s-log-{cluster-id})。
  3. 在Project详情页面日志库页签下单击nginx-ingress左侧的仪表盘
    说明 名称为nginx-ingress的日志库(logstore)存放着所有的Ingress访问日志。
  4. 单击nginx-ingress下的可视化仪表盘,查看所有Ingress的分析报表。
    Ingress Dashboard包含Ingress概览、Ingress异常检测中心、Ingress访问中心、Ingress蓝绿发布中心、Ingress监控中心5个预置图表。以下重点介绍Ingress概览和Ingress蓝绿发布中心。关于其他预置图表的详细信息请参见Ingress访问日志分析与监控

    Ingress概览

    Ingress概览报表主要展示当前Ingress的整体状态,主要包括以下几类信息:

    • 整体架构状态(1天),包括PV、UV、流量、响应延迟、移动端占比和错误比例等。
    • 网站实时状态(1分钟),包括PV、UV、成功率、5XX比例、平均延迟和P95/P99延迟等。
    • 用户请求类信息(1天),包括1天/7天访问PV对比、访问地域分布、TOP访问省份/城市、移动端占比和Android/IOS占比等。
    • TOPURL统计(1小时),包括访问TOP10、延迟TOP10、5XX错误TOP10和404错误TOP10。
    Ingress概览

    Ingress蓝绿发布监控中心

    Ingress蓝绿发布监控中心主要用于版本发布时的实时监控与对比(版本前后对比以及蓝绿版本当前对比),以便您在服务发布时快速检测异常并进行回滚。在该报表中您需要选择进行对比的蓝绿版本(ServiceAServiceB),报表将根据您的选择动态显示蓝绿版本相关指标,包括PV、5XX比例、成功率、平均延迟、P95/P99/P9999延迟和流量等。

    监控中心

步骤二:为Java应用开启ARMS应用监控

在创建新应用的同时开启ARMS应用监控,请按以下步骤操作:

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,选择工作负载 > 无状态
  5. 无状态页面右上角单击使用YAML创建资源
  6. 选择示例模板,并在模板(YAML格式)中将以下annotations添加到spec / template / metadata层级下。
    说明 请将your-deployment-name替换为您的应用名称。
    annotations:
      armsPilotAutoEnable: "on"
      armsPilotCreateAppName: "<your-deployment-name>"                                
    YAML Example

    创建一个无状态(Deployment)应用并开启ARMS应用监控的完整YAML示例模板如下:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: arms-demo
    ---
    apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: arms-springboot-demo
      namespace: arms-demo
      labels:
        app: arms-springboot-demo
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: arms-springboot-demo
      template:
        metadata:
          annotations:
            armsPilotAutoEnable: "on"
            armsPilotCreateAppName: "arms-k8s-demo"
          labels:
            app: arms-springboot-demo
        spec:
          containers:
            - resources:
                limits:
                  cpu: 0.5
              image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
              imagePullPolicy: Always
              name: arms-springboot-demo
              env:
                - name: SELF_INVOKE_SWITCH
                  value: "true"
                - name: COMPONENT_HOST
                  value: "arms-demo-component"
                - name: COMPONENT_PORT
                  value: "6666"
                - name: MYSQL_SERVICE_HOST
                  value: "arms-demo-mysql"
                - name: MYSQL_SERVICE_PORT
                  value: "3306"
    ---
    apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: arms-springboot-demo-subcomponent
      namespace: arms-demo
      labels:
        app: arms-springboot-demo-subcomponent
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: arms-springboot-demo-subcomponent
      template:
        metadata:
          annotations:
            armsPilotAutoEnable: "on"
            armsPilotCreateAppName: "arms-k8s-demo-subcomponent"
          labels:
            app: arms-springboot-demo-subcomponent
        spec:
          containers:
            - resources:
                limits:
                  cpu: 0.5
              image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
              imagePullPolicy: Always
              name: arms-springboot-demo-subcomponent
              env:
                - name: SELF_INVOKE_SWITCH
                  value: "false"
                - name: MYSQL_SERVICE_HOST
                  value: "arms-demo-mysql"
                - name: MYSQL_SERVICE_PORT
                  value: "3306"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        name: arms-demo-component
      name: arms-demo-component
      namespace: arms-demo
    spec:
      ports:
        # the port that this service should serve on
        - name: arms-demo-component-svc
          port: 6666
          targetPort: 8888
      # label keys and values that must match in order to receive traffic for this service
      selector:
        app: arms-springboot-demo-subcomponent
    ---
    apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: arms-demo-mysql
      namespace: arms-demo
      labels:
        app: mysql
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mysql
      template:
        metadata:
          labels:
            app: mysql
        spec:
          containers:
            - resources:
                limits:
                  cpu: 0.5
              image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-demo-mysql:v0.1
              name: mysql
              ports:
                - containerPort: 3306
                  name: mysql
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        name: mysql
      name: arms-demo-mysql
      namespace: arms-demo
    spec:
      ports:
        # the port that this service should serve on
        - name: arms-mysql-svc
          port: 3306
          targetPort: 3306
      # label keys and values that must match in order to receive traffic for this service
      selector:
        app: mysql
    ---
    

步骤三:为示例服务配置Ingress

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,选择网络 > 路由
  5. 路由页面单击创建
  6. 创建对话框中设置路由,然后单击创建
    关于设置路由的详细操作,请参见创建Ingress路由

步骤四:使用Ingress Dashboard与ARMS进行联动排查

  1. 登录日志服务控制台
  2. Project列表区域,选择创建集群时设置的日志Project,单击名称进入日志Project页面(默认创建的project名称为k8s-log-{cluster-id})。
  3. 在Project详情页面,默认进入日志库页面。名称为nginx-ingress的日志库(logstore)存放着所有的Ingress访问日志。单击左侧导航栏中的可视化仪表盘
  4. 在仪表盘列表中单击Ingress概览V1.2
  5. Ingress概览V1.2页面找到Top10延迟URL,查看TOP10延迟URL。
  6. Ingress概览V1.2页面单击URL(ARMS排查),跳转到对应服务的ARMS监控链路查询页面。您可以在ARMS控制台查询对应服务的查询调用链路详细情况。
    ARMS排查