亚马逊AWS官方博客
使用 odfe-monitor-cli 来管理您的 Open Distro for Elasticsearch 警报监视器
当您使用 Open Distro for Elasticsearch 警报功能时,您将在 Kibana 中创建监视器。使用 UI 可以非常快速方便地设置监视器,因此也十分容易入门。但如果监控属于集群的重要工作负载,您可能会需要不断创建、更新和调整数百个甚至数千个监视器。使用 Kibana UI 来设置如此多的监视器,将非常耗时,也无比枯燥。幸运的是,警报插件拥有一个 REST API,借助它可以更方便地通过命令行来管理监视器。
如果您还不熟悉 Open Distro for Elasticsearch 的警报功能,请参阅我们以前的一些博文,涉及的内容包括在 Kibana 中设置监视器的基础知识以及根据 Open Distro for Elasticsearch 安全性审计日志发出警报。
借助警报插件的 REST API,您可以对监视器执行 CRUD 和其他操作。odfe-monitor-cli
将此 API 用于自己的请求,但允许您将监视器保存到 YAML 文件中。您可以构建自动化的管道以将监视器部署到您集群,并且可以使用该管道将同样的监视器部署到支持开发、测试和生产的多个集群。您可以在源控制系统中维护您的监视器,以满足共享、版本控制和审核等多种目的。CLI 将从您的集群读取监视器,并将它们与您的 YAML 文件进行比较,从而帮助您防止偏移。
本博文解释了如何通过 odfe-monitor-cli
(可从 GitHub 获取,采用 Apache 2.0 许可证),使用 YAML 文件来管理您的监视器。
前提条件
odfe-monitor-cli
目前使用基本的 HTTP 身份验证机制。确保您的集群已经启用了基本身份验证。
安装 odfe-monitor-cli
安装进程是一个命令:
curl -sfL https://raw.githubusercontent.com/mihirsoni/odfe-monitor-cli/master/godownloader.sh | bash -s -- -b /usr/local/bin
注意:有关其他安装方法以及如何从源构建的说明,请参阅 odfe-monitor-cli
README 文件。
成功安装后,验证它是否工作正常:
$ odfe-monitor-cli 此应用程序将帮助您使用 YAML 文件来管理 Opendistro 警报监视器。 Usage: odfe-monitor-cli [command] ...
创建目标并完成同步
您需要在 Open Distro for Elasticsearch 警报中定义目标,从而指定要将消息发送到哪里(Slack、Chime 或自定义)。odfe-monitor-cli
目前还不支持目标管理功能,因此您需要使用 Kibana UI 来创建目标。
首先导航至 https://localhost:5601
以进入 Kibana。登录后选择警报选项卡。选择目标,然后创建一个目标。
在您的计算机上,创建一个新目录 odfe-monitor-cli
。此目录将用于放置您创建的监视器以及您从集群同步的任何监视器或目标。
$ mkdir odfe-monitor-cli $ cd odfe-monitor-cli $ odfe-monitor-cli sync --destinations #Sync remote destination
该序列中的最后一个命令将会获取所有远程目标,并将它们写入一个新的文件 destinations.yml
。该文件将包含一份目标名称和 ID 的映射图。稍后您创建监视器时将会用到该目标名称。如果您使用 cat destinations.yml
来查看该文件,它应会如以下所示:
#destinations.yml file content sample_destination: _6wzIGsBoP5_pydBFBzc
如果您的集群上已经拥有了监视器,并且希望保留这些监视器,您也可以同步这些监视器。否则请跳过此步骤。此命令会获取所有的远程监视器并写入 monitors.yml
文件:
odfe-monitor-cli sync --monitors #Sync existing remote monitors
您可以在根目录下添加其他目录并将您的监视器分为多个 YAML 文件,按照您认为适当的任何方式进行组织。当您使用 odfe-monitor-cli
将更改发送到集群时,它会遍历当前目录下的整个目录结构,查找所有的 .yml
文件。使用 --rootDir
选项以更改要遍历的根目录。
创建新监视器
使用文本编辑器创建新文件 error-count-alert.yml
。复制以下 yml 并粘贴到该文件,然后将 destinationId
更改为某个现有目标的名称。您可以将您的文件放置在 odfe-monitor-cli
目录内或之下的任何位置。
- name: 'Sample Alerting monitor'
schedule:
period:
interval: 10
unit: MINUTES
enabled: true
inputs:
- search:
indices:
- log* # Change this as per monitor, this is just an example
query: # This block should be valid Elasticsearch query
size: 0
query:
match_all: {
boost: 1.0
}
triggers:
- name: '500'
severity: '2'
condition: | #This is how you can create multiline
// Performs some crude custom scoring and returns true if that score exceeds a certain value
int score = 0;
for (int i = 0; i < ctx.results[0].hits.hits.length; i++) {
// Weighs 500 errors 10 times as heavily as 503 errors
if (ctx.results[0].hits.hits[i]._source.http_status_code == "500") {
score += 10;
} else if (ctx.results[0].hits.hits[i]._source.http_status_code == "503") {
score += 1;
}
}
if (score > 99) {
return true;
} else {
return true;
}
actions:
- name: Sample Action
destinationId: sample_destination #This destination should be available in destinations.yaml file otherwise it will throw an error.
subject: 'There is an error'
message: |
Monitor {{ctx.monitor.name}} just entered an alert state.Please investigate the issue.
- Trigger: {{ctx.trigger.name}}
- Severity: {{ctx.trigger.severity}}
- Period start: {{ctx.periodStart}}
- Period end: {{ctx.periodEnd}}
odfe-monitor-cli
提供了一个 diff
命令,它会从您的集群获取监视器并遍历您的本地目录结构,从而显示集群的监视器与您的本地监视器之间的任何差异。您可以使用 diff
命令来验证没有人更改您的集群中的监视器。现在调用 diff
命令以验证它找到了您刚刚创建的新监视器。
$ odfe-monitor-cli diff --------------------------------------------------------- These monitors are currently missing in alerting --------------------------------------------------------- name: 'Sample Alerting monitor' type: 'monitor' schedule: ...
在验证差异后,您可以获取经同事审核或经您的管理层或安全部门批准的任何新监视器或更改的监视器。
您将使用 push
命令以将本地更改发送到您的 Open Distro for Elasticsearch 集群。当您使用 push
命令时,odfe-monitor-cli
会调用 Run Monitor API 来验证您的监视器配置并确保没有错误。如果出现任何错误,odfe-monitor-cli
将会显示该错误及其详细信息。您可以修复这些错误并重新运行 push
命令,直到运行成功,没有出现错误时为止。
默认情况下,push
命令会在空转模式下运行,只是比较差异,检查句法,看是否有任何增加。由于它不会向集群发布任何东西,因此不会发布任何意外的更改。一起准备就绪后,使用 --submit
选项以将您的更改发送到集群:
$ odfe-monitor-cli push --submit
push
命令将执行以下操作:
- 运行并验证修改后的监视器和新监视器。
- 在提供
--submit
标志时创建新监视器并更新现有监视器。
警告:使用--submit
选项推送更改将会覆盖您(通过 Kibana 或任何其他方式)对集群上的现有监视器作出的任何更改。 - 不会删除任何监视器。使用
--delete
和--submit
选项将会删除所有未跟踪的监视器。一定要小心! 监视器删除操作无法撤销!
小结
本博文向大家介绍了命令行界面 odfe-monitor-cli
,它用于管理 Open Distro for Elasticsearch 集群上的监视器。odfe-monitor-cli
方便您以版本控制方式存储监视器,并将这些监视器部署到您的 Open Distro for Elasticsearch 集群。您可以验证您的监视器是否工作正常,并且可以在不同的环境之间共享监视器。
有问题或疑问? 希望参与讨论? 加入 Open Distro for Elasticsearch 论坛。您可以在这里提出问题。欢迎您参与该项目! 期待能在论坛和代码库中见到各位的佳作!