gpt4 book ai didi

java - 保护 Spring Boot 2 Actuator Prometheus 端点

转载 作者:行者123 更新时间:2023-12-01 18:23:04 25 4
gpt4 key购买 nike

我有一个带有 Spring Security 微服务的 Spring Boot 2,我已使用 Micometer/Spring Actuator 配置了该微服务。当我在 antMatcher("/actuator/**") 端点上允许All() 时,一切都很好。我能够通过正确配置的 Prometheus yaml 文件检索 Prometheus 指标。

但是,我的微服务不在防火墙后面,因此向世界开放。我只希望 Prometheus 能够访问我的微服务“/actuator/prometheus”端点。

我有以下配置:

在我的 Spring Boot 2 微服务 ResourceServerConfig 类中:

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {

@Autowired
private JdbcTokenStore tokenStore;

@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
resources.resourceId("springsecurity").tokenStore(tokenStore);
}

public void configure(HttpSecurity http) throws Exception {
http.anonymous().and().authorizeRequests()
.antMatchers("/actuator/**").hasRole("ENDPOINT_ADMIN")
.antMatchers("/**").authenticated();
}

对于 application.properties 文件,我有:

spring.security.user.name=user
spring.security.user.password=password
spring.security.user.roles=ENDPOINT_ADMIN

# For Prometheus (and other data loggers)
management.endpoint.metrics.enabled=true
management.endpoints.web.exposure.include=*
management.endpoint.prometheus.enabled=true
management.metrics.export.prometheus.enabled=true

然后对于我的 Prometheus YAML 文件,我有以下内容:

global:
scrape_interval: 15s

scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]

- job_name: 'myservice'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:8080']
basic_auth:
username: 'user'
password: 'password'

当我转到 Prometheus 中的/targets 时,我收到“服务器返回 HTTP 状态 401”。

我完全认为我对某些事情的理解不太正确。我有办法正确地做到这一点吗?非常感谢。

最佳答案

我也有同样的需求,按照下面的方法解决了,很简单。

首先,需要在 application.yml 中微服务的 Spring Security 部分配置用户名密码

spring:
security:
user:
name: prometheus
password: prometheus

然后,您可以在 prometheus.yml 中配置该用户名和密码,就像您拥有的那样

- job_name: 'iot-processor'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['iot-processor:8080']
basic_auth:
username: "prometheus"
password: "prometheus"

您可以限制暴露点或全部启用它们,我有以下配置来满足我的需求:

management:
endpoint:
health:
enabled: true
show-details: always
endpoints:
web:
exposure:
include: '*'
jmx:
exposure:
include: '*'

就这样,如果我没有用户名和密码访问,我会看到以下页面

enter image description here

希望对您有帮助

关于java - 保护 Spring Boot 2 Actuator Prometheus 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60272588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com