在基本许可下,发布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中需要指定该字段。
本次设置如下所示。
设置通知频道
设置警报。
确认警报
似乎已经正确通知了。