在基本许可下,发布Elasticsearch的警报

首先

使用Elasticsearch时,随着数据的积累,索引会变得越来越多。
如果能够管理每个索引模式的生命周期就好了,但是一不小心就可能变得过多,导致打开的文件描述符数量达到最大值(max_file_descriptors),
从而导致无法创建索引的情况可能会发生。

为了检测到这种资源不足的发生,需要监控资源状况,并在出现异常行为时发出警报。

如果购买了Elasticsearch的付费许可证,就可以使用Watcher警报功能,但如果使用免费的Basic许可证运营,将无法使用Watcher功能。

因此,我們將使用Grafana來進行警報通知,以便我們可以通知Elasticsearch節點的資源不足。
(當搜索Elasticsearch + Grafana的組合時,會有很多結果,但我們一直固守著「Watcher是Elasticsearch的警報解決方案!」的固有觀念,所以一直沒有意識到這一點。由於很少使用Grafana本身,所以這次我將同時寫下備忘錄。)

– 生態
– 自然環境
– 周遭環境
– 大環境
– 環保情況

我会在下面的环境中进行测试。

$ docker version
Client: Docker Engine - Community
 Version:           19.03.5
 API version:       1.40
 Go version:        go1.12.12
 Git commit:        633a0ea838
 Built:             Wed Nov 13 07:22:05 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.5
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.12
  Git commit:       633a0ea838
  Built:            Wed Nov 13 07:28:45 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.10
  GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
 runc:
  Version:          1.0.0-rc8+dev
  GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

$ docker images | grep elasticsearch
elasticsearch                       7.6.1               41072cdeebc5        4 weeks ago         790MB

$ docker images | grep grafana
grafana/grafana                     6.7.0               8d9380d6a636        11 days ago         233MB

Elasticsearch 的设置

无论如何,确保启用X-Pack监控,并能够收集监控数据(默认情况下未启用)。
按照此指南,将收集到的监控数据存储在同一个集群中。
(若在生产环境中使用X-Pack监控,则建议将执行生产工作负载的集群与收集监控数据的集群分开。同时,推荐使用MetricBeat来进行监控数据的收集和传输。)

为了简单起见,本次尝试将使用由单个Elasticsearch节点组成的集群。
(如果使用多节点集群,则在基本许可证下需要进行X-Pack安全性设置。)

这一次,已经进行了如下设置。(可以进行设置的项目列表在这里)。

services:
  elasticsearch:
    image: elasticsearch:7.6.1
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - xpack.monitoring.enabled=true
      - xpack.monitoring.collection.enabled=true
      - xpack.monitoring.elasticsearch.collection.enabled=true
    ports:
      - "9200:9200"

收集到的Elasticsearch监控数据将存储在索引模式为.monitoring-es-7-*的索引中(模板为.monitoring-es)。

$ curl -s "localhost:9200/_cat/indices" | grep "\.monitoring-es-7"
green open .monitoring-es-7-2020.03.21 5GydtmSWSCSmKHYmVIUoXw 1 0 1001 165 701kb 701kb

Grafana的配置

现在我们能够收集监控数据,所以我们使用Grafana来获取数据并设置警报。
以下是根据官方文档进行的设置。
docker-compose.yml文件如下所示。

version: "2.2"
services:
  grafana:
    image: grafana/grafana:6.7.0
    container_name: grafana
    ports:
      - "3000:3000"

设置数据源

将收集对象的索引设置为数据源。
需要注意的是,通常的索引中有一个表示数据插入时间点的@timestamp字段,但是.monitoring-*索引中不包含@timestamp字段。相反,它使用了timestamp字段,因此在Time field name中需要指定该字段。
本次设置如下所示。

データソース設定2

设置通知频道

通知チャネル設定1

设置警报。

アラート設定3

确认警报

Slack通知1

似乎已经正确通知了。

广告
将在 10 秒后关闭
bannerAds