文章转载自:https://blog.csdn.net/UbuntuTouch/article/details/105340379

在Elasticsearch可以提供给我们数据的存储及快速的搜索,但是如果能够实时地根据一些条件来发送警报则对我们的应用来说将会非常地有用。在今天的文章中,我们将讲述如何使用API的方法利用Elasticsearch来生成警报。

我们今天的配置环境如下:



在上面,我们使用一个MacOS来安装我们的Elasticsearch及Kibana,同时在一个虚机上安装我们的Filebeat。在下面的配置中,我们将讲述该如何进行安装。

安装

Elasticsearch

在安装完后,我们需要做如下的调整。打开config/elasticsearch.yml文件,并修改:

cluster.name: elasticsearch
network.host: 0.0.0.0
discovery.type: single-node

在这里我们配置一个节点的Elasticsearch,同时我们配置network.host: 0.0.0.0,这样保证我们的Elasticsearch绑定于每一个网路接口上。

修改完上面的配置后,我们重新启动Elasticsearch:



我们可以在Elasticsearch启动的Log里找到相应的启动地址。我们在浏览器中打入上面显示的地址:192.168.0.100:9200

如果我们能够看到上面的输出,那么则表明我们的Elasticsearch安装是成功的。

Kibana安装

为了能够使得我们的Kibana能访问Elasticsearch及被我们的Beats所访问到,我们必须修改config/kibana的相应的配置:

server.host: "192.168.0.100"
elasticsearch.hosts: ["http://192.168.0.100:9200"]

我们在自己的浏览器中打入如下地址:



如果你能发现上面的界面,则表明你的Kibana的安装是成功的。

为了能够实现对log的监控,我们必须使用Start a 30-day trial授权:

Filebeat安装

打开我们的Kibana界面:



我们点击Add log data:



找到System logs:



Ubuntu OS是Debian系统。我们选择DEB平台,让后严格地安照上面的信息来进行安装。在这里我必须指出的是:我们必须修改/etc/filebeat/filebeat.yml文件的配置以使得filebeat能够连接上我们的Kibana及Elasticsearch。为此,我们打开filebeat.yml配置文件,对该文件进行如下的修改:

sudo vi /etc/filebeat/filebeat.yml

在这里,我们必须注意的是:替换上面的IP地址为你自己电脑上的IP地址。这个IP地址是你的Elasticsearch及Kibana的运行IP地址。你可以通过ifconfig命令来获得。

一旦完成上面的配置后,我们安装Kibana中的命令:

sudo service filebeat start

来启动filebeat这个服务。如果我们安装正确的话,我们可以在Kibana中看到数据进来:

如果我们能够看到有数据在上面的Discover中来,则表明我们的Filebeat的安装是成功的。

我们可以在Ubuntu的terminal中打入如下的命令:

sudo logger -t JUSTME this is message 2

等过一点时间,我们通过Kibana来查询我们的数据:



上面的命令生成一个process.name为JUSTME的log信息。我们可以在Kibana中查询到这个信息。

Watcher API

我们将使用Watcher API来进行监控。请大家参考Elastic的官方文档https://www.elastic.co/guide/en/elasticsearch/reference/current/watcher-api.html。简单地说,为了配置一个Watcher,我们必须配置如下的几个:

PUT _watcher/watch/my-justme-watcher
{
"trigger": {},
"input": {},
"condition": {},
"actions": {}
}

我们下面来分别进行描述:

trigger

这个定义多次实践watcher运行一次。比如我们可以定义如下:

"trigger": {
"schedule" : {
"interval": "1h"
}
},

上面表明,我们希望watcher每一个小时运行一次。针对我们的情况,我们定义为:

 "trigger": {
"schedule": {
"cron": "0 0/1 * * * ?"
}
},

上面表明,我们希望每一分钟运行一次。

input

这个是定义alert想搜索的index,及针对多长时间的index来进行的搜索的:

"input": {
"search": {
"request": {
"indices": [
"filebeat-*"
],
"body": {
"query": {
"bool": {
"must": {
"match": {
"process.name": "JUSTME"
}
},
"filter": {
"range": {
"@timestamp": {
"from": "{{ctx.trigger.scheduled_time}}||-5m",
"to": "{{ctx.trigger.triggered_time}}"
}
}
}
}
}
}
}
}
},

在上面,我们想针对filebeat-*的索引来进行搜索。如果process.name含有JUSTME,则表明有一个匹配。同时我们针对在过去5分钟内发生的事件来进行查询。

condition

我们定义如下:

"condition" : {
"compare" : { "ctx.payload.hits.total" : { "gt" : 0 }}
},

上面显示如果在查询结果中,有至少一个的结果,那么就会发送出alert。

actions

这个是定义当上面的condition被满足时,需要采取的一些行动。这些行动可以在地址找到。目前Watcher支持的action为: email,webhook,index,logging,slack及pagerduty。

我们使用最简单的logging:

"actions": {
"log": {
"logging": {
"text": "WARNING: find JUSTME(s) in filebeat in the last 5 minutes"
}
}
}

如果大家想如何实现Slack的通知,请参考文章X-Pack:创建阈值检查警报 。

经过上面的配置后,我们alert配置如下:

PUT _watcher/watch/my-justme-watcher
{
"trigger": {
"schedule": {
"cron": "0 0/1 * * * ?"
}
},
"input": {
"search": {
"request": {
"indices": [
"filebeat-*"
],
"body": {
"query": {
"bool": {
"must": {
"match": {
"process.name": "JUSTME"
}
},
"filter": {
"range": {
"@timestamp": {
"from": "{{ctx.trigger.scheduled_time}}||-5m",
"to": "{{ctx.trigger.triggered_time}}"
}
}
}
}
}
}
}
}
},
"condition": {
"compare": {
"ctx.payload.hits.total": {
"gt": 0
}
}
},
"actions": {
"log": {
"logging": {
"text": "WARNING: find JUSTME(s) in filebeat in the last 5 minutes"
}
}
}
}

执行上面的命令。显示结果:

{
"_id" : "my-justme-watcher",
"_version" : 1,
"_seq_no" : 6,
"_primary_term" : 1,
"created" : true
}

测试Watcher

在很多情况下,如果我们设置的时间比较久,我们可能等不了那么久才做一个测试。Elastic为了方便我们的测试,提供了_execute接口:

PUT _watcher/watch/my-justme-watcher/_execute

通过上面的接口,我们不需要等在schedule中设置的那么久的时间才运行一下我们的watcher。上面的命令可以直接帮我们运行watcher。

针对我们的情况,我们在Ubuntu OS的terminal中运行如下的命令:

sudo logger -t JUSTME this is message 3

我们切换到Elasticsearch的运行terminal中,等一小会,我们可以看到:

上面显示,我们已经有一个事情发生了:在filebeat的log里找到含有JUSTME的事件。上面的信息虽然显示了有JUSTME的事件发生了,但是它并没有显示有多少个事件发生了。为此,我们需要修改一下我们的watcher:

PUT _watcher/watch/my-justme-watcher
{
"trigger": {
"schedule": {
"cron": "0 0/1 * * * ?"
}
},
"input": {
"search": {
"request": {
"indices": [
"filebeat-*"
],
"body": {
"query": {
"bool": {
"must": {
"match": {
"process.name": "JUSTME"
}
},
"filter": {
"range": {
"@timestamp": {
"from": "{{ctx.trigger.scheduled_time}}||-5m",
"to": "{{ctx.trigger.triggered_time}}"
}
}
}
}
}
}
}
}
},
"condition": {
"compare": {
"ctx.payload.hits.total": {
"gt": 0
}
}
},
"actions": {
"log": {
"logging": {
"text": "WARNING: find {{ctx.payload.hits.total}} JUSTME(s) in filebeat in the last 5 minutes"
}
}
}
}

在上面,我们使用ctx.payload.hits.total来展示发生了几次。再次我们在Ubuntu的terminal中连续打入如下的几个log信息:

我们连续地生成5个含有JUSTME的事件,我们再次回到Elasticsearch运行的terminal中查看:



在这一次,我们正确地显示了有5个这样的事件。

Elastic:创建你的第一个Elastic alert的更多相关文章

  1. Storm系列(二):使用Csharp创建你的第一个Storm拓扑(wordcount)

    WordCount在大数据领域就像学习一门语言时的hello world,得益于Storm的开源以及Storm.Net.Adapter,现在我们也可以像Java或Python一样,使用Csharp创建 ...

  2. WPF入门教程系列(一) 创建你的第一个WPF项目

    WPF入门教程系列(一) 创建你的第一个WPF项目 WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知 ...

  3. 第一章 用three.js创建你的第一个3D场景

    第一章 用three.js创建你的第一个3D场景 到官网下载three.js的源码和示例. 创建HTML框架界面 第一个示例的代码如下: 01-basic-skeleton.html 位于 Learn ...

  4. 使用Visual Studio 2008创建你的第一个Windows Mobile程序介绍

    使用Visual Studio 2008创建你的第一个Windows Mobile程序介绍 Windows MobileMobileWindowsMicrosoftWinForm 介绍 Microso ...

  5. 把 Nginx 创建为 Windows 的一个服务

    译序:Nginx 不是为 Windows 而写.Nginx 是用在软件的工作环境中的.但软件开发环境一般都是 Windows,有时调试的需要也要装 Nginx,但 Nginx 并没给 Windows ...

  6. 使用pycharm创建自己的第一个django项目

    PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成.单元测试.版本控制. ...

  7. 从0系统学Android--1.3创建你的第一个 Android 项目

    1.3 创建你的第一个 Android 项目 环境搭建完成后,我们就可以写下我们的第一个项目了. 1.3.1 创建 HelloWorld 项目 在 Android Studio 的欢迎页面点击 Sta ...

  8. Python进阶丨如何创建你的第一个Python元类?

    摘要:通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类. Python元类设置类的行为和规则.元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一. ...

  9. Elastic: 创建一个 Elastic 邮件警报 - 7.7 发行版

    文章转载自:https://blog.csdn.net/UbuntuTouch/article/details/106185321 总结: 1.elastic 免费版只有发送警报到一个索引或者到Ser ...

随机推荐

  1. JDBCTools 第一个版本

    JDBCToolV1: package com.dgd.test; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax ...

  2. 关于C标准库stdarg.h

    看<数据结构(C语言版)>(严蔚敏)时看到p94上面va_list啥的,看不懂了,于是整理一下这一部分的知识. 1/当无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表. i ...

  3. 论文阅读 Inductive Representation Learning on Temporal Graphs

    12 Inductive Representation Learning on Temporal Graphs link:https://arxiv.org/abs/2002.07962 本文提出了时 ...

  4. 手机APP无法抓包HTTPS解决方案

    问题表现:某个APP的HTTPS流量抓取不到,Fiddler报错,但可以正常抓取其它的HTTPS流量 可能原因: 1.Flutter应用,解决方案:https://www.cnblogs.com/lu ...

  5. 提名 Apache ShardingSphere Committer,说说方法

    文章首发在公众号(龙台的技术笔记),之后同步到博客园和个人网站:xiaomage.info 就在前几天,收到了 Apache ShardingSphere Vote 我成为 Committer 的邮件 ...

  6. 谷歌邮箱使用python自动化发送邮件出现smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted.的解决

    今天学习使用邮箱自动化办公的过程中run时一直出现如下错误;smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password n ...

  7. 使用github action发布hexo博客到云服务器

    目录 搭建Hexo博客 安装主题hexo-theme-bamboo 修改博客名称等信息 添加github action发布 1. 在github中创建自己的博客仓库 2. 设置Secrets 3. 在 ...

  8. 无意苦争春,一任群芳妒!M1 Mac book(Apple Silicon)能否支撑全栈工程师的日常?(Python3/虚拟机/Docker/Redis)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_187 就像大航海时代里突然诞生的航空母舰一样,苹果把玩着手心里远超时代的M1芯片,微笑着对Intel说:"不好意思,虽然 ...

  9. Win10环境前后端分离项目基于Vue.js+Django+Python3实现微信(wechat)扫码支付流程(2021年最新攻略)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_182 之前的一篇文章:mpvue1.0+python3.7+Django2.0.4实现微信小程序的支付功能,主要介绍了微信小程序内 ...

  10. uniapp中用canvas实现小球碰撞的小动画

    uniapp 我就不想喷了,踩了很多坑,把代码贡献出来让大家少踩些坑. 实现的功能: 生成n个球在canvas中运动,相互碰撞后会反弹,反弹后的速度计算我研究过了,可以参考代码直接用 防止球出边框 防 ...