AWS 监控和管理服务 CloudWatch

什么是 CloudWatch

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 云环境中高效监控、管理和优化其应用程序和基础设施的性能。

CloudWatch 工作原理

AWS CloudWatch 的工作原理涉及对 AWS 资源和应用程序的性能和操作数据的收集、存储、分析和响应。以下是 CloudWatch 的核心工作原理步骤:

  1. 收集数据(Metrics & Logs Collection)
    指标(Metrics):CloudWatch 会自动从 AWS 资源(如 EC2、RDS、Lambda 等)收集基础性能数据,例如 CPU 使用率、磁盘 I/O、内存使用率等。用户还可以通过 API 或 AWS SDK 提交自定义指标,以监控应用程序的特定行为。
    日志(Logs):应用程序和系统日志(如 Lambda 函数日志、EC2 系统日志)也可以通过 CloudWatch Logs 收集。开发者可以将日志流发送到 CloudWatch Logs,并设置规则进行筛选和分析。

  2. 数据存储与管理(Data Storage & Management)
    CloudWatch 会将所有的监控指标和日志存储在其专有的数据存储系统中。指标通常会根据预设的时间粒度(如一分钟或五分钟)进行存储,并允许用户定义存储时长。
    日志数据则可以按需求设定存储期限或通过设置保留策略来控制。

  3. 分析与处理(Analysis & Processing)
    指标分析:CloudWatch 可以分析各种资源的性能趋势和历史数据,帮助用户了解资源的使用情况。用户还可以创建自定义视图(Dashboards),以可视化这些数据。
    日志处理:用户可以通过过滤器搜索日志中的关键字或特定模式,从中提取有用的信息。还可以设置触发条件,当检测到特定的日志事件时自动执行操作。

  4. 警报与通知(Alarms & Notifications)
    用户可以为某些指标设置警报(Alarms),当指标超出预定义的阈值时,CloudWatch 会触发警报。警报可以集成通知系统,如 Amazon SNS(Simple Notification Service),从而通过电子邮件、短信等方式提醒用户。
    这些警报不仅可以通知用户,还可以自动执行某些操作,例如启动/停止 EC2 实例、调用 AWS Lambda 函数或自动缩放服务。

  5. 自动响应(Automated Actions)
    CloudWatch Events 和 CloudWatch Alarms 支持自动触发响应。例如,当特定条件达到时,CloudWatch 可以自动执行修复操作、扩展/缩减资源,或者将事件发送到其他 AWS 服务。
    与 AWS Lambda 集成:当某些指标超出阈值或出现特定事件时,CloudWatch 可以触发 Lambda 函数来自动执行操作。

  6. 可视化与报告(Visualization & Reporting)
    CloudWatch 提供了仪表盘功能(Dashboards),用户可以通过图表和表格实时查看多个资源的关键指标和日志数据。用户可以根据实际需求定制仪表盘,以展示最关心的性能和运行状态。
    日志和指标也可以用于生成报告,帮助管理者做出基于数据的决策。

工作流程示例:

  • 指标监控:CloudWatch 定期从 EC2 实例收集 CPU 使用率指标。
  • 数据存储和分析:这些指标数据被存储在 CloudWatch 中,用户可以在仪表盘中查看性能历史记录。
  • 设置警报:用户设置警报,当 CPU 使用率超过 80% 时,CloudWatch 触发警报。
  • 通知和自动化操作:CloudWatch 通过 SNS 发送电子邮件通知管理员,同时调用 AWS Lambda 函数,自动增加新的 EC2 实例以分担负载。

这种流程确保了系统的高可用性和可靠性,同时减少了用户手动监控和干预的需求。

CloudWatch log 收集方法

常见的方法包括使用 AWS Lambda、CloudWatch Logs Agent 和 CloudWatch Logs API。下面是将日志发送到 CloudWatch Logs 的几种方法及详细步骤:

通过 AWS Lambda 发送日志到 CloudWatch Logs

当你在 AWS Lambda 中使用 console.log(或其他日志方法如 console.error、console.warn)时,AWS Lambda 会自动将这些日志流发送到 CloudWatch Logs,并为每个 Lambda 函数创建一个单独的日志组。

步骤:

  1. 编写 Lambda 函数,使用 console.log() 输出日志。
    示例代码:
exports.handler = async (event) => {
    // 使用 console.log 输出日志
    console.log("Lambda 函数已被调用!");
    console.info("信息级别日志");
    console.warn("警告级别日志");
    console.error("错误级别日志");

    // 返回响应
    return {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
};
  1. 确保 Lambda 的执行角色具有 CloudWatch Logs 的相关权限。
    虽然 CloudWatch Logs 的日志组和日志流是自动创建的,但 Lambda 函数必须拥有适当的权限 才能写入日志到 CloudWatch Logs。这意味着你需要确保 Lambda 函数的执行角色具备相应的权限,但 AWS 会默认配置这些权限。当你通过 Lambda 控制台创建一个新的 Lambda 函数时,AWS 会自动为该函数分配一个具有基本权限的执行角色,其中包括将日志写入 CloudWatch Logs 的权限。因此,大多数情况下,用户无需手动配置权限,Lambda 函数就能自动将日志写入 CloudWatch。
    如果你为 Lambda 函数指定了自定义的 IAM 角色或策略,或者修改了现有的 IAM 角色,那么确保该角色具备以下必要权限是至关重要的。常见的 CloudWatch Logs 权限包括
    logs:CreateLogGroup:允许 Lambda 函数创建新的日志组(仅在没有现有日志组时使用)。
    logs:CreateLogStream:允许 Lambda 函数创建新的日志流。
    logs:PutLogEvents:允许 Lambda 函数向日志流中写入日志事件(如 console.log 输出)。
    下面是一个典型的 IAM 权限策略,确保 Lambda 函数能够正确地将日志发送到 CloudWatch Logs:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:*:*:*"
    }
  ]
}
  1. 部署并运行 Lambda 函数后,日志将自动发送到 CloudWatch Logs。

  2. 查看日志:执行 Lambda 后,可以通过 AWS CloudWatch 控制台查看自动生成的日志流。你会看到一个与 Lambda 函数同名的日志组。例如,如果 Lambda 函数名称是 myLambdaFunction,日志组会显示为 /aws/lambda/myLambdaFunction。点击日志组,然后选择一个日志流(对应于每次函数执行时生成的日志记录)。

使用 CloudWatch Logs Agent 发送日志

对于 EC2 实例或本地服务器,开发者可以使用 CloudWatch Logs Agent 将系统日志或应用日志发送到 CloudWatch Logs。CloudWatch Logs Agent 支持自动收集和推送日志。
步骤

  1. 安装 CloudWatch Logs Agent:
    在 EC2 实例或服务器上安装 CloudWatch Agent 或 CloudWatch Logs Agent。
    CloudWatch Agent 更加灵活,可以监控系统指标和日志,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
  1. 配置 CloudWatch Logs Agent: 配置文件用于定义要收集的日志文件位置、日志组名称、日志流名称等。
    编辑配置文件 /etc/awslogs/awslogs.conf,添加要监控的日志文件路径和日志组名称:
    示例配置文件:
[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
  1. 启动 Agent:
  • 在实例上启动 CloudWatch Logs Agent。
  • Agent 会按照配置文件中的设置,自动将指定的日志流发送到 CloudWatch Logs。
sudo service awslogs start
  1. 查看日志:在 CloudWatch 控制台查看日志组和日志流,确认日志已正确发送。

通过 AWS SDK 或 API 将日志发送到 CloudWatch Logs

开发者可以使用 AWS SDK 或 CloudWatch Logs API 将自定义应用程序的日志发送到 CloudWatch Logs。常用的操作包括 CreateLogGroupCreateLogStreamPutLogEvents
步骤

  1. 设置 CloudWatch Logs 客户端: 使用 AWS SDK 初始化 CloudWatch Logs 客户端,确保有相应的权限。
  2. 创建日志组和日志流: 在首次运行时,如果日志组和日志流不存在,可以使用 CreateLogGroup 和 CreateLogStream API 创建它们。
  3. 发送日志事件: 使用 PutLogEvents API 将日志条目发送到 CloudWatch Logs 中的指定日志流。

示例代码(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 Agent 将应用和系统日志发送到 CloudWatch Logs

除了 CloudWatch Logs Agent,CloudWatch Agent 是一个更通用的工具,支持从 EC2 实例、混合云(如本地服务器)中收集和发送日志以及系统指标到 CloudWatch。

步骤:

  1. 安装 CloudWatch Agent: 在 EC2 实例或服务器上安装 CloudWatch Agent。

在 Amazon Linux 或 Amazon Linux 2 上安装

sudo yum install amazon-cloudwatch-agent

在 Ubuntu 上安装

sudo apt-get update
sudo apt-get install amazon-cloudwatch-agent
  1. 配置 CloudWatch Agent: 创建配置文件来定义需要收集的日志和指标。可以通过 Amazon SSM 或直接在实例上定义配置文件。
    创建一个 CloudWatch Agent 配置文件,例如 cloudwatch-config.json,定义要收集的日志文件路径和日志组名称:
    示例配置文件:
{
  "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"
        ]
      }
    }
  }
}

  1. 启动 CloudWatch Agent: 启动 Agent,Agent 会根据配置文件自动收集日志并将其发送到 CloudWatch Logs。
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
  -a fetch-config -m ec2 -c file:/path/to/cloudwatch-config.json -s
  1. 验证 CloudWatch Agent 是否运行
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status

CloudWatch Logs Agent VS CloudWatch Agent

CloudWatch Logs Agent 和 CloudWatch Agent 都是用于将日志发送到 Amazon CloudWatch Logs 的工具,但它们有一些重要的区别,尤其是在功能和使用场景上。

CloudWatch Logs Agent 专门用于将日志文件从 EC2 实例或本地服务器发送到 CloudWatch Logs。它是一个较旧的工具,功能较为有限,仅支持日志文件的收集和发送。
CloudWatch Agent 是 CloudWatch Logs Agent 的升级版,功能更强大,支持更多的监控和日志收集需求。它不仅可以收集日志文件,还可以收集各种系统指标(如 CPU、内存、磁盘、网络等),并将这些数据发送到 CloudWatch。

主要区别

功能CloudWatch Logs AgentCloudWatch 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,因为它功能更强大且可以统一管理日志和性能监控。

  • 27
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值