1 背景

部署在阿里云 ECS 服务器上的 Java 进程因为 OOM 挂掉了。为了监控线上进程的健康状态,选用阿里云的云监控实现最基础的进程监控功能。

2 什么是云监控

云监控(CloudMonitor)是一项针对阿里云资源和互联网应用进行监控的服务。

云监控为云上用户提供开箱即用的企业级开放型一站式监控解决方案。云监控涵盖IT设施基础监控和外网网络质量拨测监控,是基于事件、自定义指标和日志的业务监控,为用户全方位提供更高效、全面、省钱的监控服务。使用云监控,不但可以帮助用户提升系统服务可用时长,还可以降低企业IT运维监控成本。

2.1 云监控成本

云监控的服务计费主要分为3类:

  1. 基础云监控;
  2. 企业云监控;
  3. 网络分析与监控。

aliyun-monitor-price

其中“基础云监控”包含“免费额度”:

  1. 短信报警:1000条/月;
  2. 查询监控数据API调用次数:100万次/月。

基本满足中小型系统的使用场景了。

aliyun-monitor-free

3 配置 ECS 云监控

云监控的配置相对复杂,需要:

  1. 安装 ECS 服务器的云监控插件;
  2. 配置云监控报警联系人;
  3. 打开 ECS 服务器的一键报警;
  4. 配置 ECS 的进程监控规则;

3.1 安装 ECS 云监控插件

一般新购 ECS 会自动安装云监控插件。如果没有,可以手动安装云监控插件。

登陆云监控控制台后,在左侧导航栏选择“云资源监控” -> “主机监控”。在主机监控页面单击目标主机对应的 Agent 状态列的图标,然后在“确认自动安装”对话框单击确定。等待大约5分钟,当插件状态由“安装中”变为“运行中”,即表示云监控插件安装成功。

aliyun-monitor-plugin

3.2 配置报警联系人

安装完云监控插件后,需要配置报警联系人。这样当监控规则被触发时,云监控会通过手机/邮件的方式,及时通知报警联系人处理问题。

aliyun-monitor-person

在左侧导航栏选择“报警服务” -> “报警联系人”。在报警联系人页面的“报警联系人” Tab,可以创建新联系人。报警联系人需要输入姓名、手机号码、邮箱等信息,其中邮箱需要验证激活(云监控会向邮箱发送激活邮件)。在“报警联系组” Tab,可以创建新联系组,并把之前创建的联系人放在组内管理。后续规则触发时,是根据“报警联系组”发送信息的。

注意:建议控制报警联系人的数量与质量,这样可以关闭右上角“数据脱敏”开关。当规则触发时,会有更详细信息发送出来,例如 ECS 实例 ID 等。更加方便定位问题。

3.3 配置一键报警

云监控最方便使用的报警功能就是“一键报警”。在左侧导航栏选择“报警服务” -> “一键报警”,在“一键报警”页面打开“云服务器 ECS”的“一键报警”开关,就实现了 ECS 最基本的4项监控报警功能:

  1. CPU使用率监控报警;
  2. 公网流出带宽使用率监控报警;
  3. 内存使用率监控报警;
  4. 磁盘使用率监控报警。

aliyun-monitor-oneclick

这4项监控报警的“通知对象”,就是之前配置的“报警联系组”。当 ECS 实例触发了报警后,配置的联系组中的每个人都会收到报警信息。

3.4 配置进程监控

除了简单的 ECS 一键监控外,云监控还为用户提供了自定义监控规则的能力。下面以 Java 进程为例,演示如何配置进程监控规则。

在左侧导航栏选择“云资源监控” -> “主机监控”,在“主机监控”页面会显示目前所有 ECS 实例列表。

aliyun-monitor-plugin

单击需要配置监控规则的 ECS 实例,进入监控详情页面。

aliyun-monitor-detail

选择上方的“进程监控” Tab,在“进程 TopN”中根据进程名称找到需要监控的 Java 进程,并复制进程名称。

aliyun-monitor-rule1

然后在“进程数监控”中,点击“添加进程监控” -> 粘贴复制的“进程名称”并增加。

aliyun-monitor-rule2

云监控会根据增加的“进程名称”,实时过滤当前符合该“进程名称”的进程数量,并显示出来。如图所示,有2个进程符合 Java 进程名称。

aliyun-monitor-rule3

有了进程数量,就可以根据数量设定报警规则了。点击右侧的 小铃铛 图标。在右侧弹出窗口中“设置规则描述”。

aliyun-monitor-rule4

  1. 填写自定义的规则名称,例如“Java进程数量监控”;
  2. 监控指标保持默认的“进程/当前进程数”;
  3. processName保持默认内容即可,就是之前过滤进程使用的“进程名称”;
  4. 重点是阈值及报警级别的配置。可以看到这里有3个级别:紧急、警告、普通。这里举例说明,把紧急级别设定为“连续10个周期”即10分钟,Java 进程数量的平均值“<(小于)”1个,就发出报警信息。一旦紧急级别的报警信息发出,就说明在过去的10分钟内这台 ECS 上的 Java 进程数量小于1个,可能已经挂掉了。同理,把警告级别设定为“连续3个周期”即3分钟,Java 进程数量的平均值“<(小于)”1个,就发出报警信息;把普通级别设定为“连续1个周期”即1分钟,Java 进程数量的平均值“<(小于)”1个,就发出报警信息。

设置完成后点击“确定”,进入“创建报警规则”窗口。

aliyun-monitor-rule5

在这个窗口可以复查“规则描述”。没有问题的话接着设置“报警联系人组”,可以选择3.2中设置的报警联系组。最后点击“确认”就完成了一条进程监控的配置。

已完成的监控报警规则,可以在“主机监控详情”页面的“报警规则” Tab 下查看。

aliyun-monitor-rule6

4 验证 ECS 云监控

完成 ECS 监控报警规则后,需要进行验证。一种方式是模拟触发规则报警的条件,这种形式的验证在生产环境操作比较危险,但真实。另一种方式是修改报警规则从而在正常情况下触发报警,这种形式相对安全,但缺乏真实规则的验证,只能验证报警链路是通畅的。

下面以 Java 进程监控为例,使用第二种方法验证报警链路是通畅的。可以把普通级别设定为“连续1个周期”即1分钟,Java 进程数量的平均值“<(小于)”3个,就发出报警信息。

aliyun-monitor-verify

修改配置并生效后,1分钟内就收到云监控的“普通级别”报警邮件了。

aliyun-monitor-result1

至此,基本确定之前配置的 Java 进程数量监控已生效。记得把验证规则改回去

aliyun-monitor-result2

阿里云的云监控会再次发出报警恢复的邮件。