File tree Expand file tree Collapse file tree 6 files changed +127
-2
lines changed Expand file tree Collapse file tree 6 files changed +127
-2
lines changed Original file line number Diff line number Diff line change @@ -38,3 +38,35 @@ data "aws_iam_policy_document" "fluent_bit" {
38
38
]
39
39
}
40
40
}
41
+
42
+ data "aws_iam_policy_document" "fluent_bit_cw_and_s3" {
43
+
44
+ for_each = var. fluent_bit_s3_bucket_enable ? { " enabled" = 1 } : {}
45
+
46
+ statement {
47
+ sid = " PutLogEvents"
48
+ effect = " Allow"
49
+ resources = [" arn:aws:logs:${ data . aws_region . current . name } :${ data . aws_caller_identity . current . account_id } :log-group:*:log-stream:*" ]
50
+ actions = [" logs:PutLogEvents" ]
51
+ }
52
+
53
+ statement {
54
+ sid = " CreateCWLogs"
55
+ effect = " Allow"
56
+ resources = [" arn:aws:logs:${ data . aws_region . current . name } :${ data . aws_caller_identity . current . account_id } :log-group:*" ]
57
+
58
+ actions = [
59
+ " logs:CreateLogGroup" ,
60
+ " logs:CreateLogStream" ,
61
+ " logs:DescribeLogGroups" ,
62
+ " logs:DescribeLogStreams" ,
63
+ " logs:PutRetentionPolicy" ,
64
+ ]
65
+ }
66
+ statement {
67
+ sid = " S3"
68
+ effect = " Allow"
69
+ resources = [" ${ module . fluentbit_s3_bucket [0 ]. s3_bucket_arn } /*" ]
70
+ actions = [" s3:PutObject" ]
71
+ }
72
+ }
Original file line number Diff line number Diff line change @@ -37,7 +37,8 @@ locals {
37
37
resources = jsonencode (var. fluent_bit_resources ),
38
38
tolerations = jsonencode (var. fluent_bit_tolerations ),
39
39
affinity = jsonencode (local. affinity ),
40
- excluded_namespaces = var.fluent_bit_excluded_namespaces
40
+ excluded_namespaces = var.fluent_bit_excluded_namespaces,
41
+ s3_bucket_name = var.fluent_bit_s3_bucket_enable ? module.fluentbit_s3_bucket[0 ].s3_bucket_id : null ,
41
42
})
42
43
43
44
fluent_bit_helm_config = merge (
@@ -92,7 +93,7 @@ resource "aws_iam_policy" "fluent_bit_irsa" {
92
93
93
94
name = " ${ var . cluster_name } -fluentbit"
94
95
description = " IAM Policy for AWS for FluentBit IRSA"
95
- policy = data. aws_iam_policy_document . fluent_bit . json
96
+ policy = var . fluent_bit_s3_bucket_enable ? data . aws_iam_policy_document . fluent_bit_cw_and_s3 [ " enabled " ] . json : data. aws_iam_policy_document . fluent_bit . json
96
97
}
97
98
98
99
moved {
Original file line number Diff line number Diff line change
1
+ module "fluentbit_s3_bucket" {
2
+ count = var. fluent_bit_s3_bucket_enable ? 1 : 0
3
+
4
+ source = " terraform-aws-modules/s3-bucket/aws"
5
+ version = " ~> 4.6.1"
6
+
7
+ bucket = " fluentbit-log-bucket-${ random_string . s3_suffix . result } "
8
+
9
+ versioning = {
10
+ enabled = false
11
+ }
12
+
13
+ lifecycle_rule = [
14
+ {
15
+ id = " log-expiration"
16
+ enabled = true
17
+ abort_incomplete_multipart_upload_days = 7
18
+
19
+ expiration = {
20
+ days = 90
21
+ }
22
+
23
+ transitions = [
24
+ {
25
+ days = 30
26
+ storage_class = " STANDARD_IA"
27
+ },
28
+ {
29
+ days = 60
30
+ storage_class = " ONEZONE_IA"
31
+ }
32
+ ]
33
+ }
34
+ ]
35
+ }
36
+
37
+ resource "random_string" "s3_suffix" {
38
+ length = 8
39
+ special = false
40
+ upper = false
41
+ }
Original file line number Diff line number Diff line change @@ -75,6 +75,18 @@ config:
75
75
Mem_Buf_Limit 5MB
76
76
Skip_Long_Lines On
77
77
78
+ %{if s3_bucket_name != null}
79
+ [INPUT]
80
+ Name tail
81
+ Tag kube_s3.*
82
+ Path /var/log/containers/*.log
83
+ DB /var/log/flb_kube_s3.db
84
+ multiline.parser docker, cri
85
+ Docker_Mode On
86
+ Mem_Buf_Limit 5MB
87
+ Skip_Long_Lines On
88
+ %{ endif }
89
+
78
90
# # https://docs.fluentbit.io/manual/pipeline/filters
79
91
filters : |
80
92
[FILTER]
@@ -103,6 +115,24 @@ config:
103
115
%{ endfor ~}
104
116
%{ endif }
105
117
118
+ %{if s3_bucket_name != null}
119
+ [FILTER]
120
+ Name kubernetes
121
+ Match kube_s3.*
122
+ Kube_URL https://kubernetes.default.svc.cluster.local:443
123
+ Merge_Log On
124
+ Keep_Log Off
125
+ K8S-Logging.Parser On
126
+ Buffer_Size 31k
127
+
128
+ [FILTER]
129
+ Name parser
130
+ Match kube_s3.*
131
+ Key_Name log
132
+ Parser custom_apache
133
+ Reserve_Data true
134
+ %{ endif }
135
+
106
136
# # https://docs.fluentbit.io/manual/pipeline/outputs
107
137
outputs : |
108
138
[OUTPUT]
@@ -114,6 +144,17 @@ config:
114
144
log_stream_prefix fluentbit-
115
145
auto_create_group false
116
146
147
+ %{if s3_bucket_name != null}
148
+ [OUTPUT]
149
+ Name s3
150
+ Match kube_s3.*
151
+ region ap-southeast-1
152
+ bucket ${s3_bucket_name}
153
+ compression gzip
154
+ storage_class REDUCED_REDUNDANCY
155
+ retry_limit 2
156
+ %{ endif }
157
+
117
158
# extraFiles: {}
118
159
# upstream.conf: |
119
160
# [UPSTREAM]
Original file line number Diff line number Diff line change @@ -1564,3 +1564,9 @@ variable "fluent_bit_excluded_namespaces" {
1564
1564
type = list (string )
1565
1565
default = []
1566
1566
}
1567
+
1568
+ variable "fluent_bit_s3_bucket_enable" {
1569
+ description = " S3 bucket name to store fluentbit logs"
1570
+ type = bool
1571
+ default = false
1572
+ }
Original file line number Diff line number Diff line change @@ -14,5 +14,9 @@ terraform {
14
14
source = " hashicorp/kubernetes"
15
15
version = " >= 2.33"
16
16
}
17
+ random = {
18
+ source = " hashicorp/random"
19
+ version = " >= 3.5"
20
+ }
17
21
}
18
22
}
You can’t perform that action at this time.
0 commit comments