# Copyright 2017-present Open Networking Foundation
#
# 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.
apiVersion: v1
data:
  fluentd.conf: |
    <source>
      @id fluentd-containers.log
      @type tail
      path /var/log/containers/*.log
      exclude_path ["/var/log/containers/*kube-system*.log"]
      pos_file /var/log/containers/ag-containers.log.pos
      time_format %Y-%m-%dT%H:%M:%S.%NZ
      tag voltha.*
      log_level debug
      format json
      read_from_head true
    </source>
    <match **>
      @type forward
      heartbeat_type tcp

      # primary host
      <server>
        host fluentdactv
        port 24224
      </server>
      # use secondary host
      <server>
        host fluentdstby
        port 24224
        standby
      </server>
      # use longer flush_interval to reduce CPU usage.
      # note that this is a trade-off against latency.
      flush_interval 60s
    </match>

  fluentd-agg.conf: |
    <source>
      @type forward
      port 24224
    </source>
    <match **>
      @type file

      path /fluentd/log/voltha
      buffer_path /fluentd/log/*.log
      append true
      time_slice_wait 10m
      time_format %Y%m%dT%H%M%S%z
      time_slice_format %Y%m%d%H
    </match>
kind: ConfigMap
metadata:
  name: fluentd-config
  namespace: voltha
