diff --git a/ceph-mon/templates/bin/mon/_fluentbit-sidecar.sh.tpl b/ceph-mon/templates/bin/mon/_fluentbit-sidecar.sh.tpl new file mode 100644 index 0000000000..f72e41de16 --- /dev/null +++ b/ceph-mon/templates/bin/mon/_fluentbit-sidecar.sh.tpl @@ -0,0 +1,19 @@ +#!/bin/sh +{{/* +Copyright 2017 The Openstack-Helm Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/}} +set -ex + +exec /fluent-bit/bin/fluent-bit -c /fluent-bit/etc/fluent-bit.conf diff --git a/ceph-mon/templates/configmap-bin.yaml b/ceph-mon/templates/configmap-bin.yaml index d13967a549..e9945bf580 100644 --- a/ceph-mon/templates/configmap-bin.yaml +++ b/ceph-mon/templates/configmap-bin.yaml @@ -54,4 +54,8 @@ data: moncheck-reap-zombies.py: | {{ tuple "bin/moncheck/_reap-zombies.py.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} +{{ if .Values.logging.fluentd }} + fluentbit-sidecar.sh: | +{{ tuple "bin/mon/_fluentbit-sidecar.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} +{{ end }} {{- end }} diff --git a/ceph-mon/templates/configmap-etc.yaml b/ceph-mon/templates/configmap-etc.yaml index f6030ac6a3..9fdee20389 100644 --- a/ceph-mon/templates/configmap-etc.yaml +++ b/ceph-mon/templates/configmap-etc.yaml @@ -38,6 +38,14 @@ limitations under the License. {{- .Values.network.public | set .Values.conf.ceph.osd "public_network" | quote | trunc 0 -}} {{- end -}} +{{- if not (has "fluentd_output" .Values.conf.fluentbit) -}} +{{- $fluentd_host := tuple "fluentd" "internal" $envAll | include "helm-toolkit.endpoints.hostname_namespaced_endpoint_lookup" }} +{{- $fluentd_port := tuple "fluentd" "internal" "service" $envAll | include "helm-toolkit.endpoints.endpoint_port_lookup" }} +{{- $fluentd_output := dict "header" "output" "Name" "forward" "Match" "*" "Host" $fluentd_host "Port" $fluentd_port -}} +{{- $_ := set .Values "__fluentbit_config" ( list $fluentd_output) -}} +{{- $__fluentbit_config := append .Values.conf.fluentbit .Values.__fluentbit_config -}} +{{- $_ := set .Values.conf "fluentbit" $__fluentbit_config -}} +{{- end -}} --- apiVersion: v1 kind: ConfigMap @@ -46,7 +54,12 @@ metadata: data: ceph.conf: | {{ include "helm-toolkit.utils.to_ini" .Values.conf.ceph | indent 4 }} - +{{ if .Values.logging.fluentd }} + fluent-bit.conf: | +{{ include "ceph-mon.utils.to_fluentbit_conf" .Values.conf.fluentbit | indent 4 }} + parsers.conf: | +{{ include "ceph-mon.utils.to_fluentbit_conf" .Values.conf.parsers | indent 4 }} +{{ end }} {{- end }} {{- end }} {{- end }} diff --git a/ceph-mon/templates/daemonset-mon.yaml b/ceph-mon/templates/daemonset-mon.yaml index 17d0cbb54f..4ed84c1516 100644 --- a/ceph-mon/templates/daemonset-mon.yaml +++ b/ceph-mon/templates/daemonset-mon.yaml @@ -179,7 +179,33 @@ spec: - name: pod-run mountPath: /run readOnly: false + - name: varlog + mountPath: /var/log/ceph + {{ if .Values.logging.fluentd }} + - name: fluentbit-sidecar +{{ tuple $envAll "fluentbit" | include "helm-toolkit.snippets.image" | indent 10 }} +{{ tuple $envAll $envAll.Values.pod.resources.fluentbit | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }} + command: + - /tmp/fluentbit-sidecar.sh + volumeMounts: + - name: ceph-mon-bin + mountPath: /tmp/fluentbit-sidecar.sh + subPath: fluentbit-sidecar.sh + readOnly: true + - name: varlog + mountPath: /var/log/ceph + - name: ceph-mon-etc + mountPath: /fluent-bit/etc/fluent-bit.conf + subPath: fluent-bit.conf + readOnly: true + - name: ceph-mon-etc + mountPath: /fluent-bit/etc/parsers.conf + subPath: parsers.conf + readOnly: true + {{ end }} volumes: + - name: varlog + emptyDir: {} - name: ceph-mon-bin configMap: name: ceph-mon-bin diff --git a/ceph-mon/templates/utils/_to_fluentbit_conf.tpl b/ceph-mon/templates/utils/_to_fluentbit_conf.tpl new file mode 100644 index 0000000000..773120488b --- /dev/null +++ b/ceph-mon/templates/utils/_to_fluentbit_conf.tpl @@ -0,0 +1,38 @@ +{{/* +Copyright 2017 The Openstack-Helm Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/}} + +# This function generates fluentbit configuration files with entries in the +# ceph-mon values.yaml. It results in a configuration section with the +# following format (for as many key/value pairs defined in values for a section): +# [HEADER] +# key value +# key value +# key value +# The configuration schema can be found here: +# http://fluentbit.io/documentation/0.12/configuration/schema.html + +{{- define "ceph-mon.utils.to_fluentbit_conf" -}} +{{- range $values := . -}} +{{- range $section := . -}} +{{- $header := pick . "header" -}} +{{- $config := omit . "header" }} +[{{$header.header | upper }}] +{{range $key, $value := $config -}} +{{ $key | indent 4 }} {{ $value }} +{{end -}} +{{- end -}} +{{- end -}} +{{- end -}} diff --git a/ceph-mon/values.yaml b/ceph-mon/values.yaml index f5162a3c35..899b90dcc3 100644 --- a/ceph-mon/values.yaml +++ b/ceph-mon/values.yaml @@ -23,6 +23,7 @@ images: ceph_config_helper: 'docker.io/port/ceph-config-helper:v1.10.3' ceph_mon: 'docker.io/ceph/daemon:tag-build-master-luminous-ubuntu-16.04' ceph_mon_check: 'docker.io/port/ceph-config-helper:v1.10.3' + fluentbit: docker.io/fluent/fluent-bit:0.12.14 dep_check: 'quay.io/stackanetes/kubernetes-entrypoint:v0.3.1' image_repo_sync: docker.io/docker:17.07.0 local_registry: @@ -65,6 +66,13 @@ pod: limits: memory: "50Mi" cpu: "500m" + fluentbit: + requests: + memory: "5Mi" + cpu: "250m" + limits: + memory: "50Mi" + cpu: "500m" jobs: bootstrap: limits: @@ -151,6 +159,37 @@ conf: storage: mon: directory: /var/lib/openstack-helm/ceph/mon + fluentbit: + - service: + header: service + Flush: 30 + Daemon: Off + Log_Level: info + Parsers_File: parsers.conf + - ceph_tail: + # NOTE(srwilkers): Despite being exposed, these values should not be + # modified, as the ceph-mon logs are always placed here + header: input + Name: tail + Tag: ceph-mon.* + Path: /var/log/ceph/*.log + Parser: syslog + DB: /var/log/ceph/ceph.db + Mem_Buf_Limit: 5MB + Refresh_Interval: 10s + parsers: + - syslog: + header: parser + Name: syslog + Format: regex + Regex: '^(?