{
  "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"
          }
        }
      }
    },
    "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          {\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          {\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))\n      }},
      "confd": {
        "go_expvar.yaml": "|-
          init_config:\n          instances:\n          - expvar_url: http://localhost:6000/debug/vars # if you've defined \\`expvar_port\\` in datadog.yaml, change the port here to that value\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          }\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,
              "use_v2_api": false,
              "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 }
              ]
            }
          }
        }
    }
  }
}
