# Licensed to Apache Software Foundation (ASF) under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Apache Software Foundation (ASF) licenses this file to you 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.
#

filters:
  - reason: ""     # filter events of the specified reason, regular expression like "Killing|Killed" is supported.
    message: ""    # filter events of the specified message, regular expression like "Pulling container.*" is supported.
    minCount: 1    # filter events whose count is >= the specified value.
    type: ""       # filter events of the specified type, regular expression like "Normal|Error" is supported.
    action: ""     # filter events of the specified action, regular expression is supported.
    kind: ""       # filter events of the specified kind, regular expression like "Pod|Service" is supported.
    namespace: ""  # filter events from the specified namespace, regular expression like "default|bookinfo" is supported, empty means all namespaces.
    name: ""       # filter events from the specified namespace, regular expression like ".*bookinfo.*" is supported.
    exporters:     # events satisfy this filter can be exported into several exporters that are defined in the `exporters` section below.
      - skywalking

exporters:         # defines and configures the exporters that can be used in the `filters` section above.
  skywalking:      # the exporter name, which is declared in the struct type `Exporter`'s Name function.
    # Below are exporter-specific configurations, different exporter may have different configuration contents.
    template:      # the event template of SkyWalking exporter, it can be composed of metadata like Event, Pod, and Service.
      source:
        service: "{{ .Service.Name }}"
        serviceInstance: "{{ .Pod.Name }}"
        endpoint: ""
      message: "{{ .Event.Message }}" # this is default, just to demonstrate the context
    address: "127.0.0.1:11800" # the SkyWalking backend address where this exporter will export to.
