子聚合全局排序
Elasticsearch • zz_hello 回复了问题 • 3 人关注 • 2 个回复 • 2970 次浏览 • 2018-12-13 10:32
deprecation.log的作用?
Elasticsearch • rochy 回复了问题 • 2 人关注 • 1 个回复 • 2571 次浏览 • 2018-12-03 19:06
5.X版本ES的主分片个数怎么修改
Elasticsearch • dbdb5269 回复了问题 • 4 人关注 • 4 个回复 • 6257 次浏览 • 2018-12-03 18:24
【告警设置】如何配置watcher检测同一用户一小时内登录失败超过5次,具体的input配置怎么写?(以AD认证日志为例)
Kibana • xiaoyanghapi 回复了问题 • 2 人关注 • 1 个回复 • 2453 次浏览 • 2018-12-27 16:03
CVE-2018-17244 这个漏洞如果已经使用search-guard-ssl进行加固后,还会存在这个问题吗?
Elasticsearch • zqc0512 回复了问题 • 3 人关注 • 2 个回复 • 3490 次浏览 • 2018-12-03 17:14
es能查看请求操作那个索引吗?
Elasticsearch • zz_hello 回复了问题 • 2 人关注 • 1 个回复 • 1719 次浏览 • 2018-12-03 11:14
社区日报 第467期 (2018-12-03)
社区日报 • cyberdak 发表了文章 • 0 个评论 • 1638 次浏览 • 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 个评论 • 13707 次浏览 • 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 个评论 • 3365 次浏览 • 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 个评论 • 10029 次浏览 • 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 个评论 • 2280 次浏览 • 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
社区日报 第465期 (2018-12-01)
社区日报 • bsll 发表了文章 • 0 个评论 • 1632 次浏览 • 2018-12-01 10:40
- 适用于ES 6.0之后的Field Stats插件。
[http://t.cn/ELmZMFl](http://t.cn/ELmZMFl)
- 你知道ICU分析器支持emoji表情了吗?。
[http://t.cn/ELmw4aF](http://t.cn/ELmw4aF)
- Canvas中数据表和调试元素的使用示例。
[http://t.cn/ELmX7Tc](http://t.cn/ELmX7Tc)
Day 1 - ELK 使用小技巧(第 3 期)
Advent • rochy 发表了文章 • 1 个评论 • 5364 次浏览 • 2018-12-01 02:28
ELK Tips 主要介绍一些 ELK 使用过程中的小技巧,内容主要来源为 Elastic 中文社区。
一、Logstash
1、Filebeat 设置多个 output
在 6.0 之前,Filebeat 可以设置多个输出(必须是不同类型的输出);从 6.0 开始已经禁止多输出了,只能拥有一个输出,如果想实现多输出,可以借助 logstash 等中间组件进行输出分发。
二、Elasticsearch
1、ES 用户占用的内存大于为 ES 设置的 heapsize
ES 是 Java 应用,底层存储引擎是基于 Lucene 的,heapsize 设置的是 Java 应用的内存;而 Lucene 建立倒排索引(Inverted Index)是先在内存里生成,然后定期以段文件(segment file)的形式刷到磁盘的,因此 Lucene 也会占用一部分内存。
https://elasticsearch.cn/article/32
2、ES 使用别名插入数据
ES 可以通过索引的方式向索引插入数据,但是同时只能有一个索引可以被写入,而且需要手动设置,未设置的情况下会报错:no write index is defined for alias [xxxx], The write index may be explicitly disabled using
is_write_index=false
or the alias points to multiple indices without one being designated as a write index。
<br /> POST /_aliases<br /> {<br /> "actions" : [<br /> {<br /> "add" : {<br /> "index" : "test",<br /> "alias" : "alias1",<br /> "is_write_index" : true<br /> }<br /> }<br /> ]<br /> }<br />
3、ES 设置 G1 垃圾回收
修改
jvm.options
文件,将下面几行:
<br /> -XX:+UseConcMarkSweepGC<br /> -XX:CMSInitiatingOccupancyFraction=75<br /> -XX:+UseCMSInitiatingOccupancyOnly<br />
改为
<br /> -XX:+UseG1GC<br /> -XX:MaxGCPauseMillis=50<br />
即可。
其中-XX:MaxGCPauseMillis
是控制预期的最高 GC 时长,默认值为 200ms,如果线上业务特性对于 GC 停顿非常敏感,可以适当设置低一些。但是这个值如果设置过小,可能会带来比较高的 cpu 消耗。
4、ES 和 Zipkin 集成时设置验证信息
<br /> java -DKAFKA_ZOOKEEPER=10.14.123.117:2181 <br /> -DSTORAGE_TYPE=elasticsearch <br /> -DES_HOSTS=http://10.14.125.5:9200 <br /> ES_USERNAME=xxx ES_PASSWORD=xxx <br /> -jar zipkin.jar<br />
5、ES 集群部署报错
问题 1 报错信息如下:
<br /> Received message from unsupported version:[2.0.0] minimal compatible version is:[5.6.0]<br />
经排查是集群中存在低版本的 ES 实例,将低版本实例移除即可。
问题 2 报错信息如下:
<br /> with the same id but is a different node instance<br />
删除对应节点 elsticsearch 文件夹下的 data 文件夹下的节点数据即可。
6、海量中文分词插件
海量分词是天津海量信息技术股份有限公司自主研发的中文分词核心,经测试分词效果还是不错的,值得一试。
https://github.com/HylandaOpen ... hlseg
7、查询一个索引下的所有 type 名
通过下面的 API,即可获取全部的 type,下面的例子中 doc 就是 indexName 索引下的一个 type:
<br /> GET <a href="http://es127.0.0.1:9200/indexName/_mappings" rel="nofollow" target="_blank">http://es127.0.0.1:9200/indexName/_mappings</a><br /> -----------------------------------------------<br /> {<br /> indexName: - {<br /> mappings: - {<br /> doc: - {<br /> _all: + {... },<br /> dynamic_date_formats: + [... ],<br /> dynamic_templates: + [... ],<br /> properties: + {... }<br /> }<br /> }<br /> }<br /> }<br />
8、索引模板中根据字段值设置别名
设置索引模板的时候,别名可以使用 Query 条件来进行匹配。
<br /> PUT _template/template_1<br /> {<br /> "index_patterns" : ["te*"],<br /> "settings" : {<br /> "number_of_shards" : 1<br /> },<br /> "aliases" : {<br /> "alias2" : {<br /> "filter" : {<br /> "term" : {"user" : "kimchy" }<br /> },<br /> "routing" : "kimchy"<br /> },<br /> "{index}-alias" : {} <br /> }<br /> }<br />
9、索引模板设置默认时间匹配格式
ES 默认是不会将 yyyy-MM-dd HH:mm:ss 识别为时间的,可以通过在索引模板进行如下设置实现多种时间格式的识别:
<br /> "mappings": {<br /> "doc": {<br /> "dynamic_date_formats": ["yyyy-MM-dd HH:mm:ss||strict_date_optional_time||epoch_millis"],<br />
10、ES 中 Merge 相关设置
Merge 是非常耗费 CPU 的操作;而且如果不是 SSD 的话,推荐将 index.merge.scheduler.max_thread_count 设置为 1;否则 ES 会启动 Math.min(3, Runtime.getRuntime().availableProcessors() / 2) 个线程进行 Merge 操作;这样大部分机械硬盘的磁盘 IO 都很难承受,就可能出现阻塞。
<br /> "index": {<br /> "refresh_interval": "5s",<br /> "number_of_shards": "3",<br /> "max_result_window": 10000,<br /> "translog": {<br /> "flush_threshold_size": "500mb",<br /> "sync_interval": "30s",<br /> "durability": "async"<br /> },<br /> "merge": {<br /> "scheduler": {<br /> "max_merge_count": "100",<br /> "max_thread_count": "1"<br /> }<br /> },<br />
11、mapping 中 enabled store index 参数
- enabled:默认是true,只用于 mapping 中的 object 字段类型;当设置为 false 时,其作用是使 es 不去解析该字段,并且该字段不能被查询和 store,只有在 source 中才能看到,设置 enabled 为 false,可以不设置字段类型,默认类型为 object;
- store:默认 false,store 参数的功能和 source 有一些相似,我们的数据默认都会在 source 中存在,但我们也可以将数据 store 起来;当我们使用
copy_to
参数时,copy_to
的目标字段并不会在 source 中存储,此时 store 就派上用场了;- index:默认是 true,当设置为 false,表明该字段不能被查询,如果查询会报错。
12、ES 图片搜索
- 可以借助局部敏感 LSH 或者 pHash 来实现:https://stackoverflow.com/questions/32785803
- Github 也有一个开源项目使用了多种 Hash 算法借助 ES 来实现图片搜索:https://github.com/usc-isi-i2/ ... tures
13、Term 聚合根据子聚合结果排序
<br /> GET /_search<br /> {<br /> "aggs" : {<br /> "genres" : {<br /> "terms" : {<br /> "field" : "genre",<br /> "order" : { "playback_stats.max" : "desc" }<br /> },<br /> "aggs" : {<br /> "playback_stats" : { "stats" : { "field" : "play_count" } }<br /> }<br /> }<br /> }<br /> }<br />
三、社区文章精选
- [ET007 ElasticStack 6.5 介绍](https://elasticsearch.cn/article/6144)
- [CentOS 7.4 下安装 ES 6.5.1 搜索集群](https://elasticsearch.cn/article/6152)
- [Elastic Stack v6.5 新特性解读](https://elasticsearch.cn/article/6156)
- [Elasticsearch 史上最全最常用工具清单](https://mp.weixin.qq.com/s/s2ema4tIXKcqTNUUhjGt1w)
logstash同步父子关系到ElasticSearch报错,求教
Logstash • laoyang360 回复了问题 • 3 人关注 • 1 个回复 • 3166 次浏览 • 2018-12-01 21:48
一样的数据,为什么logstash2.4.0会解析部分json数据失败
回复Logstash • song19850712 发起了问题 • 1 人关注 • 0 个回复 • 2199 次浏览 • 2018-11-30 15:52