Created
April 8, 2020 12:14
-
-
Save dapseen/4c2daaa822d0968ab864f3872c511ac7 to your computer and use it in GitHub Desktop.
AWS fluentD, reduce logs to namespace
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
apiVersion: v1 | |
kind: ServiceAccount | |
metadata: | |
name: fluentd | |
namespace: amazon-cloudwatch | |
--- | |
apiVersion: rbac.authorization.k8s.io/v1 | |
kind: ClusterRole | |
metadata: | |
name: fluentd-role | |
rules: | |
- apiGroups: [""] | |
resources: | |
- namespaces | |
- pods | |
- pods/logs | |
verbs: ["get", "list", "watch"] | |
--- | |
apiVersion: rbac.authorization.k8s.io/v1 | |
kind: ClusterRoleBinding | |
metadata: | |
name: fluentd-role-binding | |
roleRef: | |
apiGroup: rbac.authorization.k8s.io | |
kind: ClusterRole | |
name: fluentd-role | |
subjects: | |
- kind: ServiceAccount | |
name: fluentd | |
namespace: amazon-cloudwatch | |
--- | |
apiVersion: v1 | |
kind: ConfigMap | |
metadata: | |
name: fluentd-config | |
namespace: amazon-cloudwatch | |
labels: | |
k8s-app: fluentd-cloudwatch | |
data: | |
fluent.conf: | | |
@include containers.conf | |
<match fluent.**> | |
@type null | |
</match> | |
<match var.log.containers.nginx-ingress-controller**> | |
@type null | |
</match> | |
<match var.log.containers.grafana**> | |
@type null | |
</match> | |
<match var.log.containers.prometheus**> | |
@type null | |
</match> | |
containers.conf: | | |
<source> | |
@type tail | |
@id in_tail_container_logs | |
@label @containers | |
path /var/log/containers/*.log | |
exclude_path ["/var/log/containers/cloudwatch-agent*", "/var/log/containers/fluentd*","/var/log/containers/grafa*","/var/log/containers/pro*","/var/log/containers/ng*","/var/log/containers/kub*","/var/log/containers/alb*","/var/log/containers/**_staging_**"] | |
pos_file /var/log/fluentd-containers.log.pos | |
tag * | |
read_from_head true | |
<parse> | |
@type json | |
time_format %Y-%m-%dT%H:%M:%S.%NZ | |
</parse> | |
</source> | |
<source> | |
@type tail | |
@id in_tail_cwagent_logs | |
@label @cwagentlogs | |
path /var/log/containers/cloudwatch-agent* | |
pos_file /var/log/cloudwatch-agent.log.pos | |
tag * | |
read_from_head true | |
<parse> | |
@type json | |
time_format %Y-%m-%dT%H:%M:%S.%NZ | |
</parse> | |
</source> | |
<label @containers> | |
<filter **> | |
@type kubernetes_metadata | |
@id filter_kube_metadata | |
</filter> | |
<filter **> | |
@type record_transformer | |
@id filter_containers_stream_transformer | |
<record> | |
stream_name ${tag_parts[3]} | |
</record> | |
remove_keys $.kubernetes.pod_id, $.kubernetes.master_url, $.kubernetes.container_image_id, $.kubernetes.namespace_id | |
</filter> | |
<filter **> | |
@type concat | |
key log | |
multiline_start_regexp /^\S/ | |
separator "" | |
flush_interval 5 | |
timeout_label @NORMAL | |
</filter> | |
<match var.log.containers.**_default_**> | |
@type relabel | |
@label @NORMAL | |
</match> | |
</label> | |
<label @cwagentlogs> | |
<filter **> | |
@type kubernetes_metadata | |
@id filter_kube_metadata_cwagent | |
</filter> | |
<filter **> | |
@type record_transformer | |
@id filter_cwagent_stream_transformer | |
<record> | |
stream_name ${tag_parts[3]} | |
</record> | |
remove_keys $.kubernetes.pod_id, $.kubernetes.master_url, $.kubernetes.container_image_id, $.kubernetes.namespace_id | |
</filter> | |
<filter **> | |
@type concat | |
key log | |
multiline_start_regexp /^\d{4}[-/]\d{1,2}[-/]\d{1,2}/ | |
separator "" | |
flush_interval 5 | |
timeout_label @NORMAL | |
</filter> | |
<match var.log.containers.**_default_**> | |
@type relabel | |
@label @NORMAL | |
</match> | |
</label> | |
<label @NORMAL> | |
<match **> | |
@type cloudwatch_logs | |
@id out_cloudwatch_logs_containers | |
region "#{ENV.fetch('REGION')}" | |
log_group_name "/aws/containerinsights/#{ENV.fetch('CLUSTER_NAME')}/application" | |
log_stream_name_key stream_name | |
remove_log_stream_name_key true | |
auto_create_stream true | |
<buffer> | |
flush_interval 5 | |
chunk_limit_size 2m | |
queued_chunks_limit_size 32 | |
retry_forever true | |
</buffer> | |
</match> | |
</label> | |
--- | |
apiVersion: apps/v1 | |
kind: DaemonSet | |
metadata: | |
name: fluentd-cloudwatch | |
namespace: amazon-cloudwatch | |
spec: | |
selector: | |
matchLabels: | |
k8s-app: fluentd-cloudwatch | |
template: | |
metadata: | |
labels: | |
k8s-app: fluentd-cloudwatch | |
annotations: | |
configHash: 8915de4cf9c3551a8dc74c0137a3e83569d28c71044b0359c2578d2e0461825 | |
spec: | |
serviceAccountName: fluentd | |
terminationGracePeriodSeconds: 30 | |
# Because the image's entrypoint requires to write on /fluentd/etc but we mount configmap there which is read-only, | |
# this initContainers workaround or other is needed. | |
# See https://github.com/fluent/fluentd-kubernetes-daemonset/issues/90 | |
initContainers: | |
- name: copy-fluentd-config | |
image: busybox | |
command: ['sh', '-c', 'cp /config-volume/..data/* /fluentd/etc'] | |
volumeMounts: | |
- name: config-volume | |
mountPath: /config-volume | |
- name: fluentdconf | |
mountPath: /fluentd/etc | |
- name: update-log-driver | |
image: busybox | |
command: ['sh','-c',''] | |
containers: | |
- name: fluentd-cloudwatch | |
image: fluent/fluentd-kubernetes-daemonset:v1.7.3-debian-cloudwatch-1.0 | |
env: | |
- name: REGION | |
valueFrom: | |
configMapKeyRef: | |
name: cluster-info | |
key: logs.region | |
- name: CLUSTER_NAME | |
valueFrom: | |
configMapKeyRef: | |
name: cluster-info | |
key: cluster.name | |
- name: CI_VERSION | |
value: "k8s/1.0.1" | |
resources: | |
limits: | |
memory: 400Mi | |
requests: | |
cpu: 100m | |
memory: 200Mi | |
volumeMounts: | |
- name: config-volume | |
mountPath: /config-volume | |
- name: fluentdconf | |
mountPath: /fluentd/etc | |
- name: varlog | |
mountPath: /var/log | |
- name: varlibdockercontainers | |
mountPath: /var/lib/docker/containers | |
readOnly: true | |
- name: runlogjournal | |
mountPath: /run/log/journal | |
readOnly: true | |
- name: dmesg | |
mountPath: /var/log/dmesg | |
readOnly: true | |
volumes: | |
- name: config-volume | |
configMap: | |
name: fluentd-config | |
- name: fluentdconf | |
emptyDir: {} | |
- name: varlog | |
hostPath: | |
path: /var/log | |
- name: varlibdockercontainers | |
hostPath: | |
path: /var/lib/docker/containers | |
- name: runlogjournal | |
hostPath: | |
path: /run/log/journal | |
- name: dmesg | |
hostPath: | |
path: /var/log/dmesg |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment