界面介绍

登录elk,如果什么都不做,会看到这样的界面(图中各种颜色的方框是我加的):

从左往右、从上往下逐个方框来介绍下吧。

主要功能选择区

红色方框内是功能选择区。这个方框为我们提供了各种主要功能。包括日志检索(discover)、图表统计(visualise)、仪表盘(dashboard)、其它(那仨我没怎么用过),以及最下方的“收起左边栏”的按钮(collapse)。

日志检索、图表统计和仪表盘的功能会在后面详细介绍。

默认情况下,右侧展示的就是日志检索功能的界面。

查询命中数

紫色方框内是查询命中数。这个数字显示的是按当前查询条件(包括查询对象、查询条件和查询时间),所查到的日志条数。

查询器功能按钮,及查询时间选择器

深蓝色方框内是一组查询器功能按钮。其中new/save/open/share是查询器的功能按钮,分别对应“新建一个查询”、“保存当前查询(条件)”、“打开一个已保存的查询(条件)”、“分享当前查询(条件)”。

最右侧的“last 15 minutes”是查询时间选择器,用于确定查询条件的时间范围。

查询条件

绿色方框中是用于检索日志的查询条件。默认是“*”,即全部日志。

查询对象

黄色方框中是日志检索的查询对象。包括从哪个系统的日志中进行查询,以及查询哪些字段。

"logstah-ngx_access-*"是默认的查询对象。"?_source"是默认的查询字段,"timestamp"、"version"等是可选的查询字段。

日志检索-日志数量分布图

浅蓝色方框中是日志检索功能的查询结果可视化图表,用于展示查询结果的数量-时间分布图。横轴是时间,时间单位随右上角的时间范围变化,在“last 15minutes”范围内是30秒。纵轴是日志数量,单位是“条”。

日志检索-查询结果详细数据

紫色方框中是日志检索功能根据查询对象、查询条件以及查询时间范围所检索到的日志详细数据。最左列是日志采集时间,右边是日志检索-查询对象栏中选择的查询字段(默认是_source)。点击每一行左侧的倒三角(图中被方框挡住了),可以看到这一行的全部数据。

基本搜索语法

ELK使用的是lucence的搜索语法。网上有很多教程(例如ELK:kibana使用的lucene查询语法)。细节上我也不熟,因此不多说。这里介绍几种我们常用的语法。

单一条件全文精确查询

直接在查询条件栏中输入一个条件(数字、字符串等),就会按这个条件进行全文检索。

但要注意:虽然例子中的数字是个进件号,但如果恰好某条财务指令的id、或者某个借款人账户的金额也等于这个数字,那么相关的日志也会被找出来。

由于ELK默认以空格来区分多个查询条件,所以,如果某一个查询条件中包含有空格(例如“id=1 amount=2”)时,一定要用英文双引号将他们引用起来(前面的例子就必须写作"id=1 amount=2")。否则,ELK会将他们当做两个查询条件来检索。

多条件全文精确查询

如果直接输入两个查询条件,ELK会按照“或”的逻辑进行检索,等同于用“OR”关联两个查询条件。

如果要使用“与”逻辑检索,应在查询条件中间输入“AND”。

ELK中所有关键字都是大写,例如“AND”、“OR”。

如果要求必须包含某个查询条件,应在这个条件前增加“+”。

如果要求必须排除某个查询条件,应在这个条件前增加“-”。

指定字段查询

以上两个示例都是全文检索。如果需要指定某个字段进行查询,语法为“字段名: 查询条件”。可用字段名即【界面介绍-黄色方框:查询对象】中的可选查询字段。

通配符匹配查询

以上三个示例都是精确查询。如果需要使用通配符,一般是用“*”(匹配若干个字符)。

一般来说*是不允许放在查询条件开头的(例如 *kepler.monitor.log)。但在实践中,这种用法也能起作用。

范围匹配

以上示例都是对字符串进行匹配。如果需要对数字进行范围匹配,需要使用“[下限 TO 上限]”作为查询条件。

关键字转义

ELK有些自己的关键字,例如英文冒号(":")。如果要用它们做查询条件,需要在前面加上""。

组合查询

上述查询语法几乎可以任意组合。具体用法大家可以结合上面的示例自己探索。有新发现不妨来分享。

日志检索功能

ELK的默认界面就是日志检索的界面。通过点击“主要功能选择区”的“discover”按钮,也能进入这个界面。

检索功能嘛,最基本用法就是输入检索条件、得到检索结果。

检索条件

ELK把检索条件拆分成了三块:查询对象、查询条件和查询时间段。

查询对象

查询对象可以简单理解为:需要查哪个系统的日志。例如,要查thread的日志,就选择“logstash-thread-”,要查账务(kepler)的日志,就选择“logstash-kepler-”。

需要注意的是,这里的“系统”以监控日志中“project”字段取值为准。例如,个贷和财务虽然是不同的系统,这个字段都是“Thread”,因此日志都在“logstash-thread-”;而账务系统虽然与它们都在同一个模块下,但是“project”字段是“kepler”,因此日志在“logstah-kepler-”里。

另外,据运维同事高伟说,elk将project字段用作了白名单。因此,如果个贷或财务要改这个字段,需要先跟运维同事沟通好。否则,即使按规范输出了日志,elk也不会采集。

查询条件

查询条件就是从查询对象中筛选结果所使用的搜索字符串。其语法参见“基本搜索语法”这一节。

查询时间段

查询时间段其实是查询条件的一个快捷方式,即对日志中的timestamp字段进行筛选的条件。选择时间段有两种方式。

第一种是通过界面右上角的查询时间选择器进行选择(参见:查询器功能按钮,及查询时间选择器)。点击那个按钮之后,可以看到如下图的界面。左侧有三个主要选项:

  • “Quick”(快捷方式,如“今天”、“昨天”、“最近15分钟”等常用时间段的快捷方式)
  • “Relative”(相对时间,指定相对“现在”的一个时间段)
  • “Absolute”(绝对时间,指定过去的一个确定的时间段)

右侧则是三个主选项对应的子选项。选定某个时间段后,elk会自动刷新查询结果,并进行展示。

在查询时间选择器的左边,其实还有一个“Auto-refresh”的按钮。如果要长时间监控某个日志,可以利用它来做自动刷新。不过并不建议刷新得太频繁。

第二种选择时间段的方式,是用鼠标直接从日志数量分布图中进行选取。可以用鼠标点选直方图中某一个柱体,也可以用鼠标在图中拖选一个时间范围。这种方式比较简便,但是时间段选取的精度不高。

检索结果

elk会输出两种检索结果。一个是日志数量分布图,另一个则是详细日志信息。

日志数量分布图

日志数量分布图是一张直方图。横坐标是时间,纵坐标是数量。在某些特定情况下,它可以用作系统压力的一个参考指标。

需要注意的是,这里的“横坐标”实际也是一个时间段(如30分钟、5秒钟)等。默认情况下,它会随着你选择的查询时间段的大小自动调整。也可以进行手动配置,但是不建议这样做。

查询结果详细数据

直方图下方的表格区所展示的,就是查询结果详细数据。它有两种查看方式。

第一种是通过在界面左侧,选择查询显示字段,来设定这个表格的表头。如下图所示,我选择了“class”和“host”两个字段,它们就会作为表头显示在表格中。所有表头都可以进行排序。表头中的“Time”是默认字段,也是强制必选的字段。它的含义和左侧的timestamp相同。其它表头可以删除或左右移动。

第二种方式是点击表格中某一条数据左侧的小三角。点击后,页面会把这条日志信息的全部字段都展示出来。如下图所示(日志没截全)。日志有表格和json两种显示方式。

图表统计功能

日志检索功能适用于trouble shooting,而图表统计功能适用于进行系统分析。

通过点击“主要功能选择区 ”的“Visualize”按钮,就能进入下面这个界面:选择图表类型界面。

选择图表类型界面

选择图表类型界面实际分为两列。左列才是真正的“选择图表类型”功能;右列是“打开已保存的图表”功能。我们先看左列。

左列由上到下分别是区域图(area chart)、数据表(data table)、折线图(line chart)等等。这些图表的用法以后再说,这里先以折线图为例创建一个图表。(实话是我自己就会用区域图、折线图和饼图……)

点击下图中的“line chart”,就会进入下一个界面:查询对象选择界面。

查询对象选择界面

这个界面同样分两列。左列是“查询对象选择”列,右列是“打开已保存的检索结果”列。从左列选择一个查询对象(这里以kepler为例),就可以进入下一个界面,也是图表统计功能的主界面了。

如果在“日志检索功能”功能中保存了一份检索条件,则可以在右列找到并点击。点击后同样会进入主界面,并且会把保存的检索条件(包括查询对象、查询条件和查询时间段)直接带过去。

图表统计主界面

图表统计主界面如下图所示。其中最上面的红框中是查询条件和查询时间选择器,这与日志检索功能基本一致,这里不再赘述。

左下的红框中是x-y轴数据定制器。这是我们在这个界面上需要操作的主要功能。右下是图形显示区,最终结果将会显示在这个区域内。

y轴数据定制器

elk会默认设定一个y轴数据。点击上图“Y-Axis”左侧的蓝底白色小三角,就能看到它的详细设置。默认的设置是“count”,即显示日志数量。实际上,在进入主界面的这一刻,图形区就已经根据这个y轴绘制出了那个点。

点击上图“Y-Axis”下面的“Add metrics”,然后再“Y-Axis”和“Dot Size”中选择“Y-Axis”就可以增加一个y轴定义。

定义Y轴,首先要定义数据统计方式。如左图,elk提供的方式包括数量、平均值、总和、中位数、最小值、最大值、标准差、唯一值数量、百分位数、百分位数顺序(最后这个不知道具体是什么东西……百度的翻译)。默认的y轴数据就是count。

除了count之外,选择其它任何数据,都要再选择一个数据统计口径。如下图所示,就是选择统计方式为“平均值”之后,选择统计口径为“cost”。

x轴数据定制器

用类似的方法,我们可以增加一套x轴数据。只不过,x轴数据的定义是下图这样的,包括:时间段、其它间隔、其它区间、日期区间、IPv4 区间、其它(那仨我也没搞懂是什么)。一般在折线图中我们关注的是时间,可以选择时间段“Date Histogram”或日期区间“Date Range”。区别在于,时间段一般是等长的一段时间(实际使用中一般使用auto);而日期区间则完全是自定义的一些时间段,可以等长也可以不等长。

定义好x轴和y轴以后,点击y轴数据定制器上方的播放键(如下图),就可以在图形显示区看到图表结果了。在调整图表的过程中,修改了任一参数,都需要重新点击一次“播放键”,否则elk不会自动地重绘图表。

以“请求数量”和“平均cost”为y轴、以“时间段”为x轴,下图是一个示例。从图中可以看到:在当天的20:00左右,虽然请求数量很低,但是平均cost却突破了天际。这说明在那个时间段服务器出现了问题,需要进一步的关注。

其它

除上面介绍的功能外,在“播放键”左侧,还有一个“Options”的选项卡。在里面可以修改图形显示的一些配置项。

区域图、饼图等各类图表各有各的统计用法。在对系统进行分析的时候,不妨用一用。

有一些常用的统计图表,可以用“save”功能保存下来。这样,既可以方便下次查看,又能为仪表盘准备基础数据。

仪表盘功能

点击“主要功能选择区”中的“DashBoard”按钮,就会进入仪表盘功能界面。该功能的默认界面如下。注意第三行英文:要使用仪表盘功能,需要先在图表统计功能中保存有统计图表。

点击页面上的“Add”按钮,就会进入下面这个界面。在这个界面上我们可以选择在图表统计功能中保存的图表,也可以选择日志检索功能中保存的检索条件。

点击任意一个统计图表,然后把页面的纵向滚动条向下拖动,就可以看到选中的图表。可以选择多个,如下图。

选定之后点击红框里那个向上的箭头,将上面的面板收起,就可以在同一个界面内看到多个图表了。

把鼠标悬停在图表上,可以看到有排版用的小按钮(编辑图表、一定、关闭、收起、拖动大小。前三个在右上角,收起在左下角,拖动大小在右下角)。

有条件的话,可以定义好这个界面之后,用大屏幕或者投影实时放映出来。时不时抬头看一眼,可以随时了解系统运行情况。