Notifications
You can add your own Notifiers by adding Spring Beans which implement the Notifier
interface, at best by extendingAbstractEventNotifier
or AbstractStatusChangeNotifier
.
public class CustomNotifier extends AbstractEventNotifier {
private static final Logger LOGGER = LoggerFactory.getLogger(CustomNotifier.class);
public CustomNotifier(InstanceRepository repository) {
super(repository);
}
@Override
protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
return Mono.fromRunnable(() -> {
if (event instanceof InstanceStatusChangedEvent statusChangedEvent) {
LOGGER.info("Instance {} ({}) is {}", instance.getRegistration().getName(), event.getInstance(),
statusChangedEvent.getStatusInfo().getStatus());
}
else {
LOGGER.info("Instance {} ({}) {}", instance.getRegistration().getName(), event.getInstance(),
event.getType());
}
});
}
}
Notification Proxy Settings
All Notifiers which are using a RestTemplate
can be configured to use a proxy.
Property | Description |
---|---|
spring.boot.admin.notify.proxy.host | Proxy-Host for sending notifications
|
spring.boot.admin.notify.proxy.port | Proxy-Port for sending notifications
|
spring.boot.admin.notify.proxy.password | Proxy-Password for sending notifications (if proxy requires authentication).
|
spring.boot.admin.notify.proxy.username | Proxy-User for sending notifications (if proxy requires authentication).
|
Notification Reminder
The RemindingNotifier
sends reminders for down/offline applications, it delegates the sending of notifications to another notifier.
By default, a reminder is triggered when a registered application changes to DOWN
or OFFLINE
. You can alter this behaviour via setReminderStatuses()
. The reminder ends when either the status changes to a non-triggering status or the regarding application gets deregistered.
By default, the reminders are sent every 10 minutes, to change this use setReminderPeriod()
. The RemindingNotifier
itself doesn’t start the background thread to send the reminders, you need to take care of this as shown in the given example below;
How to configure reminders
@Configuration
public class NotifierConfiguration {
@Autowired
private Notifier notifier;
@Primary
@Bean(initMethod = "start", destroyMethod = "stop")
public RemindingNotifier remindingNotifier() {
RemindingNotifier notifier = new RemindingNotifier(notifier, repository);
notifier.setReminderPeriod(Duration.ofMinutes(10)); // (1)
notifier.setCheckReminderInverval(Duration.ofSeconds(10)); //(2)
return notifier;
}
}
- The reminders will be sent every 10 minutes.
- Schedules sending of due reminders every 10 seconds.
Filtering Notifications
The FilteringNotifier
allows you to filter certain notification based on rules you can add/remove at runtime. It delegates the sending of notifications to another notifier.
If you add a FilteringNotifier
to your ApplicationContext
a RESTful interface on notifications/filter
gets available. The restful interface provides the following methods for getting, adding, and deleting notification filters:
GET notifications/filter
- Returns a list of all registered notification filters. Each containing the attributes
id
,applicationName
,expiry
, andexpired
. POST notifications/filters?instanceId=<yourInstanceId>&applicationName=<yourApplicationName>&ttl=<yourInstant>
- Posts a new notification filter for the application/instance of the given
instanceId
orapplicationName
. EitherinstanceId
orapplicationName
must be set. The parameterttl
is optional and represents the expiration of the filter as an instant (the number of seconds from the epoch of1970-01-01T00:00:00Z
). DELETE notifications/filters/{id}
- Deletes the notification filter with the requested id from the filters.
You may as well access all notification filter configurations via the main applications view inside SBA client, as seen in the screenshot below.
A FilteringNotifier
might be useful, for instance, if you don’t want to receive notifications when deploying your applications. Before stopping the application, you can add an (expiring) filter via a POST
request.
How to configure filtering
@Configuration(proxyBeanMethods = false)
public class NotifierConfig {
private final InstanceRepository repository;
private final ObjectProvider<List<Notifier>> otherNotifiers;
public NotifierConfig(InstanceRepository repository, ObjectProvider<List<Notifier>> otherNotifiers) {
this.repository = repository;
this.otherNotifiers = otherNotifiers;
}
@Bean
public FilteringNotifier filteringNotifier() { // (1)
CompositeNotifier delegate = new CompositeNotifier(this.otherNotifiers.getIfAvailable(Collections::emptyList));
return new FilteringNotifier(delegate, this.repository);
}
@Primary
@Bean(initMethod = "start", destroyMethod = "stop")
public RemindingNotifier remindingNotifier() { // (2)
RemindingNotifier notifier = new RemindingNotifier(filteringNotifier(), this.repository);
notifier.setReminderPeriod(Duration.ofMinutes(10));
notifier.setCheckReminderInverval(Duration.ofSeconds(10));
return notifier;
}
}
- Add the
FilteringNotifier
bean using a delegate (e.g.MailNotifier
when configured) - Add the
RemindingNotifier
as primary bean using theFilteringNotifier
as delegate.
This example combines the reminding and filtering notifiers. This allows you to get notifications after the deployed application hasn’t restarted in a certain amount of time (until the filter expires).
Shipped Notifiers
DingTalk Notifications
To enable DingTalk notifications you need to create and authorize a dingtalk bot and set the appropriate configuration properties for webhookUrl and secret.
Discord Notifications
To enable Discord notifications you need to create a webhook and set the appropriate configuration property.
Hipchat Notifications
To enable Hipchat notifications you need to create an API token on your Hipchat account and set the appropriate configuration properties.
Let’s Chat Notifications
To enable Let’s Chat notifications you need to add the host url and add the API token and username from Let’s Chat
Mail Notifications
Mail notifications will be delivered as HTML emails rendered using https://www.thymeleaf.org/[Thymeleaf] templates.
Microsoft Teams Notifications
To enable Microsoft Teams notifications you need to set up a connector webhook url and set the appropriate configuration property.
RocketChat Notifications
To enable Rocket.Chat notifications you need a personal token access and create a room to send message with this token
Slack Notifications
To enable Slack notifications you need to add an incoming Webhook under custom integrations on your Slack account and configure it appropriately.
Telegram Notifications
To enable Telegram notifications you need to create and authorize a telegram bot and set the appropriate configuration properties for auth-token and chat-id.
Webex Notifications
To enable Webex notifications, you need to set the appropriate configuration properties for auth-token and room-id.