]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: Create configuration for alertmanager
authorKristoffer Grönlund <kgronlund@suse.com>
Thu, 27 Feb 2020 07:06:22 +0000 (08:06 +0100)
committerKristoffer Grönlund <kgronlund@suse.com>
Thu, 27 Feb 2020 08:58:17 +0000 (09:58 +0100)
Create a skeleton configuration for alertmanager
which forwards alerts to the dashboard by default.

Tracker: https://tracker.ceph.com/issues/44308

Signed-off-by: Kristoffer Grönlund <kgronlund@suse.com>
src/pybind/mgr/cephadm/module.py

index 1a37a1c91e791b57868b59b230b9707542569371..40ab86a7c1f106598eddf898e251178499e65c25 100644 (file)
@@ -1874,6 +1874,9 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
         elif daemon_type == 'grafana':
             j = self._generate_grafana_config()
             extra_args.extend(['--config-json', '-'])
+        elif daemon_type == 'alertmanager':
+            j = self._generate_alertmanager_config()
+            extra_args.extend(['--config-json', '-'])
         else:
             # keyring
             if not keyring:
@@ -2336,6 +2339,44 @@ datasources:
         })
         return config_file
 
+    def _get_dashboard_url(self):
+        # type: () -> str
+        return self.get('mgr_map').get('services', {}).get('dashboard', '')
+
+    def _generate_alertmanager_config(self):
+        # type: () -> str
+        yml = """# generated by cephadm
+# See https://prometheus.io/docs/alerting/configuration/ for documentation.
+
+global:
+  resolve_timeout: 5m
+
+route:
+  group_by: ['alertname']
+  group_wait: 10s
+  group_interval: 10s
+  repeat_interval: 1h
+  receiver: 'ceph-dashboard'
+receivers:
+- name: 'ceph-dashboard'
+  webhook_configs:
+  - url: '{url}/api/prometheus_receiver'
+        """.format(url=self._get_dashboard_url())
+        peers = []
+        port = '9094'
+        for dd in self.cache.get_daemons_by_service('alertmanager'):
+            if dd.daemon_id == self.get_mgr_id():
+                continue
+            hi = self.inventory.get(dd.hostname, None)
+            addr = hi.get('addr', dd.hostname) if hi else ""
+            peers.append(addr.split(':')[0] + ':' + port)
+        return json.dumps({
+            "files": {
+                "alertmanager.yml": yml
+            },
+            "peers": peers
+        })
+
     def add_prometheus(self, spec):
         return self._add_daemon('prometheus', spec, self._create_prometheus)