From dc48722f60b22a8f6edcc159170ca6a61f036f5a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristoffer=20Gr=C3=B6nlund?= Date: Thu, 27 Feb 2020 08:06:22 +0100 Subject: [PATCH] mgr/cephadm: Create configuration for alertmanager MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- src/pybind/mgr/cephadm/module.py | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/pybind/mgr/cephadm/module.py b/src/pybind/mgr/cephadm/module.py index 1a37a1c91e791..40ab86a7c1f10 100644 --- a/src/pybind/mgr/cephadm/module.py +++ b/src/pybind/mgr/cephadm/module.py @@ -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) -- 2.39.5