Heka

3.11异常检测

我们正在接近旅行的尽头。我们要收集的所有数据现在流经Heka,被传送到外部数据存储用于离线处理和分析,并通过Heka的仪表盘以实时图形显示。我们要激活的唯一剩余行为是异常检测,并且基于检测到的异常事件生成通知程序。我们将从异常检测部分开始。
我们已经讨论了Heka如何使用circularbufferlibrary来跟踪时间序列数据并在仪表盘中生成图形。事实证明,Heka提供的异常检测功能使用相同的循环缓冲区库。
在引擎覆盖下,你提供了一个“异常配置”是如何工作的,这是一个字符串,看起来像一个编程函数调用。异常配置指定应使用哪个异常检测算法。Heka当前支持的算法是标准偏差变化率测试,以及参数(即Gaussian)和非参数Mann-Whitney-Wilcoxon测试。包括在异常配置中的是关于在循环缓冲器数据结构中的哪个列,我们要监视异常行为的信息。随后,解析的异常配置与填充的循环缓冲区数据结构一起被传递到检测模块的检测功能,并且将使用指定的算法来分析循环缓冲器数据。
幸运的是,对于我们的用例,你不必太担心使用异常检测库的所有细节,因为我们使用的SandboxFilters已经处理了硬件。我们需要做的是创建一个异常的配置字符串,并添加到我们的配置部分。例如,以下是我们如何监视HTTP响应状态代码的示例:

3.10生成HTTP状态码图

ElasticSearch和Kibana提供了一些很好的工具,用于绘制和查询从Nginx日志中解析的HTTP请求数据,但是,与上面的统计数据一样,Heka很好的获得这些数据的实时图形。正如你可能猜到的,Heka已经为此提供了专门的插件:

3.9发送Nginx数据到ElasticSearch

人们感兴趣的一个常见用例是将从其HTTP服务器日志中提取的数据发送到ElasticSearch,以便他们可以使用由优秀的仪表盘创建工具Kibana。生成的仪表盘来仔细阅读该数据。我们已经使用上面的输入和解码器配置处理了加载和解析信息,现在让我们看看另一面有以下输出和编码器设置:

[ESJsonEncoder]
es_index_from_timestamp=true
type_name="%{Type}"

[ElasticSearchOutput]
server="elasticsearch.example.com:9200"
message_matcher="Type=='nginx.access'"
encoder="ESJsonEncoder"
flush_interval=50

逆向工作,我们先看看ElasticSearchOutput配置。服务器设置ElasticSearch正在监听的位置。message_matcher告诉我们,我们将捕获类型值为nginx.access的消息,你可以记住它是在我们上面讨论的解码器配置中设置。flush_interval设置指定我们将在输出中批处理我们的记录,并且每50毫秒将它们刷新到ElasticSearch。

3.8加载和解析Nginx日志文件

对于下一个技巧,我们将加载NginxHTTP服务器的访问日志文件,并提取关于其中记录的每个HTTP请求信息,以更结构化的方式将其存储在Heka消息的字段中。第一步是告诉Heka在哪里可以找到Nginx访问日志文件。除了Nginx日志通常不只是一个单一的文件,它是一系列文件受特定站点的轮换方案。例如,在系统中/var/log/nginx目录如下:

access.log
access.log.1
access.log.2.gz
access.log.3.gz
access.log.4.gz
access.log.5.gz
access.log.6.gz
access.log.7.gz
access.log.8.gz
access.log.9.gz
error.log

这是一个常见的轮换方案,但有很多其他的。在托管许多域的情况下,可能有几组日志文件,每个域一个,每个域通过文件和/或文件夹的名称区分。幸运的是Heka的LogstreamerInput提供了一个处理所有这些情况的机制。LogstreamerInput已经有了大量的文档,所以我们不会在这里详尽的细节介绍,而是显示一个示例配置,正确处理上述情况:

3.7 Heka仪表盘

有用的是注意到这一点,虽然SandboxFilter收集我们感兴趣的数据,并打包一个有用的图形绘制格式,它实际上不做任何图形。相反,它周期性地创建一个heka.sandbox-output类型的消息,包含当前循环缓冲区数据,并将该消息注入Heka的消息路由器。这是我们配置的仪表盘输出。
Heka的DashboardOutput默认配置为监听heka.sandbox输出消息(以及一些其他消息类型,我们现在将其忽略)。当它接收到沙箱输出消息时,将检查消息的内容,并且如果消息包含循环缓冲区数据,它将自动生成该数据的实时图。
默认情况下,通过将Web浏览器指向Heka正在运行的计算机的4352端口,可以使用仪表盘UI。你将看到的第一个页面是运行状况报告,其中提供了插件配置的概述,以及有关消息如何流过Heka管道的一些内容:

...并向下滚动页面...

在页面头部是一个Sandboxes链接,它将带你到所有运行的SandboxFilter插件的列表,以及它们发出的输出列表。点击它,我们可以看到ourstat_graph过滤器和Stats循环缓冲区(“CBUF”)输出:

页面

Subscribe to RSS - Heka