【发布时间】:2020-04-06 09:45:48
【问题描述】:
我是我公司的一名软件工程实习生,我们使用 AWS(亚马逊网络服务)、EC2/ECS/Fargate/NLB,我的任务是为我们的 Elasticsearch 服务添加一个运行状况检查监视器到我们的后端 API使用带有 Spring Boot/MVC/Maven 的 Java 编写。我按照此处的指南将 Springs 执行器用于运行状况检查监视器,这非常简单: https://www.amitph.com/custom-health-check-spring-boot-actuator/
您所要做的就是在 SpringBoot 中实现 HealthIndicator 接口,这是我使用基本代码创建的 IndexExists 类:
@Component
public class IndexExists implements HealthIndicator {
private final ESClient esClient;
private static final Logger LOGGER = LoggerFactory.getLogger(IndexExists.class);
@Autowired
public IndexExists(ESClient esClient) {
this.esClient = esClient;
}
@Override
public Health health() {
try {
if (!esClient.hasIndex(Indices.INDEX_ASSETS)) {
return Health.down().withDetail("index", Indices.INDEX_ASSETS + " index does not exist").build();
}
} catch (IOException e) {
LOGGER.error("Error checking if Elasticsearch index {} exists , with exception", Indices.INDEX_ASSETS, e);
}
return Health.up().withDetail("index", Indices.INDEX_ASSETS + " exists").build();
}
}
此外,我为 localhost 添加了 rest Uris 以进行测试和开发环境。我使用邮递员测试 API 执行器/健康端点,它在本地工作。此配置代码在我们的 application.yml 文件中设置,这是一个屏幕截图:
但是,一旦我将构建部署到 dev,它就失败了,我正在尝试调试。另一位工程师让我查看 AWS 日志,并且有一堆“连接被拒绝”消息。工程师告诉我,他认为它要么是 application.yml 文件(上面的屏幕截图)中 uri 的格式(url 是否应该有 https:// 前缀???),要么与导致连接被拒绝的安全/特权有关.这里是AWS日志的一部分,基本上导致了无限循环,因为健康检查失败,Fargate/LB/ECS因为一直失败而试图制造更多的容器(工程师说了这样的话,我还在学习AWS,很抱歉如果我杀了那个):
我知道这是一个很长的机会,但我希望具有 AWS/Elasticsearch 经验的人之前可能设置了一个运行状况监控端点并遇到了这样的问题......如果有人需要我提供更多信息,我很高兴帮助。这是我实习时的第一个用户故事,我不想失败。我已经编写了所有代码,而且看起来很合理,但我遇到了 AWS 的网络/连接问题,除非我的配置设置 (application.yml) 中有一个我遗漏的小错误。
【问题讨论】:
-
一位工程师今天向我更新了一个事实,即“x-api-key”标头无法正常工作。不确定这是否会导致问题。
标签: java amazon-web-services spring-boot elasticsearch