写点什么

在 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:10802
用户头像

发布了 1837 篇内容, 共 93.3 次阅读, 收获喜欢 73 次。

关注

评论

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

java面试之经典算法篇

钟奕礼

Java java面试 java编程 程序员 java

PID和TID的区别

源字节1号

APP开发 低代码开发 小程序开发 网站开发

把Mybatis Generator生成的代码加上想要的注释

京东科技开发者

maven IDEA 代码注释 MyBatis标签 Generator

中国互联网大会天翼云展区大揭秘!

天翼云开发者社区

物流通知:您的快递即刻送达!

天翼云开发者社区

5 分钟带你在本地搭建一套云原生实验环境

谢烟客

Kubernetes 云原生 Service Mesh istio kind

阿里架构师耗时1年,把P8所需要的整个Java体系,都整理到了一起

小二,上酒上酒

Java 架构 面试

行业首个测试开发技术大赛开始报名啦~ 10万现金奖励等你来挑战

霍格沃兹测试开发学社

栈简介、手撸顺序栈、手撸链栈和栈的应用

C++后台开发

数据结构 后端开发 linux开发 C++开发

智能时代如何打通商业市场?华为的内外兼修

这不科技

2023上海国际智慧灯杆及智慧路灯展览会

AIOTE智博会

上海智博会 智慧灯杆展会 智慧路灯展会

【C语言】return 关键字

謓泽

11月月更

Docker搭建harbor私有镜像仓库(命令行模式)

A-刘晨阳

Docker Linux 运维 11月月更

瓴羊Quick BI在线电子表格,数据分析人员高效工作“神器”

巷子

数字先锋| 随时随地云端阅片,“云胶片”时代来啦!

天翼云开发者社区

企业需要进行信息化改革,有哪些好用的信息化管理系统推荐?

优秀

低代码 信息化 信息化管理

从 NASL 说开:低代码编程语言能饭否

石臻臻的杂货铺

11月月更

“元宇宙家园”国脉大厦展馆上线 天翼云实时云渲染筑基未来数字世界

天翼云开发者社区

就这样,进字节了?华为的Java面试题和八股文,真牛批

小二,上酒上酒

Java 面试题 八股文 Java面试题

共36万字!为上岸Alibaba,我把Github上Java面试题都整理了一遍

小二,上酒上酒

Java 面经 大厂面试 Alibaba Java面经

如何平衡客户和用户的诉求冲突?

QualityFocus

产品经理 需求 产品需求

Linux中安装/部署docker-compose

A-刘晨阳

Docker Linux 运维 Docker-compose 11月月更

Linux中基于Docker搭建harbor私有镜像仓库(超级详细)

A-刘晨阳

Docker Linux 运维 Harbor 11月月更

大咖说·先临三维|技术入云塑造3D视觉行业新模式

科技pai

阿里云 科技 3D视觉

白活了!谷歌架构师10年心血汇成的《24种设计模式》,这才是正解

小二,上酒上酒

Java 设计模式

3000人群被字节内部技术图谱炸翻了,惊艳级实用

小二,上酒上酒

Java 架构 技术栈 字节

背完这3套Java面试题,年后offer接不停

钟奕礼

Java java面试 java编程 程序员java

【PCB干货】是开窗还是盖油?想搞懂过孔工艺,看这篇就够了!

华秋PCB

PCB PCB设计 过孔 PCB工艺

一文解决 Go 安装和常用环境变量的配置

陈明勇

Go 11月月更

面试了个阿里P7大佬,他让我见识到什么才是“精通高并发与调优”

小二,上酒上酒

Java 流量 亿级并发设计

面试了个985毕业的大佬,回答“性能调优”题时表情令我毕生难忘

小二,上酒上酒

Java 面试 性能调优

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