我正在尝试从我的Spring启动应用程序中公开自定义仪表
指标。我正在使用千分尺和普罗米修斯注册表来做到这一点。我已经设置了普罗米修斯注册和配置根据 - 千分尺样本 - Github,但它创建了一个HTTP服务器来公开普罗米修斯指标。我需要将所有指标重定向或公开到Spring boot的默认上下文路径 - /actuator/prometheus
,而不是新端口上的新上下文路径。到目前为止,我已经实现了以下代码 -
PrometheusRegistry.java-
package com.xyz.abc.prometheus;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.time.Duration;
import com.sun.net.httpserver.HttpServer;
import io.micrometer.core.lang.Nullable;
import io.micrometer.prometheus.PrometheusConfig;
import io.micrometer.prometheus.PrometheusMeterRegistry;
public class PrometheusRegistry {
public static PrometheusMeterRegistry prometheus() {
PrometheusMeterRegistry prometheusRegistry = new PrometheusMeterRegistry(new PrometheusConfig() {
@Override
public Duration step() {
return Duration.ofSeconds(10);
}
@Override
@Nullable
public String get(String k) {
return null;
}
});
try {
HttpServer server = HttpServer.create(new InetSocketAddress(8081), 0);
server.createContext("/sample-data/prometheus", httpExchange -> {
String response = prometheusRegistry.scrape();
httpExchange.sendResponseHeaders(200, response.length());
OutputStream os = httpExchange.getResponseBody();
os.write(response.getBytes());
os.close();
});
new Thread(server::start).run();
} catch (IOException e) {
throw new RuntimeException(e);
}
return prometheusRegistry;
}
}
MicrometerConfig.java-
package com.xyz.abc.prometheus;
import io.micrometer.core.instrument.MeterRegistry;
public class MicrometerConfig {
public static MeterRegistry carMonitoringSystem() {
// Pick a monitoring system here to use in your samples.
return PrometheusRegistry.prometheus();
}
}
代码段,我正在创建自定义仪表指标。截至目前,这是一个简单的REST API进行测试 - (请阅读中间的评论)
@SuppressWarnings({ "unchecked", "rawtypes" })
@RequestMapping(value = "/sampleApi", method= RequestMethod.GET)
@ResponseBody
//This Timed annotation is working fine and this metrics comes in /actuator/prometheus by default
@Timed(value = "car.healthcheck", description = "Time taken to return healthcheck")
public ResponseEntity healthCheck(){
MeterRegistry registry = MicrometerConfig.carMonitoringSystem();
AtomicLong n = new AtomicLong();
//Starting from here none of the Gauge metrics shows up in /actuator/prometheus path instead it goes to /sample-data/prometheus on port 8081 as configured.
registry.gauge("car.gauge.one", Tags.of("k", "v"), n);
registry.gauge("car.gauge.two", Tags.of("k", "v1"), n, n2 -> n2.get() - 1);
registry.gauge("car.help.gauge", 89);
//This thing never works! This gauge metrics never shows up in any URI configured
Gauge.builder("car.gauge.test", cpu)
.description("car.device.cpu")
.tags("customer", "demo")
.register(registry);
return new ResponseEntity("Car is working fine.", HttpStatus.OK);
}
我需要所有的指标都显示在-< code >/actuator/Prometheus 中,而不是创建一个新的HTTP服务器。我知道我正在显式地创建一个新的HTTP服务器,所以这里会出现一些指标。请告诉我如何避免创建一个新的HTTP服务器,并将所有prometheus指标重定向到默认路径-< code >/actuator/Prometheus 。此外,如果我使用< code>Gauge.builder来定义一个自定义的计量器指标,它永远不会工作。请解释我如何才能使这一工作。让我知道我哪里做错了。谢谢你。
每次调用<code>microConfig时。carMonitoringSystem()它正在创建一个新的
prometheus注册表(并尝试启动一个新服务器)
您需要在创建仪表的类中注入计量注册,
并以这种方式使用注入的计量注册
。
在我的apache服务器上,我希望能够将所有传入的http请求重定向到等效的https请求。问题是,我希望能够在不指定的情况下为我的默认虚拟主机执行此操作,并使用请求url中出现的任何服务器名称进行重定向。我希望得到这样的东西: 这是可以使用还是我必须求助于?
问题内容: 我正在尝试将服务的输出重定向到文件,但它似乎不起作用: 请更正我的方法。 问题答案: 我认为有一种解决问题的更优雅的方法:将stdout / stderr发送给具有标识符的syslog,并指示syslog管理器按程序名称拆分其输出。 在您的systemd服务单元文件中使用以下属性: 然后,假设您的发行版正在使用rsyslog管理syslog,请在其中创建一个包含以下内容的文件: 现在,
我试图将服务的输出重定向到一个文件,但似乎不起作用: 请纠正我的做法。
我有多个Java Spring Boot服务(大约20个),使用Amazon SDK for S3、SQS、DynamoDB等。 目前,要使用Amazon Web服务,我只需要指定我的AWS密钥&秘密。 然而,我想要设置离线开发环境,所以我开始对接我的服务,并建立一个单一的多Docker容器,我的所有服务都对接了,应该使用localstack而不是远程AWS服务,以允许完成离线开发。 Amazon
环境Centos与apache 正在尝试设置从http到https的自动重定向 我试图添加以下内容到我的httpd.conf但它不工作 有什么想法吗?
我是微服务和Spring Boot的新手。我有几个Spring Cloud微服务,它有一个运行在8080端口上的Zuul网关。 提前道谢!