当前位置: 首页 > 知识库问答 >
问题:

使用Spring Boot对ElasticSearch/AWS进行Java API健康检查

章琛
2023-03-14

我是我的公司的软件工程实习生,我们使用AWS(Amazon Web Services)、EC2/ECS/Fargate/NLB,我的任务是为我们的Elasticsearch服务添加一个健康检查监视器到我们的后端API中,我们用Java编写了这个后端API(使用Spring Boot/MVC/Maven)。我按照这里的指南使用Springs Actuctor来进行健康检查监视器,它非常简单:https://www.amitph.com/custom-healt-check-spring-boot-actuctor/

您所要做的就是在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();
    }
}

我知道这是一个很长的机会,但我希望有AWS/ElasticSearch经验的人可能设置一个健康监视器endpoint之前,遇到这样的问题....如果有人需要我的更多信息,我很乐意帮忙。这是我实习时的第一个用户故事,我不想失败。我已经写好了所有的代码,而且看起来还不错,但是我遇到了AWS的网络/连接问题,除非我在配置设置(application.yml)中有一个我遗漏的小错误。

共有1个答案

蓝飞
2023-03-14

首先,实际上我不会在弹性搜索的应用程序中做健康检查,AWS有办法监控弹性搜索,集群健康等。如果你的状态是红色的,那意味着他们至少存在一个红色索引。所有的索引都应该是绿色的,如果有一个红色的索引,你需要从快照恢复它。您的应用程序只需假设es一直都是健康的。如果调用失败,请使用log.error记录它。您可以在Kibanna创建一个仪表板,它可以监视对ES的这些调用,以查看这一切都是如何进行的。

至于连接到es,这取决于您使用的是公共endpoint还是VPCendpoint。

VPCendpoint如果使用VPCendpoint,您需要具有正确的安全组配置,因此连接到ES群集的安全组需要允许来自应用程序的流量。令人困惑的是,您在es中看到了日志,但它们很可能来自logstash实例,因此您的应用程序连接到的是logstash,而不是es。检查应用程序的安全组是否包含在ES集群的安全组的允许部分中。

公共

如果它是公共的ES,那么您需要在应用程序上具有正确的IAM权限才能连接。检查应用程序的角色是否可以访问es:{TODO}对于您的域,您可以联机查找策略。

 类似资料:
  • 我需要改变频率来检查springboot执行器中的DB运行状况。默认DB运行状况检查查询每毫秒执行一次。我想让这个查询每1分钟后执行一次,而不是毫秒。有什么方法可以自定义它吗?

  • 我想写一个脚本来检查我们的elasticsearch集群(部署在kubernetes上)的运行状况 我进入运行elasticsearch主容器的pod中,运行以下命令: 如您所见,索引计数和运行状况检查命令都成功。但当我从外部运行这些命令时(我给elasticsearch集群一个公共endpoint) 只有index count命令成功,健康检查命令总是产生403禁止错误。 我已经从elastic

  • 在设置ELB健康检查的对话框中,它会声明: 如果实例未通过健康检查,它将自动从负载均衡器中删除。自定义健康检查以满足您的特定需要。 当健康检查失败时,将从ELB后面删除实例。我的问题是围绕“健康门槛”设置。当你悬停在帮助上时,它会说: 在声明EC2实例健康之前连续运行状况检查成功的次数。 如果实例声明为健康的,它是否被拉回负载平衡组?

  • SOFABoot 为 Spring Boot 的健康检查能力增加了 Readiness Check 的能力。如果你需要使用 SOFA 中间件,那么建议使用 SOFABoot 的健康检查能力的扩展,来更优雅的上线应用实例 引入健康检查扩展 要引入 SOFABoot 的健康检查能力的扩展,只需要引入以下的 Starter 即可: <dependency> <groupId>com.alipay

  • 健康检测是对应用进行check,判定应用是否在正常运行。 健康检测有三种方案 只对tcp端口进行检测 只通过http的方式check需要提供path地址 以上两种结合

  • 健康检查配置概述。 filter.http.HealthCheck filter.http.HealthCheck proto { "pass_through_mode": "{...}", "endpoint": "...", "cache_time": "{...}" } pass_through_mode (BoolValue, REQUIRED) 指定过滤器是否在传递模式下运