容器监控服务集成了阿里云云监控服务,为您提供涵盖容器、应用、集群、节点的监控与告警服务,满足了容器监控的基本需求。但是在很多业务场景中,您可能需要自定义监控以满足您系统和应用的监控需求,所以容器监控服务在基础监控能力以外,还提供了两种自定义监控方式来允许您通过自己编写数据采集脚本或者自己暴露 HTTP 监控数据接口来上报自定义的监控数据。容器服务监控框架会按照每分钟采集一次的频率来执行脚本或者调用 HTTP 接口来采集数据。

前提条件

使用自定义监控功能之前,您必须将容器监控服务与第三方监控方案进行集成 (详细信息参见第三方监控方案集成)。

Note
目前,容器服务监控集成默认只支持 InfluxDB 和 Prometheus。

您的自定义监控数据会上报给您的 InfluxDB 或 Prometheus,然后再对接您的数据展示和分析服务。

使用自定义监控脚本上报监控数据

  1. 构建 Docker 镜像,在镜像中添加自定义的数据采集脚本。

    采集脚本的输出数据必须遵守 InfluxDB 的数据格式协议,如下所示。

    weather,location=us-midwest temperature=82 1465839830100400200
    |    -------------------- --------------  |
    |             |             |             |
    |             |             |             |
    +-----------+--------+-+---------+-+---------+
    |measurement|,tag_set| |field_set| |timestamp|
    +-----------+--------+-+---------+-+---------+

    更详细的数据格式协议,参见 InfluxDB 数据协议 Line Protocol

  2. 登录容器服务管理控制台,使用编排模板创建应用,使用aliyun.monitoring.script标签声明监控服务用于采集数据的脚本。

    示例模板如下所示:

    custom-script:
    image: '您自己的镜像仓库地址'
    labels:
           aliyun.monitoring.script: "sh gather_mem.sh"

    aliyun.monitoring.script 定义了监控服务执行应用容器内什么命令来收集监控数据。对应的 label 配置方式如下所示。

    labels:
        aliyun.monitoring.script: "执行脚本的命令"
  3. 打开 InfluxDB 的 web 端管理界面,查看以数据指标名称为表名的数据库表。

    有关如何查看数据库表,参见第三方监控方案集成中的相关信息。

使用自定义 HTTP 监控数据接口采集数据

  1. 构建 Docker 镜像,在应用中对外暴露 HTTP 接口。

    该接口输出监控数据。您可以自定义监控数据的格式,只需符合 JSON 语法即可。此外,由于系统不能分辨自定义的 HTTP 接口返回的 JSON 数据中哪些是数据指标字段,哪些是数据指标的元数据标签,所以您还需要另外一个配置项来指明 JSON 数据中哪些数据的属性是 tag。具体可参考 Telegraf JSON 数据格式

  2. 登录容器服务管理控制台,使用编排模板创建应用。您需要在模板中填加 aliyun.monitoring.http 标签来声明采集数据的接口,使用 aliyun.monitoring.tags: "您自己的 tag 属性名 1, 您自己的 tag 属性名 2, ……" 声明 HTTP 数据接口返回的数据字段中哪些的属性是 tag。

    参考模板:

    nodejsapp:
    command: "bash /run.sh"
    ports:
          - "3000:3000" 
    image: '您自己的镜像仓库地址'
    labels:
           aliyun.monitoring.http: "http://container:3000/metrics/data"
           aliyun.monitoring.tags: "tag1,tag2"

    nodejsapp应用对外暴露的数据接口 http://container:3000/metrics/data 返回的数据如下所示:

    {
    "tag1": "tag1value",
    "tag2": "tag2value",
    "field1": 1,
    "field2": 2,
    "field3": true,
    "field4": 1.5
    }

    使用 aliyun.monitoring.tags: "tag1,tag2" 定义上报的 JSON 数据中,tag1 属性和 tag2 属性为上报数据的 tag。

  3. 打开 InfluxDB 的 web 端管理界面,查看以 httpjson_ 前缀加容器名称为表名的数据库表。

    例如,容器名称为 nodejsapp_nodejsapp_1,则 InfluxDB 中数据库表的表名为 httpjson_nodejsapp_nodejsapp_1

    有关如何查看数据库表,参见第三方监控方案集成中的相关信息。