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:
})
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)