Kibana 中文指南 Guide Cn

User Manual:

Open the PDF directly: View PDF PDF.
Page Count: 128 [warning: Documents this large are best viewed by clicking the View PDF Link!]

1.
2. Kibana3指南
i. 10
ii. 求和过滤
iii. 行和面板
iv. 保存和加
v. 表板(schema)
vi. 模板和脚本
vii. 配置文件
viii. 面板
i. histogram
ii. table
iii. map
iv. bettermap
v. terms
vi. column
vii. stats
viii. query
ix. trends
x. text
xi. sparklines
xii. hits
xiii. goal
xiv. percentile
xv. range
ix. 认证鉴权
i. nodejs实现CAS认证
ii. Perl实现认证鉴权框架
x. 剖析与二次开
i. 录结构
ii. 入口和模
iii. 控制器和服
iv. 面板相关指令
v. 面板内部实现
3. Kibana4指南
i. 安装和
ii. 访问
iii. discover
iv. visualize
v. dashboard
vi. 配置
vii. 产环境部署
viii. 新功能介
ix. 剖析
i. 入口
ii. 搜索
iii.
iv. 表板
v.
vi. .kibana索引数据结构
4.
TableofContents
Kibana是一个使用Apache开源协议Elasticsearch分析和搜索表板。已经历经v1,v2,v3,v4个版本,分采用了
PHPRubyAngularJSJRubyNodeJS等不同写。本主要介v3v4的使用。
原始内容来源Elasticsearch官方指南Kibana部分,并v3panel部分加以截。在有时间的前提下,将会添加
更多关于kibana解析和第三方panel的介
Kibana因其丰富的型和漂亮的前端界面,被很多人理解成一个统计工具。而我个人认为ELK一套体系,不应该
Hadoop体系同化。定期的离线报表,不是Elasticsearch专长所在(多花、打分些步在高负载压境上太奢
侈了),也不应该Kibana来完成(每次刷新都是重新)Kibana的使用景,应该集中在方面:
实时监
histogram面板,配合不同条件的多个queries可以一个事件走很多个合出不同的时间序列走时间
列数据是最常警了。
问题分析
Kibana的交互式界面可以很快的将异常时间或者事件范围缩小到秒级别或者个位数。期望一个完美的系可以
你自找到问题原因并且解决是不现实的,能够让你三下就从TB的数据里看到关数据以便做出判断就很棒了。
这时候,一些非histogram的其他面板可能会体出你意想不到的价。全局状下看似很普通的果,可能在你
定某个范烈的反方向的化,这时候你就能从度去重点排。而表格面板最直示出你最
关心的字段,加上排序等功能。入前字段切分好,于排分析真的至关重要。
以上是我在和同事就ESHadoop比的谈话中形成的思路。特此留2014828
关于elk的用途,我想可以参照其对应的商业产splunk景:
使用Splunk的意在于使信息收集和理智能化。而其操作智能化表在:
1. 搜索,通数据排查问题,通分析根本原因来解决问题
2. 实时性,可以将检测和警报结合在一起,便>于跟踪SLA和性能问题
3. 史分析,可以从中找出趋势史模式,行线阈值,生成一致性告。
——20141117日摘自PeterZadrozny,RaghuKodali/唐宏,Splunk大数据分析》
Elasticsearch威指南
精通Elasticsearch
Logstash最佳
TheLogstashBook
作者的
迎捐,作者支付宝号:rao.chenlin@gmail.com
Kibana是一个使用Apache开源协议,基于浏览器的Elasticsearch分析和搜索表板。Kibana非常容易安装和使用。整个
目都是用HTMLJavascript写的,所以Kibana不需要任何服器端件,一个文本布服器就了。Kibana
Elasticsearch,力争>极易上手,但同灵活而大的件。
Kibana对实时数据分析来是特适合的工具。本内容首先你快速入,了解Kibana所能做的大部分事情。如果你
没下Kibana,点侧链接:Kibana。我你在开始本教程之前,先部署好一个干elasticsearch程。
到本节结束,你就会:
入一些数据
尝试简单表板
搜索你的数据
配置Kibana示你的新索引而不是全部索引
你已
在自己电脑上安装好了Elasticsearch
在自己电脑上搭建好了网站服器,并把Kibana行包解到了布目
UNIX命令行有一点了解,使用curl
将使用莎士比全集作的示例数据。要更好的使用Kibana,你需要自己的新索引用一个映射集(mapping)
用下面个映射集"莎士比全集"索引。实际数据的字段比要多,但是我只需要指定下面些字段的映射就可
以了。注意到我们设置了speakerplay_name不分析。原因会在稍后明。
行下面命令:
curl-XPUThttp://localhost:9200/shakespeare-d'
{
"mappings":{
"_default_":{
"properties":{
"speaker":{"type":"string","index":"not_analyzed"},
"play_name":{"type":"string","index":"not_analyzed"},
"line_id":{"type":"integer"},
"speech_number":{"type":"integer"}
}
}
}
}
';
很棒,我们这建好了索引。在需要做的时导入数据。莎士比全集的内容我整理成了elasticsearch批量
所需要的格式,你可以通shakeseare.json
用如下命令入数据到你本地的elasticsearch程中。可能需要一点时间,莎士比可是著作等身的大文豪!
curl-XPUTlocalhost:9200/_bulk--data-binary@shakespeare.json
在你数据在手,可以干点什么了。打开浏览器,访问经发布了Kibana的本地服器。
10
入数据
访问Kibana界面
如果你解路径无(者注:使用github布目录应该kibana/src/里面),你已就可以看到上面
面。点SampleDashboard
好了,示的就是你的sampledashboard!如果你是用新的elasticsearch程开始本教程的,你会看到一个百分比占
比很重的饼图示的是你的索引中,文档型的情况。如你所99%都是lines,只有少量的actsscenes
再下面,你会看到一JSON格式的莎士比亚诗文。
Kibana使用者采用LuceneQueryString法搜索Elasticsearch中的数据。求可以在部的入框中
写。
第一次搜索
求框中入如下内容。然后看表格中的前几行内容。
friends,romans,countrymen
关于搜索求的法,请阅读QueriesandFilters
目前Kibana指向的是Elasticsearch一个特殊的索引叫_all_all可以理解全部索引的大集合。目前你只有一个索
引,shakespeare,但未来你会有更多其他方面的索引,你肯定不希望Kibana在你只想搜《麦克白》里心的句子的
要搜索全部内容。
配置索引,点右上角的配置按
里,你可以置你的索引shakespeare这样Kibana就只会搜索shakespeare索引的内容了。
配置一个索引
下一步
恭喜你,你已学会了安装和配置Kibana,算是正式下水了!下一步,打开我视频和其他教程学更高的技能吧。
在,你可以尝试在一个空白表板上添加自己的面板。方面的内容,请阅读RowsandPanels
Elasticsearch1.4版后,使用kibana3访问ES1.4集群,会示如下错误
是因ES1.4限管理。你需要在ES配置文件elasticsearch.yml中添加下列配置并重后才能正常访问
http.cors.enabled:true
http.cors.allow-origin:"*"
kibana3面也要刷新存才行。
此外,如果你可以很明确自己kibana以外没有其他http访问,可以把kibana的网址写在http.cors.allow-origin参数的
中。比如:
http.cors.allow-origin:"/https?:\/\/kbndomain/"
者注
啊,表啊,地啊,Kibana有好多种表,我怎么控制示在表上的数据呢?就是求和过滤起作用的地方。
Kibana是基于Elasticsearch的,所以支持大的LuceneQueryString法,同样还能用上Elasticsearch过滤器能力。
你已
在自己电脑上安装好了Elasticsearch
在自己电脑上搭建好了网站服器,并把Kibana行包解到了布目
读过UsingKibanaforthefirsttime并且按照文章内容准好了存有莎士比文集的索引
表板像下面这样,可以搜索莎士比文集的内容。如果你喜本章截表板式,你可以载导出的
(dashboardschema)
在搜索栏输入下面个非常简单
tobeornottobe
你会注意到,表格里第一条就是你期望的《哈姆雷特》。不下一行却是《第十二夜》的安德爵士,里可没有"tobe"
也没有"nottobe"。事上,里匹配上的是toORbeORorORnotORtoORbe
求和过滤
表板
需要么搜索(者注:即加双引号)来匹配整个短
"tobeornottobe"
或者指明在某个特定的字段里搜索:
line_id:86169
可以用AND/OR合复的搜索,注意这两单词大写:
foodANDlove
有括号:
("playedupon"OR"everyman")ANDstage
值类型的数据可以直接搜索范
line_id:[30000TO80000]ANDhavoc
最后,当然是搜索所有:
*
有些景,你可能想要比对两个不同求的果。Kibana可以通OR的方式把多个接起来,然后分别进行可
理。
添加
击请入框右+号,即可添加一个新的求框。
完成后你应该看到的是这样
多个
在左绿入框,"tobe"然后右,黄色入框,"nottobe"就会搜索每个包含有"tobe"或者
"nottobe"内容的文档,然后示在我hits饼图上。我可以看到原先一个大大的绿成下面这样
移除
要移除一个求,移入框上,然后会出一个x图标,点图标即可:
Kibana会自动给你的求分配一个可用的色,不你也可以手动设色。点击请求框左的彩色点,就可以
置下拉框。里面可以修改求的色,或者为这置一个新的例文字:
色和
过滤
很多Kibana表都是交互式的,可以用来过滤你的数据视图。比如,点表上的第一个条,你会看到一些变动。整
图变成了一个大大的绿色条是因候,就添加了一个过滤规则,要求匹配play_name字段里的单词
你要过滤
答案就藏在过滤(FILTERING)标签上出的白色小星星里。点击这标签,你会发现filtering面板里已添加了一个过滤规
。在filtering面板里,可以添加,编辑,固定,除任意过滤规则。很多面板都支持添加过滤规则,包括表格(table),直
(histogram),地(map)等等。
过滤规则也可以自己点+号手添加。
在已可以过滤求了,你可能很好奇在Kibanaschema里,他是怎么存在的。如果你想知道如何通
URL参数来添加求和过滤阅读TemplatedandScriptedDashboards
更多阅读
Kibana表板是由行和面板成的。些都可以随意的添加,除和重
这节会介
一个空白表板
添加,藏行,以及修改行高
添加面板和修改面板
除面板和行
你已
在自己电脑上安装好了Elasticsearch
在自己电脑上搭建好了网站服器,并把Kibana行包解到了布目
读过UsingKibanaforthefirsttime并且按照文章内容准好了存有莎士比文集的索引
从主屏里选择第三,就会加一个空白表板(BlankDashboard)。默情况下,空白表板会搜索Elasticsearch
_all索引,也就是你的全部索引。要指定搜索某个索引的,阅读UsingKibanaforthefirsttime
行和面板
一个空白表板
添加一行
你的新空白表板上只有展开的求和过滤区域,顶栏上有个时间过滤选择器,除此以外什么都没有。在右下方,点
添加行(ADDAROW),添加你的第一行。
你的行取个名字,然后点击创(CreateRow)。你会看到你的新行出在左的行列表里。点保存(Save)
在你有了一行,你会注意到表板上多了点新元素。主要是左多出来的三个小小的不同色的方形。移到它
上面
哈哈!看到了吧,三个按你做三件事情的:
()
配置行(橘色)
添加面板(绿)
行的控制
添加面板
在我们专注在行控制力的绿色按上,试试它。你也可以点空白行内的灰色按(Addpaneltoemptyrow),不
是灰色的啊,有意思……
来添加一个terms面板。terms面板可以用上Elasticsearchtermsfacet功能,找一个字段内最常出
的几个
你可以看到,terms面板有一系列可配置选选,不们现在先只管第一段里德通用配置好了:
1. Title:面板的名称
2. Span:面板的度。Kibana表板等分成12spans面板最大就是到12spans。但是行可以容12
spans总宽度,因它会自把新的面板放到下面示。在我4
3. Editable:面板是否在之后可以继续编辑在先略
4. Inspectable:面板是否允户查看所用的求内容。在先略
5. Save添加你的新terms面板到你的表板
者注:面板度也可以在表板内直接拖拽修改,将鼠至面板左()侧边线处,鼠成相的箭,按住左
拖拽成度松开即可
太棒了!你在有一个面板了!你可能意个数据跟UsingKibanaforthefirsttime中的饼图数据一shakespeare
数据集集中在lines有少量的actsscenes
色按可以折你的行。被折行里的面板不会刷新数据,也就不要求Elasticsearch源。所以折行可以用于那些你不
需要常看的数据。有需要的候点击蓝色按展开就可以了。
和展开行
部的求和过滤区域也可以被折。点彩色标签就可以折和展开。
编辑器,可以行重命名,改行高等其他配置。点橙色按打开行编辑器。
对话你修改面板的排序和大小,以及除面板。
面板可以在本行,甚至其他行之任意拖拽。按住面板右上角的十字架形状小图标然后拖即可。
编辑
除面板
面板右上角的remove图标就可以从表板上移除它。前面到从行编辑器上也可以做到一效果。
行可以在表板配置中重新排序和。点屏幕右上角的配置按选择(Rows)标签到行配置。看到里你一定
起来我在添加第一个行候的屏幕。
的箭用来修改表板上行的次序。X用来除行。
在你关闭浏览器之前,你可能打算保存个新表板。请阅读SavingandLoadingdashboards
除行
下一步
你已经构建了一个漂亮的表板!在你打算分享给团队,或者开刷新后挂在一个大屏幕上?Kibana可以把表板
持久化到Elasticsearch里,然后在需要的候通或者URL地址用出来。
保存你的界面非常简单,打开保存下拉菜,取个名字,然后点保存表即可。在你的表板就保存在一个叫做
kibana-intElasticsearch索引里了。
要搜索已保存的表板列表,点右上角的加载图标。在里你可以加,分享和表板。
保存和加
保存你漂亮的表板
用你的表板
已保存的表板可以通浏览器地址里的URL分享出去。每个持久化到Elasticsearch里的表板都有一个对应
URL,像下面这样
http://your_host/index.html#/dashboard/elasticsearch/MYDASHBOARD
个示例中MYDASHBOARD就是你在保存的给仪表板取得名字。
可以分享一个即表板接,点Kibana右上角的分享图标,会生成一个临时URL
情况下,临时URL保存30天。
表板可以保存到你的服器磁上成.json文件。把文件放到app/dashboards,然后通下面地址访问
http://your_host/index.html#/dashboard/file/MYDASHBOARD.json
MYDASHBOARD.json就是磁上文件的名字。注意路径中得/#dashboard/file/看起来跟之前访问保存在Elasticsearch里的
表板很似,不过这访问的是文件而不是elasticsearch出的表板要的详细信息,阅读TheDashboardSchema
Explained
分享表板
保存成静态仪表板
下一步
在知道怎么保存,加访问仪表板了。你可能想知道怎么通URL传递参数来访问这样可以在其他用中直接
来。请阅读TemplatedandScriptedDashboards
Kibana表板可以很容易的在浏览器中建出来,而且大多数情况下,浏览器已支持你建一个很有用很丰富的
目了。不,当你真的需要一点小修改的候,Kibana也可以你直接编辑仪表板的要。
注意:本内容只针对JSON法非常格,多一个逗号,少一个大括号,都会致你的表板无法加
会用上面表板作示例。你可以出任意的表板要,点右上角的保存按,指向高(Advanced),然
后点击导(ExportSchema)。示例使用的要文件可以在里下schema.json
为仪表板是由特别长JSON文档成的,我只能分成一段段的内容,分每段的作用和目的。
和所有的JSON文档一,都是以一个大括号开始的。
{
"services":{
(Services)是被多个面板使用的持久化象。目前表板象附加有2种服务对象,不指明的,就会自填充成
(query)过滤(filter)了。
Query
Filter
query
"query":{
"list":{
"0":{
"query":"play_name:\"RomeoandJuliet\"",
"alias":"",
"color":"#7EB26D",
"id":0,
"pin":false,
"type":"lucene",
"enable":true
表板
(services)
}
},
"ids":[
0
]
},
求服主要是由表板部的控制的。有个属性:
List:一个以数字为键象。每个描述一个象。象的命名一目了然,就是描述入框的外和行
的。
Ids:一个由ID成的数。每个ID对应前面list象的ids用来保证显list的排序问题
filter
"filter":{
"list":{
"0":{
"type":"querystring",
"query":"speaker:ROMEO",
"mandate":"must",
"active":true,
"alias":"",
"id":0
}
},
"ids":[
0
]
}
},
过滤的行求很像,不过过滤不能在面板级别选择,而是表板生效。过滤对象和象一listids
属性,各属性的行象也一
"pulldowns":[
垂幕是一种特殊的面板。或者,是一个特殊的可以用来放面板的地方。在垂幕里的面板就跟在行里的一,区就是不能
span度。垂幕里的面板永都是全屏度。此外,垂幕里的面板也不可以吧被使用者移编辑。所以垂幕特
合放置入框。垂幕的属性是一个由面板成的数。关于特定的面板,请阅读KibanaPanels
{
"type":"query",
"collapse":false,
"notice":false,
"enable":true,
"query":"*",
"pinned":true,
"history":[
"play_name:\"RomeoandJuliet\"",
"playname:\"RomeoandJuliet\"",
"romeo"
],
"remember":10
},
{
"type":"filtering",
"collapse":false,
"notice":true,
"enable":true
}
],
垂幕(pulldown)
垂幕面板有2个普通行面板没有的选项
Collapse:真假,代表着面板被折叠还是展开。
Notice:面板,控制在垂幕的标签上出一个小星星。用来通知使用者,个面板里变动了。
nav属性里也有一个面板列表,只是些面板是被用来填充在里德。目前唯一支持航的面板是时间选择
(timepicker)
"nav":[
{
"type":"timepicker",
"collapse":false,
"notice":false,
"enable":true,
"status":"Stable",
"time_options":[
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
],
"refresh_intervals":[
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"timefield":"@timestamp"
}
],
loader属性描述了表板部的保存和加的行
"loader":{
"save_gist":false,
"save_elasticsearch":true,
"save_local":true,
"save_default":true,
"save_temp":true,
"save_temp_ttl_enable":true,
"save_temp_ttl":"30d",
"load_gist":false,
"load_elasticsearch":true,
"load_elasticsearch_size":20,
"load_local":false,
"hide":false
},
rows就是通常放置面板的地方。也是唯一可以通过浏览面添加的位置。
(nav)
loader
行数
"rows":[
{
"title":"Charts",
"height":"150px",
"editable":true,
"collapse":false,
"collapsable":true,
象包含了一个面板列表,以及一些行的具体参数,如下所示:
title:行的标题
height:行的高度,位是像素,px
editable:真假代表面板是否可被编辑
collapse:真假代表行是否被折
collapsable:真价代表使用者是否可以折
面板数
行的panels属性包括有一个以自己出次序排序的面板象的列表。各特定面板本身的属性列表和明,阅读Kibana
Panels
"panels":[
{
"error":false,
"span":8,
"editable":true,
"type":"terms",
"loadingEditor":false,
"field":"speech_number",
"exclude":[],
"missing":false,
"other":false,
"size":10,
"order":"count",
"style":{
"font-size":"10pt"
},
"donut":false,
"tilt":false,
"labels":true,
"arrangement":"horizontal",
"chart":"bar",
"counter_pos":"above",
"spyable":true,
"queries":{
"mode":"all",
"ids":[
0
]
},
"tmode":"terms",
"tstat":"total",
"valuefield":"",
"title":"LongestSpeeches"
},
{
"error":false,
"span":4,
"editable":true,
"type":"goal",
"loadingEditor":false,
"donut":true,
"tilt":false,
"legend":"none",
"labels":true,
"spyable":true,
"query":{
"goal":111397
},
"queries":{
"mode":"all",
"ids":[
0
]
},
"title":"PercentageofTotal"
}
]
}
],
索引属性包括了Kibana交互的Elasticsearch索引的信息。
"index":{
"interval":"none",
"default":"_all",
"pattern":"[logstash-]YYYY.MM.DD",
"warm_fields":false
},
interval:none,hour,day,week,month个属性描述了索引所遵循的时间间隔模式。
default:如果intervalnone,或者后面的failovertrue而且没有索引能匹配上正模式的,搜
置的索引。
pattern:如果interval置成除了none以外的其他,就需要解析置的模式,时间过滤规则,来确定
些索引。
warm_fields:是否需要解析映射表来确定字段列表。
下面四个也是顶层表板配置
"failover":false,
"editable":true,
"style":"dark",
"refresh":false
}
failover:真假,确定在没有匹配上索引模板的候是否使用index.default
editable:真假,确定是否在表板上示配置按
style:"亮色(light)"或者"暗色(dark)"
refresh:可以"false"或者其他elasticsearch支持的时间(比如10s,1m,1h),用来描述多久触一次面板
的数据更新。
是不能要的。不表板配置屏的控制(Controls)标签里可以开启这个功能,"Localfile"选项即可。然后
过仪表板右上角加载图标的高级设置,选择导入文件,就可以要了。
索引
其余
Kibana支持通模板或者更高的脚本来动态表板。你先建一个基表板,然后通参数来改它,比如通
URL插入一个新的求或者过滤规则
模板和脚本都必在磁上,目前不支持存Elasticsearch里。同也必是通过编辑要生成的。所以
烈建议阅读TheKibanaSchemaExplained
表板存Kibana安装目里的app/dashboards子目里。你会注意到里面有种文件:.json文件和.js文件。
.json文件就是模板化的表板。模板示例可以在logstash.json表板的求和过滤对象里找到。模板使用handlebars
法,可以你在json里插入javascript句。URL参数存在ARGS象中。下面是logstash.json(ongithub)求和
的代片段:
"0":{
"query":"{{ARGS.query||'*'}}",
"alias":"",
"color":"#7EB26D",
"id":0,
"pin":false
}
[...]
"0":{
"type":"time",
"field":"@timestamp",
"from":"now-{{ARGS.from||'24h'}}",
"to":"now",
"mandate":"must",
"active":true,
"alias":"",
"id":0
}
URL个参数,queryfrom。如果没置,默认值就是||后面的内容。比如,下面的URL
会搜索7天内status:200的数据:
注意:千万注意url#/dashboard/file/logstash.json里的file
http://yourserver/index.html#/dashboard/file/logstash.json?query=status:200&from=7d
脚本化表板比模板化表板更加大。当然,功能大随之而来的就是建起来也更复。脚本化表板的目的就是
并返回一个描述了完整的表板要的javascript象。app/dashboards/logstash.js(ongithub)就是一个有着详细的脚
本化表板示例。个文件的最终结果和logstash.json一致,但提供了更大的功能,比如我可以以逗号分割多个
求:
注意:千万注意URL#/dashboard/script/logstash.js里的script这让kibana解析对应的文件javascript脚本。
模板和脚本
表板目
模板化表板(.json)
脚本化表板(.js)
http://yourserver/index.html#/dashboard/script/logstash.js?query=status:403,status:404&from=7d
2象,status:403status:404并分别绘图。事表板能接收一个参数split,用于指
定用什么字符串切分。
http://yourserver/index.html#/dashboard/script/logstash.js?query=status:403!status:404&from=7d&split=!
可以看到logstash.js(ongithub)里是么做的:
//Inthisdashboardweletuserspassqueriesascommaseparatedlisttothequeryparameter.
//Ortheycanspecifyasplitcharacterusingthesplitaparameter
//Ifqueryisdefined,splititintoalistofqueryobjects
//NOTE:idsmustbeintegers,hencetheparseInt()s
if(!_.isUndefined(ARGS.query)){
queries=_.object(_.map(ARGS.query.split(ARGS.split||','),function(v,k){
return[k,{
query:v,
id:parseInt(k,10),
alias:v
}];
}));
}else{
//Noqueriespassed?Initializeasinglequerytomatcheverything
queries={
0:{
query:'*',
id:0,
}
};
}
该仪表板可用参数比上面述的要多,全部参数都在logstash.js(ongithub)文件里开始的注中有解。
config.jsKibana核心配置的地方。文件里包括得参数都是必在初次kibana之前提前置好的。
elasticsearch
elasticsearch器的URL访问地址。你应该不会像写个http://localhost:9200怕你的Kibana
Elasticsearch是在同一台服器上。默里会尝试访问你部署kibana的服器上的ES,你可能需要
elasticsearch器的主机名。
注意:如果你要传递参数http端,里也可以置成象形式,如下:
+elasticsearch:{server:"http://localhost:9200",withCredentials:true}+
default_route
没有指明加载哪表板的候,默载页路径的置参数。你可以文件,脚本或者保存的表板。比如,你有一
个保存成"WebLogs"表板在elasticsearch里,那么你就可以置成:
default_route:/dashboard/elasticsearch/WebLogs,
kibana-int
用来保存Kibana相关象,比如表板,的Elasticsearch索引名称。
panel_name
可用的面板模。面板只有在表板中有定义时才会被加个数只是用在"addpanel"界面里做下拉菜
配置
参数
Kibana表板由面板(panels)块组成。面板在行中可以起到很多作用,不大多数是用来一个或者多个求的数据集
果做可化。剩下一些面板用来展示数据集或者用来使用者提供插入指令的地方。
面板可以很容易的通Kibana界面配置。了了解更高的用法,比如模板化或者脚本化表板,章开始介面板
属性。你可以发现一些通界面看不到的置。
每个面板型都有自己的属性,不么几个是大家共有的。
一个从1-12的数字,描述面板度。
是否在面板上编辑
象包含的面板型。每个具体的面板型又要求添加新的属性,具体列表明稍后述。
官方文档中只介了各面板的参数,而且针对的是要使用模板化,脚本化表板的高,其中有些参数甚至在网界面
上根本不可
了方便初学者,我将在每个面板的参数介之后,自行添加界面操作和效果方面的明。
面板
span
editable
type
作者注
histogram面板用以时间序列。它包括好几种模式和种,用以时间数,平均数,最大,最小,以及数
字段的和,数器字段的数。
(axis)参数
mode
用于Y。除了count以外,其他mode置都要求定value_field参数。可选值为count,mean,max,min,
total。我的fork中新增了一个可选值为uniq
time_field
X字段。必是在Elasticsearch中定义为时间类型的字段。
value_field
如果modemean,max,min或者totalY字段。必是数型。
x-axis
是否X
y-axis
是否Y
scale
因子Y
y_format
Y格式,可none,bytes,short
释对
可以指定一个求的果作为标记显示在上。比如标记刻部署代了。
annotate.enable
是否示注(标记)
annotate.query
标记使用的Lucenequery_string
annotate.size
最多示多少标记
histogram
参数
annotate.field
个字段
annotate.sort
排序,格式[field,order]。比如[‘@timestamp’,‘desc’]是一个内部参数。
auto_int
是否自动调
resolution
如果auto_int设为真,shootforthismanybars.
interval
如果auto_int设为假,用
intervals
View选择器里可隔数。比如[‘auto’,‘1s’,‘5m’,‘3h’]绘图参数。
lines
示折线图
fill
线图的区域填充因子,从110
linewidth
线度,像素
points
示数据点
pointradius
数据点的大小,像素
bars
示条带图
stack
多个序列
spyable
图标
zoomlinks
‘ZoomOut’
options
示快捷的view选项区域
legend
show_query
如果没设别(alias),是否
interactive
拖拽行放大
legend_counts
例上
timezone
是否整成浏览区。可选值为browser,utc
percentage
Y数据示成百分比式。仅对多个有效。
zerofill
提高折线图准确度,稍微消耗一点性能。
derivative
X点数据在前一个点数据上变动的数
提示框(tooltip)
tooltip.value_type
控制tooltip在堆叠图上怎么示,可选值:独立(individual)是累(cumulative)
tooltip.query_as_alias
如果没设别(alias),是否
网格(grid)
Y的最大和最小
grid.min
Y的最小
grid.max
Y的最大
(queries)
象描述本面板使用的求。
queries.mode
在可用求中应该些?可设选项有:all,pinned,unpinned,selected
queries.ids
如果设为selected模式,具体被号。
添加面板的方式在之前的"行和面板"中已过讲解。在"Addpanel"对话选择类"histogram"后,你会看到一系
列可配置的选项
选项,可以在添加之后,通面板右上角的配置"Configure"图标弹出浮层继续修改。
通用(General)配置
主要用来修改面板的标题
界面配置
面板(Panel)配置
置面板向Elasticsearch出何种求,以及求中需要使用的量。
histogram面板中,常用的Chartvalue(即参数部分描述的mode)有:
count
最常见场景就是统计请求数。候只需要提供一个在Elasticsearch中是时间类型的字段(即参数部分描述的
time_field)即可。一般来,都是@timestamp,所以不用修改了。也是默Logstash表板的基面板的
mean
最常见场景就是统计平均时间这时候配置浮成下面子:
里就需要提供一个在Elasticsearch中是数值类型的字段(即参数部分描述的value_field)为计算平均的数
据集来源了。以nginx访问日志例,里就填"request_time"
如果你在Logstash中使用的是%{NUMBER:request_time},那么实际类是字符串(请记住,正String
的方法,也只能生成String),必写成%{NUMBER:request_time:float}转换才行。否,你会看到如下
信息:
total
最常见场景就是统计带宽。配置界面和mean是一的。同要求填写数值类型的字段名,比如"bytes_sent"
带宽习惯上会算成每秒数据,但是通修改interval的方式来求每秒数据,elasticsearch性能是一个很大
担,制出来的形也太密集影。所以Kibana提供了一种方式:保持interval,勾seconds
Kibana会自将每个数除以隔秒数得到每秒数据。(count也可以这样,用来qps等数据)
一个有用的功能,假如你的日志量在太大,被迫采用抽日志的方式,可以在Kibana上填写Scale。比如百
分之一的抽日志,Scale框就写100带宽数据就会在展示的候自100示出来。
uniq
ES1.1版本开始通HyperLogLog++算法支持去重统计聚合。在用AggregationAPI重写了histogrampanel
后,也可以支持了。
常用景比如:UV统计。效果如下:
(Style)配置
取的数据如何展。其中小部分(即条(Bars)、折线(Lines)、散点(Points))可以直接在面板左上角的"View"下拉
里直接勾
带宽数据,可以切YFormatbytesY数据可以自动换算成MBGB的形式,比方便
此外,可以在Grid区域定Y的起始点和点的具体可以用来在Y上放大部分区域,变动;或
者忽略某些异常
如果面板关了多个求,可以勾以堆(Stack)方式展示(最常的堆展示的控数据就是CPU)
一种形式是百分比。在勾Stack的前提下勾Percent
效果如下。注意:百分比是A/(A+B),而不是A/B
联请(Queries)配置
Queries方式是all。可以使用selected方式,在右侧选择具体的求框(可多)。被中的会出现边框加粗
放大效果。
求的默效果如下。而堆和百分比效果,在之前已经谈过。可以比上下两图Y刻度:
表格面板里是一个可排序的分文档。你可以定需要排列些字段,并且提供了一些交互功能,比如terms聚合
size
页显示多少条
pages
展示多少
offset
当前页码
sort
表格排序次序的数,示例如右:[‘@timestamp’,‘desc’]
overflow
cssoverflow属性。‘min-height’(expand)‘auto’(scroll)
fields
表格示的字段数
highlight
高亮示的字段数
sortable
设为假关掉排序功能
header
设为藏表格列名
paging
设为藏表格翻页键
field_list
设为藏字段列表。使用者依然可以展开它,不藏起来
all_fields
设为示映射表内的所有字段,而不是表格当前使用到的字段
table
参数
trimFactor
裁剪因子(trimfactor),是参考表格中的列数来决定裁剪字段度。比如置裁剪因子100,表格中有5列,那么
每列数据就会被裁剪20个字符。完整的数据依然可以在展开个事件后看到。
localTime
设为timeField的数据遵循浏览器的本地区。
timeField
如果localTime设为真,字段将会被为浏览器本地区。
spyable
设为假,不审查(inspect)
(queries)
象描述本面板使用的求。
queries.mode
在可用求中应该些?可设选项有:all,pinned,unpinned,selected
queries.ids
如果设为selected模式,具体被号。
tablehistogram面板,是kibanalogstash表板里唯二使用的面板。可以是最重要和常用的件。
然重要,table面板的可配置却不多。主要是panelpaging部分:
panel置可以分成几,其中比重要和有用的是:
时间字段
TimeField置的作用,和histogram面板中似,主要是帮助Kibana使用者自动转换elasticsearch中的UTC时间成本
界面配置
panel
时间
裁剪因子
Splunk不同,Kibana示事件字段的候,重于示。情内容通具体某行向下展开的方式参看。每个
字段在屏幕中的可用度,就会通裁剪因子来算。算方式官方参数明部分。
字段列表
table面板左,是字段列表多区域。字段分_allcurrent种。_allKibanaelasticsearch_mappingAPI
直接取的索引内所有存在的字段;current则仅显table匹配范内的数据用到的字段。
字段列表中某个字段,字段就加入table面板右的表格中成一列。
字段列表中,可以点具体字段,table匹配范字段数据的统计和排行数据的小面板。
小面板上然只示一个很小范(sizepages,默500)的数据统计,但是点小面板底部的*TERMS下拉菜单选
,生成的termpanel数据却都是基于整个搜索果的。部分的内容介请阅读termpanel
排序
置中可以置一个默的排序字段。在logstash表板默eventtable中,置的是时间字段@timestamp。不过这
置,指的是面板加候,使用字段排序,实际你可以在表任意字段名上单击,以字段的临时排序。排序字
段会在表本列字段名后,出一个小三角图标,三角箭朝上代表升序,反之降序:
高亮
elasticsearch一种搜索引擎,很心的提供了高亮功能。Kibana中也同支持解析ES返回的HTML高亮文本。只需
要在panel标签页添加Highlightedfield,在搜索框里填入的关键词,如果出在被指定Highlightedfield的字段
里,table里就会高亮(前提是字段已在字段列表中勾)
士:高亮table有效,点展开后的事件情中是不会高亮的。
到同展示太多内容,一来elasticsearch大,二来影响页面展示效果和渲染性能。
paging
map面板把2个字母的国家或地区代码转成地上的阴影区域。目前可用的地包括世界地,美国地和欧洲地
map
个地world,usa,europe
colors
用来涂抹地阴影的色数。一旦定好2色,阴影就会使用介于2者之色。示例[‘#A0E2E2’,
‘#265656’]
size
阴影区域的最大数量
exclude
排除的区域数。示例[‘US’,‘BR’,‘IN’]
spyable
设为假,不审查(inspect)
(queries)
象描述本面板使用的求。
queries.mode
在可用求中应该些?可设选项有:all,pinned,unpinned,selected
queries.ids
如果设为selected模式,具体被号。
到都是中国者,本采用中国地图进解,中国地,,基于本人https://github.com/chenryn/kibana.git
仓库,除准的map面板参数外,提供了terms_stats功能,也会一并述。
map面板,最重要的配置即入字段,于不同的地应该配置不同的Field
world
于世界地,其所支持的格式2个字母成的国家名称写,比如:USCNJP等。如果你使用了
LogStash::Filters::GeoIP插件,那么默生成的geoip.country_code2字段正好符合条件。
map
参数
界面配置
cn
于中国地,其所支持的格式是由2个数字成的省份编码,比如:01(即安徽)30(即广)04(即江)等。
如果你使用了LogStash::Filters::GeoIP插件,那么默生成的geoip.region_name字段正好符合条件。
如果你使用了我的仓库,或者自行合并了功能,你的map面板配置界面会稍有变动成下面
如果选择terms_stats模式,就会和histogram面板一需要填写value_field的位置。同使用在
Elasticsearch中是数值类型的字段,然后示的地上,就不再是个数而是具体的均,最大等数据了。
实验
Bettermap之所以叫bettermap是因为还没有更好(better)的名字。Bettermap使用地理坐来在地标记集群,然后
根据集群的密度,用橘色,黄色和绿色作区分。
细节,点击标记集群。地会放大,原有集群分裂成更小的集群。一直小到没法成集群的候,标记就会显现
出来。停在标记上可以tooltip置的
注意:bettermap需要从互网上下它的地面板文件。
field
包含了地理坐的字段,要求是geojson格式。GeoJSON是一个数,内容[longitude,latitude]可能跟大多
实现([latitude,longitude])是反来的。
size
用来制地的数据集大小。默1000。注意:tablepanel是展示最近500条,跟里的大小不一致,可能引
解。
spyable
设为假,不审查(inspect)
tooltip
停在标记时显个字段。
provider
选择哪家地提供商。
(queries)
象描述本面板使用的求。
queries.mode
在可用求中应该些?可设选项有:all,pinned,unpinned,selected
queries.ids
如果设为selected模式,具体被号。
bettermap面板是了解决map面板地太少且不方便大批量添加各国地文件的问题的。它采用了leaflet,其
L.tileLayerOpenStreetMap文件都是在使用的求下,所以在初次使用的候会需要一点时间才能
bettermap
参数
界面配置
正确示。
bettermap的配置界面,我提供了provider,可以选择各种地提供商。比如中文用可以选择GaoDe(高德地)
leaflet有丰富的插件。比如
士:其Kibana官方效果的标记集群也是插件实现的,叫markercluster
其他
基于Elasticsearchtermsfacet接口数据展表格,条带图,或者饼图
field
用于facet的字段名称。
script
用于提交facetscriptField脚本字符串。系我的fork中新增的功能,fmodescript生效。
exclude
要从果数据中排除掉的terms
missing
设为假,就可以不示数据集内有多少果没有你指定的字段。
other
设为假,就可以不示聚合果在你的size属性定范以外的总计
size
示多少个terms
order
terms模式可以置:count,term,reverse_count或者reverse_termterms_stats模式可以置:term,reverse_term,
count,reverse_count,total,reverse_total,min,reverse_min,max,reverse_max,mean或者reverse_mean
donut
饼图(pie)模式,在中画个圈,成甜甜圈式。
tilt
饼图(pie)模式,饼变椭圆形。
lables
饼图(pie)模式,在饼图分片上标签
arrangement
在条(bar)或者饼图(pie)模式,例的放方向。可以置:水平(horizontal)或者垂直(vertical)
chart
可以置:table,bar或者pie
terms
参数
counter_pos
例相的位置,可以置:上(above),下(below),或者不(none)
spyable
设为假,不审查(inspect)
(queries)
象描述本面板使用的求。
queries.mode
在可用求中应该些?可设选项有:all,pinned,unpinned,selected
queries.ids
如果设为selected模式,具体被号。
tmode
Facet模式:terms或者terms_stats
fmode
Field模式:normal或者script。我的fork中新增参数,normal和原版一致,选择scriptscriptField参数生
效。
tstat
Terms_statsfacetstats字段。
valuefield
Terms_statsfacetvalue字段。
terms面板是针对单项数据做聚合统计的面板。可配置较简单
界面配置
主要分为两部分,数据模式和格。
terms面板能使用种数据模式(也是Kibana大多数面板所使用的)
terms
terms即普通的分类计(groupby)。填写具体字段名即可。此外,排序(orderby)果数(limit)也可以定
,具体选项绍见前半部分。
terms_stats
terms_statsterms的基上,一个数值类型字段的统计值为显示内容。可统计值有:count,total_count,
min,max,total,mean。最常用的就是mean
terms面板可以使用多个格来示数据。
bar
pie
数据模式
这时候可能就会"othervalue"太大了,又不关心它。那么可以在配置里去掉other的勾形会这样
如果勾"donut"可以看到圈圈效果:
table
如果你是个数字敏感的人,或者主要数据差距不大,通bar或者pie方式不是很明,那么看表格最好了:
注意个表格只有列数据,使用配置里定的排序,不像table面板。
如果你需要同看多种统计数据,则应该使用stats面板
scriptfield
fmode选择script候,可以填写script脚本字符串取脚本化字段果做聚合。
scriptField入框中
doc['path.raw'].value
候,效果完全等价于直接在Field入框中
path.raw
scriptanalyzer的次序关系,必使用"not_analyzed"属性的字段。否一条数据中只会有一个分词结果参与
聚合算。
支持的script法,ES官方文档:http://www.elasticsearch.org/guide/en/elasticsearch/reference/3.0/modules-
scripting.html#_document_fields
需要注意的是,出于安全考ES1.4以下大多建闭动态脚本行的支持;在1.4新增了沙箱行并。所
以,建ES1.4的前提下使用特性。
是一个面板。目的是你在一列中添加多个其他面板。column面板状定,它的限制是很多的,比如不能
拖拽内部的小面板。未来的版本里,column面板可能被除。
panel
面板成的数
column面板是了在高度大的row中放入多个小panel的一个容器。其本身配置界面和row似只有一个panel
表:
column中的具体的面板本身的定,需要点面板自的配置按来配置:
column
参数
界面配置
:Beta
基于ElasticsearchstatisticalFacet接口实现统计聚合展示面板。
format
返回的格式。默number,可选值还有:moneybytesfloat
style
主数字的示大小,默认为24pt
mode
用来做主数字示的聚合,默count,可选值为count()min(最小)max(最大)mean(平均)
total()variance(方差)std_deviation(准差)sum_of_squares(平方和)
show
统计表格中具体展示的些列。默认为全部展示,可列名即mode中的可选值
spyable
设为假,不审查(inspect)
象描述本面板使用的求。
queries.mode
在可用求中应该些?可设选项有:all,pinned,unpinned,selected
queries.ids
如果设为selected模式,具体被号。
stats
参数
query面板和filter面板都是特殊型的面板,在dashboard上有且有一个。不能除不能添加。
queryfilter的普通式和基本操作,在官方的求和过滤经讲里,一下一些高功能。
query搜索框支持三种型:
lucene
也是默型,使用要点就是法。
http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#query-string-syntax
regex
topN
topN是一个方便大家行多项对比搜索的功能。其配置界面如下:
注意topN选择器的小成了齿轮状!
实质,是先根据你填写的fieldsize起一次termsFacet查询topNterm果;然后拿着个列表,逐
起附加了term条件的其他(比如定在histogram面板就是date_histogram求,stats面板就是termStats
),也就得了topN果。
query
士:如果ES响应较慢的候,你甚至可以很明的看到histogram面板上的多条曲线是一条一条出来数据制的。
:Beta
价器格展示求随着时间的情况。比如:当前时间1:10pm,你的时间选择置的是"Last10m",而
本面板的"TimeAgo"参数置的是"1h",那么面板会示的是果从12:00-12:10pm以来化了多少。
ago
描述需要求的期的时间型字符串。
arrangement
‘horizontal’‘vertical’
spyable
设为假,不审查(inspect)
(queries)
象描述本面板使用的求。
queries.mode
在可用求中应该些?可设选项有:all,pinned,unpinned,selected
queries.ids
如果设为selected模式,具体被号。
trends面板用来实时数据与去某天的同期数据的量的化。配置很简单,就是置具体某天前:
效果如下:
trends
参数
界面配置
文本面板用来示静文本内容,支持markdown简单html文本格式。
mode
‘html’,‘markdown’或者‘text’
content
面板内容,用mode参数指定的标记语
文本(text)
参数
:试验
sparklines面板示微型时间图。目的不是示一个确切的数,而是以紧凑的方式时间序列的形
mode用作Y的数模式。除count以外,都需要定value_field字段。可选值有:count,mean,max,min,total.
time_fieldX字段。必Elasticsearch中的时间类型字段。
value_field如果modemean,max,min或者totalY字段。必是数值类型字段。
interval如果有成的时间过滤器,Sparkline会自动计隔。如果没有,就用隔。默5
spyableinspect图标
(queries)
象描述本面板使用的求。
queries.mode在可用求中应该些?可设选项有:all,pinned,unpinned,selected
queries.ids如果设为selected模式,具体被号。
sparklines面板其就是histogram面板的模式。在配置上,只能选择Chartvalue模式,填写TimeField或者Value
Field字段。上文描述中的interval在配置面上是看不到的。
可以比一下同一个topN制的sparklineshistogram面板的效果:
sparklines
histogram
sparklines
参数
界面配置
注:topN求的配置和明,query面板
:
hits面板表板上每个求的hits数,具体的示格式可以通"chart"属性配置指定。
arrangement
在条(bar)或者饼图(pie)模式,例的放方向。可以置:水平(horizontal)或者垂直(vertical)
chart
可以置:none,bar或者pie
counter_pos
例相的位置,可以置:上(above),下(below)
donut
饼图(pie)模式,在中画个圈,成甜甜圈式。
tilt
饼图(pie)模式,饼变椭圆形。
lables
饼图(pie)模式,在饼图分片上标签
spyable
设为假,不审查(inspect)图标
(queries)
象描述本面板使用的求。
queries.mode
在可用求中应该些?可设选项有:all,pinned,unpinned,selected
queries.ids
如果设为selected模式,具体被号。
hits
参数
:
goal面板在一个饼图示到指定目度。
donut
饼图(pie)模式,在中画个圈,成甜甜圈式。
tilt
饼图(pie)模式,饼变椭圆形。
legend
例的位置,上、下或者无。
lables
饼图(pie)模式,在饼图分片上标签
spyable
设为假,不审查(inspect)图标
(queries)
query.goal
goal模式的指定目
goal
参数
:Beta
基于ElasticsearchpercentileAggregation接口实现统计聚合展示面板。
format
返回的格式。默number,可选值还有:moneybytesfloat
style
主数字的示大小,默认为24pt
modes
用来做百分比的聚合。包括25%,50%,75%,90%,95%,99%
show
统计表格中具体展示的些列。默认为全部展示,可列名即modes中的可选值
spyable
设为假,不审查(inspect)
象描述本面板使用的求。
queries.mode
在可用求中应该些?可设选项有:all,pinned,unpinned,selected
queries.ids
如果设为selected模式,具体被号。
percentile面板界面与stats面板界面似。
percentile
参数
界面配置
1. percentileAggregationElasticsearch1.1.0开始新加入的实验性功能,而且在1.3.0之后其返回的数据结构发生了
变动。所以代ESversion要做判断和兼容性理。
2. percentileAggregation返回的数据中,制保留了百分数的小数点后一位,这导致在js理中会把小数点当做是属性
用的操作符。所以需要在前端展示的"."成后端使用的"_"
3. percentileAggregation求中,不支持使用中文做aggregationname。如果query.alias写了中文的,就会出问题
所以里直接采用序号了。
码实现要点
基于Elasticsearchrangefacet接口数据展表格,条带图,或者饼图
field
用于facet的字段名称。
values
用于facet的数。数每个元素包括:
from
range的起始点
to
range束点
exclude
要从果数据中排除掉的terms
missing
设为假,就可以不示数据集内有多少果没有你指定的字段。
other
设为假,就可以不示聚合果在你的size属性定范以外的总计
size
示多少个terms
order
terms模式可以置:count,term,reverse_count或者reverse_termterms_stats模式可以置:term,reverse_term,
count,reverse_count,total,reverse_total,min,reverse_min,max,reverse_max,mean或者reverse_mean
donut
饼图(pie)模式,在中画个圈,成甜甜圈式。
tilt
饼图(pie)模式,饼变椭圆形。
lables
饼图(pie)模式,在饼图分片上标签
arrangement
range
参数
在条(bar)或者饼图(pie)模式,例的放方向。可以置:水平(horizontal)或者垂直(vertical)
chart
可以置:table,bar或者pie
counter_pos
例相的位置,可以置:上(above),下(below),或者不(none)
spyable
设为假,不审查(inspect)
(queries)
象描述本面板使用的求。
queries.mode
在可用求中应该些?可设选项有:all,pinned,unpinned,selected
queries.ids
如果设为selected模式,具体被号。
range面板是针对单项数据做聚合统计的面板。效果与terms面板似。其配置界面如下:
界面配置
认证鉴权
携程网的[@childe]童鞋献本内容
公司用的是CAS点登,用如下工具将kibana集成到此点登
nginx:仅仅记录日志,不用也行
nodejs:了跑kibana-authentication-proxy
kibana:https://github.com/elasticsearch/kibana
kibana-authentication-proxy:https://github.com/fangli/kibana-authentication-proxy
1. nginx配置8080端口,反向代理到es9200
2. gitclonekibana-authentication-proxy
3. gitclonekibana
4. kibana软链接到kibana-authentication-proxy
5. 配置kibana-authentication-proxy/config.js
可能有如下参数需要:
es_host#里是nginx地址
es_port#nginx8080
listen_port#node听端口,80
listen_host#nodeIP,可以0.0.0.0
cas_server_url#CAS地址
6. 安装kibana-authentication-proxy的依,npminstallexpress,
7. nodekibana-authentication-proxy/app.js
app.js里面app.get('/config.js',kibana3configjs);返回了一个新的config.js,不是用的kibana/config.js,个配置
里面,ES数据的URL前面加了一个__es的前
app.js入口,个关的中间层(我也不知道叫什么)被注册:一个是configureCas,一个是configureESProxy
一个求来的,会到configureCas判断是不是已CAS,没有的cas陆页
configureESProxylib/es-proxy.js,会把__es(就是es数据的)转发到真正的es接口那里
(们这里是nginx)
node(80)<=>nginx(8080)<=>es(9200)
kibana-authentication-proxy本身没有记录日志的代,而且转发es求用的流式的(看起来),并不能记录详细request
body.所以我就用nginx又代理一做日志了..
配置KibanaCAS验证
工具
配置
原理
求路径
社区已有用nodejs或者rubyonrails写的kibana-auth方案了。不这两言都不太擅,只会写一点点Perl5
,所以我选择Mojoliciousweb框架来实现我自己的kibana认证鉴权
整套方案的代kbnauth子目形式存在于我的kibana仓库中,如果你不想用认证方案,照旧使用src子目
可。事上,kbnauth/public/下的静文件我都是通过软连接方式指到src/下的。
全局透明代理
nodejs实现的那套方案不同,我里并没有使用__es/这样附加的路径。所有Elasticsearch求都是通过这
个方案来控制。除了使用config.js.ep模版来定制elasticsearch地址置以外,方案/_nodes求的响应
体,造的响应体中永只有行着认证方案的台服器的IP地址。
么做的原因是我的kibanaelasticjs版本,新版本默会通过这APInodes列表,然后浏览器直接轮询
多个IP响应
注意:Mojolicious有一个量叫max_message_size,默10MB,即只允代理响应大小在10MB以内的数
据。我在script/kbnauth启动脚本中把它修改成了0,即不限制。如果你有方面的需求,可以修改成任意你想要的
使用kibana-authelasticsearch索引做鉴权
所有的求都会往代理服(行着认证鉴权方案的服),每个用都可以有自己的表板空(
招是从kibana-proxy目学来的,每个用使用独的kibana-int-$username索引保存自己的表板)。而本方案
提供一个高功能:可以通过另一个新的索引kibana-auth来指定每个用所能访问Elasticsearch集群地址
和索引列表。
"sri"添加鉴权信息的命令如下:
$curl-XPOSThttp://127.0.0.1:9200/kibana-auth/indices/sri-d'{
"prefix":["logstash-sri","logstash-ops"],
"server":"192.168.0.2:9200"
}'
就意味着用"sri"访问的,是存在"192.168.0.2:9200"上的"logstash-sri-YYYY.MM.dd"或者"logstash-ops-
YYYY.MM.dd"索引。
士:所以你在kbn_auth.conf里配置的eshost/esport,其并不意味着kibana数据的来源,而是认证方案用来
kibana-auth信息的地址!
使用Authen::Simple框架做认证
Authen::Simple是一个很棒的认证框架,支持非常多的认证方法。比如:LDAP,DBI,SSH,Kerberos,PAM,SMB,NIS,
PAM,ActiveDirectory等。
使用的是Passwd方法。也就是用htpasswd命令行在本地生成一个.htpasswd文件存用名密
如果要使用其他方法,比如用LDAP认证,只需要配置kbn_auth.conf文件就行了:
authen=>{
LDAP=>{
host=>'ad.company.com',
binddn=>'proxyuser@company.com',
bindpw=>'secret',
AuthWebUIinMojolicious
特性
basedn=>'cn=users,dc=company,dc=com',
filter=>'(&(objectClass=organizationalPerson)(objectClass=user)(sAMAccountName=%s))'
},
}
可以同使用多种认证方式,但确保每种都是有效可用的。某一个认证接超也会影到其他认证方式超
方案代只有个依Mojolicious框架和Authen::Simple框架。我可以通cpanm部署:
curlhttp://xrl.us/cpanm-o/usr/local/bin/cpanm
chmod+x/usr/local/bin/cpanm
cpanmMojoliciousAuthen::Simple::Passwd
如果你需要使用其他认证方法,每个方法都需要独安装。比如使用LDAP部署,就再行一行:cpanm
Authen::Simple::LDAP就可以了。
士:如果你是在一个新RHEL上初次行代,你可能会发现报错说找不到Digest::SHA个模
Perl核心模,但是RedHat公司把所有的Perl核心模块单独打包成了perl-core.rpm,所以你得先行一下yuminstall
-yperl-core才行。我讨厌RedHat
cdkbnauth
#发环3000端口,使用单进程的morbo调试
morboscript/kbnauth
#产环80端口,使用高性能的hypnotoad,具体端口在kbn_auth.conf中定
hypnotoadscript/kbnauth
在,打开浏览器,就可以通的用/"sri/secr3t"录进去了。(sriMojolicious框架的作者,感
Perl5社区提供么高效的web框架)
注意:这时候你认证过进去了kibana面,但是没有赋权。按照上面提到的kibana-auth命令操作,才算全部完
成。
安装
Kibana3ELKstack靡世界的最大推力,其与美的界面配套的简洁的代功不可没。事上,graphite社区
就通移植kibana3框架的方式,启动grafana。至今你能在grafana找到二十多"kbn"
巧合的是,在Kibanav4版的同grafanav2版也到了Alpha段,从目前的预览效果看,主体dashboard沿用
Kibana3格,不添加了外的菜单栏,供用户权置等使用——意味着grafana2kibana4需要一个
独的server端。
者并非专业的前端工程angularjs于一本入指南都没看的水准。所以本内容,只会抽取一些个人经验
会有涉及到的地方提出一些""迎方家指正。
剖析与二次开
下面是kibana的全部文件的tree
.
├──app
│├──app.js
│├──components
││├──extend-jquery.js
││├──kbn.js
││├──lodash.extended.js
││├──require.config.js
││└──settings.js
│├──controllers
││├──all.js
││├──dash.js
││├──dashLoader.js
││├──pulldown.js
││└──row.js
│├──dashboards
││├──blank.json
││├──default.json
││├──guided.json
││├──logstash.js
││├──logstash.json
││├──noted.json
││├──panel.js
││└──test.json
│├──directives
││├──addPanel.js
││├──all.js
││├──arrayJoin.js
││├──configModal.js
││├──confirmClick.js
││├──dashUpload.js
││├──esVersion.js
││├──kibanaPanel.js
││├──kibanaSimplePanel.js
││├──ngBlur.js
││├──ngModelOnBlur.js
││├──resizable.js
││└──tip.js
│├──factories
││└──store.js
│├──filters
││└──all.js
│├──panels
││├──bettermap
│││├──editor.html
│││├──leaflet
││││├──images
│││││├──layers-2x.png
│││││├──layers.png
│││││├──marker-icon-2x.png
│││││├──marker-icon.png
│││││└──marker-shadow.png
││││├──leaflet-src.js
││││├──leaflet.css
││││├──leaflet.ie.css
││││├──leaflet.js
││││├──plugins.css
││││├──plugins.js
││││└──providers.js
│││├──module.css
│││├──module.html
│││└──module.js
││├──column
│││├──editor.html
│││├──module.html
│││├──module.js
│││└──panelgeneral.html
││├──dashcontrol
│││├──editor.html
│││├──module.html
│││└──module.js
││├──derivequeries
录结构
│││├──editor.html
│││├──module.html
│││└──module.js
││├──fields
│││├──editor.html
│││├──micropanel.html
│││├──module.html
│││└──module.js
││├──filtering
│││├──editor.html
│││├──meta.html
│││├──module.html
│││└──module.js
││├──force
│││├──editor.html
│││├──module.html
│││└──module.js
││├──goal
│││├──editor.html
│││├──module.html
│││└──module.js
││├──histogram
│││├──editor.html
│││├──interval.js
│││├──module.html
│││├──module.js
│││├──queriesEditor.html
│││├──styleEditor.html
│││└──timeSeries.js
││├──hits
│││├──editor.html
│││├──module.html
│││└──module.js
││├──map
│││├──editor.html
│││├──lib
││││├──jquery.jvectormap.min.js
││││├──map.cn.js
││││├──map.europe.js
││││├──map.usa.js
││││└──map.world.js
│││├──module.html
│││└──module.js
││├──multifieldhistogram
│││├──editor.html
│││├──interval.js
│││├──markersEditor.html
│││├──meta.html
│││├──module.html
│││├──module.js
│││├──styleEditor.html
│││└──timeSeries.js
││├──percentiles
│││├──editor.html
│││├──module.html
│││└──module.js
││├──query
│││├──editor.html
│││├──editors
││││├──lucene.html
││││├──regex.html
││││└──topN.html
│││├──help
││││├──lucene.html
││││├──regex.html
││││└──topN.html
│││├──helpModal.html
│││├──meta.html
│││├──module.html
│││├──module.js
│││└──query.css
││├──ranges
│││├──editor.html
│││├──module.html
│││└──module.js
││├──sparklines
│││├──editor.html
│││├──interval.js
│││├──module.html
│││├──module.js
│││└──timeSeries.js
││├──statisticstrend
│││├──editor.html
│││├──module.html
│││└──module.js
││├──stats
│││├──editor.html
│││├──module.html
│││└──module.js
││├──table
│││├──editor.html
│││├──export.html
│││├──micropanel.html
│││├──modal.html
│││├──module.html
│││├──module.js
│││└──pagination.html
││├──terms
│││├──editor.html
│││├──module.html
│││└──module.js
││├──text
│││├──editor.html
│││├──lib
││││└──showdown.js
│││├──module.html
│││└──module.js
││├──timepicker
│││├──custom.html
│││├──editor.html
│││├──module.html
│││├──module.js
│││└──refreshctrl.html
││├──trends
│││├──editor.html
│││├──module.html
│││└──module.js
││└──valuehistogram
││├──editor.html
││├──module.html
││├──module.js
││├──queriesEditor.html
││└──styleEditor.html
│├──partials
││├──connectionFailed.html
││├──dashLoader.html
││├──dashLoaderShare.html
││├──dashboard.html
││├──dasheditor.html
││├──inspector.html
││├──load.html
││├──modal.html
││├──paneladd.html
││├──paneleditor.html
││├──panelgeneral.html
││├──querySelect.html
││└──roweditor.html
│└──services
│├──alertSrv.js
│├──all.js
│├──dashboard.js
│├──esVersion.js
│├──fields.js
│├──filterSrv.js
│├──kbnIndex.js
│├──monitor.js
│├──panelMove.js
│├──querySrv.js
│└──timer.js
├──config.js
├──css
│├──angular-multi-select.css
│├──animate.min.css
│├──bootstrap-responsive.min.css
│├──bootstrap.dark.min.css
│├──bootstrap.light.min.css
│├──font-awesome.min.css
│├──jquery-ui.css
│├──jquery.multiselect.css
│├──normalize.min.css
│└──timepicker.css
├──favicon.ico
├──font
│├──FontAwesome.otf
│├──fontawesome-webfont.eot
│├──fontawesome-webfont.svg
│├──fontawesome-webfont.ttf
│└──fontawesome-webfont.woff
├──img
│├──annotation-icon.png
│├──cubes.png
│├──glyphicons-halflings-white.png
│├──glyphicons-halflings.png
│├──kibana.png
│├──light.png
│├──load.gif
│├──load_big.gif
│├──small.png
│└──ui-icons_222222_256x240.png
├──index.html
└──vendor
├──LICENSE.json
├──angular
│├──angular-animate.js
│├──angular-cookies.js
│├──angular-dragdrop.js
│├──angular-loader.js
│├──angular-resource.js
│├──angular-route.js
│├──angular-sanitize.js
│├──angular-scenario.js
│├──angular-strap.js
│├──angular.js
│├──bindonce.js
│├──datepicker.js
│└──timepicker.js
├──blob.js
├──bootstrap
│├──bootstrap.js
│└──less
│├──accordion.less
│├──alerts.less
│├──bak
││├──bootswatch.dark.less
││└──variables.dark.less
│├──bootstrap.dark.less
│├──bootstrap.less
│├──bootstrap.light.less
│├──bootswatch.dark.less
│├──bootswatch.light.less
│├──breadcrumbs.less
│├──button-groups.less
│├──buttons.less
│├──carousel.less
│├──close.less
│├──code.less
│├──component-animations.less
│├──dropdowns.less
│├──forms.less
│├──grid.less
│├──hero-unit.less
│├──labels-badges.less
│├──layouts.less
│├──media.less
│├──mixins.less
│├──modals.less
│├──navbar.less
│├──navs.less
│├──overrides.less
│├──pager.less
│├──pagination.less
│├──popovers.less
│├──progress-bars.less
│├──reset.less
│├──responsive-1200px-min.less
│├──responsive-767px-max.less
│├──responsive-768px-979px.less
│├──responsive-navbar.less
│├──responsive-utilities.less
│├──responsive.less
│├──scaffolding.less
│├──sprites.less
│├──tables.less
│├──tests
││├──buttons.html
││├──css-tests.css
││├──css-tests.html
││├──forms-responsive.html
││├──forms.html
││├──navbar-fixed-top.html
││├──navbar-static-top.html
││└──navbar.html
│├──thumbnails.less
│├──tooltip.less
│├──type.less
│├──utilities.less
│├──variables.dark.less
│├──variables.less
│├──variables.light.less
│└──wells.less
├──chromath.js
├──elasticjs
│├──elastic-angular-client.js
│└──elastic.js
├──elasticsearch.angular.js
├──filesaver.js
├──jquery
│├──jquery-1.8.0.js
│├──jquery-ui-1.10.3.js
│├──jquery.flot.byte.js
│├──jquery.flot.events.js
│├──jquery.flot.js
│├──jquery.flot.pie.js
│├──jquery.flot.selection.js
│├──jquery.flot.stack.js
│├──jquery.flot.stackpercent.js
│├──jquery.flot.threshold.js
│├──jquery.flot.time.js
│├──jquery.multiselect.filter.js
│└──jquery.multiselect.js
├──jsonpath.js
├──lodash.js
├──modernizr-2.6.1.js
├──moment.js
├──numeral.js
├──require
│├──css-build.js
│├──css.js
│├──require.js
│├──text.js
│└──tmpl.js
├──simple_statistics.js
├──timezone.js
└──underscore.string.js
一目了然,我可以归纳出下面几主要文件:
入口:index.html
块库vendor/
程序入口:app/app.js
件配置:app/components/
表板控制:app/controllers/
挂件面:app/partials/
app/services/
指令:app/directives/
表:app/panels/
一部分是网页项目的基。从index.html里就可以学到angularjs最基的常用模板法了。出的指令有:ng-repeat,
ng-controller,ng-include,ng-view,ng-slow,ng-click,ng-href,以及定的法:{{dashboard.current.**
}}
index.html中,需要注意js的加次序,先require.js,然后再require.config.js,最后app。整个kibana目都是通
requrie方式加的。而具体的模,和模的依关系,require.config.js里。些全部加完成后,才是
启动app,也就是目本身的代
require.config.js中,主要分成部分配置,一个是paths,一个是shimpaths用来指定依出名称和模js
件的具体路径。而shim用来指定依的依关系。比方表的jskibana3里用的是jquery.flot
就首先依jquery(通俗的,就是原先普通的HTML写法里,要先加jquery.js再加jquery.flot.js)
在整个paths中,需要独提一下的是elasticjs:'../vendor/elasticjs/elastic-angular-client'是串elastic.js
angular.js的文件。里面实际是定了一个angular.modulefactory,名叫ejsResource。后kibana3里用到的
Elasticsearch交互的所有方法,都在ejsResource里了。
factoryangular的一个象,建之后会持到你关闭浏览器。Kibana3就是通过这种方式来控制你所有的表是从
同一个Elasticsearch取的数据
app.js中,定了整个用的routes,加controller,directivesfilters里的全部内容。就是在里,加了主
app/partials/dashboard.html。当然,面其,因里面就是提供pulldownrowdiv,然后定到对应
controller上。
入口和模
controller里没太多可的。kibana3里,pulldownrow不大,看这简单的几行代里,最关的就是几个注
入:
define(['angular','app','lodash'],function(angular,app,_){
'usestrict';
angular.module('kibana.controllers').controller('RowCtrl',function($scope,$rootScope,$timeout,ejsResource,querySrv){
var_d={
title:"Row",
height:"150px",
collapse:false,
collapsable:true,
editable:true,
panels:[],
notice:false
};
_.defaults($scope.row,_d);
$scope.init=function(){
$scope.querySrv=querySrv;
$scope.reset_panel();
};
$scope.init();
}
);
});
里面,注入了$scope,ejsResourcequerySrv$scope是控制器作用域内的模型数据象,angular提供的一个
特殊量。ejsResource是一个factory,前面已经讲过querySrv是一个service,下面一下。
servicefactory的概念非常似,一般来,可能factory偏向用来共享一个,而service用来共享一函数功能。
kibana3里,比有用和常用的services包括:
dashboard.js里提供了关于Kibana3表板的写操作。其中主要的几个是提供了三种表板布局要的方式,也就是
取文件,取存在.kibana-int索引里的数据,js脚本。下面是js脚本的相关函数:
this.script_load=function(file){
return$http({
url:"app/dashboards/"+file.replace(/\.(?!js)/,"/"),
method:"GET",
transformResponse:function(response){
/*jshint-W054*/
var_f=newFunction('ARGS','kbn','_','moment','window','document','angular','require','define','$','jQuery',response);
return_f($routeParams,kbn,_,moment);
}
}).then(function(result){
if(!result){
returnfalse;
}
self.dash_load(dash_defaults(result.data));
returntrue;
},function(){
alertSrv.set('Error',
"Couldnotload<i>scripts/"+file+"</i>.Pleasemakesureitexistsandreturnsavaliddashboard",
'error');
returnfalse;
});
};
可以看到,最关的就是那个newFunction。知道些函数去,也就知道你的js脚本里都可以些内容了~
controllerservice
dashboard
最后用的dash_load方法也需要提一下。个方法的最后,有几行这样的代
self.availablePanels=_.difference(config.panel_names,
_.pluck(_.union(self.current.nav,self.current.pulldowns),'type'));
self.availablePanels=_.difference(self.availablePanels,config.hidden_panels);
从最外config.js取了panel_names,然后取出了navpulldownpanel,剩下就是我能在row
添加的panel型了。
querySrv.js里定了跟query框相关的函数和属性。主要有几个得注意的。
一个是color列表;
一个是queryTypes,尤其是里么的topN,可以看到topN方式其就是先求了一次termsFacet,然后把map
成一普通的query
一个是idsidsByMode。之后表的定具体query候,就是通过这个函数来选择的。
filterSrv.jsquerySrv相似。特殊的是个函数。
一个是toEjsObjs。根据不同的filter用不同的ejs方法。
一个是timeRange。因histogrampanel上拖拽,会生成好多个range过滤器,都是时间个方法会选择最后一
timefilter,作为实际要用的filter这样证请ES的是最后一次拖拽定的时间段。
fields.js里最重要的作用就是通mapping接口取索引的字段列表,存在fields.list里。个数后来在每个panel
编辑页里,都以bs-typeahead="fields.list"的形式作文本的自动补全提示。在tablepanel里,是左侧栏
来源。
esVersion.js里提供了ES版本号的比函数。之所以专门提供么个service,一来是因不同版本的ES接口有化,
比如我自己开percentilepanel里,就用esVersion判断了次版本。因percentile接口是1.0版之后才有,而从1.3
版以后返回数据的结构生了一次变动。二来ES的版本号格式比,又有点又有字母。
querySrv
filterSrv
fields
esVersion
前面在app/services/dashboard.js候,已经说到能添加的panel列表是怎么取的。那么panel是怎么加上的呢?
是之前讲过app/partials/dashaboard.html里,加partials/roweditor.html面。里有一段:
<formclass="form-inline">
<selectclass="input-medium"ng-model="panel.type"ng-options="panelTypeforpanelTypeindashboard.availablePanels|stringSort"></select>
<smallng-show="rowSpan(row)>11">
Note:Thisrowisfull,newpanelswillwraptoanewline.Youshouldaddanotherrow.
</small>
</form>
<divng-show="!(_.isUndefined(panel.type))">
<divadd-panel="{{panel.type}}"></div>
</div>
add-panel指令,是有app/directives/addPanel.js提供的。方法如下:
$scope.$watch('panel.type',function(){
var_type=$scope.panel.type;
$scope.reset_panel(_type);
if(!_.isUndefined($scope.panel.type)){
$scope.panel.loadingEditor=true;
$scope.require(['panels/'+$scope.panel.type.replace(".","/")+'/module'],function(){
vartemplate='<divng-controller="'+$scope.panel.type+'"ng-include="\'app/partials/paneladd.html\'"></div>';
elem.html($compile(angular.element(template))($scope));
$scope.panel.loadingEditor=false;
});
}
});
可以看到,其就是require对应panels/xxx/module.js,然后动态生成一个div定到对应controller上。
是在app/partials/dashaboard.html里,用到了一个指令kibana-panel
<div
ng-repeat="(name,panel)inrow.panels|filter:isPanel"
ng-cloakng-hide="panel.hide"
kibana-paneltype='panel.type'resizable
class="panelnospace"ng-class="{'dragInProgress':dashboard.panelDragging}"
style="position:relative"ng-style="{'width':!panel.span?'100%':((panel.span/1.2)*10)+'%'}"
data-drop="true"ng-model="row.panels"data-jqyoui-options
jqyoui-droppable="{index:$index,mutate:false,onDrop:'panelMoveDrop',onOver:'panelMoveOver(true)',onOut:'panelMoveOut'}">
</div>
当然,里面resizable指令也是自己实现的,不一般我用不着关心个的代码实现
下面看app/directives/kibanaPanel.js里的实现
个里面大多数逻辑addPanel.js是一的,都是实现一个指令嘛。于我,关注点在前面那一大段HTML
符串,也就是panelHeader个就是我看到的实际效果中,kibana3每个panel部那个小图标工具。仔细阅读
一下,可以发现除了每个panel都一致的那些span以外,有一段是:
panel相关指令
添加panel
展示panel
'<spanng-repeat="taskinpanelMeta.modals"class="row-buttonextra"ng-show="task.show">'+
'<spanbs-modal="task.partial"class="pointer"><i'+
'bs-tooltip="task.description"ng-class="task.icon"class="pointer"></i></span>'+
'</span>'
也就是,每个panel可以在自己的panelMeta.modals里,定不同的小图标出不同的对话。我个人table
panel二次开加入的exportAsCsv功能,图标就是在里加入的。
到最后了。大家入到app/panels/下,每个目都是一种panel。原因前一分析了,因addPanel.js
就是直接这样拼接的。入口都是固定的:module.js
下面以statspanel例。(我最开始就是抄的stats做的percentile,只有表格没有形,最简单)
每个目下都会有至少一下三个文件:
module.js就是一个controller。跟前面讲过controller写法其是一致的。在$scope象上,有几个属性是panel实现时
一般都会有的:
$scope.panelMeta:个前面,其中的modals用来定panelHeader
$scope.panel:用来定panel的属性。一般实现上,会有一个default值预好。你会发现这$scope.panel
就是表板要里面的每个panel的可
然后一般$scope.init()都是这样的:
$scope.init=function(){
$scope.ready=false;
$scope.$on('refresh',function(){
$scope.get_data();
});
$scope.get_data();
};
也就是每次有刷新操作,就get_data()方法。个方法就是ES数据,然后渲染效果的入口。
$scope.get_data=function(){
if(dashboard.indices.length===0){
return;
}
$scope.panelMeta.loading=true;
varrequest,
results,
boolQuery,
queries;
request=$scope.ejs.Request();
$scope.panel.queries.ids=querySrv.idsByMode($scope.panel.queries);
queries=querySrv.getQueryObjs($scope.panel.queries.ids);
boolQuery=$scope.ejs.BoolQuery();
_.each(queries,function(q){
boolQuery=boolQuery.should(querySrv.toEjsObj(q));
});
request=request
.facet($scope.ejs.StatisticalFacet('stats')
.field($scope.panel.field)
.facetFilter($scope.ejs.QueryFilter(
$scope.ejs.FilteredQuery(
boolQuery,
filterSrv.getBoolFilter(filterSrv.ids())
)))).size(0);
_.each(queries,function(q){
varalias=q.alias||q.query;
varquery=$scope.ejs.BoolQuery();
query.should(querySrv.toEjsObj(q));
request.facet($scope.ejs.StatisticalFacet('stats_'+alias)
.field($scope.panel.field)
panel内部实现
module.js
.facetFilter($scope.ejs.QueryFilter(
$scope.ejs.FilteredQuery(
query,
filterSrv.getBoolFilter(filterSrv.ids())
)
))
);
});
$scope.inspector=request.toJSON();
results=$scope.ejs.doSearch(dashboard.indices,request);
results.then(function(results){
$scope.panelMeta.loading=false;
varvalue=results.facets.stats[$scope.panel.mode];
varrows=queries.map(function(q){
varalias=q.alias||q.query;
varobj=_.clone(q);
obj.label=alias;
obj.Label=alias.toLowerCase();//sortfield
obj.value=results.facets['stats_'+alias];
obj.Value=results.facets['stats_'+alias];//sortfield
returnobj;
});
$scope.data={
value:value,
rows:rows
};
$scope.$emit('render');
});
};
statspanel段函数几乎就跟基示例一了。
1. 生成Request象。
2. 取关query象。
3. 取当前filter象。
4. 定的facets方法,入参数。
5. 如果有多个query,逐一facets
6. request完成。生成一个JSON内容供inspector看。
7. 求,等待异步回
8. 调处理数据成定在模板上的$scope.data
9. 渲染面。
注:stats/module.js后面有一个filterterms/module.js后面有一个directive些都是实际页面效果加的功能,跟
kibana本身的filterdirective上是一的。就不述了。
module.html就是panel的具体面内容。没有太多可的。大概框架是:
<divng-controller='stats'ng-init="init()">
<tableng-style="panel.style"class="tabletable-stripedtable-condensed"ng-show="panel.chart=='table'">
<thead>
<th>Term</th><th>{{panel.tmode=='terms_stats'?panel.tstat:'Count'}}</th><th>Action</th>
</thead>
<trng-repeat="termindata"ng-show="showMeta(term)">
<tdclass="terms-legend-term">{{term.label}}</td>
<td>{{term.data[0][1]}}</td>
</tr>
</table>
</div>
主要就是定要controllerinit函数。于示例的stats,里面的data就是module.js最后生成的$scope.data
module.html
editor.htmlpanel参数的编辑页面主要内容,参数编辑还有一些共同的标签页,是在kibanaapp/partials/里,就不
了。
editor.html里,主要就是提供$scope.panel里那些参数的修改保存操作。当然实际上并不是所有参数都暴露出来了。
kibana3指南里,官方采用表板要,比通过页面修改更灵活细腻的原因。
editor.html里需要注意的是,了每次更都能实时生效,所有的入框都注册到了刷新事件。所以一般是这样子:
<selectng-change="set_refresh(true)"class="input-small"ng-model="panel.format"ng-options="fforfin['number','float','money','bytes']"></select>
set_refresh函数是在module.js里定的:
$scope.set_refresh=function(state){
$scope.refresh=state;
};
kibana3的主体分析,就是这样了。怎么,看完以后,大家有没有信心也做些二次开,甚至跟grafana,替
esResource上一个你自己的后端数据源呢?
editor.html
总结
KibanaElasticsearch设计的开源分析和可化平台。你可以使用Kibana来搜索,看存Elasticsearch索引中的
数据并与之交互。你可以很容易实现的数据分析和可化,以图标的形式展出来。
Kibana海量数据得更容易理解。简单的基于浏览器的界面你可以快速建并分享动态表板,用以实时修改
Elasticsearch求。
安装Kibana非常简单。你可以在几分内安装好Kibana然后开始探索你的Elasticsearch索引——不需要写代,不需要
外的架
本指南述的是如何使用Kibana4。想了解Kibana4里有什么新特性,请阅读What’sNewinKibana4。想了解
Kibana3的内容,请阅读Kibana3指南
看看你可能要怎么用Kibana来探索和展示数据。我会从敦交通局的交通运输卡的一周使用情况里入一些数
据。
KibanaDiscover,我可以提交搜索求,过滤结果,然后检查返回的文档里的数据。比如,我可以通排除公
交出行,取地出行的情况。
在,我可以看到早晚上下班高峰期的直方。默情况下,Discover示匹配搜索条件的前500个文档。你可以修
时间过滤器,拖拽直方数据,看部分文档的细节Discover上如何探索数据,详细说Discover
你可以在Visualization页为你的搜索结构构造可化。每个可化都是跟一个搜索关着的。比如,我可以基于前面那个
搜索建一个士每周敦地交通流量的直方Y轴显示交通流量。X轴显时间。而添加一个子聚合,我们还可以看
到每小排名前三的地站。
README
数据发现和可
你可以保存并分析可果,然后合并到表板上以便比分析。比如,我可以建一个展示多个敦交通数据的
表板:
更多关于建和分享可化和表板的内容,请阅读VisualizeDashboard
你可以在几分内安装好Kibana然后开始探索你的Elasticsearch索引。你要的就是:
Elasticsearch1.4.4或者更新的版本
一个浏览-支持的浏览器列表.
有关你的Elasticsearch集群的信息:
你想要Elasticsearch例的URL
你想搜索Elasticsearch索引
如果你的Elasticsearch是被Shield着的,阅读ShieldwithKibana4习额外的安装明。
要安装启动Kibana:
1. 载对应平台的Kibana4制包
2. .ziptar.gz压缩文件
3. 在安装目:bin/kibana(Linux/MacOSX)bin\kibana.bat(Windows)
Kibana行在5601端口了。
在开始用Kibana之前,你需要告它你打算探索Elasticsearch索引。第一次访问Kibana候,你会被要求定
indexpattern用来匹配一个或者多个索引名。好了。就是你需要做的全部工作。以后你可以随Settingstab
添加更多的indexpattern
情况下,Kibana行在localhostElasticsearch。要接其他Elasticsearch例,修改kibana.yml
里的ElasticsearchURL,然后重Kibana。如何在生产环境下使用Kibana阅读UsingKibanainaProduction
Environment.
要从Kibana访问Elasticsearch索引的配置方法:
1. 浏览访问Kibana界面。也就是说访问比如localhost:5601或者http://YOURDOMAIN.com:5601
2. 制定一个可以匹配一个或者多个Elasticsearch索引的indexpattern。默情况下,Kibana认为你要访问的是通
LogstashElasticsearch的数据。这时候你可以用默logstash-*你的indexpattern。通配符(*)匹配索引
名中零到多个字符。如果你的Elasticsearch索引有其他命名定,入合适的patternpattern也开始是最简单
索引的名字。
3. 选择一个包含了时间戳的索引字段,可以用来做基于时间理。Kibana取索引的映射,然后列出所有包含了时间
戳的字段(者注:实际是字段date的字段,而不是看起来像时间的字段)。如果你的索引没有基于时间的数
据,关Indexcontainstime-basedevents参数。
安装并启动kibana
kibana接到elasticsearch
4. 如果一个新索引是定期生成,而且索引名中时间戳,选择Useeventtimestocreateindexnames选项,然后再
Indexpatterninterval可以提高搜索性能,Kibana会至搜索你指定的时间内的索引。在你用Logstash
出数据Elasticsearch的情况下尤其有效。
5. Create添加indexpattern。第一个被添加的pattern会自认值。如果你有多个indexpattern
候,你可以在Settings>Indices置具体个是默认值
好了。Kibana接上你的Elasticsearch数据了。Kibana示匹配上的索引里的字段名的只列表。
你可以开始下你的数据了:
Discover搜索和浏览你的数据。
Visualize页转换数据成表。
Dashboard页创建定制自己的表板。
开始探索你的数据!
Kibana你从5601端口访问的网页应用。你需要做的只是打开浏览器,然后入你Kibana的机器地址然后加上端
口号。比如localhost:5601或者http://YOURDOMAIN.com:5601
当你访问Kibana候,默会加Discover以及默的索引模式。时间选择器默认为最近15。而搜索条件是全
部匹配(*)
如果你没看到任何文档,尝试宽时间选择器范。如果没有,可能你确没往Elasticsearch里写数据。
你可以在Discover交互式探索你的数据。你可以访问到匹配得上你选择的索引模式的每个索引的每条记录。你可以提交搜
求,过滤搜索果,然后看文档数据。你可以看到匹配搜索求的文档数,取字段统计情况。如果索引模
式配置了时间字段,文档的序分布情况会在部以柱状的形式展示出来。
时间过滤(TimeFilter)限制搜索果在一个特定的时间周期内。如果你的索引包含的是句,而且你的索引模式
配置了时间字段,那么就就可以时间过滤器。
时间过滤最近15。你可以用部的时间选择(TimePicker)来修改时间过滤器,或者选择一个特定
时间间隔,或者直方时间
要用时间选择器来修改时间过滤器:
1. 单栏右上角示的TimeFilter打开时间选择器。
2. 快速过滤,直接选择一个短接即可。
3. 要指定相对时间过滤,点Relative然后入一个相的开始时间。可以是任意数字的秒、分、小、天、月甚至年之
前。
4. 要指定绝对时间过滤,点Absolute然后在From框内入开始日期,To框内束日期。
5. 击时间选择器底部的箭头隐选择器。
要从住房时间过滤器,有以下几种方式:
想要放大那个时间间隔,点击对应的柱体。
单击并拖拽一个时间区域。注意需要等到光标变成加号,才意味着是一个有效的起始点。
你可以用浏览器的后退来回退你的操作。
Discover提交一个搜索,你就可以搜索匹配当前索引模式的索引数据了。你可以直接简单求字符串,也就是用
Lucenequerysyntax,也可以用完整的基于JSONElasticsearchQueryDSL
当你提交搜索的候,直方,文档表格,字段列表,都会自反映成搜索的果。hits(匹配的文档)数会在直方的右上
示。文档表格示前500个匹配文档。默的,文档倒序排列,最新的文档最先示。你可以通击时间列的部来
排序。事上,所有建了索引的字段,都可以用来排序。更多细节请阅读SortingtheDocumentsTable
要搜索你的数据:
时间过滤
搜索数据
1. 在搜索框内求字符串:
简单的文本搜索,直接入文本字符串。比如,如果你在搜索网站服器日志,你可以safari来搜索各字段
中的safari单词
要搜索特定字段中的前加上字段名。比如,你可以status:200来限制搜索果都是在status
段里有200内容。
要搜索一个的范,你可以用范围查询语法,[START_VALUETOEND_VALUE]。比如,要4xx的状态码,你可以
status:[400TO499]
要指定更复的搜索准,你可以用布操作符AND,OR,NOT。比如,要4xx的状态码php
html尾的数据,你可以status:[400TO499]AND(extension:phpORextension:html)
些例子都用了Lucenequerysyntax。你也可以提交ElasticsearchQueryDSL式的求。更多示例,请阅读
Elasticsearch文档中的querystringsyntax
1. 车键,或者点Search提交你的搜索求。
要清除当前搜索或开始一个新搜索,点Discover工具NewSearch
你可以在Discover已保存的搜索,也可以用作visualizations的基。保存一个搜索,意味着同保存下了搜索
字符串和当前选择的索引模式。
要保存当前搜索:
1. Discover工具SaveSearch
2. 入一个名称,点Save
要加一个已保存的搜索:
1. Discover工具LoadSearch
2. 选择你要加的搜索。
如果已保存的搜索关到跟你当前选择的索引模式不一的其他索引上,加载这个搜索也会切当前的已索引模式。
当你提交一个搜索求,匹配当前的已索引模式的索引都会被搜索。当前模式模式会示在搜索下方。要改搜索的索
引,需要选择另外的模式模式。
选择另外的索引模式:
1. Discover工具Settings
2. 从索引模式列表中取你打算采用的模式。
开始一个新的搜索
保存搜索
一个已存搜索
你搜索的索引
关于索引模式的更多细节请阅读CreatinganIndexPattern
亦可以配置一个刷新隔来自刷新Discover面的最新索引数据。回定期重新提交一次搜索求。
置刷新隔后,会示在菜单栏时间过滤器的左
置刷新隔:
1. 单栏右上角的TimeFilter
2. RefreshInterval标签
3. 从列表中选择一个刷新隔。
你可以过滤搜索果,只示在某字段中包含了特定的文档。也可以建反向过滤器,排除掉包含特定字段的文档。
你可以从字段列表或者文档表格里添加过滤器。当你添加好一个过滤器后,它会示在搜索求下方的过滤栏里。从过滤栏
里你可以编辑或者关一个过滤器,转换过滤(从正向改成反向,反之亦然),切换过滤器开关,或者完全移除掉它。
要从字段列表添加过滤器:
1. 你想要过滤的字段名。会个字段的前5名数据。每个数据的右,有个小按——一个用来添加常(
)过滤器,一个用来添加反向过滤器。
2. 要添加正向过滤器,点PositiveFilter个会过滤掉在本字段不包含个数据的文档。
3. 要添加反向过滤器,点NegativeFilter个会过滤掉在本字段包含个数据的文档。
要从文档表格添加过滤器:
1. 表格第一列(通常都是时间)文档内容左Expand 展开文档表格中的文档。每个字段名的右,有
小按——一个用来添加常(正向)过滤器,一个用来添加反向过滤器。
2. 要添加正向过滤器,点PositiveFilter个会过滤掉在本字段不包含个数据的文档。
3. 要添加反向过滤器,点NegativeFilter个会过滤掉在本字段包含个数据的文档。
当你提交一个搜索求,最近的500个搜索果会示在文档表格里。你可以在AdvancedSettings里通
discover:sampleSize属性配置表格里具体的文档数量。默的,表格会示当前选择的索引模式中定时间字段内容(
成本地)以及_source文档。你可以从字段列表添加字段到文档表格可以用表格里包含的任意已建索引的字段来
排序列出的文档
看一个文档的字段数据:
1. 表格第一列(通常都是时间)文档内容左ExpandKibanaElasticsearch取数据然后在表格中
示文档字段。个表格每行是一个字段的名字、过滤器按和字段的
2. 看原始JSON文档(格式美化),点JSON标签
3. 要在独的面上看文档内容,点击链接。你可以添加书签或者分享接,以直接访问这条特定文档。
4. 收回文档细节,点Collapse
刷新
按字段过滤
看文档数据
你可以用任意已建索引的字段排序文档表格中的数据。如果当前索引模式配置了时间字段,默会使用字段倒序排列文
档。
要改排序方式:
想要用来排序的字段名。能用来排序的字段在字段名右都有一个排序按。再次点字段名,就会反向整排序
方式。
Bydefault,theDocumentstableshowsthelocalizedversionofthetimefieldspecifiedintheselectedindexpatternandthe
document_source.YoucanaddfieldstothetablefromtheFieldslist.的,文档表格会示当前选择的索引模式中定
时间字段内容(转换成本地)以及_source文档。你可以从字段列表添加字段到文档表格。
要添加字段列到文档表格:
1. 到字段列表的字段上,点它的add
2. 重复操作直到你添加完所有你想移除的字段。
添加的字段会替掉文档表格里的_source列。同时还示在字段列表部的SelectedFields区域里。
要重排表格中的字段列,移到你要移的列部,点动过
要从文档表格除字段列:
1. 到字段列表的SelectedFields区域里你想要移除的字段上,然后点它的remove
2. 重复操作直到你移除完所有你想移除的字段。
从字段列表,你可以看到文档表格里有多少数据包含了个字段,排名前5是什么,以及包含各个的文档的占比。
看字段数据统计
字段列表里一个字段的名字。个字段可以在字段列表的任意位置——字段(SelectedFields),常用字段
(PopularFields),或其他字段。
文档列表排序
文档表格添加字段列
从文档表格除字段列
看字段数据统计
要基于个字段建可化,点字段统计下方的Visualize
你可以用Visualize设计化。你可以保存可化,以后再用,或者合并到dashboard里。一个可化可以基于以下
几种数据源型:
一个新的交互式搜索
一个已保存的搜索
一个已保存的可
化是基于Elasticsearch1引入的聚合(aggregation)特性。
要开始一个NewVisualization,点击页面左上角的Visualize标签。如果你已建一个可化了。你可以在搜索
的右工具里点NewVisualization 会引继续以下几步:
NewVisualization起始如下:
你也可以加一个你之前建好保存下来的可化。已存可选择器包括一个文本框用来过滤化名称,以及一个指向
编辑(ObjectEditor)接,可以通Settings>EditSavedObjects来管理已存的可化。
如果你的新可化是一个Markdown挂件,选择这型会你到一个文本内容框,你可以在框内入打算示在挂件里的
文本。其他的可型,选择后都会到数据源选择
你可以选择新建或者取一个已保存的搜索,作你可化的数据源。搜索是和一个或者一系列索引相关的。如果你选择
了在一个配置了多个索引的系上开始你的新搜索,从可编辑器的下拉菜选择一个索引模式。
当你从一个已保存的搜索开始建并保存好了可化,个搜索就定在个可化上。如果你修改了搜索,对应的可
也会自更新。
Thevisualizationeditorenablesyoutoconfigureandeditvisualizations.Thevisualizationeditorhasthefollowingmain
elements:编辑器用来配置编辑化。它有下面几个主要元素:
1. 工具(Toolbar)
2. 聚合建器(AggregationBuilder)
3. 预览画布(PreviewCanvas)
建一个新可
1:选择
2:选择数据源
3:编辑
工具上有一个用交互式数据搜索的搜索框,用来保存和加化。因化是基于保存好的搜索,搜索成灰
色。要编辑搜索,双搜索框,用编辑后的版本替已保存搜索。
搜索框右的工具有一系列按,用于建新可化,保存当前可化,加一个已有可化,分享或内嵌可化,和刷
新当前可化的数据。
面左的聚合建器配置你的可化要用的metricbucket聚合。桶(Buckets)的效果似于SQLGROUPBY句。想
详细的了解聚合,阅读Elasticsearchaggregationsreference
在条带图或者折线图化里,用metricsY,然后bucketsX,条带颜色,以及行/列的区分。在饼图
里,metrics用来做分片的大小,buckets做分片的数量。
你的可Y轴选一个metric聚合,包括count,average,sum,min,max,orcardinality(uniquecount).你的可X
,条带颜色,以及行/列的区分一个bucket聚合,常的有datehistogram,range,terms,filters,significantterms
你可以buckets行的序。在Elasticsearch里,第一个聚合决定了后聚合的数据集。下面例子演示一个网页访问
前五名的文件后统计时间带图
要看所有相同后名的,序如下:
1. Color:名的Terms聚合
2. X-Axis:@timestamp时间带图
Elasticsearch收集记录,算出前5名后名,然后每个后建一个时间带图
要看每个小的前5名后名情况,序如下:
1. X-Axis:@timestamp时间带图(1时间)
2. Color:名的Terms聚合
次,Elasticsearch会从所有记录建一个时间带图,然后在每个桶内,分(本例中就是一个小)算出前5
名的后名。
住,每个后的桶,都是从前一个的桶里分割数据。
要在预览画布(previewcanvas)上渲染可化,点聚合建器底部的Apply
工具
聚合建器
预览画布(canvas)
预览canvas示你定在聚合建器里的可化的预览效果。要刷新可预览,点工具里的Refresh
一个Kibanadashboard你自由排列一已保存的可化。然后你可以保存表板,用来分享或者重
简单表板像这样
要用表板,你需要至少有一个已保存的visualization
你第一次点Dashboard标签候,Kibana示一个空白的表板
添加可化的方式来建你的表板。
要添加可化到表板上,点工具面板上的AddVisualization 。从列表中选择一个已保存的可化。你可以
VisualizationFilter入字符串来过滤想要找的可化。
开始
建一个新的表板
添加可化到表板上
由你选择个可化会出在你表板上的一个容器(container)里。
如果你得容器的高度和度不合适,可以整容器大小
要保存表板,点工具面板上的SaveDashboard,在SaveAs栏输表板的名字,然后点Save
LoadSavedDashboard钮显示已存在的表板列表。已保存表板选择器包括了一个文本可以通过仪表板的名
字做过滤有一个接到ObjectEditor而已管理你的已保存表板。你也可以直接点Settings>EditSavedObjects
访问ObjectEditor
你可以分享表板其他用。可以直接分享Kibana表板接,也可以嵌入到你的网里。
Kibana访问权限才能看到嵌入的表板。
Share钮显HTML,就可以嵌入表板到其他网里。还带有一个指向表板的接。点复制按可以
复制代,或者接到你的黏板。
要嵌入表板,从Share里复制出嵌入代,然后粘贴进你外部网页应用内即可。
表板里的可化都存在可以整大小的容器里。接下来会讨论一下容器。
并按住容器的部,就可以拖容器到表板任意位置。其他容器会在必要的候自你在拖个容器空
出位置。松开鼠,容器就会固定在当前停留位置。
到容器的右下角,等光标变成指向拐角的方向,点并按住鼠,拖容器的大小。松开鼠,容器就会固定
成当前大小。
容器右上角的x图标删除容器。从表板除容器,并不会同时删除掉容器里用到的已存可化。
示可化背后的原始数据,点容器地步的条。可化会被有关原始数据详细信息的几个标签掉。如下所示:
表格(Table)。底数据的分展示。你可以通每列部的方式给该列数据排序。
保存表板
已保存表板
分享表板
嵌入表板
定制表板元素
容器
容器大小
除容器
详细信息
(Request)送到服器的原始求,以JSON格式展示。
响应(Response)。从服器返回的原始响应,以JSON格式展示。
统计值(Statistics)。和响应相关的一些统计值,以数据网格的方式展示。数据告,时间响应时间,返回的记录
条目数,匹配求的索引模式(indexpattern)
容器右上角的Edit Visualize打开可编辑
修改可
要使用Kibana,你就得告它你想要探索的Elasticsearch索引是那些,就要配置一个或者更多的索引模式。此外,你
可以:
建脚本化字段,个字段可以实时从你的数据中算出来。你可以浏览这种字段,并且在它基上做可化,但是不
能搜索种字段。
置高级选项,比如表格里示多少行,常用字段示多少个。修改高级选项候要千万小心,因一个置很可能
一个置是不兼容的。
产环境配置Kibana
一个索引模式定了一个或者多个你打算探索的Elasticsearch索引。Kibana找匹配指定模式的索引名。模式中的通配
()匹配零到多个字符。比如,模式`myindex-匹配所有名字以myindex-的索引,比如myindex-1myindex-2`
如果你用了事件时间建索引名(比如,如果你是用LogstashElasticsearch里写数据),索引模式里也可以匹配一个
日期格式。在种情况下,模式的静文本部分必用中括号包含起来,日期格式能用的字符,参1"日期格式"
比如,[logstash-]YYYY.MM.DD匹配所有名字以logstash-,后面跟上YYYY.MM.DD格式时间戳的索引,比如
logstash-2015.01.31logstash-2015-02-01
索引模式也可以简单一个独的索引名字。
建一个接到Elasticsearch的索引模式:
1. Settings>Indices标签页
2. 指定一个能匹配你的Elasticsearch索引名的索引模式。默的,Kibana会假你是要Logstash入的数据。
当你在顶层标签页候,Kibana住你之前停留的位置。比如,如果你在Settings标签页查看了一个索
引模式,然后切Discover标签,再切Settings标签Kibana示上次你看的索引模式。要看到
模式的表,需要从索引模式列表里点Add
1. 如果你索引有时间戳字段打算用来做基于事件的比,勾Indexcontainstime-basedevents然后选择包含了时间
的索引字段。Kibana取索引映射,列出所有包含了时间戳的字段供选择
2. 如果新索引是周期性生成,名字里有时间戳的,勾UseeventtimestocreateindexnamesIndexpattern
interval选项Kibana只搜索些包含了你指定的时间内的数据的索引。当你使用Logstash
Elasticsearch写数据的候非常有用。
3. Create添加索引模式。
4. 置新模式作Discover是的默模式,点favorite
1.日期格式
格式 描述
M Month-cardinal:123…12
Mo Month-ordinal:1st2nd3rd…12th
MM Month-twodigit:010203…12
MMM Month-abbreviation:JanFebMar…Dec
MMMM Month-full:JanuaryFebruaryMarch…December
Q Quarter:1234
D DayofMonth-cardinal:123…31
Do DayofMonth-ordinal:1st2nd3rd…31st
DD DayofMonth-twodigit:010203…31
DDD DayofYear-cardinal:123…365
建一个接到Elasticsearch的索引模式
DDDo DayofYear-ordinal:1st2nd3rd…365th
DDDD DayofYear-threedigit:001002…364365
d DayofWeek-cardinal:013…6
do DayofWeek-ordinal:0th1st2nd…6th
dd DayofWeek-2-letterabbreviation:SuMoTu…Sa
ddd DayofWeek-3-letterabbreviation:SunMonTue…Sat
dddd DayofWeek-full:SundayMondayTuesday…Saturday
e DayofWeek(locale):012…6
E DayofWeek(ISO):123…7
w WeekofYear-cardinal(locale):123…53
wo WeekofYear-ordinal(locale):1st2nd3rd…53rd
ww WeekofYear-2-digit(locale):010203…53
W WeekofYear-cardinal(ISO):123…53
Wo WeekofYear-ordinal(ISO):1st2nd3rd…53rd
WW WeekofYear-two-digit(ISO):010203…53
YY Year-twodigit:707172…30
YYYY Year-fourdigit:197019711972…2030
gg WeekYear-twodigit(locale):707172…30
gggg WeekYear-fourdigit(locale):197019711972…2030
GG WeekYear-twodigit(ISO):707172…30
GGGG WeekYear-fourdigit(ISO):197019711972…2030
A AM/PM:AMPM
a am/pm:ampm
H Hour:012…23
HH Hour-twodigit:000102…23
h Hour-12-hourclock:123…12
hh Hour-12-hourclock,2digit:010203…12
m Minute:012…59
mm Minute-two-digit:000102…59
s Second:012…59
ss Second-two-digit:000102…59
S FractionalSecond-10ths:012…9
SS FractionalSecond-100ths:01…9899
SSS FractionalSeconds-1000ths:01…998999
Z Timezone-zeroUTCoffset(hh:mmformat):-07:00-06:00-05:00..+07:00
ZZ Timezone-zeroUTCoffset(hhmmformat):-0700-0600-0500…+0700
X UnixTimestamp:1360013296
x UnixMillisecondTimestamp:1360013296123
置默索引模式
索引模式会在你Discover标签候自Kibana会在Settings>Indices标签页的索引模式列表里,
模式左边显示一个星号。你建的第一个模式会自模式。
置一个外的模式索引模式:
1. Settings>Indices标签页
2. 在索引模式列表里选择你打算认值的模式。
3. 模式的Favorite标签
你也可以在Advanced>Settings置默索引模式。
当你添加了一个索引映射,Kibana动扫描匹配模式的索引以示索引字段。你可以重加索引字段列表,以示新添加的
字段。
重加索引字段列表,也会重Kibana的常用字段数器。数器是跟踪你在Kibana里常用字段,然后来排序字段列
表的。
要重加索引的字段列表:
1. Settings>Indices标签页
2. 在索引模式列表里选择一个索引模式。
3. 模式的Reload
除一个索引模式:
1. Settings>Indices标签页
2. 在索引模式列表里选择你打算除的模式。
3. 模式的Delete
4. 你是想要个索引模式。
脚本化字段从你的Elasticsearch索引数据中即时计算得来。在Discover标签页,脚本化字段数据会作文档数据的一部分
示,而且你可以在可化里使用脚本化字段。(脚本化字段的是在求的算的,所以它没有被索引,不能搜索
)
时计算脚本化字段非常消耗源,会直接影Kibana的性能。而且住,Elasticsearch里没有内置脚本化字
段的验证功能。如果你的脚本有bug,你会在动态生成的数据看到exception
脚本化字段使用Lucene法。更多细节请阅读LuceneExpressionsScripts
你可以在表式里引用任意个数值类型字段,比如:
doc['field_name'].value
建一个脚本化字段:
1. Settings>Indices
2. 选择你打算添加脚本化字段的索引模式。
重加索引的字段列表
除一个索引模式
建一个脚本化字段
3. 入模式的ScriptedFields标签
4. AddScriptedField
5. 入脚本化字段的名字。
6. 入用来即时计算数据的表式。
7. SaveScriptedField.
有关Elasticsearch的脚本化字段的更多细节阅读Scripting
要更新一个脚本化字段:
1. Settings>Indices
2. 你要更新的脚本化字段的Edit
3. 完成更后点SaveScriptedField
注意Elasticsearch里没有内置脚本化字段的验证功能。如果你的脚本有bug,你会在动态生成的数据看到
exception
除一个脚本化字段:
1. Settings>Indices
2. 你要除的脚本化字段的Delete
3. 你确除它。
参数你直接编辑那些控制着Kibana用行置。比如,你可以修改示日期的格式,修改默的索引模
式,置十制数示精度。
修改高参数可能来意想不到的后果。如果你不确定自己在做什么,最好离开面。
置高参数:
1. Settings>Advanced
2. 你要修改的选项Edit
3. 给这选项输入一个新的
4. Save
你可以从Settings>Objects看,编辑,和除已保存的搜索,可化和表板。
看一个已保存的象会示在Discover,VisualizeDashboard里已选择目。要看一个已保存象:
1. Settings>Objects
2. 选择你想看的象。
3. View
编辑一个已保存你可以直接修改象定。你可以修改象的名字,添加一段明,以及修改定义这象的属性的
JSON
更新一个脚本化字段
除一个脚本化字段
置高参数
管理已保存的搜索,可化和表板
如果你尝试访问一个象,而它关的索引已除了,Kibana象的编辑(EditObject)。你可以:
重建索引这样就可以继续象。
象,然后用一个索引重建象。
象的kibanaSavedObjectMeta.searchSourceJSON里修改引用的索引名,指向一个存在的索引模式。个在你的索引
被重命名了的情况下非常有用。
象属性没有验证机制。提交一个无效的更会象不可用。通常来,你应该Discover,Visualize
Dashboard面来建新象而不是直接编辑已存在的象。
编辑一个已保存的象:
1. Settings>Objects
2. 选择你想编辑象。
3. Edit
4. 修改象定
5. SaveObject
除一个已保存的象:
1. Settings>Objects
2. 选择你想除的象。
3. Delete
4. 你确象。
Kibana器在启动候会从kibana.yml文件取属性置。默认设置是行在localhost:5601。要更主机或端口,
或者端主机上的Elasticsearch,你都需要更新你的kibana.yml文件。你可以开SSL或者置其他一系列选项
2.Kibana器属性
属性 描述
port Kibana行的端口。默port:5601
host Kibana听的地址。默host:"0.0.0.0"
elasticsearch_url 你想求的索引存在Elasticsearch例上。默elasticsearch_url:
"http://localhost:9200"
elasticsearch_preserve_host
的,浏览求中的主机名即作KibanaElasticsearch时请求的主机
名。如果你个参数false,Kibana会改用elasticsearch_url里的主机名。
应该不用担心——直接用默即可。默
elasticsearch_preserve_host:true
kibana_index 保存搜索,可化,表板信息的索引的名字。默kibana_index:.kibana
default_app_id Kibana是默认显示的面。可以discover,visualize,dashboard
settings。默default_app_id:"discover"
request_timeout 等待Kibana后端或Elasticsearch响应的超时时间位毫秒。默
request_timeout:500000
shard_timeout Elasticsearch等待分片响应的超时时间0表示关控制。默
shard_timeout:0
verify_ssl 是否验证ElasticsearchSSL证书falseSSL认证。默
verify_ssl:true
ca
你的Elasticsearch例的CA证书的路径。如果你是自己证书,必指定
参数,证书才能被认证。否,你需要关verify_ssl。默none
ssl_key_file Kibana器的密文件路径。置用来加密浏览器和Kibana的通信。默
none
kibana器属性
ssl_cert_file Kibana器的证书文件路径。置用来加密浏览器和Kibana的通信。默
none
pid_file 你想用来存ID文件的位置。如果没有指定,PID文件存在
/var/run/kibana.pid。默none
当你准在生产环境使用Kibana候,比起在本机行,你需要多考一些:
哪运kibana
是否需要加密Kibana出入的流量
是否需要控制访问数据的
你怎么部署Kibana取决于你的景。如果就是自己用,在本机Kibana然后配置一下指向到任意你想交互的
Elasticsearch例即可。如果你有一大批Kibana重度用,可能你需要部署多个Kibana例,指向同一个Elasticsearch
,然后前面加一个负载均衡。
Kibana不是源密集型的用,我依然建独用一个点来Kibana,而不是泡在Elasticsearch点上。
如果你在用ShieldElasticsearch户认证,你需要Kibana提供用这样它才能访问.kibana索引。Kibana
需要由访问.kibana索引里以下操作:
'.kibana':
-indices:admin/create
-indices:admin/exists
-indices:admin/mapping/put
-indices:admin/mappings/fields/get
-indices:admin/refresh
-indices:admin/validate/query
-indices:data/read/get
-indices:data/read/mget
-indices:data/read/search
-indices:data/write/delete
-indices:data/write/index
-indices:data/write/update
-indices:admin/create
更多配置Shield的内容,请阅读ShieldwithKibana4
要配置Kibana的凭kibana.yml里的kibana_elasticsearch_usernamekibana_elasticsearch_password选项
可:
#IfyourElasticsearchisprotectedwithbasicauth:
kibana_elasticsearch_username:kibana4
kibana_elasticsearch_password:kibana4
Kibana支持求以及KibanaElasticsearch求做SSL加密。
要加密浏览器到Kibana器之的通信,配置kibana.yml里的ssl_key_filessl_cert_file参数:
#SSLforoutgoingrequestsfromtheKibanaServer(PEMformatted)
ssl_key_file:/path/to/your/server.key
ssl_cert_file:/path/to/your/server.crt
如果你在用Shield或者其他提供HTTPS的代理服器保Elasticsearch,你可以配置KibanaHTTPS方式访问
Elasticsearch这样Kibana器和Elasticsearch的通信也是加密的。
部署的考
配置Kibanashield一起工作
ssl
要做到点,你需要在kibana.yml里配置ElasticsearchURL指明是HTTPS协议
elasticsearch:"https://<your_elasticsearch_host>.com:9200"
如果你Elasticsearch用的是自己名的证书kibana.ymlca参数指明PEM文件位置,也意味着开
verify_ssl参数:
#IfyouneedtoprovideaCAcertificateforyourElasticsarechinstance,put
#thepathofthepemfilehere.
ca:/path/to/your/ca/cacert.pem
你可以用ElasticsearchShield来控制用Kibana可以访问到的Elasticsearch数据。Shield提供了索引级别访问
制。如果一个用没被求,那么它在Kibana化界面上只能看到一个空白。
要配置Kibana使用Shield,你要位Kibana建一个或者多个Shield角色(role),以kibana4的默角色。更详细
的做法,请阅读UsingShieldwithKibana4
控制访问权
Kibana4提供了一系列新特性,你在找问题,解决问题候前所未有的简单。它有一个全新的界面,而且化了搜索和
展示数据,建和分析表板的工作流程。
全新的数据搜索和发现界面
一的可建器,用以建你喜和新加入的那些表:
块图
数据表格
线图
Markdown文本挂件
饼图(包括甜圈)
原始文档挂件
挂件
片地
垂直柱状
可拖拽的表板建方式,你可以快速添加,除可化,已修改其大小和长宽
基于聚合接口的高分析能力,在支持:
去重统计(cardinality)
时间的直方
围统计(Ranges)
键词(Significantterms)
百分比(Percentiles)
基于LuceneExpressions的脚本化字段你可以完成临时计算任
可以保存搜索和可化,这样你可以再多个表板上接和使用同一个搜索建的可
化支持不限次数的层叠聚合,这样你可以生成新的可式,比如双甜圈
模板化和脚本化表板需求的新URL格式
更好的移端体
更快的表板加速度,因出的HTTP求数量
求和Elasticsearch求都可以有SSL加密
搜索果高亮
可以很容易访问出可化背后的数据:
可以在表格中看,也可以用JSON格式
出成CSV格式
Elasticsearch求和响应
表板一,可以分享和嵌入独立的可化部分
器,用Node.js后端——布有LinuxWindowsMacOS的二制文件分
D3框架做可化效果
特性
其他细节
Kibana4采用angular.js+node.js框架写。其中node.js主要提供部分功能,Elasticsearch做搜索转发代理,
以及authsslsetting等操作的服器后端。
本章你已经对angular有一定程度了解——至少是阅读并理解了kibana3剖析章内容的程度。所以不会再解
其中angularroutecontrollerdirectiveservicefactory等概念。
如果打算迁移kibana3CAS验证功能到kibana4,那么可以稍微了解一下index.js,app.js,lib/auth.js里的
htpasswd简单实现,相信可以很快修改成功。本章主要是集中在前端kibana面功能的实现上。
Elastic{ON}大会上,也有专门针对Kibana4和二次开的演https://speakerdeck.com/elastic/the-
contributors-guide-to-the-kibana-galaxy
剖析
kibana4入口,分析方法跟kibana3,看index.htmlrequire.config.js即可。由此可以看到,首先入的,应该
index.jsindex.js根据configFile置默routes,然后kibana.load()函数,首先加
plugins/kibana/index.js,然后加其他plugins
routes的具体操作在加utils/routes/index.js文件里,其中utils/routes/_setup.js,在未default
indexpattern候跳URL"/settings/indices"面。
plugins/kibana/index.js里又有一些列操作:首先加components/setup/setup.jscomponents/config/config.js
angular.service,然后加plugins/kibana/_init,plugins/kibana/_apps,plugins/kibana/_timepicker
components/setup/setup.js依次components/setup/steps/下的check_for_es,check_es_version,
check_for_kibana_index,如果没有kibanaindex,再用一个create_kibana_index。完成。
components/config/config.js主要是从kibanaindex里的"config"type"kbnVersion"id的数据。"kbnVersion"
是源代(index.js)里的一个常量,在grunt编译时会生成的。
plugins/kibana/_initapplication.load事件,触couries.start()函数。
plugins/kibana/_apps提供路径记忆(lastPath)功能,点在kibana4userguide上被专门提到;然后初始化
registry/apps,并循环调assignPathsgetShow方法。
plugins/kibana/_timepicker提供时间选择面。
components/couries/couries.js中,加index_patternsaved_objects启动searchLooperdocLooper置整个
面的定期刷新。
couries是一个非常重要的西,除了上行提到的几个以外,目docSourcesearchSource,可以简单理解
kibanaES的一个objectmapper
searchLooper,docLooper是限制在_request_queue里的Looper象,分别给Looper.start方法传递
FetchStrategyForSearch,FetchStrategyForDoc对应ES/_msearch/_mget求。这两个在
components/courier/fetch/strategy/search.jscomponents/courier/fetch/strategy/doc.js里定
registry/apps.js主要是加registry/_registry.js,把注册的app存入utils/indexed_array/indexIndexedArray
象。象主要有几个id,name,order。前面到的个方法,assignPaths里就是用app.idlastPath,而getShow
里就是用order来判断是否展示在面上。
所以里就体kibana4的可展性了。事上,在服器端的index.js上,就有下面配置:
external_plugins_folder:process.env.PLUGINS_FOLDER||null,
bundled_plugins_folder:path.resolve(public_folder,'plugins'),
可以看到,官方的apps,都是在plugins下的,而自己开apps,可以通过环$PLUGINS_FOLDER置加载进
来。
入口
setup
couries概述
registry概述
下一章,我开始介官方提供的几个apps
plugins/discover/index.js中主要就是注册自己的id,name,order到上最后registry.apps里。此外就是加
app内的其他文件。依次明如下:
savedSearchesangularservice,用来操作kibana_index索引里search型下的数据;
saved_searches/_saved_searches.js提供的savedSearchangularfactory里定了一个搜索(search)
kibana_index里的数据结构,包括title,description,hits,column,sort,version等字段(部分内容,可以直接通过读
Elasticsearch中的索引内容看到,比阅读更直接,本章最后即专门kibana_index中的数据结构),然后用前
面提到的components/couries/saved_object/saved_object.js跟索引交互;
并注册了plugins/settings/saved_object_registry.js,表示可以在settings里修改里的savedSearches
象。
components/vislib/index.js
提供discoverTimechartangulardirective"data"vislib.Chart绘图
提供discFieldChooserangulardirective,其中"fields"calculateFields算常用字段排行,"data"
$scope.details()方法,提供$scope.runAgg()方法。方法中,根据字段的型不同,分可能使用
date_histogram/geohash_grid/terms聚合函数,建可化模型,然后着当前页这(前面说过,各app
sessionStorage共享了状)"/visualize/create"面,相当于是三个常用聚合的快速可化操作。
plugins/discover/components/field_chooser/lib/field_calculator.js,提供
fieldCalculator.getFieldValueCounts()方法,在$scope.details()取被点的字段的情况。
plugins/discover/components/field_chooser/discover_field.js,提供discoverFieldangulardirective,用于
出浮展示零visualize(用上一条提供的$scope.details()方法),同时给被点的字段加常用度;加
plugins/discover/components/field_chooser/lib/detail_views/string.html,用于浮效果。网indexed
scripted型的字段,可以用前面提到的runAgg()方法。
并渲染plugins/discover/components/field_chooser/field_chooser.html。网中使用了上一条提供的discover-
field标签
js,主要做了:
"/discover/:id"提供route并加plugins/discover/index.html
提供discoverangularcontroller
components/vis/vis.js并在setupVisualization函数中histogram
components/filter_manager/filter_manager.js,根据字段型生成不同的filter句,存在全局state里。
components/doc_table/lib/get_sort.js(存疑:docTabledirective是在里加的?)
搜索
plugins/discover/saved_searches/saved_searches.js
plugins/discover/directives/timechart.js
plugins/discover/components/field_chooser/field_chooser.js
plugins/discover/controllers/discover.js
包括有以下type
_idkibana4version。内容主要是defaultIndex置默index_pattern.
_iddiscover上保存的搜索名称。内容主要是titlecolumnsortkibanaSavedObjectMetakibanaSavedObjectMeta
内是一个searchSourceJSON,保存搜索json的字符串。
_idvisualize上保存的可化名称。内容包括titlesavedSearchIdkibanaSavedObjectMetavisState。其中visState
里保存了聚合json的字符串。如果定了已保存的搜索,那么把其在search型里的_id存在savedSearchId字段里,如
果是从新搜索开始的,那么把搜索json的字符串直接存在自己的kibanaSavedObjectMetasearchSourceJSON里。
_idsetting置的indexpattern。内容主要是匹配模式的所有索引的全部字段与字段映射。如果是基于时间的索引模
式,会有主时间字段timeFieldName时间间intervalName个字段。
field中,每个元素是一个字段的情况,包括字段的type,name,indexed,analyzed,doc_values,count,scripted些状
如果scriptedtrue,那么个元素就是通kibana4面添加的脚本化字段,那么条字段记录还外多几个内容:
script:记录实际script句。
lang:Elasticsearchdatanode上采用什么lang-plugin行。默expression。即ES1.4.4开始默认启用的
Luceneexpression。在目前的kibana4面上,不提供对这个的修改,所以一都是
type:Luceneexpression目前只支持型字段做操作,所以目前kibana4面上也不提供对这个的修改,直接
认为“number"
要使用其他lang-plugin的,目前来,可以自行修改kibana_index里的index-pattern型中的数据,修改成
”lang”:“groovy”,”type”:”string”即可。面上是可以通用的。
kibana_index结构
config
search
visualization
index-pattern
以下童鞋的捐助,我有力持下来并且注册了http://kibana.logstash.es么个有意思的域名用来布本
|donor|value|
|-----------|-----:|
|*|50.00|
|*|10.00|
|*|22.00|
|*|10.00|
|185****6322|5.00|
|*|6.11|
|*|100.00|
|*|20.00|
|*|101.00|
|*|50.00|
|*|10.00|
|*|18.76|
|*|66.00|
|*|10.00|
|*|10.00|
|*|50.00|
|*|51.00|
|*|10.00|
|*|25.60|
|*|100.00|
|*|10.00|
|*|30.00|
|*|10.00|
|*|20.00|
|*|10.00|
|*|22.21|
|*|24.80|
852.48元,域名注册已用275.50(3)
者名

Navigation menu