Merge "Add prometheus monitoring to reclass"
diff --git a/docker/swarm/network/monitoring.yml b/docker/swarm/network/monitoring.yml
new file mode 100644
index 0000000..a049aac
--- /dev/null
+++ b/docker/swarm/network/monitoring.yml
@@ -0,0 +1,8 @@
+parameters:
+  docker:
+    client:
+      network:
+        monitoring:
+          driver: overlay
+          opt:
+            encrypted: true
diff --git a/docker/swarm/service/dashboard/grafana_server.yml b/docker/swarm/service/dashboard/grafana_server.yml
new file mode 100644
index 0000000..4ed587e
--- /dev/null
+++ b/docker/swarm/service/dashboard/grafana_server.yml
@@ -0,0 +1,13 @@
+parameters:
+  docker:
+    client:
+      service:
+        grafana_server:
+          replica: 1
+          environment:
+            GF_SECURITY_ADMIN_PASSWORD: ${_param:grafana_admin_password}
+          restart:
+            condition: any
+          image: ${_param:docker_image_grafana}
+          ports:
+            - 15013:3000
diff --git a/docker/swarm/service/monitoring/prometheus_alertmanager.yml b/docker/swarm/service/monitoring/prometheus_alertmanager.yml
new file mode 100644
index 0000000..74b20f5
--- /dev/null
+++ b/docker/swarm/service/monitoring/prometheus_alertmanager.yml
@@ -0,0 +1,23 @@
+include:
+- service.prometheus.alertmanager.container
+parameters:
+  docker:
+    client:
+      service:
+        prometheus_alertmanager:
+          network: monitoring
+          replica: 2
+          environment:
+            config_dir: /opt/alertmanager/config
+            bind_port: ${prometheus:alertmanager:bind:port}
+            bind_address: ${prometheus:alertmanager:bind:address}
+          restart:
+            condition: any
+          image: ${_param:docker_image_alertmanager}
+          ports:
+            - 15011:${prometheus:alertmanager:bind:port}
+          volume:
+            site:
+              type: bind
+              source: /srv/volumes/prometheus-config
+              destination: /opt/alertmanager/config
diff --git a/docker/swarm/service/monitoring/prometheus_pushgateway.yml b/docker/swarm/service/monitoring/prometheus_pushgateway.yml
new file mode 100644
index 0000000..7ba37af
--- /dev/null
+++ b/docker/swarm/service/monitoring/prometheus_pushgateway.yml
@@ -0,0 +1,12 @@
+parameters:
+  docker:
+    client:
+      service:
+        prometheus_pushgateway:
+          network: monitoring
+          replica: 2
+          restart:
+            condition: any
+          image: ${_param:docker_image_pushgateway}
+          ports:
+            - 15012:9091
diff --git a/docker/swarm/service/monitoring/prometheus_server.yml b/docker/swarm/service/monitoring/prometheus_server.yml
new file mode 100644
index 0000000..24a9193
--- /dev/null
+++ b/docker/swarm/service/monitoring/prometheus_server.yml
@@ -0,0 +1,29 @@
+include:
+- service.prometheus.server.container
+parameters:
+  docker:
+    client:
+      service:
+        prometheus_server:
+          network: monitoring
+          replica: 1
+          environment:
+            config_dir: /opt/prometheus/config
+            bind_port: ${prometheus:server:bind:port}
+            bind_address: ${prometheus:server:bind:address}
+            alertmanager_port: ${prometheus:alertmanager:bind:port}
+            storage_local_engine: ${prometheus:server:storage:local:engine}
+            storage_local_retention: ${prometheus:server:storage:local:retention}
+            storage_local_memory_chunks: ${prometheus:server:storage:local:memory_chunks}
+            storage_local_max_chunks_to_persist: ${prometheus:server:storage:local:max_chunks_to_persist}
+            storage_local_num_fingerprint_mutexes: ${prometheus:server:storage:local:num_fingerprint_mutexes}
+          restart:
+            condition: any
+          image: ${_param:docker_image_prometheus}
+          ports:
+            - 15010:${prometheus:server:bind:port}
+          volume:
+            site:
+              type: bind
+              source: /srv/volumes/prometheus-config
+              destination: /opt/prometheus/config
diff --git a/glusterfs/client/volume/prometheus.yml b/glusterfs/client/volume/prometheus.yml
new file mode 100644
index 0000000..f8b2f3d
--- /dev/null
+++ b/glusterfs/client/volume/prometheus.yml
@@ -0,0 +1,10 @@
+parameters:
+  _param:
+    prometheus_glusterfs_service_host: ${_param:glusterfs_service_host}
+  glusterfs:
+    client:
+      volumes:
+        prometheus-config:
+          path: /srv/volumes/prometheus-config
+          server: ${_param:prometheus_glusterfs_service_host}
+          opts: 'defaults'
diff --git a/glusterfs/server/volume/prometheus.yml b/glusterfs/server/volume/prometheus.yml
new file mode 100644
index 0000000..2c4ca31
--- /dev/null
+++ b/glusterfs/server/volume/prometheus.yml
@@ -0,0 +1,17 @@
+parameters:
+  glusterfs:
+    server:
+      volumes:
+        prometheus-config:
+          storage: /srv/glusterfs/prometheus-config
+          replica: 3
+          bricks:
+            - ${_param:cluster_node01_address}:/srv/glusterfs/prometheus-config
+            - ${_param:cluster_node02_address}:/srv/glusterfs/prometheus-config
+            - ${_param:cluster_node03_address}:/srv/glusterfs/prometheus-config
+          options:
+            cluster.readdir-optimize: On
+            nfs.disable: On
+            network.remote-dio: On
+            diagnostics.client-log-level: WARNING
+            diagnostics.brick-log-level: WARNING
diff --git a/prometheus/server/target/etcd.yml b/prometheus/server/target/etcd.yml
new file mode 100644
index 0000000..e343bda
--- /dev/null
+++ b/prometheus/server/target/etcd.yml
@@ -0,0 +1,6 @@
+classes:
+- service.etcd.server.cluster
+parameters:
+  server:
+    target:
+      etcd: ${etcd:server:members}
diff --git a/prometheus/server/target/kubernetes.yml b/prometheus/server/target/kubernetes.yml
new file mode 100644
index 0000000..293895b
--- /dev/null
+++ b/prometheus/server/target/kubernetes.yml
@@ -0,0 +1,10 @@
+classes:
+- service.kubernetes.master.cluster
+parameters:
+  server:
+    target:
+      kubernetes:
+        api_ip: ${kubernetes:master:apiserver:address}
+        ssl_dir: /opt/prometheus/config
+        cert_name: kubelet-client.crt
+        key_name: kubelet-client.key
diff --git a/salt/master/formula/git/monitoring.yml b/salt/master/formula/git/monitoring.yml
new file mode 100644
index 0000000..e0cf30d
--- /dev/null
+++ b/salt/master/formula/git/monitoring.yml
@@ -0,0 +1,14 @@
+parameters:
+  salt:
+    master:
+      environment:
+        dev:
+          formula:
+            prometheus:
+              source: git
+              address: '${_param:salt_master_environment_repository}/salt-formula-prometheus.git'
+              revision: ${_param:salt_master_environment_revision}
+            telegraf:
+              source: git
+              address: '${_param:salt_master_environment_repository}/salt-formula-telegraf.git'
+              revision: ${_param:salt_master_environment_revision}
diff --git a/salt/master/formula/pkg/monitoring.yml b/salt/master/formula/pkg/monitoring.yml
new file mode 100644
index 0000000..375cbd8
--- /dev/null
+++ b/salt/master/formula/pkg/monitoring.yml
@@ -0,0 +1,12 @@
+parameters:
+  salt:
+    master:
+      environment:
+        prd:
+          formula:
+            prometheus:
+              source: pkg
+              name: salt-formula-prometheus
+            telegraf:
+              source: pkg
+              name: salt-formula-telegraf
diff --git a/salt/master/git.yml b/salt/master/git.yml
index bcde77c..02d0b67 100644
--- a/salt/master/git.yml
+++ b/salt/master/git.yml
@@ -6,6 +6,7 @@
 - system.salt.master.formula.git.openstack
 - system.salt.master.formula.git.saltstack
 - system.salt.master.formula.git.stacklight
+- system.salt.master.formula.git.monitoring
 parameters:
   _param:
     salt_master_environment_repository: "https://github.com/salt-formulas"
diff --git a/salt/master/pkg.yml b/salt/master/pkg.yml
index 7686f07..046512f 100644
--- a/salt/master/pkg.yml
+++ b/salt/master/pkg.yml
@@ -6,4 +6,5 @@
 - system.salt.master.formula.pkg.openstack
 - system.salt.master.formula.pkg.saltstack
 - system.salt.master.formula.pkg.stacklight
+- system.salt.master.formula.pkg.monitoring
 - system.linux.system.repo.tcp_salt
diff --git a/salt/minion/cert/k8s_client_prometheus.yml b/salt/minion/cert/k8s_client_prometheus.yml
new file mode 100644
index 0000000..04cd374
--- /dev/null
+++ b/salt/minion/cert/k8s_client_prometheus.yml
@@ -0,0 +1,12 @@
+parameters:
+  salt:
+    minion:
+      cert:
+        k8s_client_prometheus:
+          host: ${_param:salt_minion_ca_host}
+          authority: ${_param:salt_minion_ca_authority}
+          key_file: /srv/volumes/prometheus-config/kubelet-client.key
+          cert_file: /srv/volumes/prometheus-config/kubelet-client.crt
+          common_name: kubelet-client
+          signing_policy: cert_client
+          alternative_names: IP:${_param:cluster_vip_address},IP:${_param:cluster_node01_address},IP:${_param:cluster_node02_address},IP:${_param:cluster_node03_address},IP:${_param:kubernetes_internal_api_address}
diff --git a/telegraf/agent/init.yml b/telegraf/agent/init.yml
new file mode 100644
index 0000000..57a1f61
--- /dev/null
+++ b/telegraf/agent/init.yml
@@ -0,0 +1,11 @@
+paramaters:
+  telegraf:
+    agent:
+      input:
+        diskio:
+      output:
+        prometheus_client:
+          bind:
+            address: 0.0.0.0
+            port: 9126
+          engine: prometheus