// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: MIT module "fluent_common" { source = "../common" ami_type = var.ami_type instance_type = var.instance_type } resource "kubernetes_config_map" "cluster_info" { depends_on = [ module.fluent_common ] metadata { name = "fluent-bit-cluster-info" namespace = "amazon-cloudwatch" } data = { "cluster.name" = module.fluent_common.cluster_name "logs.region" = var.region "http.server" = "On" "http.port" = "2020" "read.head" = "Off" "read.tail" = "On" } } resource "kubernetes_service_account" "fluentbit_service" { metadata { name = "fluent-bit" namespace = "amazon-cloudwatch" } } resource "kubernetes_cluster_role" "fluentbit_clusterrole" { metadata { name = "fluent-bit-role" } rule { non_resource_urls = ["/metrics"] verbs = ["get"] } rule { verbs = ["get", "list", "watch"] resources = ["namespaces", "pods", "pods/logs", "nodes", "nodes/proxy"] api_groups = [""] } } resource "kubernetes_cluster_role_binding" "fluentbit_rolebinding" { depends_on = [ kubernetes_service_account.fluentbit_service, kubernetes_cluster_role.fluentbit_clusterrole, ] metadata { name = "fluent-bit-role-binding" } role_ref { api_group = "rbac.authorization.k8s.io" kind = "ClusterRole" name = "fluent-bit-role" } subject { kind = "ServiceAccount" name = "fluent-bit" namespace = "amazon-cloudwatch" } } # TODO could use template file resource "kubernetes_config_map" "fluentbit_config" { depends_on = [ module.fluent_common ] metadata { name = "fluent-bit-config" namespace = "amazon-cloudwatch" labels = { k8s-app = "fluent-bit" } } data = { "fluent-bit.conf" = <[^ ]* {1,2}[^ ]* [^ ]*) (?[^ ]*) (?[a-zA-Z0-9_\/\.\-]*)(?:\[(?[0-9]+)\])?(?:[^\:]*\:)? *(?.*)$ Time_Key time Time_Format %b %d %H:%M:%S [PARSER] Name container_firstline Format regex Regex (?(?<="log":")\S(?!\.).*?)(?(?<="stream":").*?)".*(?