Elasticsearch 导出器
本页内容
简介
以下快速入门提供了 Elasticsearch 导出器的设置说明和预配置的仪表板、警报规则和录制规则。完成本快速入门步骤后,您将
设置并配置了 Elasticsearch 导出器以收集集群状态、活动分片、JVM 指标和 Elasticsearch 负载等 Elasticsearch 指标。Elasticsearch 导出器将这些指标暴露为 Prometheus 风格的指标。
已配置Prometheus抓取Elasticsearch Exporter指标,并可选择将它们发送到Grafana Cloud。
设置了一套预配置和精选的记录规则来缓存频繁的Prometheus查询。
导入Grafana仪表板以可视化您的指标数据。
设置Prometheus警报规则以在指标数据上发出警报。
指标使用
默认情况下,此导出程序发布约392个Prometheus时间序列。要查看此导出程序默认发送的指标列表,请下载示例指标抓取文件此处。
请注意,根据其配置,Elasticsearch Exporter可能收集并发布比默认集更多的指标。有关配置Elasticsearch Exporter和切换其收集器的更多信息,请参阅Elasticsearch Exporter的GitHub仓库。
除了切换Elasticsearch Exporter的设置外,您还可以通过丢弃不需要存储在Prometheus或Grafana Cloud中的时间序列来减少指标使用。有关如何操作的更多信息,请参阅Grafana Cloud文档中的使用relabeling减少Prometheus指标使用。
Grafana Cloud 的 Elasticsearch 集成
如果您正在使用Grafana Cloud,您可以通过安装Elasticsearch Exporter集成来跳过此指南中的所有步骤,该集成旨在帮助您通过几个命令和点击即可启动和运行。 免费注册。
有关如何使用Elasticsearch Exporter集成设置Elasticsearch Exporter的更多信息,请参阅Grafana Cloud文档中的Elasticsearch Exporter集成。
本页内容
Elasticsearch Exporter快速入门
在本指南中,您将学习如何设置和配置Elasticsearch Exporter以收集Elasticsearch指标,例如集群状态、活动分片、JVM指标、Elasticsearch负载,并将其作为Prometheus风格的指标公开。然后,您将配置Prometheus以抓取Elasticsearch指标,并可选择将它们发送到Grafana Cloud。最后,您将设置预配置和精选的记录规则、Grafana 仪表板和警报规则。在本指南结束时,您将拥有用于可视化Elasticsearch指标的仪表板和一组预配置的警报。
如果您正在使用Grafana Cloud,则Elasticsearch集成可以帮助您快速启动。Elasticsearch集成将Elasticsearch Exporter嵌入到Grafana Cloud Agent中,并自动配置警报规则和仪表板,因此您无需按照本指南中的步骤进行操作。有关如何使用Elasticsearch集成设置Elasticsearch Exporter的说明,请参阅Grafana Cloud文档中的Elasticsearch集成。
先决条件
在开始之前,您应该具备以下条件:
- 与Elasticsearch Exporter版本兼容的机器。要查看可用版本列表,请参阅版本。
- 在您的机器上运行的Elasticsearch。有关安装和运行Elasticsearch的更多信息,请参阅Elasticsearch安装指南。
- 在您的环境或直接在机器上运行的Prometheus。有关如何安装Prometheus的说明,请参阅Prometheus文档中的安装。
- 在您的环境或直接在机器上运行的Grafana。有关如何安装Grafana的说明,请参阅Grafana文档中的安装Grafana。
- (可选) 一个Grafana Cloud账户。Grafana Cloud托管Grafana和基于Mimir的Prometheus度量端点。您仍然需要使用安装在本环境的Prometheus或Grafana Cloud Agent来抓取度量。有关Grafana Cloud的更多信息,请参阅Grafana Cloud。
步骤1:设置Elasticsearch Exporter
在此步骤中,您将在机器上设置Elasticsearch exporter以收集并暴露Elasticsearch度量,格式为Prometheus。本指南使用Ubuntu 20.04系统和Elasticsearch 7.12.0。步骤可能因操作系统和Elasticsearch版本而略有不同。
首先,登录到您的机器并下载相关的Elasticsearch Exporter二进制文件。本指南使用linux-amd64
二进制文件,但您应该选择与您的系统OS和体系结构相对应的版本
wget https://github.com/justwatchcom/elasticsearch_exporter/releases/download/v1.1.0/elasticsearch_exporter-1.1.0.linux-amd64.tar.gz
将v1.1.0
替换为您要安装的版本。本指南可能会过时,因此最好检查Elasticsearch Exporter 版本页面以获取最新稳定版本。
解压缩tar包并进入目录
tar xvfz elasticsearch_exporter-1.1.0.linux-amd64.tar.gz
cd elasticsearch_exporter-1.1.0.linux-amd64
如果您在同一Linux机器上运行Elasticsearch,则您的Elasticsearch端点将为https://127.0.0.1:9200
。根据您的配置,这可能不同,可以使用--es.uri
标志进行设置。
最后,运行exporter
./elasticsearch_exporter --es.uri="https://127.0.0.1:9200"
level=info ts=2021-03-31T10:39:42.180223026Z caller=clusterinfo.go:200 msg="triggering initial cluster info call"
level=info ts=2021-03-31T10:39:42.180423443Z caller=clusterinfo.go:169 msg="providing consumers with updated cluster info label"
level=info ts=2021-03-31T10:39:42.18398451Z caller=main.go:148 msg="started cluster info retriever" interval=5m0s
level=info ts=2021-03-31T10:39:42.184156478Z caller=main.go:188 msg="starting elasticsearch_exporter" addr=:9114
如果您看到上述输出,则成功运行了Elasticsearch Exporter。
Elasticsearch Exporter在端口9114上以Prometheus格式发布Elasticsearch度量。您可以使用curl
来测试此操作。您需要打开新的SSH会话或将Elasticsearch Exporter进程置于后台才能使用curl
。
curl https://127.0.0.1:9114/metrics
# HELP elasticsearch_node_stats_up Was the last scrape of the ElasticSearch nodes endpoint successful.
# TYPE elasticsearch_node_stats_up gauge
elasticsearch_node_stats_up 1
# HELP elasticsearch_nodes_roles Node roles
# TYPE elasticsearch_nodes_roles gauge
elasticsearch_nodes_roles{cluster="es-docker-cluster",host="172.29.0.2",name="es01",role="client"} 1
elasticsearch_nodes_roles{cluster="es-docker-cluster",host="172.29.0.2",name="es01",role="data"} 1
elasticsearch_nodes_roles{cluster="es-docker-cluster",host="172.29.0.2",name="es01",role="ingest"} 1
elasticsearch_nodes_roles{cluster="es-docker-cluster",host="172.29.0.2",name="es01",role="master"} 1
# HELP elasticsearch_os_cpu_percent Percent CPU used by OS
# TYPE elasticsearch_os_cpu_percent gauge
elasticsearch_os_cpu_percent{cluster="es-docker-cluster",es_client_node="true",es_data_node="true",es_ingest_node="true",es_master_node="true",host="172.29.0.2",name="es01"} 0
# HELP elasticsearch_os_load1 Shortterm load average
# TYPE elasticsearch_os_load1 gauge
elasticsearch_os_load1{cluster="es-docker-cluster",es_client_node="true",es_data_node="true",es_ingest_node="true",es_master_node="true",host="172.29.0.2",name="es01"} 0
# HELP elasticsearch_os_load15 Longterm load average
# TYPE elasticsearch_os_load15 gauge
elasticsearch_os_load15{cluster="es-docker-cluster",es_client_node="true",es_data_node="true",es_ingest_node="true",es_master_node="true",host="172.29.0.2",name="es01"} 0.05
# HELP elasticsearch_os_load5 Midterm load average
# TYPE elasticsearch_os_load5 gauge
elasticsearch_os_load5{cluster="es-docker-cluster",es_client_node="true",es_data_node="true",es_ingest_node="true",es_master_node="true",host="172.29.0.2",name="es01"} 0
# HELP elasticsearch_os_mem_actual_free_bytes Amount of free physical memory in bytes
# TYPE elasticsearch_os_mem_actual_free_bytes gauge
elasticsearch_os_mem_actual_free_bytes{cluster="es-docker-cluster",es_client_node="true",es_data_node="true",es_ingest_node="true",es_master_node="true",host="172.29.0.2",name="es01"} 0
如果您看到上述输出,则您已准备好开始使用Prometheus抓取Elasticsearch度量。
为了避免通过命令行运行和管理 Elasticsearch Exporter,您可以为它创建一个 systemd
服务。有关如何操作的详细信息,请参阅 创建 systemd 服务以管理代理。将代理二进制文件的路径替换为 Elasticsearch Exporter 的路径。
Elasticsearch Exporter 提供了诸如分片级统计信息、集群快照统计信息等功能。有关这些功能的更多详细信息,请参阅 Elasticsearch Exporter GitHub 仓库。
步骤2:使用Prometheus抓取Elasticsearch Exporter
现在 Elasticsearch Exporter 已在您的机器上启动并运行,您可以配置 Prometheus 拉取作业来收集和存储 Elasticsearch Exporter 的指标。
将以下拉取作业配置添加到您的 prometheus.yml
配置文件的 scrape_configs
部分
- job_name: elasticsearch
static_configs:
- targets: ['elasticsearch_exporter_machine_IP_address:9114']
将 elasticsearch_exporter_machine_IP_address
替换为运行 Elasticsearch Exporter 的机器的 IP 地址。如果您在相同的机器上运行 Prometheus,这将使用 localhost
。有关配置 Prometheus 的更多详细信息,请参阅 Prometheus 文档中的 配置。
如果您没有 prometheus.yml
配置文件,可以使用您喜欢的文本编辑器创建一个简单的文件。打开您首选的文本编辑器,粘贴以下 Prometheus 配置
global:
scrape_interval: 15s
scrape_configs:
- job_name: elasticsearch
static_configs:
- targets: ['elasticsearch_exporter_machine_IP_address:9114']
此配置告诉 Prometheus 每 15 秒拉取一次所有作业。唯一配置的拉取作业名为 elasticsearch
,并定义了一个 elasticsearch_exporter_machine_IP_address:9114
目标。默认情况下,Prometheus 将使用 HTTP 拉取 /metrics
端点。
保存并关闭文件。然后,您可以使用以下命令运行 Prometheus
./prometheus --config.file=./prometheus.yml
将指标发送到Grafana Cloud
要将 MySQL Exporter 指标从 Prometheus 发送到 Grafana Cloud,请在您的 prometheus.yml
配置文件中配置 remote_write
参数。有关更多信息,请参阅 Grafana Cloud 文档中的 指标 — Prometheus。有关 remote_write
参数的更多信息,请参阅 Prometheus 文档中的 remote_write
。
步骤3:配置记录规则
使用记录规则,您可以预先计算和缓存频繁查询的指标。例如,如果仪表板面板使用计算密集型查询,如 rate()
,您可以创建一个记录规则,该规则以常规的降低间隔运行,并将密集查询的结果保存为新时间序列。这样可以避免在仪表板刷新时每次都获取和计算数据。有关 Prometheus 记录规则的更多信息,请参阅 Prometheus 文档中的 记录规则。
您应该在加载本指南中的仪表板之前加载以下记录规则。仪表板查询和警报规则使用记录规则来减少 Prometheus 或 Grafana Cloud 指标服务器上的负载,具体取决于您评估规则的位置。
您可以从这里获取记录规则 YAML 文件 这里。
此记录规则 YAML 文件是使用 Elasticsearch Exporter 的 mixin 生成的。
将记录规则加载到Prometheus
要将记录规则加载到 Prometheus 中,请将以下内容添加到您的 prometheus.yml
配置文件中
rule_files:
- "elasticsearch_exporter_recording_rules.yml"
请确保将 elasticsearch_exporter_recording_rules.yml
替换为您 Elasticsearch Exporter 记录规则 YAML 文件的路径。
将记录规则加载到Grafana Cloud
有关如何将记录规则加载到 Grafana Cloud 的更多信息,请参阅 Prometheus 和 Loki 规则与 cortextool。
步骤4:配置仪表板
此快速入门包含一个仪表板
- Elasticsearch 概览
有关如何将这些仪表板导入 Grafana 的详细信息,请参阅 Grafana 文档中的 导入仪表板。
这些仪表板查询可能取决于前面步骤中定义的记录规则。确保在导入仪表板之前导入这些规则。
您可以从这里获取仪表板 这里。
步骤5:配置警报
使用 Prometheus 告警规则,您可以定义当 PromQL 表达式超过某些阈值或在一段时间内满足特定条件时触发的告警。例如,您可以定义一个 HighRequestLatency
告警,当请求延迟指标超过一段时间内的某个阈值时触发。一旦触发告警条件,告警就会进入 待处理
状态。在满足 for
参数定义的时间段后,告警会进入 激活
状态。您可以使用像 Alertmanager 这样的工具来配置激活告警的路由和通知。Alertmanager 也内置在 Grafana Cloud 中。
您可以从这里获取告警规则 YAML 文件。
将警报规则加载到Prometheus
要将告警规则加载到 Prometheus 中,请将以下内容添加到您的 prometheus.yml
配置文件中
rule_files:
- "elasticsearch_exporter_alerting_rules.yml"
请确保将 elasticsearch_exporter_alerting_rules.yml
替换为您 Elasticsearch 告警规则 YAML 文件的路径。
将警报规则加载到Grafana Cloud
有关如何使用 cortextool 将告警规则加载到 Grafana Cloud 的说明,请参阅Prometheus 和 Loki 规则与 cortextool。
结论
在本快速入门中,您已在您的 Linux 机器上安装并运行了 Elasticsearch Exporter。然后,您配置 Prometheus 来抓取 Elasticsearch Exporter 提供的数据库和 Elasticsearch 指标。您将记录规则和告警规则加载到 Prometheus 中,最后导入 Grafana 仪表板以可视化 Elasticsearch 指标。
如果您使用 Grafana Cloud,您可以通过安装带有 Grafana Cloud Agent 的 Elasticsearch 集成来跳过本指南中的所有步骤。此集成将预配置的 Elasticsearch Exporter 嵌入到代理中,并自动提供 Grafana 仪表板以及 Prometheus 告警和记录规则,因此您无需手动导入。有关如何设置 Elasticsearch 集成的说明,请参阅Grafana Cloud 集成。
仪表板、记录规则和告警规则是使用 Elasticsearch Exporter 混合生成的。混合是用于仪表板、记录规则和告警的可重用模板,由主题专家策划和设计。有关更多信息,请参阅Elasticsearch 混合存储库。
本页内容
在导入本指南中的仪表板之前,您应该加载以下记录规则。 仪表板查询使用记录规则来减少 Prometheus 或 Grafana Cloud Metrics 服务器上的负载,具体取决于您在哪里评估规则。
本快速入门包含以下记录规则
elasticsearch_process_cpu_high
elasticsearch_os_cpu_high
elasticsearch_yellow_cluster_status
elasticsearch_red_cluster_status
elasticsearch_filesystem_data_used_percent
elasticsearch_filesystem_data_free_percent
elasticsearch_node_disk_watermark_reached
elasticsearch_heap_utilization_percentage
groups:
- name: elasticsearch_rules
rules:
- record: elasticsearch_filesystem_data_free_percent
expr: 100 - elasticsearch_filesystem_data_used_percent
- record: elasticsearch_red_cluster_status
expr: sum by (cluster) (elasticsearch_cluster_health_status == 2)
- record: elasticsearch_yellow_cluster_status
expr: sum by (cluster) (elasticsearch_cluster_health_status == 1)
- record: elasticsearch_process_cpu_high
expr: sum by (cluster, instance, name) (elasticsearch_process_cpu_percent)
- record: elasticsearch_os_cpu_high
expr: sum by (cluster, instance, name) (elasticsearch_os_cpu_percent)
- record: elasticsearch_filesystem_data_used_percent
expr: sum by (cluster, instance, name) (
100 * (elasticsearch_filesystem_data_size_bytes - elasticsearch_filesystem_data_free_bytes)
/ elasticsearch_filesystem_data_size_bytes)
- record: elasticsearch_node_disk_watermark_reached
expr: sum by (cluster, instance, name) (round(
(1 - (elasticsearch_filesystem_data_available_bytes / elasticsearch_filesystem_data_size_bytes)
) * 100, 0.001))
- record: elasticsearch_heap_utilization_percentage
expr: sum by (cluster, instance, name) (
100 * (elasticsearch_jvm_memory_used_bytes{area="heap"} / elasticsearch_jvm_memory_max_bytes{area="heap"}))
此记录规则 YAML 文件是使用 Elasticsearch Exporter 的 mixin 生成的。
本页内容
注意:这些仪表板可能依赖于上一标签中的记录规则。在导入仪表板之前,请确保导入这些规则。
Elasticsearch Overview Dashboard
此仪表板包括以下指标的面板
- 集群健康
- CPU 和内存
- 磁盘使用情况
- 网络使用情况
- 平均负载
- JVM 内存使用情况
- JVM 垃圾回收
- 跳闸断路器
- 节点
- 待处理任务
- 每个集群的打开文件描述符
- 活动主分片
- 活动、初始化、重定位和延迟分片
- Translog
- 断路器
- 文档总数和大小
- 节点上的文档数
- 索引、删除和合并的文档速率
- 合并的文档字节数
- 查询、索引和合并时间
- 索引存储的节流时间
- 总操作速率、时间和统计信息
- 线程池
- 缓存
- 段
您可以直接使用以下仪表板ID导入仪表板: 14191
您可以从这里获取仪表板JSON。
此仪表板是使用Elasticsearch Exporter mixin 生成的。
本页内容
此快速入门包括以下警报规则
ElasticsearchTooFewNodesRunning
运行中的Elasticsearch节点少于预期
ElasticsearchHeapTooHigh
堆利用率过高
ElasticsearchClusterNotHealthy
黄色或红色Elasticsearch集群状态
ElasticsearchNodeDiskWatermarkReached
磁盘空间不足
ElasticsearchProcessCPUHigh
Elasticsearch进程使用了过多的CPU
SystemCPUHigh
Elasticsearch节点使用了过多的CPU
下载以下警报规则YAML文件groups:
- name: elasticsearch-alerts
rules:
- alert: ElasticsearchTooFewNodesRunning
expr: elasticsearch_cluster_health_number_of_nodes < 3
for: 5m
annotations:
description: "There are only {{ $value }} < 3 ElasticSearch nodes running"
summary: ElasticSearch running on less than 3 nodes
labels:
severity: critical
- alert: ElasticsearchHeapTooHigh
expr: elasticsearch_heap_utilization_percentage > 90
for: 15m
annotations:
description: The heap usage is over 90% for 15m
summary: "ElasticSearch node {{ $labels.name }} heap usage is high"
labels:
severity: critical
- alert: ElasticsearchClusterNotHealthy
expr: elasticsearch_red_cluster_status
for: 2m
annotations:
message: "Cluster {{ $labels.cluster }} health status has been RED for at least 2m. Cluster does not accept writes, shards may be missing or master node hasn't been elected yet."
summary: Cluster health status is RED
labels:
severity: critical
- alert: ElasticsearchClusterNotHealthy
expr: elasticsearch_yellow_cluster_status
for: 20m
annotations":
message": "Cluster {{ $labels.cluster }} health status has been YELLOW for at least 20m. Some shard replicas are not allocated."
summary": Cluster health status is YELLOW
labels:
severity: warning
- alert: ElasticsearchNodeDiskWatermarkReached
expr: elasticsearch_node_disk_watermark_reached > 85
for: 5m
annotations:
message: "Disk Low Watermark Reached at {{ $labels.node }} node in {{ $labels.cluster }} cluster. Shards can not be allocated to this node anymore. You should consider adding more disk to the node."
summary: "Disk Low Watermark Reached - disk saturation is {{ $value }}%"
labels:
severity: warning
- alert: ElasticsearchNodeDiskWatermarkReached
expr: elasticsearch_node_disk_watermark_reached > 90
for: 5m
annotations:
message: "Disk High Watermark Reached at {{ $labels.node }} node in {{ $labels.cluster }} cluster. Some shards will be re-allocated to different nodes if possible. Make sure more disk space is added to the node or drop old indices allocated to this node."
summary: "Disk High Watermark Reached - disk saturation is {{ $value }}%"
labels:
severity: critical
- alert: ElasticsearchJVMHeapUseHigh
expr: elasticsearch_heap_utilization_percentage > 75
for: 10m
annotations:
message: "JVM Heap usage on the node {{ $labels.node }} in {{ $labels.cluster }} cluster is {{ $value }}%."
summary: JVM Heap usage on the node is high
labels:
severity: critical
- alert: SystemCPUHigh
expr: elasticsearch_os_cpu_high > 90
for: 1m
annotations":
message: "System CPU usage on the node {{ $labels.node }} in {{ $labels.cluster }} cluster is {{ $value }}%"
summary: System CPU usage is high
labels:
severity: critical
- alert: ElasticsearchProcessCPUHigh
expr: elasticsearch_process_cpu_high > 90
for: 1m
annotations:
message: "ES process CPU usage on the node {{ $labels.node }} in {{ $labels.cluster }} cluster is {{ $value }}%"
summary: ES process CPU usage is high
labels:
severity: critical
此警报规则YAML文件是使用Elasticsearch Exporter mixin 生成的。
本页内容
Grafana Cloud附带了一系列不断扩大的集成,可以帮助您在几分钟内快速启动可观察性堆栈。Elasticsearch集成内置在Grafana Cloud代理中,公开抓取关键Elasticsearch指标并将它们推送到Grafana Cloud。代理将使用嵌入式Elasticsearch Exporter抓取指标,Grafana Cloud将自动提供定制的Grafana仪表板和警报,用于可视化并采取此数据。
要了解更多信息,请查看Grafana Cloud文档。
它的工作原理
配置、安装、连接和维护Prometheus监控组件通常需要深厚的专业知识。从设置到仪表板和警报可能需要相当长的时间。作为Grafana的创建者——同时也是Prometheus和Cortex的核心贡献者——我们构建简单的集成来抽象一些工作,以便快速开始。它的工作原理
- 免费注册Grafana Cloud账户。
- 选择您要观察的目标(一个不断扩大的目录)。
- 运行一条命令即可安装Grafana代理。代理嵌入并预配置导出器以公开默认指标,并将它们推送到Grafana Cloud指标后端。
- 哇!您将看到定制的Grafana仪表板,并从合理的警报默认值中受益。
寻找不同的导出器或集成?查看我们为MySQL、Postgres、Redis、Memcached等流行组件提供的不断增长的集成库。