快速入门:使用 Amazon OpsWorks 和 Chef 安装 CloudWatch 日志代理 - Amazon CloudWatch 日志
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

快速入门:使用 Amazon OpsWorks 和 Chef 安装 CloudWatch 日志代理

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

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

步骤 1:创建自定义配方

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

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

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

创建 CloudWatch 日志配置文件:

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

下载并安装 CloudWatch 日志代理:

# 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
注意

在上面的示例中,使用以下任一内容替换区域: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 或 sa-east-1。

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

sudo apt-get -y install python-dev

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

[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 中的相应属性获取堆栈名称与主机名。cwlogs 说明书的 default.rb 属性文件 (logs/attributes/default.rb) 定义用于指定要记录的文件的属性。

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

步骤 2:创建 Amazon OpsWorks 堆栈

  1. 打开 Amazon OpsWorks 控制台,网址为 https://console.aws.amazon.com/opsworks/

  2. OpsWorks 控制面板上,选择添加堆栈以创建 Amazon OpsWorks 堆栈。

  3. Add stack(添加堆栈)屏幕上,选择 Chef 11 stack(Chef 11 堆栈)

  4. 对于 Stack name(堆栈名称),输入一个名称。

  5. 对于 Use custom Chef Cookbooks(使用自定义 Chef 说明书),选择 Yes(是)

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

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

  8. 选择 Add Stack(添加堆栈)创建堆栈。

步骤 3:扩展您的 IAM 角色

要将 CloudWatch 日志用于您的 Amazon OpsWorks 实例,您需要扩展您的实例使用的 IAM 角色。

  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在导航窗格中,选择 Policies(策略)Create Policy(创建策略)

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

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

  5. 对于 Policy Document(策略文档),粘贴以下策略:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:*:*:*" ] } ] }
  6. 选择 Create Policy(创建策略)

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

    注意

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

  8. Permissions(权限)选项卡的 Managed Policies(托管策略)下,选择 Attach Policy(附加策略)

  9. Attach Policy(附加策略)页面的表标题(Filter(筛选条件)Search(搜索)旁边)中,选择 Policy Type(策略类型)Customer Managed Policies(客户托管策略)

  10. 对于Customer Managed Policies(客户托管策略),选择您在上面创建的 IAM policy,然后选择 Attach Policy(附加策略)

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

步骤 4:添加层

  1. 打开 Amazon OpsWorks 控制台,网址为 https://console.aws.amazon.com/opsworks/

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

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

  4. OpsWorks选项卡上,对于图层类型,选择自定义

  5. 对于 Name(名称)Short name(短名称)字段,输入层的长名称和短名称,然后选择 Add layer(添加层)

  6. 在 “食谱” 选项卡上的 “自定义厨师食谱” 下,有几个与生命周期事件相对应的标题:设置配置部署、取消部署关闭 Amazon OpsWorks Amazon OpsWorks 在实例生命周期中的这些关键点触发这些事件,从而运行相关的配方。

    注意

    如果上述标题不可见,请在 Custom Chef Recipes(自定义 Chef 配方)下,选择 edit(编辑)

  7. Setup(设置)旁输入 logs::config, logs::install,选择 + 将其添加到列表中,然后选择 Save(保存)

    Amazon OpsWorks 在实例启动后,立即在该层中的每个新实例上运行此配方。

步骤 5:添加实例

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

  1. 打开 Amazon OpsWorks 控制台,网址为 https://console.aws.amazon.com/opsworks/

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

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

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

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

步骤 6:查看您的日志

代理运行一段时间后,您应该会在 CloudWatch 控制台中看到新创建的日志组和日志流。

有关更多信息,请参阅 查看发送到日志的 CloudWatch 日志数据