Feature 10966 Prometheus recording rules for VNF and NS status
[osm/devops.git] / installers / docker / osm_pods / ng-prometheus.yaml
diff --git a/installers/docker/osm_pods/ng-prometheus.yaml b/installers/docker/osm_pods/ng-prometheus.yaml
new file mode 100644 (file)
index 0000000..56aca67
--- /dev/null
@@ -0,0 +1,164 @@
+#######################################################################################
+# Copyright ETSI Contributors and Others.
+#
+# 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
+kind: Service
+metadata:
+  name: prometheus
+spec:
+  ports:
+  - nodePort: 9091
+    port: 9090
+    protocol: TCP
+    targetPort: 9090
+  selector:
+    app: prometheus
+  type: NodePort
+---
+apiVersion: v1
+data:
+  osm_rules.yml: |
+    groups:
+      - name: osm_rules
+        rules:
+        - record: vm_status_extended
+          expr: (last_over_time(vm_status[1m]) * on (vm_id, vim_id) group_left(ns_id, vnf_id, vdu_id, project_id, job) last_over_time(ns_topology[1m])) or (last_over_time(ns_topology[1m]) * -1)
+          labels:
+            job: osm_prometheus
+        - record: vnf_status
+          expr: (0 * (count (vm_status_extended==0) by (ns_id, vnf_id)>=0)) or (min by (ns_id, vnf_id) (vm_status_extended))
+          labels:
+            job: osm_prometheus
+        - record: ns_status
+          expr: (0 * (count (vm_status_extended==0) by (ns_id)>=0)) or (min by (ns_id) (vm_status_extended))
+          labels:
+            job: osm_prometheus
+  prometheus.yml: |
+    # Copyright 2018 The Prometheus Authors
+    # Copyright 2018 Whitestack
+    # Copyright 2018 Telefonica Investigacion y Desarrollo, S.A.U.
+    #
+    # 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.
+
+    # my global config
+    global:
+      scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
+      evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
+      # scrape_timeout is set to the global default (10s).
+
+    # Alertmanager configuration
+    alerting:
+      alertmanagers:
+      - static_configs:
+        - targets:
+          # - alertmanager:9093
+
+    # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
+    rule_files:
+      - "osm_rules.yml"
+      # - "second_rules.yml"
+
+    # A scrape configuration containing exactly one endpoint to scrape:
+    # Here it's Prometheus itself.
+    scrape_configs:
+      - job_name: pushgateway
+        honor_labels: true
+        scrape_interval: 30s
+        static_configs:
+        - targets:
+          - pushgateway-prometheus-pushgateway:9091
+kind: ConfigMap
+metadata:
+  name: prom
+---
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: prometheus
+  labels:
+    app: prometheus
+spec:
+  replicas: 1
+  serviceName: prometheus
+  selector:
+    matchLabels:
+      app: prometheus
+  template:
+    metadata:
+      labels:
+        app: prometheus
+    spec:
+      initContainers:
+      - name: prometheus-init-config
+        image: busybox
+        command: ["/bin/sh", "-c"]
+        args: ['if [ ! -f "/etc/prometheus/prometheus.yml" ]; then cp /config/prometheus.yml /etc/prometheus; fi; cp /config/osm_rules.yml /etc/prometheus']
+        volumeMounts:
+          - name: prom-config
+            mountPath: /etc/prometheus
+          - name: prom-config-base
+            mountPath: /config
+      containers:
+      - name: prometheus
+        image: prom/prometheus:v2.28.1
+        args:
+        - --config.file=/etc/prometheus/prometheus.yml
+        - --web.enable-lifecycle
+        ports:
+        - containerPort: 9090
+          protocol: TCP
+        volumeMounts:
+        - name: prom-config
+          mountPath: /etc/prometheus
+        - name: prom-db
+          mountPath: /prometheus
+      - name: prometheus-config-sidecar
+        image: opensourcemano/prometheus:12
+        env:
+        - name: MONGODB_URL
+          value: mongodb://mongodb-k8s:27017/?replicaSet=rs0
+        - name: PROMETHEUS_CONFIG_FILE
+          value: /etc/prometheus/prometheus.yml
+        - name: PROMETHEUS_BASE_CONFIG_FILE
+          value: /etc/prometheus_base/prometheus.yml
+        - name: TARGET_DATABASE
+          value: osm
+        - name: PROMETHEUS_URL
+          value: http://prometheus:9090
+        volumeMounts:
+        - name: prom-config
+          mountPath: /etc/prometheus
+        - name: prom-config-base
+          mountPath: /etc/prometheus_base
+      volumes:
+      - name: prom-db
+        emptyDir: {}
+      - name: prom-config
+        emptyDir: {}
+      - name: prom-config-base
+        configMap:
+          name: prom