# Downloadable YAML; this comment prevents Jekyll front matter parsing.
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: metricbeat-config
  namespace: default
data:
  metricbeat.yml: |
    metricbeat.modules:
      - module: prometheus
        period: 60s
        metricsets: ["collector"]
        hosts: ["prometheus_ip:prometheus_port"]
        metrics_path: /metrics
      - module: prometheus
        metricsets: ["remote_write"]
        host: "prometheus_remote_write_ip"
        port: "prometheus_remote_write_port"
      - module: prometheus
        metricsets: ["query"]
        hosts: ["prometheus_ip:prometheus_port"]
        period: 60s
        queries:
        - name: "instant_vector_test_1"
          path: "/api/v1/query"
          params:
            query: "sum(rate(prometheus_http_requests_total[1m]))"
    output.elasticsearch:
      enabled: true
      hosts: ["http://elasticsearch:9200"]
      worker: 10
      bulk_max_size: 1000
      compression_level: 1
      #backoff.init: 1s
      #backoff.max: 60s
      #timeout: 120
      #max_retries: 3
    #output.logstash:
      #enabled: true
      #hosts: ["logstash:5044"]
    setup.ilm:
      enabled: true
      rollover_alias: "metricbeat-prometheus"
      pattern: "{now/d}-000001"
      check_exists: true
      overwrite: true
      #overwrite: false
      policy_name: "metricbeat-prometheus-ilm-policy"
      policy_file: /usr/share/metricbeat/ilm-policy.json
    setup.template.enabled: true
    setup.template.json.enabled: true
    setup.template.json.path: "/usr/share/metricbeat/template.json"
    setup.template.json.name: "metricbeat-prometheus-template"
    setup.template.overwrite: true

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: metricbeat-prometheus-ilm-policy
  namespace: default
data:
  ilm-policy.json: |
    {
    "policy": {
        "phases": {
        "hot": {
            "actions": {
            "rollover": {
                "max_size": "5gb",
                "max_age": "1d"
            }
            }
        },
        "delete": {
            "min_age": "365d",
            "actions": {
            "delete": {}
            }
        }
        }
    }
    }

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: metricbeat-prometheus-template
  namespace: default
data:
  template.json: |
    {
    "index_patterns": [
      "metricbeat-prometheus-*"
    ],
    "settings" : {
      "index" : {
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "lifecycle.name": "metricbeat-prometheus-ilm-policy",
        "lifecycle.rollover_alias": "metricbeat-prometheus"
      }
    },
    "mappings" : {
      "properties" : {
        "@timestamp" : {
          "type" : "date"
        },
        "agent" : {
          "properties" : {
            "ephemeral_id" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "hostname" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "id" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "name" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "type" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "version" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        },
        "ecs" : {
          "properties" : {
            "version" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        },
        "event" : {
          "properties" : {
            "dataset" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "duration" : {
              "type" : "long"
            },
            "module" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        },
        "host" : {
          "properties" : {
            "name" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        },
        "metricset" : {
          "properties" : {
            "name" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "period" : {
              "type" : "long"
            }
          }
        },
        "prometheus" : {
          "properties" : {
            "labels" : {
              "properties" : {
                "area" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "branch" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "breaker" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "build_date" : {
                  "type" : "date"
                },
                "build_hash" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "cache" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "cluster" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "cluster_uuid" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "code" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "color" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "device" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "es_client_node" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "es_data_node" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "es_ingest_node" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "es_master_node" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "gc" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "goversion" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "handler" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "host" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "index" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "instance" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "job" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "lucene_version" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "method" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "mount" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "name" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "node" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "path" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "pool" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "quantile" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "revision" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "role" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "shard" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "type" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "url" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "version" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                }
              }
            }
          }
        },
        "service" : {
          "properties" : {
            "address" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "type" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        }
      }
    }
    }

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metricbeat-prometheus
  namespace: default
  labels:
    app: metricbeat-prometheus
spec:
  replicas: 1
  selector:
    matchLabels:
      app: metricbeat-prometheus
  template:
    metadata:
      labels:
        app: metricbeat-prometheus
    spec:
      containers:
      - name: metricbeat-prometheus
        image: elastic/metricbeat:7.14.0
        volumeMounts:
          - name: config
            mountPath: /usr/share/metricbeat/metricbeat.yml
            subPath: metricbeat.yml
          - name: template
            mountPath: /usr/share/metricbeat/template.json
            subPath: template.json
          - name: ilm-policy
            mountPath: /usr/share/metricbeat/ilm-policy.json
            subPath: ilm-policy.json
      volumes:
        - name: config
          configMap:
            name: metricbeat-prometheus-config
        - name: template
          configMap:
            name: metricbeat-prometheus-template
        - name: ilm-policy
          configMap:
            name: metricbeat-prometheus-ilm-policy
