写点什么

在 Amazon Elasticsearch Service 中设置警报

  • 2019-09-18
  • 本文字数:3990 字

    阅读完需:约 13 分钟

在 Amazon Elasticsearch Service 中设置警报

客户经常使用 Amazon Elasticsearch Service 进行日志分析。Amazon ES 允许您从基础设施收集日志,将每个日志行转换为 JSON 文档,并将这些文档发送到批量处理 BULK API。转换后的日志行包含许多 字段,每个字段都包含多个 值。例如,Apache Web 日志每行包含一个源 IP 地址字段、一个请求 URL 字段和一个状态代码字段(还有其他各种字段)。许多用户使用 Kibana 构建控制面板,直观监控其基础设施,显示应用程序使用情况、错误数或安全问题,这些问题从这些字段中的数据显而易见。例如,您可以将 HTTP 5xx 状态代码的计数绘制成图形,观察变化并对其做出反应。如果您看到 5xx 代码数量出现突增,则可能是您的某个服务器出现了问题。但是使用此系统,您必须手动监控 Kibana。4 月 8 日,Amazon ES 推出了事件监控和警报支持。要使用此功能,您可以使用带有 触发器(即您设置的特定触发条件,指示监视器何时发送警报)的 监控 Monitor(即事先安排的作业)。 警报是发生触发条件的通知。触发器触发时,监控 Monitor 将执行特定 操作(向 目标发送消息)。本文使用模拟的物联网 Device Farm 生成数据并将数据发送到 Amazon ES。

模拟器概览

该模拟包括几个重要部分:传感器和设备。

传感器

模拟器的核心类是 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。完成此操作后,选择查看策略。



{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": "sns:Publish","Resource": "sns-topic-arn"}]}
复制代码


在查看策略页面上,为您的策略命名。在此示例中,我设置为 SensorAlertingPolicy。选择创建策略。


返回创建角色窗口或选项卡。使用刷新按钮重新加载策略,并在搜索框中键入策略的名称。选中策略旁边的复选框。依次选择下一步: 标签和下一步: 查看。您还可以添加标签,以便更轻松地搜索您的角色。


在“查看”页面上,为您的角色命名。在此示例中,我使用了 SensorAlertingRole。选择创建角色。


要将角色的可信实体更改为 Amazon ES,请在 IAM 控制台中选择角色。在搜索框中键入 SensorAlertingRole,然后选择链接(而不是复选框)以查看该角色。依次选择信任关系和编辑信任关系。



编辑策略文档代码,使用 es.amazonaws.com 替换 ec2.amazonaws.com。完成后的策略文档应类似于以下代码示例:



{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Service": "es.amazonaws.com"},"Action": "sts:AssumeRole"}]}

复制代码


选择更新信任策略。记下您的角色 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-*”)。


从列表中选择时间字段的值。这会在图表顶部显示几个选择器。选择 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 作为一名软件开发人员,曾为某个大型电子商务搜索引擎编写代码长达四年。


本文转载自 AWS 博客。


原文链接:


https://aws.amazon.com/blogs/big-data/setting-alerts-in-amazon-elasticsearch-service/


2019-09-18 15:101023
用户头像

发布了 1852 篇内容, 共 119.6 次阅读, 收获喜欢 78 次。

关注

评论

发布
暂无评论
发现更多内容

Flutter Dio二次封装,Android开发还不会这些

android 程序员 移动开发

Flutter 中 Wrap 的使用详解(含对比图) _ Flutter Widgets

android 程序员 移动开发

DialogFragment探索与实现,android高级工程师面试题

android 程序员 移动开发

Flutter 2,面试官问的那些Android原理你都懂吗

android 程序员 移动开发

Flutter App的启动流程,kotlin单例模式

android 程序员 移动开发

Flutter GetX使用---简洁的魅力!,Android高级

android 程序员 移动开发

Flutter-可以缩放拖拽的图片,安卓内存优化管理器

android 程序员 移动开发

Flutter 2(1),字节跳动高工面试

android 移动开发

esp8266~lwip突破MTU最大1500限制,apt编译时期自动生成代码&动态类加载

android 程序员 移动开发

FFmpeg之OpenGL绘制与Native Window绘制(五),安卓面试题及答案2020百度

android 程序员 移动开发

Python代码阅读(第53篇):字符串重复拼接

Felix

Python Code 字符串 阅读代码 Python初学者

上万规模数据湖如何在实验室测试

华为云开发者联盟

容器 数据湖 测试 MRS 集群

Flutter 扩展NestedScrollView (二)列表滚动同步解决(2)

android 程序员 移动开发

Flutter 扩展NestedScrollView (二)列表滚动同步解决

android 程序员 移动开发

Flutter 插件使用必知必会,我的阿里春招之路分享

android 程序员 移动开发

架构训练营模块七作业-王者荣耀商城异地多活架构设计

李焕之

模块七:王者荣耀商城异地多活架构设计

apple

新一代云原生的微服务架构分享

鲸品堂

云原生

Flutter 与 原生交互(Android),含BATJM大厂

android 程序员 移动开发

Flutter 中获取屏幕以及 Widget 的宽高,flutter小程序开发

android 程序员 移动开发

DialogFragment探索与实现(1),2021年是做安卓开发人员的绝佳时机

android 程序员 移动开发

Flutter 命令本质之 Flutter tools 机制源码深入分析,kotlin实战

android 程序员 移动开发

Flutter _ 你真的会用 Slider 组件吗?,kotlin中文文档pdf

android 程序员 移动开发

Flutter 网络请求框架封装,android源码设计模式解析与实战

android 程序员 移动开发

Flutter-可以缩放拖拽的图片(1),android最新开发语言

android 程序员 移动开发

压缩性能提升10-20倍,TDengine助力零跑科技实现性能和成本最优化

TDengine

数据库 大数据 tdengine 后端

百度爱番番数据分析体系的架构与实践

百度Geek说

架构 数据分析 后端

Flutter 性能优化 Tips,Android攒了一个月的面试题及解答

android 程序员 移动开发

Flutter _ 你真的会用 Slider 组件吗?(1),androidapp开发入门

android 程序员 移动开发

Flutter 扩展NestedScrollView (二)列表滚动同步解决(1)

android 程序员 移动开发

Flutter 1,基于h5框架的移动app开发

android 程序员 移动开发

在 Amazon Elasticsearch Service 中设置警报_安全_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章