应用监控与实例管理全解析
1. 自动扩展场景分析
在应用运行过程中,根据不同的需求和场景进行实例的自动扩展是非常重要的。下面我们来详细分析两种自动扩展场景。
1.1 自动扩展场景 3
此场景的具体步骤如下:
1. 一个 24/7 实例在线。
2. 平均 CPU 利用率达到 75% 并持续五分钟。
3. 满足向上扩展规则的阈值超时时间。
4. 启动一个基于负载的实例。
5. 忽略指标五分钟。
6. 恢复指标检查。平均 CPU 利用率为 63% 并持续五分钟。
7. 再次满足向上扩展规则的阈值超时时间。
8. 启动第二个基于负载的实例。
9. 忽略指标五分钟。
10. 恢复指标检查。平均 CPU 利用率为 25% 并持续十分钟。
11. 满足向下扩展规则的阈值超时时间。
12. 停止第二个基于负载的实例。
13. 忽略指标十分钟。
14. 恢复指标检查。平均 CPU 利用率为 23% 并持续十分钟。
15. 满足向下扩展规则的阈值超时时间。
16. 停止第一个基于负载的实例。
17. 一个 24/7 实例在线。
在这个场景中,基于负载的实例总共运行了 60 分钟,第一个运行了 45 分钟,第二个运行了 15 分钟。我们定义的自动扩展规则是向上扩展时添加一个实例,向下扩展时移除一个实例,这样可以根据需求灵活扩展,有效利用资源。同时,向上扩展和向下扩展的时间差异让我们在操作时更加谨慎,向上扩展后只需等待 5 分钟就可以再次记录指标进行扩展,而向下扩展则需要等待 10 分钟开始记录指标,并且要满足阈值 10 分钟才停止实例。
如果添加 100 个更多的实例并使用相同的扩展规则,在需求激增时,应用程序栈每 10 分钟会自动启动一个新实例,而实例每 15 - 20 分钟会下线一个。在极端需求情况下,这种响应速度可能不够快,此时可以将向上扩展的阈值超时时间减少到 1 分钟,忽略指标间隔也减少到 1 分钟。
1.2 自动扩展场景 4
该场景步骤如下:
1. 一个 24/7 实例在线。
2. 平均 CPU 利用率达到 75% 并持续一分钟。
3. 满足向上扩展规则的阈值超时时间。
4. 启动一个基于负载的实例。
5. 忽略指标一分钟。
6. 恢复指标检查。平均 CPU 利用率为 63% 并持续一分钟。
7. 满足向上扩展规则的阈值超时时间。
8. 启动第二个基于负载的实例。
9. 以此类推…
通过更激进的向上扩展规则,每两分钟就可以启动一个实例。向下扩展规则可以保持不变,这样在实例上线后,我们可以等待一段时间,确保事件结束后再减少资源。
2. 基于时间的实例
在 OpsWorks 中,还可以创建基于时间的实例。如果知道应用程序在某些特定时间流量会更高,就可以创建在这些高流量窗口自动启动和停止的实例。同样,如果知道某些时间段流量通常很少,也可以使用基于时间的实例来替代 24/7 实例。
结合使用 24/7 实例、基于时间的实例和基于负载的实例是运行应用程序最有效的方式,而且在 OpsWorks 中实现这种策略比手动操作要容易得多。24/7 实例用于基础资源,基于时间的实例用于高流量时段,基于负载的实例用于应对需求的增加。当基于时间的实例离线时,如果出现流量激增,基于负载的实例仍然可以响应。
添加基于时间的实例的操作步骤如下:
1. 使用 OpsWorks 中的导航菜单,在“实例”标题下选择“基于时间的实例”。
2. 点击“添加基于时间的实例”创建一个实例。
3. 选择任意可用区的 t1.micro 实例。
4. 点击“高级”,确保扩展类型设置为“基于时间”。
5. 点击“添加实例”进入“日程安排创建”视图。
在“日程安排创建”视图中,可以手动设置每个基于时间的实例的日程安排。界面很直观,只需选择一小时的时间块(UTC),实例将在这些时间段内在线。例如,点击 12 - 13 之间的框,实例将每天 UTC 时间 12 - 1 点运行。如果还希望实例在周五晚上 6 - 8 点 UTC 运行,点击“Fri”标签选择周五的日程安排,选择 18 - 19 和 19 - 20 的时间块即可。
3. 使用警报监控应用
在应用自动扩展的过程中,我们可能希望在扩展发生时得到通知,特别是当所有实例都在线时。目前没有 CloudWatch 指标可以直接跟踪当前 OpsWorks 实例的数量,但在 ELB 级别有两个非常有用的指标:健康主机和不健康主机,它们可以告诉我们连接到负载均衡器的实例的健康状态。
3.1 创建 ELB 警报
可以利用这些指标创建警报来通知我们应用程序的问题。创建 ELB 警报的步骤如下:
1. 从服务菜单中选择 EC2,在左侧导航栏的“网络与安全”标题下选择“负载均衡器”。
2. 如果只有一个负载均衡器,它会自动被选中;否则,手动选择。
3. 导航到“监控”选项卡,这里可以看到许多 CloudWatch 指标的图表。
4. 点击右侧的“创建警报”按钮。
5. 在弹出的模态视图中,将通知发送到 SNS 主题。在“每当”字段中,选择“平均”和“健康主机”,设置“是”为 >= 3(即 24/7 实例和基于负载的实例的总和),“至少”设置为 1 个连续的 1 分钟周期。
6. 可以更改警报名称,例如改为“Photoalbums - All instances online”,确认无误后点击“创建警报”。
这个警报在有一个基于负载的实例、一个基于时间的实例和一个 24/7 实例在线时会触发。创建警报后,会有一个模态窗口确认操作成功,其中有一个链接可以在 CloudWatch 仪表板中查看警报的详细信息。
3.2 创建不健康主机警报
点击“创建警报”按钮,将通知发送到相同的 SNS 主题。这次设置警报在平均“不健康主机” >= 1 时触发。为了让警报不那么敏感,可以设置为连续两个 1 分钟周期满足条件时触发。给警报命名,如“Photoalbums - 1 or more unhealthy hosts”,然后点击“创建警报”。
除了上述警报,还可以查看其他 ELB 指标,例如平均延迟指标可以跟踪实例响应请求的时间,为这个指标设置警报可以监控应用程序性能的下降。需要注意的是,在不使用完整的 CloudWatch UI 内联创建警报时,警报恢复到正常状态时不会收到通知。
4. RDS 警报设置
RDS 数据库有很多冗余和安全措施,如使用 Provisioned IOPS 预留更高的 I/O 容量,采用 Multi - AZ 部署在必要时将请求重定向到备份实例,还会定期自动快照备份数据库。但为了避免出现问题时措手不及,我们可以创建一些警报来通知 RDS 实例的事件。
创建 RDS 警报的步骤如下:
1. 导航到 RDS 仪表板,实例会自动被选中。
2. 点击顶部的“显示监控”。这里的嵌入式监控视图可以访问所选实例的 CloudWatch 指标,“创建警报”按钮在页面下方。
3. 查看指标,例如 CPU 利用率,大部分时间 CPU 利用率低于 40%,但有一次突然飙升到 100%。点击“创建警报”。
4. 设置警报在 CPU 利用率 > 60% 持续 1 分钟时通知我们。确认无误后点击“创建警报”返回 RDS。
除了 CPU 利用率,还有其他指标也可以创建警报,如读取 IOPS 或写入 IOPS 指标偏离正常模式时,可能意味着出现问题。我们需要分析这些指标的模式,在模式发生明显偏离时创建警报。
5. CloudWatch 日志设置
在 Node.js 本地开发时,我们习惯将日志直接打印到终端窗口,但在 OpsWorks 应用程序栈中无法这样做,需要使用 CloudWatch 日志。CloudWatch 日志可以在 AWS 控制台中对系统日志进行分组、存储和监控,虽然默认情况下未启用,但只需几个步骤即可启用。
5.1 设置 EC2 实例角色
在设置 CloudWatch 日志之前,应用程序栈中的实例需要对 CloudWatch 日志有完全权限。操作步骤如下:
1. 从服务菜单中选择 IAM,在左侧导航栏中点击“角色”,从列表中选择“aws - opsworks - photoalbums - ec2 - role”,这是分配给应用程序栈中每个实例的角色。
2. 在角色详细视图中,可以看到之前创建的允许实例访问 S3 和 SES 的策略。点击“附加策略”为 CloudWatch 日志创建另一个策略。
3. 选择“CloudWatchLogsFullAccess”托管策略,点击“附加策略”。策略文档如下:
{
"Version": "2012 - 10 - 17",
"Statement": [
{
"Action": [
"logs:*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
更新角色后,需要重启实例才能使更改生效。
5.2 使用 Chef 安装日志配置
为了将系统日志写入 CloudWatch 日志,需要在应用程序栈的每个实例上安装 Chef 食谱。Chef 是 OpsWorks 的核心技术,每个食谱包含一个或多个配置脚本。手动在每个实例上安装脚本非常困难,特别是在使用基于时间和基于负载的实例时。
安装食谱和脚本的步骤如下:
1. 在 OpsWorks 中导航到“栈”,点击右上角的“栈设置”。
2. 在页面中间的“配置管理”标题下,将“使用自定义 Chef 食谱”切换到“是”。
3. 选择食谱的位置,我们使用的自定义食谱可以从公共 URL 获取:https://s3.amazonaws.com/aws - cloudwatch/downloads/CloudWatchLogs - Cookbooks.zip,选择“Http 存档”作为存储库类型。
4. 点击底部的“保存”。
5. 导航到“层”,在“Node.js 应用服务器”下点击编辑食谱的链接。
6. 在食谱视图中,顶部是自动安装的内置 Chef 食谱,不可编辑。在“自定义 Chef 食谱”标题下,在“设置”右侧的文本框中输入“logs::config, logs::install”,然后点击右侧的“+”按钮。
7. 确认无误后,点击右下角的“保存”。
通过以上步骤,我们可以全面监控应用程序的运行状态,根据不同的需求灵活扩展实例,并及时发现和处理可能出现的问题。
下面是自动扩展场景 3 的流程图:
graph TD;
A[一个 24/7 实例在线] --> B[平均 CPU 利用率达 75% 持续五分钟];
B --> C[满足向上扩展阈值超时];
C --> D[启动一个基于负载的实例];
D --> E[忽略指标五分钟];
E --> F[恢复指标检查,CPU 利用率 63% 持续五分钟];
F --> G[再次满足向上扩展阈值超时];
G --> H[启动第二个基于负载的实例];
H --> I[忽略指标五分钟];
I --> J[恢复指标检查,CPU 利用率 25% 持续十分钟];
J --> K[满足向下扩展阈值超时];
K --> L[停止第二个基于负载的实例];
L --> M[忽略指标十分钟];
M --> N[恢复指标检查,CPU 利用率 23% 持续十分钟];
N --> O[满足向下扩展阈值超时];
O --> P[停止第一个基于负载的实例];
P --> Q[一个 24/7 实例在线];
自动扩展场景 4 的流程图:
graph TD;
A[一个 24/7 实例在线] --> B[平均 CPU 利用率达 75% 持续一分钟];
B --> C[满足向上扩展阈值超时];
C --> D[启动一个基于负载的实例];
D --> E[忽略指标一分钟];
E --> F[恢复指标检查,CPU 利用率 63% 持续一分钟];
F --> G[满足向上扩展阈值超时];
G --> H[启动第二个基于负载的实例];
H --> I[重复后续步骤...];
创建 ELB 警报和不健康主机警报的步骤可以总结在以下表格中:
| 警报类型 | 创建步骤 |
| ---- | ---- |
| ELB 健康主机警报 | 1. 选择 EC2,导航到负载均衡器;2. 选择负载均衡器,进入监控选项卡;3. 点击创建警报;4. 发送通知到 SNS 主题,设置平均健康主机 >= 3,至少 1 个连续 1 分钟周期;5. 更改警报名称,点击创建警报 |
| ELB 不健康主机警报 | 1. 点击创建警报;2. 发送通知到 SNS 主题,设置平均不健康主机 >= 1,可设置连续两个 1 分钟周期触发;3. 命名警报,点击创建警报 |
设置 CloudWatch 日志的步骤可以用以下列表总结:
1. 设置 EC2 实例角色,赋予 CloudWatch 日志完全权限。
2. 安装和配置 Chef 食谱,将系统日志写入 CloudWatch 日志。
- 在栈级别启用自定义 Chef 食谱。
- 选择食谱位置。
- 在层级别配置实例运行特定食谱。
应用监控与实例管理全解析
6. 综合实例管理策略优势
综合运用 24/7 实例、基于时间的实例和基于负载的实例,为应用程序的运行带来了显著的优势。下面通过一个表格来详细对比这三种实例类型的特点和适用场景:
| 实例类型 | 特点 | 适用场景 |
| ---- | ---- | ---- |
| 24/7 实例 | 持续在线,提供稳定的基础资源支持 | 用于支撑应用程序的基本运行,确保随时响应基础需求 |
| 基于时间的实例 | 根据预设的时间自动启动和停止,精准匹配高流量时段 | 在已知的高流量时间段,如特定工作日的高峰时段或促销活动期间,提供额外的资源支持 |
| 基于负载的实例 | 根据应用程序的实时负载情况动态启动和停止 | 应对突发的流量增长,如临时的热点事件导致的访问量激增 |
这种综合策略使得资源的利用更加高效,避免了资源的浪费。例如,在低流量时段,仅使用 24/7 实例维持基本运行,减少不必要的成本;而在高流量时段,基于时间的实例和基于负载的实例可以及时补充资源,确保应用程序的性能和稳定性。
7. 警报设置的优化与注意事项
在设置警报时,需要注意一些优化策略和细节,以确保警报能够准确、及时地发挥作用。
7.1 信号与噪音的平衡
创建警报时,关键在于保持良好的信号与噪音比。过多的警报可能会导致我们忽略真正重要的问题,因此应该只在必要时触发警报。例如,对于一些轻微的波动或短暂的异常情况,可以适当调整警报的阈值或持续时间,避免频繁触发警报。
7.2 考虑时间因素
在设置警报时,要充分考虑基于时间的实例的使用情况。因为基于时间的实例会影响健康主机的数量,所以在设置警报阈值时,需要将其纳入考虑范围。例如,如果有多个基于时间的实例在特定时间段上线,那么健康主机的警报阈值应该相应提高,以避免误报。
7.3 多维度监控
除了前面提到的 ELB 指标和 RDS 指标,还可以结合其他指标进行多维度的监控。例如,监控应用程序的响应时间、吞吐量等指标,以便更全面地了解应用程序的性能状况。可以设置相应的警报,当这些指标超出正常范围时及时通知我们。
8. 故障应对与恢复策略
尽管我们采取了各种监控和警报措施,但仍然可能会遇到一些故障。因此,制定有效的故障应对与恢复策略是非常必要的。
8.1 RDS 故障应对
对于 RDS 数据库,如果出现问题,我们可以利用之前设置的备份和恢复机制。例如,如果磁盘空间不足,可以增加数据库的磁盘空间;如果需要更换数据库实例,可以从快照中创建一个新的实例,并在 OpsWorks 中快速交换数据库凭证。
8.2 实例故障应对
当某个实例出现故障时,基于负载的实例可以自动调整,以弥补故障实例的影响。同时,警报会及时通知我们,我们可以手动进行干预,如重启故障实例或添加新的实例。
8.3 应用程序故障应对
如果应用程序因为代码异常而崩溃,它会自动重启。但如果多次出现异常,我们需要深入分析代码,找出问题所在并进行修复。同时,可以根据日志信息和警报提示,快速定位问题并采取相应的措施。
9. 持续优化与改进
应用程序的运行环境和用户需求是不断变化的,因此需要持续进行优化和改进。
9.1 指标分析与调整
定期分析监控指标,了解应用程序的性能趋势和资源使用情况。根据分析结果,调整自动扩展规则、警报阈值等设置,以适应不断变化的需求。例如,如果发现某个时间段的流量增长趋势明显,可以适当调整基于时间的实例的日程安排,提前启动更多的实例。
9.2 新技术与工具的应用
关注行业内的新技术和工具,适时引入到应用程序的监控和管理中。例如,采用更先进的日志分析工具,提高日志的处理和分析效率;或者使用自动化运维工具,进一步简化实例管理和故障处理的流程。
10. 总结
通过全面的应用监控和实例管理,我们可以确保应用程序的稳定运行,提高资源的利用效率,及时应对各种突发情况。从自动扩展场景的灵活配置,到基于时间的实例的精准安排,再到警报系统的有效设置和故障应对策略的制定,每一个环节都相互关联,共同构成了一个完整的应用管理体系。
在实际操作中,我们要根据应用程序的特点和需求,合理选择和配置各种实例类型和监控指标,不断优化和改进管理策略。同时,要注重团队成员的培训和技能提升,确保大家能够熟练掌握和运用这些工具和技术,为应用程序的成功运行提供有力的保障。
下面是一个综合的流程图,展示了从应用程序的监控到故障处理的整个流程:
graph LR;
A[应用程序运行] --> B[监控指标收集];
B --> C{指标是否异常};
C -- 是 --> D[触发警报];
D --> E[人工干预或自动调整];
E --> F{问题是否解决};
F -- 是 --> A;
F -- 否 --> G[深入分析问题];
G --> H[采取修复措施];
H --> A;
C -- 否 --> A;
综合实例管理策略的实施步骤可以总结为以下列表:
1. 确定应用程序的基础需求,配置 24/7 实例。
2. 分析应用程序的流量模式,设置基于时间的实例的日程安排。
3. 制定自动扩展规则,配置基于负载的实例。
4. 设置各种监控指标和警报,确保及时发现问题。
5. 建立故障应对和恢复策略,提高系统的稳定性和可靠性。
6. 定期分析监控数据,持续优化和改进管理策略。
通过以上的方法和策略,我们可以构建一个高效、稳定的应用程序运行环境,为用户提供优质的服务。
应用监控与实例管理全面解析
超级会员免费看

被折叠的 条评论
为什么被折叠?



