Terraform是一种开源工具,用于安全高效地预览、配置和管理云基础架构和资源。本文介绍如何使用Terraform调用接口创建Logtail采集配置。
前提条件
已安装Terraform。
- 在Cloud Shell中使用Terraform:Cloud Shell默认安装配置了Terraform和阿里云账号信息,无需任何额外配置。更多信息,请参见在Cloud Shell中使用Terraform。 
- 在本地安装和配置Terraform:操作步骤请参见在本地安装和配置Terraform,在第4步中确保 - registry.terraform.io/aliyun/alicloud版本为1.219.0及以上。
配置步骤
步骤一:配置AccessKey和日志服务的中心化地域
在环境变量中配置阿里云账号AccessKey和日志服务中心Project所在的地域。
在Cloud Shell中使用Terraform
# Region ID
export ALICLOUD_REGION="cn-shanghai"使用Cloud Shell无需配置身份信息,建议使用RAM用户登录阿里云控制台,降低密钥泄露造成的安全风险。
| 参数 | 说明 | 
| ALICLOUD_REGION | 日志服务Project所在地域,更多信息,请参考开服地域。 | 
在本地使用Terraform
# alicloud AK
export ALICLOUD_ACCESS_KEY="AccessKey ID"
export ALICLOUD_SECRET_KEY="AccessKey Secret"
# Region ID
export ALICLOUD_REGION="cn-shanghai"| 参数 | 说明 | 
| ALICLOUD_ACCESS_KEY | 阿里云账号的访问密钥AccessKey ID。更多信息,请参见访问密钥。 重要  建议使用RAM用户的AccessKey ID和AccessKey Secret,降低密钥泄露造成的安全风险。 | 
| ALICLOUD_SECRET_KEY | 阿里云账号的访问密钥AccessKey Secret。更多信息,请参见访问密钥。 | 
| ALICLOUD_REGION | 日志服务Project所在地域,更多信息,请参考开服地域。 | 
步骤二:创建日志服务Project
- 执行以下命令,创建一个Terraform工作目录,名称例如 - sls。- mkdir sls
- 执行以下命令,切换到刚创建的目录下。 - cd sls
- 在该目录下创建一个文件,名称例如 - terraform.tf。- touch terraform.tf
- 在 - terraform.tf文件中,添加如下内容。- resource "alicloud_log_project" "project_example" { project_name = "terraform-example" description = "terraform-example" }- alicloud_log_project为资源类型,相关参数说明如下。完整参数说明,请参见Terraform-Alicloud Log Project。- 参数 - 是否必填 - 说明 - project_example - 是 - Resource名称。 - project_name - 是 - SLS日志服务project 名称,需要保证唯一性。 - description - 否 - project的描述。 
- 按下键盘上的Esc键退出编辑模式,然后输入 - :wq保存并退出文件。
- 在工作目录 - sls下,执行如下命令,初始化Terraform工作目录。- terraform init- 返回如下结果,表示初始化成功。 - Terraform has been successfully initialized!
- 在工作目录 - sls下,执行如下命令,创建日志服务Project。- terraform apply- 返回如下信息,表示成功创建Project。 - alicloud_log_project.project_example: Creating... alicloud_log_project.project_example: Creation complete after 2s [id=terraform-example] Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
步骤三:创建Logstore
- 在 - terraform.tf文件中,新增如下内容。- resource "alicloud_log_store" "logstore_example" { project_name = alicloud_log_project.project_example.project_name logstore_name = "logstore_example" retention_period = 3 }- 其中 - alicloud_log_store为资源类型,相关参数说明如下,完整参数说明,请参见Terraform-Alicloud Log Store。- 参数 - 是否必填 - 说明 - logstore_example - 是 - Resource名称。 - project_name - 是 - LogStore所属的Project名,此处例子引用的是alicloud_log_project类型资源下的project_example Resource的project_name属性值。 - logstore_name - 是 - LogStore的名称。 - retention_period - 否 - 数据保留时间(以天为单位),默认30天。 
- 在您所创建的工作目录 - sls下,执行如下命令,创建- Logstore。- terraform apply- 返回如下结果,表示初始化成功。 - alicloud_log_project.project_example: Creating... alicloud_log_project.project_example: Creation complete after 2s [id=terraform-example] alicloud_log_store.logstore_example: Creating... alicloud_log_store.logstore_example: Creation complete after 1s [id=terraform-example:logstore_example] Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
步骤四:创建Logtail采集配置
- 在 - terraform.tf文件中,新增如下内容。- resource "alicloud_logtail_config" "config_test" { project = alicloud_log_store.logstore_example.project_name logstore = alicloud_log_store.logstore_example.logstore_name name = "config-sample" input_type = "file" output_type = "LogService" input_detail = jsonencode( { "logPath": "/logPath", "filePattern": "access.log", "logType": "json_log", "topicFormat": "default", "discardUnmatch": false, "enableRawLog": true, "fileEncoding": "gbk", "maxDepth": 10 } ) }- 其中 - alicloud_logtail_config为资源类型,相关参数说明如下,完整参数说明,请参见Terraform-Alicloud Logtail Config。- 参数 - 是否必填 - 说明 - config_test - 是 - Resource名称。 - project - 是 - config所属的Project名称。 - logstore - 是 - config所属的Logstore名称。 - name - 是 - Logtail配置的名称,在其所属Project内必须唯一。创建Logtail配置成功后,无法修改其名称。 - 命名规则如下: - 只能包括小写字母、数字、短划线(-)和下划线(_)。 
- 必须以小写字母或数字开头和结尾。 
- 长度必须在2~128个字符之间。 
 - input_type - 是 - 日志输入的方式。可选值如下: - plugin:通过Logtail插件采集日志。 
- file:通过固定模式(正则模式、分隔符模式等)采集文本文件中的日志。 
 - output_type - 是 - 日志输出的方式,只支持LogService,即只支持将数据上传到日志服务。 - input_detail - 是 - 日志输入的相关配置。更多信息,请参见Logtail配置。 
- 在您所创建的工作目录 - sls下,执行如下命令,创建Logtail配置。- terraform apply- 返回如下结果,表示创建成功。 - alicloud_logtail_config.config_test: Creating... alicloud_logtail_config.config_test: Creation complete after 0s [id=terraform-example-yangfei:logstore_example:config-sample] Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
步骤五:创建机器组
- 在 - terraform.tf文件中,新增如下内容。- resource "alicloud_log_machine_group" "machine_group_example" { project = alicloud_log_store.logstore_example.project_name name = "terraform-example" identify_type = "ip" topic = "terraform" identify_list = ["10.0.0.1", "10.0.0.2"] }- 其中 - alicloud_log_machine_group为资源类型,相关参数说明如下,完整参数说明,请参见Terraform-Alicloud Log Machine Group。- 参数 - 是否必填 - 说明 - machine_group_example - 是 - Resource名称。自定义配置。 - project - 是 - 机器组所属的project名 - name - 是 - 机器组名称,Project下唯一 - identify_type - 否 - 机器标识类型,分为IP和userdefined两种,默认为IP - topic - 否 - 机器组Topic,默认为空。 - identify_list - 是 - 具体的机器标识,可以是IP或userdefined-id。 
- 在您所创建的工作目录 - sls下,执行如下命令,创建机器组。- terraform apply- 返回如下结果,表示初始化成功。 - alicloud_log_machine_group.machine_group_example: Creating... alicloud_log_machine_group.machine_group_example: Creation complete after 0s [id=terraform-example:terraform-example] Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
步骤六:应用Logtail采集配置到机器组
- 在 - terraform.tf文件中,添加如下内容。- resource "alicloud_logtail_attachment" "example" { project = alicloud_log_store.logstore_example.project_name logtail_config_name = alicloud_logtail_config.config_test.name machine_group_name = alicloud_log_machine_group.machine_group_example.name }- 其中 - alicloud_logtail_attachment为资源类型,相关参数说明如下,完整参数说明,请参见Terraform-Alicloud Logtail Attachment。- 参数 - 是否必填 - 说明 - example - 是 - Resource名称。自定义配置。 - project - 是 - project名 - logtail_config_name - 是 - Logtail配置名 - machine_group_name - 是 - 机器组名 
- 在您所创建的工作目录 - sls下,执行如下命令,将Logtail配置应用到机器组。- terraform apply- 返回如下结果,表示初始化成功。 - alicloud_logtail_attachment.example: Creating... alicloud_logtail_attachment.example: Creation complete after 0s [id=terraform-example:config-sample:terraform-example] Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
完整配置模板
Terraform模板
resource "alicloud_log_project" "project_example" {
  project_name = "terraform-example"
  description = "terraform-example"
}
resource "alicloud_log_store" "logstore_example" {
  project_name = alicloud_log_project.project_example.project_name
  logstore_name = "logstore_example"
  retention_period = 3
}
resource "alicloud_logtail_config" "config_test" {
  project     = alicloud_log_store.logstore_example.project_name
  logstore    = alicloud_log_store.logstore_example.logstore_name
  name        = "config-sample"
  input_type  = "file"
  output_type = "LogService"
  input_detail = jsonencode(
  	{
		"logPath": "/logPath",
		"filePattern": "access.log",
		"logType": "json_log",
		"topicFormat": "default",
		"discardUnmatch": false,
		"enableRawLog": true,
		"fileEncoding": "gbk",
		"maxDepth": 10
	}
  )
}
resource "alicloud_log_machine_group" "machine_group_example" {
  project     = alicloud_log_store.logstore_example.project_name
  name          = "terraform-example"
  identify_type = "ip"
  topic         = "terraform"
  identify_list = ["10.0.0.1", "10.0.0.2"]
}
resource "alicloud_logtail_attachment" "example" {
  project     = alicloud_log_store.logstore_example.project_name
  logtail_config_name = alicloud_logtail_config.config_test.name
  machine_group_name  = alicloud_log_machine_group.machine_group_example.name
}配置效果
创建的Project、Logstore和Logtail采集配置

Logtail采集配置

机器组配置
