AWS CloudWatch 是一项由 Amazon Web Services 提供的监控和管理服务,用于收集和追踪运行在 AWS 云中的各种资源和应用程序的指标。它可以帮助用户实时监控其 AWS 环境的性能、资源使用情况、以及应用程序的日志,从而有效管理和优化云中的应用程序和基础设施。
以下是 AWS CloudWatch 的主要功能:
监控指标: CloudWatch 提供了监控 AWS 资源的各类指标,例如 EC2 实例的 CPU 使用率、内存、磁盘 I/O、网络流量等。用户还可以自定义指标,用于跟踪自定义应用程序的数据。
日志管理: CloudWatch Logs 可帮助用户收集、存储和分析应用程序日志以及其他系统日志。用户可以设置日志过滤规则,快速搜索和分析日志信息,以便在应用程序出现问题时快速找到原因。
设置警报 (Alarms): 用户可以在 CloudWatch 中设置警报规则,当某个监控指标超出指定的阈值时,CloudWatch 可以自动触发警报,并通过电子邮件、短信或自动执行操作(例如自动扩展资源、执行 Lambda 函数等)来响应。
自动化操作: 借助 CloudWatch Events 和 CloudWatch Alarms,用户可以自动响应云中发生的事件。通过将 CloudWatch 与 AWS Lambda 等服务结合,用户可以在触发指定事件时执行自定义操作。
CloudWatch Dashboards: 用户可以创建自定义仪表盘,实时查看关键指标,帮助团队更好地了解系统状态,并能够根据这些数据进行优化。
与其他 AWS 服务的集成: CloudWatch 无缝集成了其他 AWS 服务,如 EC2、RDS、Lambda、DynamoDB 等,帮助用户集中管理和监控所有 AWS 资源。
总体而言,AWS CloudWatch 是一种强大的工具,它帮助企业和开发者在 AWS 云环境中高效监控、管理和优化其应用程序和基础设施的性能。
AWS CloudWatch 的工作原理涉及对 AWS 资源和应用程序的性能和操作数据的收集、存储、分析和响应。以下是 CloudWatch 的核心工作原理步骤:
收集数据(Metrics & Logs Collection)
指标(Metrics):CloudWatch 会自动从 AWS 资源(如 EC2、RDS、Lambda 等)收集基础性能数据,例如 CPU 使用率、磁盘 I/O、内存使用率等。用户还可以通过 API 或 AWS SDK 提交自定义指标,以监控应用程序的特定行为。
日志(Logs):应用程序和系统日志(如 Lambda 函数日志、EC2 系统日志)也可以通过 CloudWatch Logs 收集。开发者可以将日志流发送到 CloudWatch Logs,并设置规则进行筛选和分析。
数据存储与管理(Data Storage & Management)
CloudWatch 会将所有的监控指标和日志存储在其专有的数据存储系统中。指标通常会根据预设的时间粒度(如一分钟或五分钟)进行存储,并允许用户定义存储时长。
日志数据则可以按需求设定存储期限或通过设置保留策略来控制。
分析与处理(Analysis & Processing)
指标分析:CloudWatch 可以分析各种资源的性能趋势和历史数据,帮助用户了解资源的使用情况。用户还可以创建自定义视图(Dashboards),以可视化这些数据。
日志处理:用户可以通过过滤器搜索日志中的关键字或特定模式,从中提取有用的信息。还可以设置触发条件,当检测到特定的日志事件时自动执行操作。
警报与通知(Alarms & Notifications)
用户可以为某些指标设置警报(Alarms),当指标超出预定义的阈值时,CloudWatch 会触发警报。警报可以集成通知系统,如 Amazon SNS(Simple Notification Service),从而通过电子邮件、短信等方式提醒用户。
这些警报不仅可以通知用户,还可以自动执行某些操作,例如启动/停止 EC2 实例、调用 AWS Lambda 函数或自动缩放服务。
自动响应(Automated Actions)
CloudWatch Events 和 CloudWatch Alarms 支持自动触发响应。例如,当特定条件达到时,CloudWatch 可以自动执行修复操作、扩展/缩减资源,或者将事件发送到其他 AWS 服务。
与 AWS Lambda 集成:当某些指标超出阈值或出现特定事件时,CloudWatch 可以触发 Lambda 函数来自动执行操作。
可视化与报告(Visualization & Reporting)
CloudWatch 提供了仪表盘功能(Dashboards),用户可以通过图表和表格实时查看多个资源的关键指标和日志数据。用户可以根据实际需求定制仪表盘,以展示最关心的性能和运行状态。
日志和指标也可以用于生成报告,帮助管理者做出基于数据的决策。
工作流程示例:
这种流程确保了系统的高可用性和可靠性,同时减少了用户手动监控和干预的需求。
常见的方法包括使用 AWS Lambda、CloudWatch Logs Agent 和 CloudWatch Logs API。下面是将日志发送到 CloudWatch Logs 的几种方法及详细步骤:
当你在 AWS Lambda 中使用 console.log(或其他日志方法如 console.error、console.warn)时,AWS Lambda 会自动将这些日志流发送到 CloudWatch Logs,并为每个 Lambda 函数创建一个单独的日志组。
步骤:
exports.handler = async (event) => {
// 使用 console.log 输出日志
console.log("Lambda 函数已被调用!");
console.info("信息级别日志");
console.warn("警告级别日志");
console.error("错误级别日志");
// 返回响应
return {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
};
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
}
]
}
部署并运行 Lambda 函数后,日志将自动发送到 CloudWatch Logs。
查看日志:执行 Lambda 后,可以通过 AWS CloudWatch 控制台查看自动生成的日志流。你会看到一个与 Lambda 函数同名的日志组。例如,如果 Lambda 函数名称是 myLambdaFunction,日志组会显示为 /aws/lambda/myLambdaFunction。点击日志组,然后选择一个日志流(对应于每次函数执行时生成的日志记录)。
对于 EC2 实例或本地服务器,开发者可以使用 CloudWatch Logs Agent 将系统日志或应用日志发送到 CloudWatch Logs。CloudWatch Logs Agent 支持自动收集和推送日志。
步骤:
# 下载 CloudWatch Logs Agent 安装脚本
curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
# 运行安装脚本
sudo python ./awslogs-agent-setup.py --region us-west-2
[general]
state_file = /var/lib/awslogs/agent-state
[/var/log/syslog]
file = /var/log/syslog
log_group_name = MyLogGroup
log_stream_name = MyLogStream
datetime_format = %b %d %H:%M:%S
sudo service awslogs start
开发者可以使用 AWS SDK 或 CloudWatch Logs API 将自定义应用程序的日志发送到 CloudWatch Logs。常用的操作包括 CreateLogGroup、CreateLogStream 和 PutLogEvents。
步骤:
示例代码(Node.js):
import boto3
# 创建 CloudWatch Logs 客户端
logs_client = boto3.client('logs')
# 定义日志组和日志流
log_group_name = 'MyLogGroup'
log_stream_name = 'MyLogStream'
# 创建日志组(如果不存在)
logs_client.create_log_group(logGroupName=log_group_name)
# 创建日志流(如果不存在)
logs_client.create_log_stream(logGroupName=log_group_name, logStreamName=log_stream_name)
# 发送日志事件
logs_client.put_log_events(
logGroupName=log_group_name,
logStreamName=log_stream_name,
logEvents=[
{
'timestamp': int(time.time() * 1000),
'message': 'This is a log message'
},
]
)
除了 CloudWatch Logs Agent,CloudWatch Agent 是一个更通用的工具,支持从 EC2 实例、混合云(如本地服务器)中收集和发送日志以及系统指标到 CloudWatch。
步骤:
在 Amazon Linux 或 Amazon Linux 2 上安装
sudo yum install amazon-cloudwatch-agent
在 Ubuntu 上安装
sudo apt-get update
sudo apt-get install amazon-cloudwatch-agent
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/messages",
"log_group_name": "/aws/ec2/system-messages",
"log_stream_name": "{instance_id}"
}
]
}
}
},
"metrics": {
"append_dimensions": {
"InstanceId": "${aws:InstanceId}"
},
"metrics_collected": {
"cpu": {
"measurement": [
"cpu_usage_idle",
"cpu_usage_user",
"cpu_usage_system"
],
"totalcpu": false,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
]
}
}
}
}
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
-a fetch-config -m ec2 -c file:/path/to/cloudwatch-config.json -s
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
CloudWatch Logs Agent 和 CloudWatch Agent 都是用于将日志发送到 Amazon CloudWatch Logs 的工具,但它们有一些重要的区别,尤其是在功能和使用场景上。
CloudWatch Logs Agent 专门用于将日志文件从 EC2 实例或本地服务器发送到 CloudWatch Logs。它是一个较旧的工具,功能较为有限,仅支持日志文件的收集和发送。
CloudWatch Agent 是 CloudWatch Logs Agent 的升级版,功能更强大,支持更多的监控和日志收集需求。它不仅可以收集日志文件,还可以收集各种系统指标(如 CPU、内存、磁盘、网络等),并将这些数据发送到 CloudWatch。
主要区别:
功能 | CloudWatch Logs Agent | CloudWatch Agent |
---|---|---|
日志收集 | 只能收集并发送日志到 CloudWatch Logs | 可以收集日志并发送到 CloudWatch Logs |
系统性能指标监控 | 不支持 | 支持监控 CPU、内存、磁盘、网络等系统指标 |
支持的操作系统 | 仅支持 Linux 操作系统(如 Amazon Linux, Ubuntu) | 支持多种操作系统,包括 Linux 和 Windows |
混合环境支持 | 仅支持在 EC2 上运行 | 支持 EC2 实例和本地服务器 |
配置复杂度 | 相对简单,配置文件只涉及日志文件路径 | 配置更灵活,支持日志和系统指标监控的复杂需求 |
安装与管理 | 需要手动安装,适用于单一日志监控需求 | 支持通过 Amazon SSM 自动安装和配置,适合统一和自动化监控 |
发展现状 | 已逐步被 CloudWatch Agent 替代 | 推荐使用,适用于大多数日志和性能监控场景 |
总结:
CloudWatch Logs Agent:功能简单,只适合收集日志并发送到 CloudWatch Logs。如果你的需求仅限于日志收集,并且运行在 Linux 系统上,可以选择它,但 AWS 已经逐步不推荐使用。
CloudWatch Agent:是更强大的综合监控工具,推荐用于大多数场景。它不仅可以收集日志,还能监控系统性能指标,并且支持多个操作系统和混合云环境。
在新项目中,建议使用 CloudWatch Agent,因为它功能更强大且可以统一管理日志和性能监控。
CloudWatch Log Group 中的 Subscription Filters 是用于实时处理日志数据的机制。它允许您将 CloudWatch 日志数据流式传输到其他 AWS 服务或目的地,如 Amazon Kinesis、AWS Lambda、Amazon Elasticsearch Service 等,以便进行进一步的处理、分析或存储。
过滤模式用来定义哪些日志事件应被选中。可以使用简单字符串、JSON 模式或条件表达式。以下是一些例子: