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();
|
UUID getDeviceId();
|
||||||
|
|
||||||
|
String getBaseUrl();
|
||||||
|
|
||||||
|
boolean isCheckDomainIps();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,9 +23,8 @@ import java.util.List;
|
|||||||
@Data
|
@Data
|
||||||
public abstract class TransportMonitoringConfig implements MonitoringConfig<TransportMonitoringTarget> {
|
public abstract class TransportMonitoringConfig implements MonitoringConfig<TransportMonitoringTarget> {
|
||||||
|
|
||||||
private int requestTimeoutMs;
|
|
||||||
|
|
||||||
private List<TransportMonitoringTarget> targets;
|
private List<TransportMonitoringTarget> targets;
|
||||||
|
private int requestTimeoutMs;
|
||||||
|
|
||||||
public abstract TransportType getTransportType();
|
public abstract TransportType getTransportType();
|
||||||
|
|
||||||
|
|||||||
@ -25,6 +25,7 @@ public class TransportMonitoringTarget implements MonitoringTarget {
|
|||||||
|
|
||||||
private String baseUrl;
|
private String baseUrl;
|
||||||
private DeviceConfig device; // set manually during initialization
|
private DeviceConfig device; // set manually during initialization
|
||||||
|
private boolean checkDomainIps;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UUID getDeviceId() {
|
public UUID getDeviceId() {
|
||||||
|
|||||||
@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.thingsboard.monitoring.service;
|
package org.thingsboard.monitoring.service;
|
||||||
|
|
||||||
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
@ -29,9 +30,14 @@ import org.thingsboard.monitoring.service.transport.TransportHealthChecker;
|
|||||||
import org.thingsboard.monitoring.util.TbStopWatch;
|
import org.thingsboard.monitoring.util.TbStopWatch;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public abstract class BaseMonitoringService<C extends MonitoringConfig<T>, T extends MonitoringTarget> {
|
public abstract class BaseMonitoringService<C extends MonitoringConfig<T>, T extends MonitoringTarget> {
|
||||||
@ -60,15 +66,36 @@ public abstract class BaseMonitoringService<C extends MonitoringConfig<T>, T ext
|
|||||||
tbClient.logIn();
|
tbClient.logIn();
|
||||||
configs.forEach(config -> {
|
configs.forEach(config -> {
|
||||||
config.getTargets().forEach(target -> {
|
config.getTargets().forEach(target -> {
|
||||||
BaseHealthChecker<C, T> healthChecker = (BaseHealthChecker<C, T>) createHealthChecker(config, target);
|
initHealthChecker(target, config);
|
||||||
log.info("Initializing {}", healthChecker.getClass().getSimpleName());
|
if (target.isCheckDomainIps()) {
|
||||||
healthChecker.initialize(tbClient);
|
initIpsHealthCheckers(target, config);
|
||||||
devices.add(target.getDeviceId());
|
}
|
||||||
healthCheckers.add(healthChecker);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initHealthChecker(T target, C config) {
|
||||||
|
BaseHealthChecker<C, T> healthChecker = (BaseHealthChecker<C, T>) createHealthChecker(config, target);
|
||||||
|
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() {
|
public final void runChecks() {
|
||||||
if (healthCheckers.isEmpty()) {
|
if (healthCheckers.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
@ -99,6 +126,8 @@ public abstract class BaseMonitoringService<C extends MonitoringConfig<T>, T ext
|
|||||||
|
|
||||||
protected abstract BaseHealthChecker<?, ?> createHealthChecker(C config, T target);
|
protected abstract BaseHealthChecker<?, ?> createHealthChecker(C config, T target);
|
||||||
|
|
||||||
|
protected abstract T createTarget(String baseUrl);
|
||||||
|
|
||||||
protected abstract String getName();
|
protected abstract String getName();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -33,6 +33,13 @@ public final class TransportsMonitoringService extends BaseMonitoringService<Tra
|
|||||||
return applicationContext.getBean(config.getTransportType().getServiceClass(), config, target);
|
return applicationContext.getBean(config.getTransportType().getServiceClass(), config, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected TransportMonitoringTarget createTarget(String baseUrl) {
|
||||||
|
TransportMonitoringTarget target = new TransportMonitoringTarget();
|
||||||
|
target.setBaseUrl(baseUrl);
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getName() {
|
protected String getName() {
|
||||||
return "transports check";
|
return "transports check";
|
||||||
|
|||||||
@ -51,8 +51,10 @@ monitoring:
|
|||||||
# MQTT QoS
|
# MQTT QoS
|
||||||
qos: '${MQTT_QOS_LEVEL:1}'
|
qos: '${MQTT_QOS_LEVEL:1}'
|
||||||
targets:
|
targets:
|
||||||
# MQTT transport base url, tcp://DOMAIN:1883 by default
|
# MQTT transport base url, tcp://DOMAIN:1883 by default
|
||||||
- base_url: '${MQTT_TRANSPORT_BASE_URL:tcp://${monitoring.domain}:1883}'
|
- 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:
|
# To add more targets, use following environment variables:
|
||||||
# monitoring.transports.mqtt.targets[1].base_url, monitoring.transports.mqtt.targets[2].base_url, etc.
|
# monitoring.transports.mqtt.targets[1].base_url, monitoring.transports.mqtt.targets[2].base_url, etc.
|
||||||
|
|
||||||
@ -62,8 +64,10 @@ monitoring:
|
|||||||
# CoAP request timeout in milliseconds
|
# CoAP request timeout in milliseconds
|
||||||
request_timeout_ms: '${COAP_REQUEST_TIMEOUT_MS:4000}'
|
request_timeout_ms: '${COAP_REQUEST_TIMEOUT_MS:4000}'
|
||||||
targets:
|
targets:
|
||||||
# CoAP transport base url, coap://DOMAIN by default
|
# CoAP transport base url, coap://DOMAIN by default
|
||||||
- base_url: '${COAP_TRANSPORT_BASE_URL:coap://${monitoring.domain}}'
|
- 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:
|
# To add more targets, use following environment variables:
|
||||||
# monitoring.transports.coap.targets[1].base_url, monitoring.transports.coap.targets[2].base_url, etc.
|
# monitoring.transports.coap.targets[1].base_url, monitoring.transports.coap.targets[2].base_url, etc.
|
||||||
|
|
||||||
@ -73,8 +77,10 @@ monitoring:
|
|||||||
# HTTP request timeout in milliseconds
|
# HTTP request timeout in milliseconds
|
||||||
request_timeout_ms: '${HTTP_REQUEST_TIMEOUT_MS:4000}'
|
request_timeout_ms: '${HTTP_REQUEST_TIMEOUT_MS:4000}'
|
||||||
targets:
|
targets:
|
||||||
# HTTP transport base url, http://DOMAIN by default
|
# HTTP transport base url, http://DOMAIN by default
|
||||||
- base_url: '${HTTP_TRANSPORT_BASE_URL:http://${monitoring.domain}}'
|
- 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:
|
# To add more targets, use following environment variables:
|
||||||
# monitoring.transports.http.targets[1].base_url, monitoring.transports.http.targets[2].base_url, etc.
|
# monitoring.transports.http.targets[1].base_url, monitoring.transports.http.targets[2].base_url, etc.
|
||||||
|
|
||||||
@ -84,8 +90,10 @@ monitoring:
|
|||||||
# LwM2M request timeout in milliseconds
|
# LwM2M request timeout in milliseconds
|
||||||
request_timeout_ms: '${LWM2M_REQUEST_TIMEOUT_MS:4000}'
|
request_timeout_ms: '${LWM2M_REQUEST_TIMEOUT_MS:4000}'
|
||||||
targets:
|
targets:
|
||||||
# LwM2M transport base url, coap://DOMAIN:5685 by default
|
# LwM2M transport base url, coap://DOMAIN:5685 by default
|
||||||
- base_url: '${LWM2M_TRANSPORT_BASE_URL:coap://${monitoring.domain}:5685}'
|
- 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:
|
# To add more targets, use following environment variables:
|
||||||
# monitoring.transports.lwm2m.targets[1].base_url, monitoring.transports.lwm2m.targets[2].base_url, etc.
|
# monitoring.transports.lwm2m.targets[1].base_url, monitoring.transports.lwm2m.targets[2].base_url, etc.
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user