Monitoring for IPs associated with the domain
This commit is contained in:
parent
797e365892
commit
e8ba1e17eb
@ -21,4 +21,8 @@ public interface MonitoringTarget {
|
||||
|
||||
UUID getDeviceId();
|
||||
|
||||
String getBaseUrl();
|
||||
|
||||
boolean isCheckDomainIps();
|
||||
|
||||
}
|
||||
|
||||
@ -23,9 +23,8 @@ import java.util.List;
|
||||
@Data
|
||||
public abstract class TransportMonitoringConfig implements MonitoringConfig<TransportMonitoringTarget> {
|
||||
|
||||
private int requestTimeoutMs;
|
||||
|
||||
private List<TransportMonitoringTarget> targets;
|
||||
private int requestTimeoutMs;
|
||||
|
||||
public abstract TransportType getTransportType();
|
||||
|
||||
|
||||
@ -25,6 +25,7 @@ public class TransportMonitoringTarget implements MonitoringTarget {
|
||||
|
||||
private String baseUrl;
|
||||
private DeviceConfig device; // set manually during initialization
|
||||
private boolean checkDomainIps;
|
||||
|
||||
@Override
|
||||
public UUID getDeviceId() {
|
||||
|
||||
@ -15,6 +15,7 @@
|
||||
*/
|
||||
package org.thingsboard.monitoring.service;
|
||||
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
@ -29,9 +30,14 @@ import org.thingsboard.monitoring.service.transport.TransportHealthChecker;
|
||||
import org.thingsboard.monitoring.util.TbStopWatch;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.net.InetAddress;
|
||||
import java.net.URI;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
public abstract class BaseMonitoringService<C extends MonitoringConfig<T>, T extends MonitoringTarget> {
|
||||
@ -60,13 +66,34 @@ public abstract class BaseMonitoringService<C extends MonitoringConfig<T>, T ext
|
||||
tbClient.logIn();
|
||||
configs.forEach(config -> {
|
||||
config.getTargets().forEach(target -> {
|
||||
initHealthChecker(target, config);
|
||||
if (target.isCheckDomainIps()) {
|
||||
initIpsHealthCheckers(target, config);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
private void initHealthChecker(T target, C config) {
|
||||
BaseHealthChecker<C, T> healthChecker = (BaseHealthChecker<C, T>) createHealthChecker(config, target);
|
||||
log.info("Initializing {}", healthChecker.getClass().getSimpleName());
|
||||
log.info("Initializing {} for {}", healthChecker.getClass().getSimpleName(), target.getBaseUrl());
|
||||
healthChecker.initialize(tbClient);
|
||||
devices.add(target.getDeviceId());
|
||||
healthCheckers.add(healthChecker);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
private void initIpsHealthCheckers(T target, C config) {
|
||||
URI baseUrl = new URI(target.getBaseUrl());
|
||||
String domain = baseUrl.getHost();
|
||||
|
||||
Set<String> ips = Arrays.stream(InetAddress.getAllByName(domain))
|
||||
.map(InetAddress::getHostAddress)
|
||||
.collect(Collectors.toSet());
|
||||
for (String ip : ips) {
|
||||
String url = new URI(baseUrl.getScheme(), null, ip, baseUrl.getPort(), "", null, null).toString();
|
||||
initHealthChecker(createTarget(url), config);
|
||||
}
|
||||
}
|
||||
|
||||
public final void runChecks() {
|
||||
@ -99,6 +126,8 @@ public abstract class BaseMonitoringService<C extends MonitoringConfig<T>, T ext
|
||||
|
||||
protected abstract BaseHealthChecker<?, ?> createHealthChecker(C config, T target);
|
||||
|
||||
protected abstract T createTarget(String baseUrl);
|
||||
|
||||
protected abstract String getName();
|
||||
|
||||
}
|
||||
|
||||
@ -33,6 +33,13 @@ public final class TransportsMonitoringService extends BaseMonitoringService<Tra
|
||||
return applicationContext.getBean(config.getTransportType().getServiceClass(), config, target);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TransportMonitoringTarget createTarget(String baseUrl) {
|
||||
TransportMonitoringTarget target = new TransportMonitoringTarget();
|
||||
target.setBaseUrl(baseUrl);
|
||||
return target;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getName() {
|
||||
return "transports check";
|
||||
|
||||
@ -53,6 +53,8 @@ monitoring:
|
||||
targets:
|
||||
# MQTT transport base url, tcp://DOMAIN:1883 by default
|
||||
- base_url: '${MQTT_TRANSPORT_BASE_URL:tcp://${monitoring.domain}:1883}'
|
||||
# Whether to monitor IPs associated with the domain from base url
|
||||
check_domain_ips: '${MQTT_TRANSPORT_CHECK_DOMAIN_IPS:false}'
|
||||
# To add more targets, use following environment variables:
|
||||
# monitoring.transports.mqtt.targets[1].base_url, monitoring.transports.mqtt.targets[2].base_url, etc.
|
||||
|
||||
@ -64,6 +66,8 @@ monitoring:
|
||||
targets:
|
||||
# CoAP transport base url, coap://DOMAIN by default
|
||||
- base_url: '${COAP_TRANSPORT_BASE_URL:coap://${monitoring.domain}}'
|
||||
# Whether to monitor IPs associated with the domain from base url
|
||||
check_domain_ips: '${COAP_TRANSPORT_CHECK_DOMAIN_IPS:false}'
|
||||
# To add more targets, use following environment variables:
|
||||
# monitoring.transports.coap.targets[1].base_url, monitoring.transports.coap.targets[2].base_url, etc.
|
||||
|
||||
@ -75,6 +79,8 @@ monitoring:
|
||||
targets:
|
||||
# HTTP transport base url, http://DOMAIN by default
|
||||
- base_url: '${HTTP_TRANSPORT_BASE_URL:http://${monitoring.domain}}'
|
||||
# Whether to monitor IPs associated with the domain from base url
|
||||
check_domain_ips: '${HTTP_TRANSPORT_CHECK_DOMAIN_IPS:false}'
|
||||
# To add more targets, use following environment variables:
|
||||
# monitoring.transports.http.targets[1].base_url, monitoring.transports.http.targets[2].base_url, etc.
|
||||
|
||||
@ -86,6 +92,8 @@ monitoring:
|
||||
targets:
|
||||
# LwM2M transport base url, coap://DOMAIN:5685 by default
|
||||
- base_url: '${LWM2M_TRANSPORT_BASE_URL:coap://${monitoring.domain}:5685}'
|
||||
# Whether to monitor IPs associated with the domain from base url
|
||||
check_domain_ips: '${LWM2M_TRANSPORT_CHECK_DOMAIN_IPS:false}'
|
||||
# To add more targets, use following environment variables:
|
||||
# monitoring.transports.lwm2m.targets[1].base_url, monitoring.transports.lwm2m.targets[2].base_url, etc.
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user