Skip to content

Commit 3103d91

Browse files
yorklolshanye997
authored andcommitted
log-monitoring-alarming
1 parent 6bfdb64 commit 3103d91

File tree

4 files changed

+257
-0
lines changed

4 files changed

+257
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
## Introduction
2+
3+
<!-- DOCS_DESCRIPTION_CN -->
4+
本示例用于实现解决方案[构建面向应用日志的实时监控](https://www.aliyun.com/solution/tech-solution/log-monitoring-alarming), 涉及到专有网络(VPC)、交换机(VSwitch)、云服务器(ECS)、RAM 用户等资源的创建。
5+
<!-- DOCS_DESCRIPTION_CN -->
6+
7+
<!-- DOCS_DESCRIPTION_EN -->
8+
This example is used to implement solution [Log Monitoring Alarming](https://www.aliyun.com/solution/tech-solution/log-monitoring-alarming). It involves the creation, and deployment of resources such as Virtual Private Cloud (VPC), VSwitch, Elastic Compute Service (ECS), and RAM users.
9+
<!-- DOCS_DESCRIPTION_EN -->
10+
11+
<!-- BEGIN_TF_DOCS -->
12+
## Providers
13+
14+
| Name | Version |
15+
|------|---------|
16+
| <a name="provider_alicloud"></a> [alicloud](#provider\_alicloud) | n/a |
17+
| <a name="provider_random"></a> [random](#provider\_random) | n/a |
18+
19+
## Modules
20+
21+
No modules.
22+
23+
## Resources
24+
25+
| Name | Type |
26+
|------|------|
27+
| [alicloud_ecs_command.run_command](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/ecs_command) | resource |
28+
| [alicloud_ecs_invocation.invoke_script](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/ecs_invocation) | resource |
29+
| [alicloud_instance.ecs_instance](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/instance) | resource |
30+
| [alicloud_log_machine_group.this](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/log_machine_group) | resource |
31+
| [alicloud_log_project.sls_project](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/log_project) | resource |
32+
| [alicloud_log_store.sls_log_store](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/log_store) | resource |
33+
| [alicloud_log_store_index.sls_index](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/log_store_index) | resource |
34+
| [alicloud_logtail_attachment.this](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/logtail_attachment) | resource |
35+
| [alicloud_logtail_config.this](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/logtail_config) | resource |
36+
| [alicloud_ram_access_key.ramak](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/ram_access_key) | resource |
37+
| [alicloud_ram_user.ram_user](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/ram_user) | resource |
38+
| [alicloud_ram_user_policy_attachment.attach_policy_to_user](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/ram_user_policy_attachment) | resource |
39+
| [alicloud_security_group.security_group](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/security_group) | resource |
40+
| [alicloud_security_group_rule.allow_ssh](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/security_group_rule) | resource |
41+
| [alicloud_vpc.vpc](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/vpc) | resource |
42+
| [alicloud_vswitch.vswitch](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/vswitch) | resource |
43+
| [random_string.suffix](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string) | resource |
44+
| [alicloud_images.default](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/data-sources/images) | data source |
45+
| [alicloud_zones.default](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/data-sources/zones) | data source |
46+
47+
## Inputs
48+
49+
| Name | Description | Type | Default | Required |
50+
|------|-------------|------|---------|:--------:|
51+
| <a name="input_ecs_instance_password"></a> [ecs\_instance\_password](#input\_ecs\_instance\_password) | 服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)` | `string` | n/a | yes |
52+
| <a name="input_instance_type"></a> [instance\_type](#input\_instance\_type) | 实例类型 | `string` | `"ecs.e-c1m2.large"` | no |
53+
| <a name="input_region"></a> [region](#input\_region) | n/a | `string` | `"cn-hangzhou"` | no |
54+
<!-- END_TF_DOCS -->
Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
provider "alicloud" {
2+
region = var.region
3+
}
4+
5+
data "alicloud_zones" "default" {
6+
available_disk_category = "cloud_essd"
7+
available_resource_creation = "VSwitch"
8+
available_instance_type = var.instance_type
9+
}
10+
11+
resource "random_string" "suffix" {
12+
length = 8
13+
lower = true
14+
upper = false
15+
numeric = false
16+
special = false
17+
}
18+
19+
locals {
20+
common_name = random_string.suffix.id
21+
}
22+
23+
resource "alicloud_vpc" "vpc" {
24+
cidr_block = "192.168.0.0/16"
25+
vpc_name = "vpc-${local.common_name}"
26+
}
27+
28+
resource "alicloud_vswitch" "vswitch" {
29+
vpc_id = alicloud_vpc.vpc.id
30+
cidr_block = "192.168.0.0/24"
31+
zone_id = data.alicloud_zones.default.zones.0.id
32+
vswitch_name = "vswitch-${local.common_name}"
33+
}
34+
35+
resource "alicloud_security_group" "security_group" {
36+
vpc_id = alicloud_vpc.vpc.id
37+
security_group_name = "sg-${local.common_name}"
38+
}
39+
40+
resource "alicloud_security_group_rule" "allow_ssh" {
41+
type = "ingress"
42+
ip_protocol = "tcp"
43+
nic_type = "intranet"
44+
policy = "accept"
45+
port_range = "22/22"
46+
priority = 1
47+
security_group_id = alicloud_security_group.security_group.id
48+
cidr_ip = "0.0.0.0/0"
49+
}
50+
51+
data "alicloud_images" "default" {
52+
name_regex = "^aliyun_3_x64_20G_alibase_.*"
53+
most_recent = true
54+
owners = "system"
55+
}
56+
57+
resource "alicloud_ram_user" "ram_user" {
58+
name = "create_by_solution-${local.common_name}"
59+
}
60+
61+
resource "alicloud_ram_access_key" "ramak" {
62+
user_name = alicloud_ram_user.ram_user.name
63+
depends_on = [
64+
alicloud_ram_user.ram_user
65+
]
66+
}
67+
68+
resource "alicloud_ram_user_policy_attachment" "attach_policy_to_user" {
69+
user_name = alicloud_ram_user.ram_user.name
70+
policy_type = "System"
71+
policy_name = "AliyunLogFullAccess"
72+
depends_on = [
73+
alicloud_ram_access_key.ramak
74+
]
75+
}
76+
77+
resource "alicloud_instance" "ecs_instance" {
78+
count = 2
79+
instance_name = "ecs-${local.common_name}"
80+
image_id = data.alicloud_images.default.images[0].id
81+
instance_type = var.instance_type
82+
system_disk_category = "cloud_essd"
83+
security_groups = [alicloud_security_group.security_group.id]
84+
vswitch_id = alicloud_vswitch.vswitch.id
85+
password = var.ecs_instance_password
86+
internet_max_bandwidth_out = 5
87+
}
88+
89+
resource "alicloud_ecs_command" "run_command" {
90+
name = "command-genlog-loongcollector-${local.common_name}"
91+
command_content = base64encode(<<EOF
92+
cat << EOT >> ~/.bash_profile
93+
export ROS_DEPLOY=true
94+
export ALIBABA_CLOUD_ACCESS_KEY_ID=${alicloud_ram_access_key.ramak.id}
95+
export ALIBABA_CLOUD_ACCESS_KEY_SECRET=${alicloud_ram_access_key.ramak.secret}
96+
EOT
97+
98+
source ~/.bash_profile
99+
sleep 60
100+
# Install loongcollector
101+
wget http://aliyun-observability-release-${var.region}.oss-${var.region}.aliyuncs.com/loongcollector/linux64/latest/loongcollector.sh -O loongcollector.sh
102+
chmod +x loongcollector.sh
103+
./loongcollector.sh install ${var.region}-internet
104+
# Generate log
105+
curl -fsSL https://help-static-aliyun-doc.aliyuncs.com/tech-solution/install-log-monitoring-alarming-0.1.sh|bash
106+
EOF
107+
)
108+
working_dir = "/root"
109+
type = "RunShellScript"
110+
timeout = 3600
111+
depends_on = [alicloud_instance.ecs_instance]
112+
}
113+
114+
resource "alicloud_ecs_invocation" "invoke_script" {
115+
instance_id = alicloud_instance.ecs_instance[*].id
116+
command_id = alicloud_ecs_command.run_command.id
117+
timeouts {
118+
create = "15m"
119+
}
120+
depends_on = [alicloud_instance.ecs_instance]
121+
}
122+
123+
resource "alicloud_log_project" "sls_project" {
124+
project_name = "sls-project-${local.common_name}"
125+
}
126+
127+
resource "alicloud_log_store" "sls_log_store" {
128+
logstore_name = "sls-logstore-${local.common_name}"
129+
project_name = alicloud_log_project.sls_project.project_name
130+
depends_on = [alicloud_log_project.sls_project]
131+
}
132+
133+
resource "alicloud_log_machine_group" "this" {
134+
identify_list = alicloud_instance.ecs_instance[*].primary_ip_address
135+
name = "lmg-${local.common_name}"
136+
project = alicloud_log_project.sls_project.project_name
137+
identify_type = "ip"
138+
}
139+
140+
resource "alicloud_logtail_config" "this" {
141+
project = alicloud_log_project.sls_project.project_name
142+
input_detail = <<EOF
143+
{
144+
"discardUnmatch": false,
145+
"enableRawLog": true,
146+
"fileEncoding": "utf8",
147+
"filePattern": "sls-monitor-test.log",
148+
"logPath": "/tmp",
149+
"logType": "common_reg_log",
150+
"maxDepth": 10,
151+
"topicFormat": "none"
152+
}
153+
EOF
154+
input_type = "file"
155+
logstore = alicloud_log_store.sls_log_store.logstore_name
156+
name = "lc-${local.common_name}"
157+
output_type = "LogService"
158+
}
159+
160+
resource "alicloud_logtail_attachment" "this" {
161+
project = alicloud_log_project.sls_project.project_name
162+
logtail_config_name = alicloud_logtail_config.this.name
163+
machine_group_name = alicloud_log_machine_group.this.name
164+
}
165+
166+
resource "alicloud_log_store_index" "sls_index" {
167+
project = alicloud_log_project.sls_project.project_name
168+
logstore = alicloud_log_store.sls_log_store.logstore_name
169+
full_text {
170+
token = " :#$^*\r\n\t"
171+
}
172+
field_search {
173+
name = "content"
174+
type = "text"
175+
token = " :#$^*\r\n\t"
176+
}
177+
depends_on = [alicloud_log_store.sls_log_store]
178+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
output "ecs_login_address" {
2+
description = "生成日志的ECS实例的登录地址。通过此地址登录ECS后,在本地查看生成日志文件的命令为:tail -f /tmp/sls-monitor-test.log"
3+
value = format("https://ecs-workbench.aliyun.com/?from=ecs&instanceType=ecs&regionId=%s&instanceId=%s&resourceGroupId=", var.region, alicloud_instance.ecs_instance[0].id)
4+
}
5+
6+
output "sls_logsearch_url" {
7+
description = "SLS日志查询入口"
8+
value = format("https://sls.console.aliyun.com/lognext/project/%s/logsearch/%s?slsRegion=%s", alicloud_log_project.sls_project.project_name, alicloud_log_store.sls_log_store.logstore_name, var.region)
9+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
variable "region" {
2+
type = string
3+
default = "cn-hangzhou"
4+
}
5+
6+
variable "instance_type" {
7+
type = string
8+
default = "ecs.e-c1m2.large"
9+
description = "实例类型"
10+
}
11+
12+
variable "ecs_instance_password" {
13+
type = string
14+
sensitive = true
15+
description = "服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)"
16+
}

0 commit comments

Comments
 (0)