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

如何从外部进行健康检查elasticsearch集群

许沛
2023-03-14

我想写一个脚本来检查我们的elasticsearch集群(html" target="_blank">部署在kubernetes上)的运行状况

  1. 我进入运行elasticsearch主容器的pod中,运行以下命令:
[elasticsearch@elasticsearch-master-0 ~]$ curl localhost:9200/frontend-dev-2021.12.03/_count
{"count":76,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0}}

[elasticsearch@elasticsearch-master-0 ~]$ curl localhost:9200/_cluster/health?pretty
{
  "cluster_name" : "elasticsearch",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 617,
  "active_shards" : 1234,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

如您所见,索引计数和运行状况检查命令都成功。但当我从外部运行这些命令时(我给elasticsearch集群一个公共endpoint)

root@ip-192-168-1-1:~# curl --user username:password esdev.example.com/frontend-dev-2021.12.03/_count
{"count":76,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0}}

root@ip-192-168-1-1:~# curl --user username:password esdev.example.com/_cluster/health
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>

只有index count命令成功,健康检查命令总是产生403禁止错误。

我已经从elasticsearch搜索并阅读了官方文档,但官方文档仅运行命令内部elasticsearch集群或使用kibana(超文本传输协议服务kubernetes-内部k8s集群)。

如何从外部检查elasticsearch的健康状况?或者我们不能这样做是因为elasticsearch集群的某些机制?

注意:我在elasticsearch之前创建了一个基本的auth nginx(用户名:密码)站,这个nginx有一个来自traefik-v2的入口路由

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  annotations:
    meta.helm.sh/release-name: basic-auth-nginx-dev
    meta.helm.sh/release-namespace: dev
  creationTimestamp: "2021-01-23T08:12:55Z"
  generation: 2
  labels:
    app: basic-auth-nginx-dev
    app.kubernetes.io/managed-by: Helm
  managedFields:
  - apiVersion: traefik.containo.us/v1alpha1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:meta.helm.sh/release-name: {}
          f:meta.helm.sh/release-namespace: {}
        f:labels:
          .: {}
          f:app: {}
          f:app.kubernetes.io/managed-by: {}
      f:spec:
        .: {}
        f:entryPoints: {}
        f:routes: {}
    manager: Go-http-client
    operation: Update
    time: "2021-01-23T08:12:55Z"
  name: basic-auth-nginx-dev-web
  namespace: dev
  resourceVersion: "103562796"
  selfLink: /apis/traefik.containo.us/v1alpha1/namespaces/dev/ingressroutes/basic-auth-nginx-dev-web
  uid: 5832b501-b2d7-4600-93b6-b3c72c420115
spec:
  entryPoints:
  - web
  routes:
  - kind: Rule
    match: Host(`esdev.example.com`) && PathPrefix(`/`)
    priority: 1
    services:
    - kind: Service
      name: basic-auth-nginx-dev
      port: 80

共有1个答案

韶云瀚
2023-03-14

你能给我们看看你的nginx配置吗?

>

  • 我认为问题来自您的nginx,因为我看到您显示的输出,nginx为您返回403,而不是elasticsearch。

    你可以尝试另一个命令开始__template或类似的东西,有一个机会你的nginx阻止访问路径开始_字符。

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

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

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

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

    • 健康检查架构概述。如果为集群配置了健康检查,则会发出相应的统计信息。详见请参考统计相关文档。 HealthCheck HealthCheck.Payload HealthCheck.HttpHealthCheck HealthCheck.TcpHealthCheck HealthCheck.RedisHealthCheck HealthCheck HealthCheck proto { "ti

    • 健康检查架构概述。 如果为集群配置了健康检查,则会发出相应的统计信息。并且记录在这里。 { "type": "...", "timeout_ms": "...", "interval_ms": "...", "unhealthy_threshold": "...", "healthy_threshold": "...", "path": "...", "send": [