文章转载自: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. 从零开始完整开发基于websocket的在线对弈游戏【五子棋】,只用几十行代码完成全部逻辑。

    五子棋是规则简单明了的策略型游戏,先形成五子连线者获胜.本课程习作采用两人在线对弈的方式进行比赛,拿着手机在上下班路上玩特别合适. 整个过程在众触低代码应用平台进行,使用表达式描述游戏逻辑(高度简化版 ...

  2. 如何在Excel批量查询电话号码归属地?

    手机号码归属地的重要性大家应该都清楚,如果取消或者更改手机号码归属地,那么一会增加用户的被诈骗风险;二是对套餐资费会产生影响,加剧企业间的竞争,加剧数字鸿沟;三是企业运营管理需要投入大量人力物力,是个 ...

  3. Kubernetes组件介绍

    一.api-server   基本概念 该端口默认值为6443,可通过启动参数"--secure-port"的值来修改默认值. 默认IP地址为非本地(Non-Localhost)网 ...

  4. jdbc 12: 模糊查询

    jdbc连接mysql,进行模糊查询 package com.examples.jdbc.o11_模糊查询; import com.examples.jdbc.utils.DBUtils; impor ...

  5. SpringBoot集成文件 - 集成POI之Excel导入导出

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能.本文主要介绍通过Spr ...

  6. Cube Stacking 来源:洛谷

    题目 题目oj(洛谷) Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)identical cubes ...

  7. PHP生成器yield使用示例

    <?php function getLines($file) { $f = fopen($file, 'r'); try { while ($line = fgets($f)) { yield ...

  8. 云存储?不依赖三方服务自己也可以搞,利用Docker来搭建分布式文件系统FastDfs

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_78 对于文件存储来说,一般情况下简单的处理就是在Django配置文件中配置存储目录,按照规则对文件进行上传或者下载. 实际上,当文 ...

  9. 【系统设计】S3 对象存储

    在本文中,我们设计了一个类似于 Amazon Simple Storage Service (S3) 的对象存储服务.S3 是 Amazon Web Services (AWS) 提供的一项服务, 它 ...

  10. 【Java面试】Java有几种文件拷贝方式,哪一种效率最高?

    "Java有几种文件拷贝方式,哪一种效率最高?" 这个问题是京东一面的时候,针对4年经验的同学的一个面试题. 大家好,我是Mic,一个工作了14年的Java程序员. 关于这个问题的 ...