Elasticsearch 6.0 命令行Option -E启动报错,求大佬指导,感谢!
Elasticsearch • rochy 回复了问题 • 2 人关注 • 1 个回复 • 4090 次浏览 • 2018-12-03 18:54
logstash5.6.13启动后一直刷WARN日志
Logstash • ericaguo 回复了问题 • 2 人关注 • 1 个回复 • 10263 次浏览 • 2019-01-30 17:20
关于java api使用deleteByQuery的问题?
回复Elasticsearch • vikooooooo 回复了问题 • 1 人关注 • 2 个回复 • 4062 次浏览 • 2018-12-03 17:17
子聚合全局排序
Elasticsearch • zz_hello 回复了问题 • 3 人关注 • 2 个回复 • 3011 次浏览 • 2018-12-13 10:32
deprecation.log的作用?
Elasticsearch • rochy 回复了问题 • 2 人关注 • 1 个回复 • 2638 次浏览 • 2018-12-03 19:06
5.X版本ES的主分片个数怎么修改
Elasticsearch • dbdb5269 回复了问题 • 4 人关注 • 4 个回复 • 6303 次浏览 • 2018-12-03 18:24
【告警设置】如何配置watcher检测同一用户一小时内登录失败超过5次,具体的input配置怎么写?(以AD认证日志为例)
Kibana • xiaoyanghapi 回复了问题 • 2 人关注 • 1 个回复 • 2525 次浏览 • 2018-12-27 16:03
CVE-2018-17244 这个漏洞如果已经使用search-guard-ssl进行加固后,还会存在这个问题吗?
Elasticsearch • zqc0512 回复了问题 • 3 人关注 • 2 个回复 • 3562 次浏览 • 2018-12-03 17:14
es能查看请求操作那个索引吗?
Elasticsearch • zz_hello 回复了问题 • 2 人关注 • 1 个回复 • 1737 次浏览 • 2018-12-03 11:14
社区日报 第467期 (2018-12-03)
社区日报 • cyberdak 发表了文章 • 0 个评论 • 1697 次浏览 • 2018-12-03 10:09
http://t.cn/EyhRQRJ
2.Amazon Elasticsearch Service 中的韩语分析程序支持
http://t.cn/EyhmEHc
3. Elasticsearch在华泰证券内部的应用实践
http://t.cn/EyhuaFC
编辑:cyberdak
归档:https://elasticsearch.cn/article/6169
订阅:https://tinyletter.com/elastic-daily
Day 3 - kibana二次开发tips
Advent • vvv 发表了文章 • 2 个评论 • 13819 次浏览 • 2018-12-03 09:11
介绍
大家好,我是vvv,这个名字和王者荣耀AG超玩会中的vv没有一毛钱关系,随意取的一个的名字,后来发现貌似不能改了。做过一些数据产品,正是这段时间里开始接触elasticstack,对kibana做过一些二次开发。今天主要想写一些开发过程中的一些tips,希望可以给大家带来一些帮助。
技术栈分析
既然我们的主题是kibana,我们先来看下kibana的主要技术栈。很早开始kibana就开始基于nodejs (hapi框架) + angular(1.x)来进行开发,后来引入了react。kibana本身的代码也经过了多次重构剥离。现在的kibana的代码结构更加清晰
前提
elasticstack发展迅速,现在已经是6.5版本了。我们今天要介绍的是6.x系列的版本,6.x各个版本会有一些细微差异,但大致一样
tips
官方提供kibana下载版本主要是编译后的release版本。如果要基于kibana做二次开发,我们需要去https://github.com/elastic/kibana 上面下载对应的分支。官方有相应的文档去说明如何安装开发环境。我这里有一些tips:
设置国内yarn源
<br /> yarn config --global set 'registry <a href="https://registry.npm.taobao.or" rel="nofollow" target="_blank">https://registry.npm.taobao.or</a>g'<br />
一些耗时需要编译的包可以全局安装
<br /> yarn global add node-sass<br />
多环境nodejs版本
<br /> 不同kibana版本对nodejs版本要求也不一样,为了减少坑我们通常和官方要求的保持一致,如果你的电脑上需要运行多套不同版本的nodejs,那么你可能需要zsh + nvs, 会根据根目录的.node-version版本自动切换当前使用的node版本<br />
IDE推荐
<br /> 推荐使用vscode,轻量免费,支持很多插件。可以安装个prettier插件,帮助对代码做更好的格式化<br />
debug
如果你用的不是上面我推荐的vscode的话,请忽略这一条。对于使用vscode的同学,首先在vsocde的设置里面开启:
<br /> "autoAttach": "on"<br />
然后在vsocode里面打开一个终端,输入:
<br /> node --inspect-brk scripts/kibana.js --dev --oss --no-base-path<br />
这个时候vscode就会在启动kibana dev模式的同时attach一个进程进去用于断点调试,对于调试node层非常方便。也能帮助你更好的阅读kibana源码
本地es
我们知道kibana是长在es之上,想要运行kibana怎么少得了es。kibana又一些命令命令可以快速的启动一个es环境:
下载并启动一个当前kibana需要的es版本
<br /> yarn es snapshot<br />
灌入一些测试数据(如果需要定制灌入的数据可以看下这个脚本的帮助内容,加-h参数即可)
<br /> node scripts/makelogs<br />
编译
kibana代码在release之前是要进行编译的。kibana提供了方便的命令行进行编译,甚至跨平台的交叉编译(生成不同平台的kibana release版本)。但是呢,有几个问题:
- kibana在编译的时候需要去aws上下载一些安装包,会导致正常情况下国内访问十分缓慢。(编译命令提供了几个参数可以关掉下载一些如nodejs等,但是还是很慢)
- build十分消耗cpu/gpu (mac的iterm2启动会做gpu优化)
解决办法:
- 如果你能解决网络问题,而且有性能不错的编译机器。这都不是问题
- 如果你对kibana的代码更改都是无侵入的(比如只是写了一些插件扩展),那么你可以去官方下载他们的snapshot版本
- 当然,如果你用的kibana版本就是release版本并且你的扩展都是插件,那么你直接用官方的release版本就好了
库的选型
- server端:
nodejs具有十分丰富的生态,你可以找到很多nodejs相关的库。kibana本身的后端web框架是基于node的hapi的。hapi是一个沃尔玛团队维护的企业级框架,其本身也有很多扩展。当你需要对web框架做一些扩展的时候,可以优先想到去hapi官方看下
- ui端:
kibana有一套漂亮的ui,其本身也是单独剥离成了一个库,方便引入使用。当然你也可以引入一些其他的前端库来满足你的具体业务需求。推荐尽量使用原生的eui和kibana源码里面的一些封装。这样让你的引入更少,更容易维护。
国际化
国际化是kibana很早就开始立的一个项。这块的进度也是越来越快。新版的kibana里面用@kbn/i18n这个package来统一javascript,html, nodejs做国际化的事情(具体大家可以看下这个package的readme)。国际化这块有一些建议:- 扩展插件的时候养成国际化的习惯
- 默认的语系不建议再次设置成一个json文件。因为最新的@kbn/i18n会提供一个默认的文本,用于默认情况下展示。所以我们是没必要重复去维护一个默认的语言翻译json
- 假设你的默认语言是英文(和kibana一致),只有当你想要替换kibana默认翻译的时候,才去覆写en.json
- 当你对原生kibana有国际化这种需求的时候,建议独立出一个i18n翻译的插件去维护各个语言翻译相关的东西
- 目前kibana的国际化还未100%,如果你想知道目前哪些文本内容是支持国际化的。可以尝试如下脚本:
<br /> node scripts/extract_default_translations \<br /> --path src/core_plugins/kibana \<br /> --output /tmp<br />
- 各个插件的之间的翻译文件独立,即使是相同的翻译内容。插件文本内容养成预留国际化的习惯
总结
上面列举了一些我平时的一些经验。时间篇幅有限,未能一一列举。希望可以帮到大家吧。也希望可以和大家多多交流
【 报名开启】2018 Elastic & 袋鼠云 & 阿里云技术沙龙(杭州)
Elasticsearch • Allwang 发表了文章 • 1 个评论 • 3436 次浏览 • 2018-12-02 20:40
本次袋鼠云联合阿里云、Elastic 中文社区,共同邀请滴滴、有赞等行业技术专家一同分享和探讨各自领域Elastic的实践。
本次活动时间为12月15日 周六,人数限制100人,大家抓紧报名哈,报名链接https://meetup.elasticsearch.c ... .html。
参与线下互动还有机会获得技术书籍与精美礼品哦!!!
不出意外,这应该是2018年Elastic在杭州的最后一次沙龙,小伙伴们抓紧今年的尾巴,不放过任何学习的机会哦!!!
Day 2 - ES 6.x拼音分词高亮爬坑记
Advent • abia 发表了文章 • 10 个评论 • 10142 次浏览 • 2018-12-02 16:29
首先简单讲下背景~可能在很多公司的很多部门,都有使用到ES。包括在尚德,由于很多部门的业务都涉及到ES,于是我们为了统一管理及维护,专门成立了ES平台部门,主要扮演的是类似于op dba角色,帮助业务部门部署维护ES集群,并根据业务需求提供解决方案。当然,除此之外,我们也会在公司内部推荐业务方去尝试除了日志和搜索以外的应用场景,比如分布式计算存储、监控、安全等方面。毕竟ES相比于其他组建,搭建部署更加方便,更轻量级,查询方式更丰富。所以,现如今在尚德机构,ES平台不仅用于了传统的日志和搜索领域,也在分布式数据存储和计算方面有很多应用。当然,这里只是为大家提供一些ES应用场景及其团队构建的思路。主要还是ES这个工具确实好用。
广告先做到这,回到正文。所以,前段日子,我们接收了一个新的业务部门需求,大致是:他们之前使用的自己搭建ES 2.x集群,现在接入到我们6.x的平台上来。我们帮忙设计了mapping,数据写入及同步方案之后,数据就慢慢接入进来。但问题也随即出现,原来在2.x上使用正常的拼音高亮mapping,在6.x上只能检索但无法高亮了?
2.x field如下:
"index" : {
"analysis" : {
"analyzer" : {
"pinyin_analyzer" : {
"tokenizer" : "my_pinyin"
}
},
"tokenizer" : {
"my_pinyin" : {
"type" : "pinyin",
"keep_full_pinyin" : false,
"limit_first_letter_length" : 16,
"lowercase" : true,
"remove_duplicated_term":true,
"keep_first_letter":true,
"keep_separate_first_letter" :true
}
}
}
}
POST /medcl/doc/_mapping
{
"properties": {
"name":{
"analyzer": "pinyin_analyzer",
"type": "string"
}
}
}
可以从上面例子看出,这个analyzer并没有问题,但是在搜索时,能得到结果,却无法高亮,即分词结果中start_offset及end_offset为0,这个如何解决呢?
回到medcl的拼音分词项目:
https://github.com/medcl/elast ... inyin
其中,有个配置项引起了我们的注意:
没跑了,应该是要将这个参数设置为false。
并且查看了源码,在PinyinTokenizer这个类下面,看到了这一行:
确定了我们的思路,于是乎,在tokenizer中将此参数设为false,如下:
"tokenizer" : {
"my_pinyin" : {
"type" : "pinyin",
"keep_full_pinyin" : true,
"keep_original" : false,
"limit_first_letter_length" : 16,
"lowercase" : true,
"remove_duplicated_term":true,
"ignore_pinyin_offset": false,
"keep_first_letter":true,
"keep_separate_first_letter" :true
}
}
写入一条数据,高亮没问题了,问题“看似”解决了。
当然,没有那么简单。因为在批量写入一部分数据后,总会报如下异常:
startOffset must be non-negative, and endOffset must be >= startOffset
这个异常,导致数据无法写入集群。
这里又是为什么呢?
这个问题,我也搞了一段时间,始终没找到很好的解决方案,此处只能先@medcl。
只是猜测在end()或者reset()方法内,需要lastOffset置0或者offsetAtt清空。但尝试了几次,依然报错。。。
这就比较头疼了,不过好在条条道路通罗马。在某次蹲坑过程中,灵感如尿崩。
如果Tokenizer解决不了,为何不仅用filter就行了呢?可以先用其他分词器,按我们业务的需求进行分词,再用filter,将分词过滤为拼音呢?
大致思路如下:
目前我们这个业务,需要如对于“尚德机构”这个词,搜索“shang”,“shangde”,“deji”时,能返回结果并高亮。
所以我们先用ngram分词,将“尚德机构”这个词分为“尚”,“尚德”,“徳机”,“德机构”等等。。
再用pinyin filter将各分词过滤为拼音,即“shang”,“shangde”,“deji”等。
并在搜索时,采用standard分词。
Mapping如下:
{
"settings": {
"analysis": {
"analyzer": {
"pinyin_analyzer": {
"tokenizer": "my_ngram",
"filter": [
"pinyin_filter"
]
}
},
"tokenizer": {
"my_ngram": {
"type": "ngram",
"min_gram": 1,
"max_gram": 50,
"token_chars": [
"letter",
"digit",
"punctuation",
"symbol"
]
}
},
"filter": {
"pinyin_filter": {
"type": "pinyin",
"keep_full_pinyin": false,
"keep_joined_full_pinyin": true,
"keep_none_chinese_in_joined_full_pinyin": true,
"none_chinese_pinyin_tokenize": false,
"remove_duplicated_term": true
}
}
}
},
"mappings": {
"abia321": {
"properties": {
"name": {
"type": "text",
"analyzer": "pinyin_analyzer",
"search_analyzer": "standard",
"term_vector": "with_positions_offsets"
}
}
}
}
}
最后,高亮问题解决,数据写入问题同样解决。
当然有朋友肯定还会需要搜索拼音首字母进行搜索,如搜“s”,“sd”,“dj”,也返回结果。
其实,只需要再专门设置个field,并调整pinyin filter参数,
搜索时用bool查询,逻辑should查询,同时对完整拼音field和拼音首字母field进行搜索即可。
在此就不做过多赘述。
当然,这里仅仅只是提供一种ES在选择analyzer,tokenizer,filter解决需求的思路。拼音分词这个问题,还是需要等待后续修复
最后,这里有较为完整的issue:
https://github.com/medcl/elast ... s/169
社区日报 第466期 (2018-12-02)
社区日报 • 至尊宝 发表了文章 • 0 个评论 • 2326 次浏览 • 2018-12-02 09:26
http://t.cn/ELDJY7y
2.什么是软件工程中的管道? Deployment,CI和CD管道简介。
http://t.cn/ELDcM82
3.(自备梯子)现在是时候认真对待Regulating Tech了。
http://t.cn/ELOozoo
编辑:至尊宝
归档:https://elasticsearch.cn/article/6165
订阅:https://tinyletter.com/elastic-daily