Amazon CloudWatch Logs
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

快速入门:使用 AWS OpsWorks 和 Chef 安装 CloudWatch Logs 代理

您可以安装 CloudWatch Logs 代理,使用 AWS OpsWorks 和 Chef 创建流日志,Chef 是第三方系统和云基础设施自动化工具。Chef 使用“配方” (编写的“配方”用于在计算机中安装和配置软件) 和“说明书”(配方的集合) 来执行其配置和策略分配任务。有关更多信息,请参阅 Chef

下面的 Chef 配方示例显示如何在每个 EC2 实例中监控一个日志文件。配方将堆栈名称用作日志组,将实例的主机名用作日志流名称。如果需要监控多个日志文件,则需要扩展配方,以创建多个日志组和日志流。

步骤 1:创建自定义配方

创建存储库来存储配方。AWS OpsWorks 支持 Git 和 Subversion,您也可以在 Amazon S3 中存储存档。AWS OpsWorks 用户指南 中的说明书存储库介绍了说明书存储库结构。以下示例假设说明书名为 logs。install.rb 配方可安装 CloudWatch Logs 代理。您也可以下载食谱示例 (CloudWatchLogs-Cookbooks.zip)。

创建包含以下代码、名为 metadata.rb 的文件:

Copy
#metadata.rb name 'logs' version '0.0.1'

创建 CloudWatch Logs 配置文件:

Copy
#config.rb template "/tmp/cwlogs.cfg" do cookbook "logs" source "cwlogs.cfg.erb" owner "root" group "root" mode 0644 end

下载并安装 CloudWatch Logs 代理:

Copy
# install.rb directory "/opt/aws/cloudwatch" do recursive true end remote_file "/opt/aws/cloudwatch/awslogs-agent-setup.py" do source "https://s3.amazonaws.com//aws-cloudwatch/downloads/latest/awslogs-agent-setup.py" mode "0755" end execute "Install CloudWatch Logs agent" do command "/opt/aws/cloudwatch/awslogs-agent-setup.py -n -r region -c /tmp/cwlogs.cfg" not_if { system "pgrep -f aws-logs-agent-setup" } end

注意

在上面的示例中,将 region 替换为以下区域之一:us-east-1, us-west-1, us-west-2, ap-south-1, ap-northeast-2, ap-southeast-1, ap-southeast-2, ap-northeast-1, eu-central-1, eu-west-1, or sa-east-1。

如果代理安装失败,请检查以确保 python-dev 程序包已安装。如果未安装,请使用以下命令,然后重试代理安装:

Copy
sudo apt-get -y install python-dev

此配方使用 cwlogs.cfg.erb 模板文件,您可以修改该文件以指定不同属性,如要对哪些文件记录日志。有关这些属性的更多信息,请参阅 CloudWatch Logs 代理参考

Copy
[general] # Path to the AWSLogs agent's state file. Agent uses this file to maintain # client side state across its executions. state_file = /var/awslogs/state/agent-state ## Each log file is defined in its own section. The section name doesn't ## matter as long as its unique within this file. # #[kern.log] # ## Path of log file for the agent to monitor and upload. # #file = /var/log/kern.log # ## Name of the destination log group. # #log_group_name = kern.log # ## Name of the destination log stream. # #log_stream_name = {instance_id} # ## Format specifier for timestamp parsing. # #datetime_format = %b %d %H:%M:%S # # [<%= node[:opsworks][:stack][:name] %>] datetime_format = [%Y-%m-%d %H:%M:%S] log_group_name = <%= node[:opsworks][:stack][:name].gsub(' ','_') %> file = <%= node[:cwlogs][:logfile] %> log_stream_name = <%= node[:opsworks][:instance][:hostname] %>

该模板通过引用堆栈配置和部署 JSON 中的相应属性获取堆栈名称与主机名。cwlog 说明书的 default.rb 属性文件 (logs/attributes/default.rb) 定义用于指定要记录的文件的属性。

Copy
default[:cwlogs][:logfile] = '/var/log/aws/opsworks/opsworks-agent.statistics.log'

步骤 2:创建 AWS OpsWorks 堆栈

  1. 通过以下网址打开 AWS OpsWorks 控制台:https://console.amazonaws.cn/opsworks/

  2. OpsWorks Dashboard 上,选择 Add stack 以创建 AWS OpsWorks 堆栈。

  3. Add stack 屏幕上,选择 Chef 11 stack

  4. 对于 Stack name,输入一个名称。

  5. 对于 Use custom Chef Cookbooks,选择 Yes

  6. 对于 Repository type,选择您使用的存储库类型。如果要使用上述示例,请选择 Http Archive (Http 存档)

  7. 对于 Repository URL,输入用于存储前面步骤中创建的说明书的存储库。如果要使用上述示例,请输入 https://s3.amazonaws.com//aws-cloudwatch/downloads/CloudWatchLogs-Cookbooks.zip

  8. 选择 Add Stack 创建堆栈。

步骤 3:扩展您的 IAM 角色

要将 CloudWatch Logs 用于 AWS OpsWorks 实例,需要扩展实例所用的 IAM 角色。

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 在导航窗格中,选择 PoliciesCreate Policy

  3. Create Policy 页面上的 Create Your Own Policy 下,选择 Select。有关创建自定义策略的更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的 Amazon EC2 的 IAM 策略

  4. Review Policy 页面上,为 Policy Name 键入策略的名称。

  5. 对于 Policy Document,粘贴以下策略:

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws-cn:logs:*:*:*" ] } ] }
  6. 选择 Create Policy

  7. 在导航窗格中,选择 Roles,然后在内容窗格中,为 Role Name 选择您的 AWS OpsWorks 堆栈使用的实例角色的名称。在堆栈设置中,可以看到堆栈使用的角色 (默认角色为 aws-opsworks-ec2-role。)

    注意

    选择角色名称,而不是选中复选框。

  8. Permissions 选项卡上的 Managed Policies 下,选择 Attach Policy

  9. Attach Policy 页面上的表标题 (FilterSearch 旁边) 中,选择 Policy TypeCustomer Managed Policies

  10. 对于 Customer Managed Policies,选择您在上面创建的 IAM 策略,然后选择 Attach Policy

    有关 IAM 用户和策略的更多信息,请参阅IAM 用户指南 中的 IAM 用户和组管理 IAM 策略

步骤 4:添加层

  1. 通过以下网址打开 AWS OpsWorks 控制台:https://console.amazonaws.cn/opsworks/

  2. 在导航窗格中,选择 Layers

  3. 在内容窗格中,选择一个层,然后选择 Add layer

  4. OpsWorks 选项卡上,为 Layer type 选择 Custom

  5. 对于 NameShort name 字段,输入层的长名称和短名称,然后选择 Add layer

  6. Recipes 选项卡的 Custom Chef Recipes 下有多个标题 - SetupConfigureDeployUndeployShutdown,它们对应于 AWS OpsWorks 生命周期事件。AWS OpsWorks 在实例生命周期的这些关键点触发这些事件,这些事件运行关联的配方。

    注意

    如果上述标题不可见,请在 Custom Chef Recipes 下,选择 edit

  7. Setup 旁输入 logs::config, logs::install,选择 + 以将它添加到列表中,然后选择 Save

    实例启动之后,AWS OpsWorks 即在此层的每个新实例上运行此配方。

步骤 5:添加实例

层仅控制如何配置实例。现在您需要将一些实例添加到层并启动它们。

  1. 通过以下网址打开 AWS OpsWorks 控制台:https://console.amazonaws.cn/opsworks/

  2. 在导航窗格中,选择 Instances,然后在您的层下选择 + Instance

  3. 接受默认设置,然后选择 Add Instance 以将该实例添加到层。

  4. 在该行的 Actions (操作) 列中,单击 start (启动) 以启动该实例。

    AWS OpsWorks 启动新的 EC2 实例并配置 CloudWatch Logs。在实例就绪后,其状态更改为联机。

步骤 6:查看您的日志

在代理运行一段时间后,可以在 CloudWatch 控制台看到新创建的日志组和日志流。

要查看日志,请参阅 查看发送到 CloudWatch Logs 的日志数据