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

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

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

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

步骤 1:创建自定义配方

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

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

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

创建 CloudWatch Logs 配置文件:

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

下载并安装 CloudWatch Logs 代理:

# 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. 访问 https://console.aws.amazon.com/opsworks/,打开 Amazon OpsWorks 控制台。

  2. OpsWorks Dashboard(OpsWorks 控制面板)上,选择 Add stack(添加堆栈)以创建 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 Logs 用于 Amazon OpsWorks 实例,需要扩展实例所用的 IAM 角色。

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

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

  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. 在导航窗格中,选择 Roles(角色),然后在内容窗格中,为 Role Name(角色名称)选择 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 策略,然后选择 Attach Policy(附加策略)

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

步骤 4:添加层

  1. 访问 https://console.aws.amazon.com/opsworks/,打开 Amazon OpsWorks 控制台。

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

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

  4. OpsWorks 选项卡上,为 Layer type(层类型)选择 Custom(自定义)

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

  6. Recipes(配方)选项卡的 Custom Chef Recipes(自定义 Chef 配方)下有多个标题 - Setup(设置)Configure(配置)Deploy(部署)Undeploy(取消部署)Shutdown(关闭),它们对应于 Amazon OpsWorks 生命周期事件。Amazon OpsWorks 在实例生命周期的这些关键点触发这些事件,这些事件运行关联的配方。

    注意

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

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

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

步骤 5:添加实例

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

  1. 访问 https://console.aws.amazon.com/opsworks/,打开 Amazon OpsWorks 控制台。

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

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

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

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

步骤 6:查看您的日志

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

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