Kibana4动态指定index pattern
来源:互联网 发布:root软件哪个成功率高 编辑:程序博客网 时间:2024/05/21 06:55
先说一下业务场景:本人当前做的这个项目会收集公司所有应用的日志,日志存储在ES中,只保留N天,不同应用的日志会存储在不同的index中并且index按天拆分。提供了界面让应用的开发人员查看自己应用的日志,后续还会有新的应用加入。
想要做到什么样呢?
管理界面上嵌入kibana的页面,选择不同应用,查看不同应用的日志,但是kibana的查询参数不会出现类似于appName:xxx
这样的字段,也就是说不用应用之间的参数差异对于开发人员是不可见的,想要做到对开发人员透明这就需要在查询的时候根据appName
动态的指定index(不同应用查询不同的index)。
在Kibana4中取消了对于模板和脚本的支持,使得没办法在查询的时候指定使用的index(kibana3中可以使用模板做到这一点)。然而在Kibana4中增加了index pattern
,index pattern
被用来限定查询的index范围,举例来说如果你的search
使用的index pattern
是logstash-*
,那么使用search
的时候,只会在以logstash-
开头的index上查询(具体可以参考官方介绍)。
这样为查询时指定index提供了一条明路,可惜的是如果你指定的index pattern
不存在,那么Kibana会使用默认的。当然,你可以事先创建好你想使用的index pattern
,这样一来就需要修改你原先的代码,系统中新增应用的时候就需要多一步操作了。这个办法也还可以,但是能不能更简单一些呢?
如果index pattern
不存在就是用默认的,这个判断逻辑不难想象是如何实现的,所以是不是可以通过修改源码来修改一下这个逻辑呢?让kibana在找不到指定的index pattern
的时候依旧使用呢?
代码修改其实很简单,在optimize/bundles/kibana.bundle.js
文件中,源码如下:
function resolveIndexPatternLoading() { var props = $route.current.locals.ip; var loaded = props.loaded; var stateVal = props.stateVal; var stateValFound = props.stateValFound; var own = $scope.searchSource.getOwn('index'); if (own && !stateVal) return own; if (stateVal && !stateValFound) { var err = '"' + stateVal + '" is not a configured pattern. '; if (own) { notify.warning(err + ' Using the saved index pattern: "' + own.id + '"'); return own; } notify.warning(err + ' Using the default index pattern: "' + loaded.id + '"'); } return loaded;}
修改后:
function resolveIndexPatternLoading() { var props = $route.current.locals.ip; var loaded = props.loaded; var stateVal = props.stateVal; //stateVal的值就是穿过来的index pattern的名字 //如果传过来了index pattern,那么就是用传过来的值(基本上传过来的index pattern都不存在) //这个index pattern会被用到ES搜索里面 if (stateVal) { loaded.id=stateVal; loaded.title=stateVal; } var stateValFound = props.stateValFound; var own = $scope.searchSource.getOwn('index'); if (own && !stateVal) return own; if (stateVal && !stateValFound) { var err = '"' + stateVal + '" is not a configured pattern. '; if (own) { notify.warning(err + ' Using the saved index pattern: "' + own.id + '"'); return own; } return loaded;//notify.warning(err + ' Using the default index pattern: "' + loaded.id + '"'); } return loaded;}
可以通过搜索resolveIndexPatternLoading
查看一下代码的上下文,这里就不展开了。
这个修改只对discover页面有效,其他页面直接依赖了事先创建好的search
,URL中没办法指定index pattern
,所以没办法实现index pattern
动态化,如果有办法欢迎指出。
- Kibana4动态指定index pattern
- 指定kibana4的日志
- Cloud Design Pattern - Index Table Pattern(索引表模式)
- ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。参数名: index (Ajax TabContainer动态添加TabPanel 出的问题)
- kibana4中的搜索问题
- visiting index CSS/HTML动态
- 【原创】获取指定index的 OBJECTTYPE
- apache 指定访问index.html文件
- Kibana4 的安装和使用
- 动态指定定时时间
- 动态指定form提交
- TabHost图标动态指定
- 动态指定gui标题
- mybatis 动态指定表
- Design Pattern—— Dynamic Proxy Pattern 动态代理模式
- INDEX制作动态图表(转帖+亲自实践)
- 动态改变div的z-index属性
- easyui 动态传index错误解决方案
- 解决Attempt to invoke virtual method '...ListAdapter'on a null object reference
- 关于嵌套ScrollViw内容展示
- Day12、Android四大组件之Activity
- C++ 文件路径
- MYSQL学习心得(6) -- SQL子查询的一些例子
- Kibana4动态指定index pattern
- HTML复选框checkbox默认样式修改
- 关于数据库读不到第一条数据
- CMD命令详解——文件操作类
- 内部类
- Qt显示资源文件中的图片
- 跟小马哥学算法leetcode_01
- IE/Firefox每次刷新时自动检查网页更新,无需手动清空缓存的设置方法
- java编码建议