亚马逊AWS官方博客
在 Amazon Elasticsearch Service 中设置警报
Original URL:https://aws.amazon.com/blogs/big-data/setting-alerts-in-amazon-elasticsearch-service/
模拟器概览
该模拟包括几个重要部分:传感器和设备。
传感器
模拟器的核心类是 Sensor 类。设备上配有传感器,可以模拟不同的浮点值模式。调用每个传感器的 report 方法时,它会更新并返回其传感器的对应值。Sensor 有多个子类:
- SineSensor:根据当前时间戳生成正弦波。
- ConstSensor:生成常量值。该类包括一个随机的“模糊”因子,可以在特定值附近偏移。
- DriftingSensor:允许在起始值的基础上连续、随机地偏移。
- MonotonicSensor:通过随机模糊以恒定增量增加其值。
在本文中,我使用了 MonotonicSensor,它的值会不断增加,以强行突破我设置的警报阈值。
您可以通过通用唯一标识符 (UUID) 和它跟踪的指标的标签来确认传感器。Sensor 类的 report 函数会返回时间戳、传感器的 UUID、指标标签以及该时刻的指标值。
设备
设备是一组传感器的集合。在本文中,我创建了一组设备,用以模拟现场的 IoT 设备,测量温度和湿度,并发送设备的 CPU 信息。每个设备具有一个 report 方法,可递归调用所有传感器的 report 方法,并返回传感器报告的集合。我在 GitHub 上的 Open Distro for Elasticsearch 示例代码存储库中提供了代码。
我将某个设备的 CPU 传感器设置为不断向上偏移,来模拟设备中的问题。您可以在以下折线图中看到预期的“不良行为”:
在接下来的部分中,我设置了一个 CPU 使用率达到 90% 时触发的警报,以便我可以捕获并纠正这种情况。
先决条件
要继续使用此解决方案,您需要一个 AWS 账户。设置您自己的 Amazon ES 域,以构成配置监控和警报的基础。
第 1 步:设置目标
在 Amazon ES 中创建警报时,您可以分配一个或多个目标。目标是分发频道,您的域会在警报触发时发送通知。您可以使用 Amazon SNS、Slack 频道或 Amazon Chime 作为目标。也可以设置一个自定义 webhook (URL) 来接收消息。您可以设置标题和邮件正文,Amazon ES Alerts 会将邮件发布到目标 URL。
在此示例中,我使用 SNS 接收来自 Amazon ES 域的警报,但 Amazon ES 提供了许多用于设置主题和订阅的选项。我创建了主题以接收通知并订阅电子邮件分发主题。您的 SNS 主题可以有许多订阅,支持通过 HTTP/S 终端节点、电子邮件、Amazon SQS、AWS Lambda 和 SMS 分发。
要设置目标,请导航至 AWS 管理控制台。登录并打开 SNS 控制台。
选择主题、创建主题。
在创建主题页面中,填写名称和显示名称的值。我将两者都设置为 sensor-alerting。选择创建主题。
现在订阅您的主题。您可以从主题页面执行此操作,因为在您创建完主题后,控制台会自动将您返回此页面。您也可以通过左侧导航窗格中的订阅选项卡来订阅。从主题页面中,选择创建订阅。
在创建订阅页面上,为协议部分选择电子邮件。在终端节点框中填写您的电子邮件地址,然后选择创建订阅。请记下此处的主题 ARN,您稍后会再次引用它。
最后,通过单击 SNS 发送给您的电子邮件中的确认链接来确认您的订阅。
第 2 步:设置角色
要让 Amazon ES 向您的主题发布警报,请创建具有相应权限的 IAM 角色。在开始之前,请从第 1 步中的 SNS 主题页面复制主题 ARN。
您的角色包含两部分:可信实体和承担该角色的实体的权限。控制台不支持使用 Amazon ES 作为可信实体创建角色。使用 EC2 作为可信实体创建角色,然后编辑 JSON 信任文档以更改实体。
在 AWS 管理控制台中,打开 IAM 控制台并依次选择角色、创建角色。
在创建角色页面上,选择 AWS 服务和 EC2。选择下一步: 权限。
在权限页面上,选择创建策略。此操作会将您带到创建策略的新窗口。不要关闭原来的选项卡,因为您稍后会返回该窗口。
您在此步骤创建的策略会定义承担该角色的实体的权限。添加策略文档,允许各种实体(在本例中为 Amazon ES)发布到您的 SNS 主题。
在创建策略页面上,选择 JSON 选项卡,并复制粘贴以下代码来替换 JSON 文本。将代码中的 sns-topic-arn 替换为您之前创建的主题的 ARN。完成此操作后,选择查看策略。
在查看策略页面上,为您的策略命名。在此示例中,我设置为 SensorAlertingPolicy。选择创建策略。
返回创建角色窗口或选项卡。使用刷新按钮重新加载策略,并在搜索框中键入策略的名称。选中策略旁边的复选框。依次选择下一步: 标签和下一步: 查看。您还可以添加标签,以便更轻松地搜索您的角色。
在“查看”页面上,为您的角色命名。在此示例中,我使用了 SensorAlertingRole。选择创建角色。
要将角色的可信实体更改为 Amazon ES,请在 IAM 控制台中选择角色。在搜索框中键入 SensorAlertingRole,然后选择链接(而不是复选框)以查看该角色。依次选择信任关系和编辑信任关系。
编辑策略文档代码,使用 es.amazonaws.com 替换 ec2.amazonaws.com。完成后的策略文档应类似于以下代码示例:
选择更新信任策略。记下您的角色 ARN,因为您会再次引用它。
第 3 步:设置 Amazon ES 警报
我将我的 IoT 传感器模拟器指向我的 Amazon ES 域。这会创建作为监视器和警报基础的数据。要亲自执行此操作,请在浏览器中导航到 Kibana 终端节点,然后在左侧导航窗格中选择警报。在窗口顶部,依次选择目标和添加目标。
在添加目标对话框中,为目标命名。在类型部分,选择 SNS,并将 SNS 主题 ARN 设置为您在第 1 步中创建的主题 ARN。将 IAM 角色 ARN 设置为您在第 2 步中创建的角色 ARN。选择创建。您可以根据需要设置多个目标,以便在出现问题时提醒多个人。
第 4 步:设置监控
Open Distro for Amazon ES 中的监控支持指定要监控的值。您可以通过图形方式或通过指定 Amazon ES 查询来选择值。首先定义监视器,然后为监视的值定义触发器。
在 Kibana 中,依次选择监控和创建监控。
为您的监控命名。我将监控命名为 Device CPUs。您可以将频率设置为某个预定义的时间间隔,或使用 cron 表达式进行更精细的控制。我选择的是每隔 1 分钟。
滚动到页面的定义监控部分。使用此组控件指定要监控的值。您可以为一个索引或多个索引、时间字段输入值并输入目标值。从您想如何定义监控?列表中,选择使用可视图表定义。您还可以输入使用提取查询定义的信息,这允许您提供生成要监控的值的查询。对于简单的阈值,可视界面快速简便。
从列表中选择要监控的索引值。该列表包含单个索引。要使用通配符,您还可以在文本框中键入。对于要注册的值,必须在键入索引名称后按 Enter 键(例如,“logs-*” <enter>)。
从列表中选择时间字段的值。这会在图表顶部显示几个选择器。选择 Count() 并打开菜单以查看计算值的汇总。选择 max(),然后在选择字段部分选择 CPU。最后,将 FOR THE LAST 设置为 5 分钟。选择创建。
您可以直观地创建监视器或提供查询以生成要监控的值。
我选择了 logs-* 索引来监控 CPU 字段的最大值,但此操作尚未创建一个触发器。选择创建。这将打开定义触发器页面。
第 5 步:创建触发器
创建触发器时,可以为要监控的字段指定阈值。当该字段的值超过阈值时,监视器会进入活动状态。我创建了一个名为 CPU Too High 的触发器,阈值为 90,严重性级别为 1。
设置触发条件后,可以设置 Amazon ES 要执行的操作。
要添加操作,请滚动页面。我添加了一项操作,用于向我的 SNS 主题发送消息,包括监控名称、触发器、严重性以及警报激活的时间段。您可以使用 Mustache 脚本为您收到的消息创建模板。
添加完操作后,请选择页面底部的创建。
总结
当您返回警报控制面板后,您将看到警报处于已完成状态。警报可以处于各种不同的状态。已完成表示监视器成功查询目标,并且未触发该触发器。
为使警报达到活动状态,我发送了某台 CPU 使用率从 50% 上升到 100% 的故障设备的模拟传感器数据。在这个数值达到 90% 时,我收到了以下电子邮件:
小结
在本文中,我演示了如何使用 Amazon ES 警报功能帮助您监控日志文件中的关键数据,以便在问题初现端倪时快速做出反应。通过识别 KPI、设置阈值并向第一应急响应者发出警报,您可以缩短关键问题的响应时间。
如果您有任何问题或反馈,请在下面留言,或在 Twitter 上联系我们!
关于作者
Jon Handler (@_searchgeek) 是总部位于加利福尼亚州帕罗奥图市的 Amazon Web Services 的首席解决方案架构师。Jon 与 CloudSearch 和 Elasticsearch 团队密切合作,为想要将搜索工作负载迁移到 AWS 云的广大客户提供帮助和指导。在加入 AWS 之前,Jon 作为一名软件开发人员,曾为某个大型电子商务搜索引擎编写代码长达四年。