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
}