{
  "fullnameOverride": "kfuse-agent",
  "nameOverride": "kfuse-agent",
  "datadog": {
    "logsEnabled": true,
    "logs": {
      "enabled": true,
      "containerCollectAll": true,
      "containerCollectUsingFiles": true,
      "autoMultiLineDetection": true,
      "dd_url": "http://kfuse-ingress-nginx-controller-internal.kfuse/ingester",
      "kubeStateMetricsEnabled": false,
      "kubeStateMetricsCore": {
        "enabled": true,
        "ignoreLegacyKSMCheck": true
      },
      "networkMonitoring": {
        "enabled": false
      },
      "orchestratorExplorer": {
        "enabled": true
      },
      "apiKey": "798999171d8a0e80030b20366f2994f4",
      "env": [
        {"name": "DD_CHECKS_TAG_CARDINALITY", "value": "orchestrator"},
        {"name": "DD_CONTAINER_INCLUDE", "value": "kube_namespace:.*"},
        {"name": "DD_CONTAINER_INCLUDE_LOGS", "value": "kube_namespace:.*"},
        {"name": "DD_CONTAINER_EXCLUDE_METRICS", "value": "name:gclog.*"},
        {"name": "DD_KUBERNETES_POD_LABELS_AS_TAGS", "value": "{\"*\":\"%%label%%\"}"},
        {"name": "DD_KUBERNETES_NODE_LABELS_AS_TAGS", "value": "{\"*\":\"%%label%%\"}"},
        {"name": "DD_LOGS_CONFIG_AUTO_MULTI_LINE_DEFAULT_MATCH_THRESHOLD", "value": "0.01"},
        {"name": "DD_LOGS_CONFIG_AUTO_MULTI_LINE_EXTRA_PATTERNS", "value": "'^\d{4}/\d{2}/\d{2}\s\d{2}:\d{2}:\d{2}(\.\d+)? ^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}(\.\d+)? ^\d+:\d+:\d+(\.\d+)?'"}
      ],
      "apm": {
        "enabled": true,
        "portEnabled": true
      },
      "dogstatsd": {
        "port": 8126,
        "useHostPort": false
      },
      "processAgent": {
        "enabled": true
      },
      "prometheusScrape": {
        "enabled": true,
        "version": 1
      },
      "additionalConfigs": [
        {
          "configurations": [
            {
              "send_monotonic_counter": false,
              "send_distribution_counts_as_monotonic": false,
              "send_distribution_sums_as_monotonic": false,
              "send_histograms_buckets": true,
              "max_returned_metrics": 999999,
              "min_collection_interval": 15
            }
          ]
        }
      ],
      "autodiscovery": {
        "kubernetes_annotations": {
          "exclude": {
            "app": "knight",
            "prometheus.io/scrape": "false"
          }
        },
        "kubernetes_container_names": ["knight"]
      },
      "checksd": {
        "kf_openmetrics.py": "|-
          from datadog_checks.base import AgentCheck, OpenMetricsBaseCheckV2\n          import os, requests, json, time\n\n          col_names = ['metric_name', 'metric_type', 'description']\n          METRIC_TYPE_EXPANSIONS = {\n            'histogram' : {\n              'count' : {'type': 'count', 'desc_prefix' : 'Count of'},\n              'sum' : {'type': 'gauge', 'desc_prefix' : 'Sum of'},\n              'bucket' : {'type': 'gauge', 'desc_prefix' : 'Buckets of samples of'},\n              'min' : {'type': 'gauge', 'desc_prefix' : 'Minimum value of'},\n              'max' : {'type': 'gauge', 'desc_prefix' : 'Maximum value of'},\n            },\n            'summary' : {\n              'count' : {'type': 'count', 'desc_prefix' : 'Count of'},\n              'sum' : {'type': 'gauge', 'desc_prefix' : 'Sum of'},\n              'quantile' : {'type': 'gauge', 'desc_prefix' : 'Various quantile values of'},\n            }\n          }\n\n          HELP_TEXT = '# HELP'\n          TYPE_TEXT = '# TYPE'\n          DEFAULT_URL = 'http://%%host%%:%%port%%/metrics'\n          class KfOpenMetricsCheck(AgentCheck):\n            def __init__(self, name, init_config, instances):\n              super(KfOpenMetricsCheck, self).__init__(name, init_config, instances)\n              self.log.info("initializing kf_openmetrics check {}".format(instances))\n\n            def get_default_config(self):\n              return {}\n\n            def scrape_endpoint(self, scrape_url):\n              response = requests.get(scrape_url)\n              if response.status_code != 200:\n                raise Exception('failed to scrape endpoint: %s (error: %s)', scrape_url, response)\n              return response.content.decode('utf-8')\n\n            def prepare_mds(self, data):\n              mds = {}\n              content = data.splitlines()\n              def _get_info(line, prefix_text):\n                items = line[len(prefix_text):].split()\n                return items[0], ' '.join(items[1:])\n              def _add_info(metric_name, info, value):\n                if metric_name not in mds:\n                  mds.update({metric_name:{}})\n                mds[metric_name][info] = value\n              def _expand_info(metric_name):\n                if mds[metric_name]['type'] not in METRIC_TYPE_EXPANSIONS:\n                  return\n                extensions = METRIC_TYPE_EXPANSIONS[mds[metric_name]['type']]\n                for ext_name, extension in extensions.items():\n                  prefix = ""\n                  suffix = ""\n                  try:\n                    prefix = extension['desc_prefix']\n                  except KeyError:\n                    pass\n                  try:\n                    suffix = extension['desc_suffix']\n                  except KeyError:\n                    pass\n                  mds.update({'%s_%s'% (mname, ext_name): {'type' : extension['type'], 'desc' : ('%s %s %s' % (prefix, mdesc, suffix)).strip()}})\n              for l in content: \n                if l.startswith(HELP_TEXT):\n                  mname, mdesc = _get_info(l, HELP_TEXT)\n                  _add_info(mname, 'desc', mdesc)\n                if l.startswith(TYPE_TEXT):\n                  mname, mtype = _get_info(l, TYPE_TEXT)\n                  _add_info(mname, 'type', mtype)\n                _expand_info(mname)\n              return mds\n\n            def check(self, instance):\n              scrape_url = ''\n              try:\n                scrape_url = instance.get('openmetrics_endpoint')\n                if scrape_url != DEFAULT_URL:\n                  self.log.info("running kf_openmetrics check for instance {}".format(instance))\n                  data = self.scrape_endpoint(scrape_url)\n                  mds = self.prepare_mds(data)\n                  self.log.info("prepared mds len:{}, {}".format(len(mds), mds))\n                  self.event(\n                    {\n                      "timestamp": time.time(),\n                      "event_type": "OpenMetricsMetadata",\n                      "msg_title" : "OpenMetricsMetadata",\n                      "msg_text": json.dumps(mds)\n                    }\n                  )\n                else:\n                  self.log.info("skipping kf_openmetrics check for instance {}".format(instance))\n              except KeyError as ke:\n                self.log.info("failed to scrape url={}, exc={}".format(scrape_url, ke))\n              except requests.exceptions.InvalidURL as ie:\n                self.log.info("invalid url={}, instance={}, exc={}".format(scrape_url, instance, ke))
        },
        "confd": {
          "go_expvar.yaml": "|-
            init_config:\n              instances:\n                - expvar_url: http://localhost:6000/debug/vars \n                  namespace: datadog.agent\n                  metrics:\n                    - path: forwarder/Transactions/RetryQueueSize\n                    - path: forwarder/Transactions/Success\n                      type: rate\n                    - path: forwarder/Transactions/Errors\n                      type: rate\n                    - path: forwarder/Transactions/ErrorsByType/DNSErrors\n                      type: rate\n                    - path: forwarder/Transactions/ErrorsByType/TLSErrors\n                      type: rate\n                    - path: forwarder/Transactions/ErrorsByType/ConnectionErrors\n                      type: rate\n                    - path: forwarder/Transactions/ErrorsByType/WroteRequestErrors\n                      type: rate\n                    - path: forwarder/Transactions/ErrorsByType/SentRequestErrors\n                      type: rate\n                    - path: forwarder/Transactions/HTTPErrors\n                      type: rate\n                    - path: dogstatsd-udp/Packets\n                      type: rate\n                    - path: dogstatsd-udp/PacketReadingErrors\n                      type: rate\n                    - path: dogstatsd-uds/Packets\n                      type: rate\n                    - path: dogstatsd-uds/PacketReadingErrors\n                      type: rate\n                    - path: dogstatsd-uds/OriginDetectionErrors\n                      type: rate\n                    - path: dogstatsd/ServiceCheckParseErrors\n                      type: rate\n                    - path: dogstatsd/ServiceCheckPackets\n                      type: rate\n                    - path: dogstatsd/EventParseErrors\n                      type: rate\n                    - path: dogstatsd/EventPackets\n                      type: rate\n                    - path: dogstatsd/MetricParseErrors\n                      type: rate\n                    - path: dogstatsd/MetricPackets\n                      type: rate\n                    - path: aggregator/Flush/ChecksMetricSampleFlushTime/LastFlush\n                    - path: aggregator/Flush/ServiceCheckFlushTime/LastFlush\n                    - path: aggregator/Flush/EventFlushTime/LastFlush\n                    - path: aggregator/Flush/MetricSketchFlushTime/LastFlush\n                    - path: aggregator/Flush/MainFlushTime/LastFlush\n                    - path: aggregator/FlushCount/ServiceChecks/LastFlush\n                    - path: aggregator/FlushCount/Series/LastFlush\n                    - path: aggregator/FlushCount/Events/LastFlush\n                    - path: aggregator/FlushCount/Sketches/LastFlush\n                    - path: aggregator/DogstatsdContexts\n                    - path: aggregator/SeriesFlushed\n                      type: rate\n                    - path: aggregator/ServiceCheckFlushed\n                      type: rate\n                    - path: aggregator/EventsFlushed\n                      type: rate\n                    - path: aggregator/NumberOfFlush\n                      type: rate\n                    - path: aggregator/DogstatsdMetricSample\n                      type: rate\n                    - path: aggregator/ChecksMetricSample\n                      type: rate\n                    - path: aggregator/ServiceCheck\n                      type: rate\n                    - path: aggregator/Event\n                      type: rate\n                    - path: aggregator/HostnameUpdate\n                      type: rate\n                    - path: scheduler/ChecksEntered\n                    - path: scheduler/Queues/.*/Size\n                      alias: scheduler.queues.size\n                    - path: scheduler/Queues/.*/Interval\n                      alias: scheduler.queues.interval\n                    - path: scheduler/QueuesCount\n                    - path: splitter/NotTooBig\n                      type: rate\n                    - path: splitter/TooBig\n                      type: rate\n                    - path: splitter/TotalLoops\n                      type: rate\n                    - path: splitter/PayloadDrops\n                      type: rate\n                    - path: logs-agent/IsRunning\n                      type: gauge\n                    - path: logs-agent/DestinationErrors\n                      type: rate\n                    - path: logs-agent/LogsDecoded\n                      type: rate\n                    - path: logs-agent/LogsProcessed\n                      type: rate\n                    - path: logs-agent/LogsSent\n                      type: rate\n                    - path: logs-agent/BytesSent\n                      type: rate\n                    - path: logs-agent/EncodedBytesSent\n                      type: rate\n                    - path: logs-agent/HttpDestinationStats/logs_0_reliable_0/idleMs\n                      type: rate\n                      alias: batch_strategy.idle_time\n                      tags:\n                        - sender:0\n                    - path: logs-agent/HttpDestinationStats/logs_0_reliable_0/inUseMs\n                      type: rate\n                      alias: batch_strategy.in_use_time\n                      tags:\n                        - sender:0\n                    - path: logs-agent/HttpDestinationStats/logs_1_reliable_0/idleMs\n                      type: rate\n                      alias: batch_strategy.idle_time\n                      tags:\n                        - sender:1\n                    - path: logs-agent/HttpDestinationStats/logs_1_reliable_0/inUseMs\n                      type: rate\n                      alias: batch_strategy.in_use_time\n                      tags:\n                        - sender:1\n                    - path: logs-agent/HttpDestinationStats/logs_2_reliable_0/idleMs\n                      type: rate\n                      alias: batch_strategy.idle_time\n                      tags:\n                        - sender:2\n                    - path: logs-agent/HttpDestinationStats/logs_2_reliable_0/inUseMs\n                      type: rate\n                      alias: batch_strategy.in_use_time\n                      tags:\n                        - sender:2\n                    - path: logs-agent/HttpDestinationStats/logs_3_reliable_0/idleMs\n                      type: rate\n                      alias: batch_strategy.idle_time\n                      tags:\n                        - sender:3\n                    - path: logs-agent/HttpDestinationStats/logs_3_reliable_0/inUseMs\n                      type: rate\n                      alias: batch_strategy.in_use_time\n                      tags:\n                        - sender:3\n          ",
          "kf_openmetrics.yaml": "|-
            init_config:\n              instances:\n                - openmetrics_endpoint: http://%%host%%:%%port%%/metrics\n                  min_collection_interval: 300\n        },
        "clusterAgent": {
          "replicaCount": 1,
          "enabled": true,
          "datadog_cluster_yaml": {
            "use_v2_api": {
              "events": true,
              "series": true,
              "service_checks": true
            },
            "process_config": {
              "process_dd_url": "http://kfuse-ingress-nginx-controller-internal.kfuse/ingester",
              "events_dd_url": "http://kfuse-ingress-nginx-controller-internal.kfuse/ingester",
              "container_collection": {
                "enabled": false
              },
              "orchestrator_explorer": {
                "orchestrator_dd_url": "http://kfuse-ingress-nginx-controller-internal.kfuse"
              },
              "manifest_collection": {
                "enabled": false
              },
              "admissionController": {
                "enabled": false
              }
            }
          },
          "agents": {
            "image": {"tagSuffix": "jmx", "useConfigMap": true},
            "customAgentConfig": {
              "skip_ssl_validation": false,
              "enable_stream_payload_serialization": false,
              "use_v2_api": {
                "events": true,
                "series": true,
                "service_checks": true
              },
              "process_config": {
                "process_dd_url": "http://kfuse-ingress-nginx-controller-internal.kfuse/ingester",
                "events_dd_url": "http://kfuse-ingress-nginx-controller-internal.kfuse/ingester",
                "container_collection": {
                  "enabled": false
                },
                "orchestrator_explorer": {
                  "orchestrator_dd_url": "http://kfuse-ingress-nginx-controller-internal.kfuse"
                },
                "manifest_collection": {
                  "enabled": false
                },
                "logs_config": {
                  "logs_dd_url": "kfuse-ingress-nginx-controller-internal.kfuse:80",
                  "logs_no_ssl": true,
                  "use_http": true,
                  "auto_multi_line_detection": true,
                  "apm_config": {
                    "enabled": true,
                    "apm_non_local_traffic": true,
                    "apm_dd_url": "kfuse-ingress-nginx-controller-internal.kfuse:80/ingester"
                  }
                },
                "metadata_providers": [{"name": "host", "interval": 300}]
              }
            }
          }
        }
      }
    }
   
}
