使用 shuf 来打乱一个文件中的行或是选择文件中一个随机的行。

EsSparkStreaming.saveToEs 如何做到负载均衡

zqc0512 回复了问题 • 2 人关注 • 1 个回复 • 2300 次浏览 • 2018-11-20 09:51 • 来自相关话题

写入的内容中的双引号,如果不转义如何支持

zqc0512 回复了问题 • 3 人关注 • 2 个回复 • 4675 次浏览 • 2018-11-20 09:56 • 来自相关话题

ES对于一个较小索引(几万doc,几十M大小)主分片设置多少合适?

zqc0512 回复了问题 • 4 人关注 • 3 个回复 • 7236 次浏览 • 2018-11-20 09:52 • 来自相关话题

Nested嵌套的index 怎么导数据?

laoyang360 回复了问题 • 3 人关注 • 1 个回复 • 2437 次浏览 • 2018-11-19 20:48 • 来自相关话题

ES稀疏数据,怎么合理设置索引分片?

rojay 回复了问题 • 1 人关注 • 1 个回复 • 3278 次浏览 • 2018-11-19 17:24 • 来自相关话题

ES批量插入可以使用别名插入吗

rochy 回复了问题 • 5 人关注 • 3 个回复 • 4878 次浏览 • 2018-11-19 17:15 • 来自相关话题

按条件提取index里面指定的数据,然后在转存到新的index里面。

zz_hello 回复了问题 • 3 人关注 • 1 个回复 • 2523 次浏览 • 2018-11-19 16:02 • 来自相关话题

match_phrase_prefix出现无法命中的情况,谁可以帮忙解答一下?

zz_hello 回复了问题 • 2 人关注 • 1 个回复 • 3269 次浏览 • 2018-11-19 13:14 • 来自相关话题

海量科技股份有限公司ES中文插件

novia 发表了文章 • 6 个评论 • 3918 次浏览 • 2018-11-19 11:31 • 来自相关话题

海量分词是天津海量信息技术股份有限公司自主研发的中文分词核心,已于2018年7月将分词5.0版免费开放,欢迎试用。
 
海量分词演示界面 http://www.hailiangxinxi.com/smartCenter2018/index

另外,海量提供免费API接口,文档详见http://www.hailiangxinxi.com/smartCenter2018/doc,欢迎大家试用,如有疑问,请联系nlp@hylanda.com

Analyzer: hlseg_search , hlseg_large , hlseg_normal, Tokenizer: hlseg_search , hlseg_large , hlseg_normal
 
github地址:https://github.com/HylandaOpen ... ME.md

rest full scorll 查询 传参问题

rochy 回复了问题 • 2 人关注 • 1 个回复 • 3131 次浏览 • 2018-11-19 11:12 • 来自相关话题

查询几次后,es占用的内存大于heapsize

zqc0512 回复了问题 • 4 人关注 • 2 个回复 • 3846 次浏览 • 2018-11-19 16:45 • 来自相关话题

ET007 ElasticStack 6.5 介绍

Leon J 发表了文章 • 1 个评论 • 5619 次浏览 • 2018-11-19 09:18 • 来自相关话题

就在 11月14日,ElasticStack 6.5.0 发布了,此次发布带来了许多激动人心的特性,我们一起来体验一下:

![WX20181118-120551@2x](https://ws1.sinaimg.cn/large/0 ... 6u.jpg)

如果没有任何数据,kibana会提示我们导入sample数据,这边我选择Try our sample data, 然后导入全部3个样例数据,这可以让我们在没有数据的情况下快速体验新特性。

Infrastructure & Logs UI


很多用户使用 ElasticStack 收集基础架构的日志和指标,比如系统日志、安全日志、CPU指标,内存指标等等。在6.5中,kibana 侧边栏中增加了 Infrastructure 和 Logs 两个新的 tab,让用户更简单地查看自己的基础架构,和每台主机或者容器里的日志。



logs


进入logs标签页,如果当前没有数据,kibana会引导我们添加数据

![WX20181118-121032@2x](https://ws2.sinaimg.cn/large/0 ... 01.jpg)

我们选择 system logs

![WX20181118-121047@2x](https://ws4.sinaimg.cn/large/0 ... i3.jpg)

根据指示,我们安装部署好filebeat并启动,再次进入 logs 标签页便可以看到收集到的系统日志了

![image-20181118185158451](https://ws1.sinaimg.cn/large/0 ... xw.jpg)

  1. 搜索过滤框:在这里可以像在 discover 里一样写query string,并且会有输入提示
  2. 时间选择框:可以选择需要查看的时间点,如果点了 Stream live,会持续监听尾部新输出的日志内容,类似 linux 命令中的tail -f
  3. 日志时间轴:高亮的部位是当前查看日志所在的时间范围,对应的区域图标识了日志量

    假如我想实现 tail -f /var/log/system.log | grep google.com 一样的效果,可以打开 Stream live,并在搜索过滤框中这样输入:

    ![WX20181118-173432@2x](https://ws3.sinaimg.cn/large/0 ... 4h.jpg)

    很简单,很方便有木有?



    Infrastructure


    同样在kibana的引导下安装 Metric beat,并开启system模块,启动后进入 infrastructure 标签页:

    ![image-20181118190614385](https://ws3.sinaimg.cn/large/0 ... 9i.jpg)

    这里可以直观地看到所有基础架构的指标状况,深色的内层代表主机,颜色代表了健康状况。浅灰色的外层代表了group,因为我只在自己的笔记本上做了部署,所以只能看到一个host。

    ![image-20181118191527060](https://ws4.sinaimg.cn/large/0 ... ep.jpg)

    点击主机会弹出菜单

    • View logs : 跳转到 logs 标签页,并通过搜索过滤框指定host,只查看这台主机的日志。
    • View metrics : 跳转到这台主机的指标详情,可以查看历史数据
      ![shoot](https://ws2.sinaimg.cn/large/0 ... w1.jpg)



      APM


      Java 和 Go


      不负众望,继 Nodejs、Python、Ruby、Javascript 之后,Elastic APM 5.6.0 新增了对 Java 和 Golang 的支持!

      Distributed Tracing


      在 SOA 和 MSA 大行其道的年代,如何追踪请求在各个系统之间的流动成为了apm的关键问题。

      Elastic APM 支持 [OpenTracing](https://opentracing.io/) 标准,并在各个agent里内置了 OpenTracing 兼容的bridge

      以下是官网上该特性的截图:

      ![distributed_tracing](https://ws4.sinaimg.cn/large/0 ... b6.jpg)



      APM Server 监控


      如 ElasticStack的其他产品一般,APM也支持了监控,并可以在 Kinbana Montoring下查看监控信息:

      ![apm_monitoring](https://ws2.sinaimg.cn/large/0 ... ld.jpg)

      APM Server 内存占用优化


      通过新的基于NDJSON的协议,agent可以在采集信息后通过事件流立即发往APM server,这样 APM Server可以一个接一个地处理接收到的事件,而不是一次性地收到一大块(chunk),这样在很大程度上减少了APM Server的内存占用。



      Elasticsearch


      Cross-cluster replication


      这里的副本并非我们平时常见的分片副本,而是通过在集群B配置一个副本indexB来追随集群A中的indexA,indexA中发生的任何变化都会同步到indexB中来。另外也可以配置一个pattern,当集群A出现符合pattern的索引,自动在集群B创建他的副本,这听起来很酷。值得一提的是,这将是[白金版](https://www.elastic.co/subscriptions)里新增的一个特性。



      Minimal Snapshots


      snapshot 是 es 中用来创建索引副本的特性,在之前的版本中,snapshot会把完整的 index 都保存下来,包括原始数据和索引数据等等。新的 Minimal Snapshots 提供了一种只备份 _source 内容和 index metadata,当需要恢复时,需要通过 reindex 操作来完成。最小快照最多可能帮你节省50%的磁盘占用,但是会花费更多的时间来恢复。这个特性可能并不适合所有人,但给恢复窗口比较长,且磁盘容量有限的用户多了一种选择。



      SQL / ODBC


      现在可以使用 支持 ODBC 的第三方工具来连接 elasticsearch 了!我想可以找时间试试用 tableau 直连 elasticsearch会是啥效果。



      Java 11


      Java11 是一个 LTS 版本,相信会有越来越多的用户升级到 java11



      G1GC支持


      经过无数的测试,Elasticsearch官方宣布了在 JDK 10+ 上支持 G1GC。G1GC 相比 CMS有诸多优势,如今可以放心地使用G1GC了。(期待对ZGC的支持!)



      Authorization realm


      X-Pack Security中的新特性,可以对用户认证和用户授权分别配置 realm,比如使用内置的用户体系来认证,再去ldap中获取用户的角色、权限等信息。这也是白金版新增的特性。



      机器学习的新特性


    • 支持在同一个机器学习任务中分析多个时间系列
    • 为机器学习任务添加了新的多分桶(multi-bucket) 分析



      Kibana


      Canvas


      Canvas ! 我在做数据分析师的同学看到之后说太酷了,像 PPT。

      点击侧边栏的 canvas 标签,可以看到我们先前导入的样本数据也包含了 canvas 样例:

      ![WX20181118-210126@2x](https://ws3.sinaimg.cn/large/0 ... 15.jpg)

      在 11月的 深圳开发者大会上,上海普翔 也用 canvas 对填写调查问卷的参会人员做了分析:

      ![UNADJUSTEDNONRAW_thumb_1adc](https://ws2.sinaimg.cn/large/0 ... vw.jpg)

      https://github.com/alexfrancoe ... mples 这里有很多非常不错的 canvas 样例供大家学习,把json文件直接拖到 canvas 页面就可以导入学习了!



      Spaces


      把 kibana 对象(比如 visualizations、dashboards)组织到独立的 space 里,并且通过 RBAC 来控制哪些用户可以访问哪些 space。这实在是太棒了,想象在一个企业里,多个部门通过kibana查询、分析数据,大家关注的dashboard肯定是不一样的,在6.5之前,我们只能通过社区插件来实现这样的需求,而大版本的升级可能直接导致插件不可用,有了 Space,我们不必再担心!

      ![image-20181118212404768](https://ws1.sinaimg.cn/large/0 ... fd.jpg)



      Rollups UI


      Rollup 是 es6.4 中新增的一个特性,用来把一些历史数据压缩归档,用作以后的分析。6.5.0 中 kibana 增加了一个界面用来查看和管理 Rollup 任务。

      ![image9](https://ws3.sinaimg.cn/large/0 ... og.jpg)



      Data visualizer for files


      通过可视化的方式查看文件的结构,查看其中出现最频繁的内容:

      ![highlights_6_5_viz-logs](https://ws4.sinaimg.cn/large/0 ... ez.jpg)



      Beats


      Beats Central Management


      Beats 终于也支持中心化配置管理了!我们只需按照往常一样安装filebeat、metricbeat,然后使用 filebeat enroll <kibana-url> <token>,便可以通过kibana来管理beats的配置、甚至给他们打上tag:

      ![Image from iOS](https://ws1.sinaimg.cn/large/0 ... 0t.jpg)

      想一想,假如我们在上千台机器上部署filebeat,如果哪天需要批量变更配置文件,只需要通过脚本调用配置管理的API就可以了



      Functionbeat


      Functionbeat是一种新的beat类型,可以被部署为一个方法,而不需要跑在服务器环境上,比如 AWS Lambda function。



      以上就是 6.5.0 版本的主要特性,更详细的内容可以查看 https://www.elastic.co/blog/el ... eased ,希望通过我的介绍,可以让大家了解到新版本所带来的激动人心的特性。

      ![Image from iOS](http://p8z8qq24s.bkt.clouddn.c ... 24.png)

es内存占用过高

rochy 回复了问题 • 3 人关注 • 2 个回复 • 7528 次浏览 • 2018-11-19 09:04 • 来自相关话题

请教一个关于es搜索的问题

rochy 回复了问题 • 2 人关注 • 1 个回复 • 3225 次浏览 • 2018-11-19 09:02 • 来自相关话题

ELK 使用小技巧(第 2 期)

rochy 发表了文章 • 1 个评论 • 7732 次浏览 • 2018-11-17 18:36 • 来自相关话题

ELK Tips 主要介绍一些 ELK 使用过程中的小技巧,内容主要来源为 Elastic 中文社区。

一、Logstash

1、Filebeat :Non-zero metrics in the last 30s

  • 问题表现:Filebeat 无法向 Elasticsearch 发送日志数据;
  • 错误信息:INFO [monitoring] 1og/log.go:124 Non-zero metrics in the last 30s
  • 社区反馈:在 input 和 output 下面添加属性 enabled:true。

    ```
    filebeat.inputs:
  • type: log
    enabled: true
    paths:
  • /var/log/*.log

    output.elasticsearch:
    hosts: ["<a href="https://localhost:9200"" rel="nofollow" target="_blank">https://localhost:9200"]
    username: "filebeat_internal"
    password: "YOUR_PASSWORD"
    enabled: true
    ```

    input 和 output 下 enabled 属性默认值为 true,因此怀疑另有其因。

    2、Logstash 按月生成索引

    <br /> output {<br /> if [type] == "typeA"{<br /> elasticsearch {<br /> hosts => "127.0.0.1:9200"<br /> index => "log_%{+YYYY_MM}"<br /> }<br /> }<br /> }<br />

    按照日的原理类似:%{+YYYY.MM.dd}

    3、Filebeat 通过配置删除特定字段

    Filebeat 实现了类似 Logstash 中 filter 的功能,叫做处理器(processors),processors 种类不多,尽可能在保持 Filebeat 轻量化的基础上提供更多常用的功能。

    下面列几种常用的 processors:

  • add_cloud_metadata:添加云服务器的 meta 信息;
  • add_locale:添加本地时区;
  • decode_json_fields:解析并处理包含 Json 字符串的字段;
  • drop_event:丢弃符合条件的消息事件;
  • drop_fields:删除符合条件的字段;
  • include_fields:选择符合条件的字段;
  • rename:字段重命名;
  • add_kubernetes_metadata:添加 k8s 的 meta 信息;
  • add_docker_metadata:添加容器的 meta 信息;
  • add_host_metadata:添加操作系统的 meta 信息;
  • dissect:类似与 gork 的正则匹配字段的功能;
  • dns:配置 filebeat 独立的 dns 解析方式;
  • add_process_metadata:添加进程的元信息。

    processors 的使用方式:
    ```
  • type:
    processors:
  • :
    when:


    ...
    ```

    ### 4、LogStash 采集 FTP 日志文件
    ```
    exec {
    codec => plain { }
    command => "curl ftp://server/logs.log"
    interval => 3000}
    }
    ```

    ### 5、Logstash docker-compose 启动失败(Permission denied)
    在 docker-compose 中使用 user 选项设置使用 root 用户启动 docker,能解决权限问题。
    ```
    $ cat docker-compose.yml

    version: '2'
    services:
    logstash:
    image: docker.elastic.co/logstash/logstash:6.4.2
    user: root
    command: id
    ```

    ### 6、Metricize filter plugin
    将一条消息拆分为多条消息。

    ```
    # 原始信息
    {
    type => "type A"
    metric1 => "value1"
    metric2 => "value2"
    }

    # 配置信息
    filter {
    metricize {
    metrics => [ "metric1", "metric2" ]
    }
    }

    # 最终输出
    { {
    type => "type A" type => "type A"
    metric => "metric1" metric => "metric2"
    value => "value1" value => "value2"
    } }
    ```

    ## 二、Elasticsearch
    ### 1、ES 倒排索引内部结构
    Lucene 的倒排索引都是按照字段(field)来存储对应的文档信息的,如果 docName 和 docContent 中有“苹果”这个 term,就会有这两个索引链,如下所示:
    ```
    docName:
    "苹果" -> "doc1, doc2, doc3..."

    docContent:
    "苹果" -> "doc2, doc4, doc6..."
    ```

    ### 2、Jest 和 RestHighLevelClient 哪个好用点
    RestHighLevelClient 是官方组件,会一直得到官方的支持,且会与 ES 保持同步更新,推荐使用官方的高阶 API。

    Jest 由于是社区维护,所以更新会有一定延迟,目前最新版对接 ES6.3.1,近一个月只有四个 issue,说明整体活跃度较低,因此不推荐使用。

    此外推荐一份 TransportClient 的中文使用手册,翻译的很不错:[https://github.com/jackiehff/e ... pi-cn](https://github.com/jackiehff/e ... api-cn)。

    ### 3、ES 单分片使用 From/Size 分页遇到重复数据
    常规情况下 ES 单分片使用 From/Size 是不会遇到数据重复的,数据重复的可能原因有:
  • 没有添加排序;
  • 添加了按得分排序,但是查询语句全部为 filter 过滤条件(此时得分都一致);
  • 添加了排序,但是有索引中文档的新增、修改、删除等操作。

    对于多分片,推荐添加 preference 参数来实现分页结果的一致性。

    4、The number of object passed must be even but was [1]

    ES 在调用 setSource 的时候传入 Json 对象后会报错:The number of object passed must be even but was [1],此时可以推荐将 Json 对象转为 Map 集合,或者把 Json 对象转为 json 字符串,不过传入字符串的时候需要设置类型。
    <br /> IndexRequest indexRequest = new IndexRequest("index", "type", "id");<br /> JSONObject doc = new JSONObject();<br /> //indexRequest.source(jsonObject); 错误的使用方法<br /> //转为 Map 对象<br /> indexRequest.source(JSONObject.parseObject((String) doc.get("json"), Map.class));<br /> //转为 Json 字符串(声明字符串类型)<br /> indexRequest.source(JSON.toJSONString(doc), XContentType.JSON);<br />

    5、跨集群搜索

    ES 6.X 原生支持跨集群搜索,具体配置请参考:https://www.elastic.co/guide/e ... .html
    <br /> PUT _cluster/settings<br /> {<br /> "persistent": {<br /> "cluster": {<br /> "remote": {<br /> "cluster_one": {<br /> "seeds": [<br /> "127.0.0.1:9300"<br /> ]<br /> },<br /> "cluster_two": {<br /> "seeds": [<br /> "127.0.0.1:9301"<br /> ]<br /> },<br /> "cluster_three": {<br /> "seeds": [<br /> "127.0.0.1:9302"<br /> ]<br /> }<br /> }<br /> }<br /> }<br /> }<br />

    ES 6.5 推出了新功能,跨集群同步(Cross-cluster replication),感兴趣的可以自行了解。

    6、ES 排序时设置空值排序位置

    <br /> GET /_search<br /> {<br /> "sort" : [<br /> { "price" : {"missing" : "_last"} }<br /> ],<br /> "query" : {<br /> "term" : { "product" : "chocolate" }<br /> }<br /> }<br />

    7、ES 冷归档数据如何处理

    使用相对低配的大磁盘机器配置为 ES 的 Warm Nodes,可以通过 index.routing.allocation.require.box_type 来设置索引是冷数据或者热数据。如果索引极少使用,可以 close 索引,然后在需要搜索的时候 open 即可。

    8、ES 相似文章检测

    对于大文本的去重,可以参考 SimHash 算法,通过 SimHash 可以提取到文档指纹(64位),两篇文章通过 SimHash 计算海明距离即可判断是否重复。海明距离计算,可以通过插件实现:https://github.com/joway/elast ... lugin

    9、Terms 聚合查询优化

  • 如果只需要聚合后前 N 条记录,推荐在 Terms 聚合时添加上 "collect_mode": "breadth_first"
  • 此外可以通过设置 "min_doc_count": 10来限制最小匹配文档数;
  • 如果对返回的 Term 有所要求,可以通过设置 includeexclude 来过滤 Term;
  • 如果想获取全部 Term 聚合结果,但是聚合结果又很多,可以考虑将聚合分成多个批次分别取回(Filtering Values with partitions)。

    10、Tomcat 字符集造成的 ES 查询无结果

    两个系统连接同一个 ES 服务,配置和代码完全一致,同一个搜索条件,一个能够搜索出来东西,一个什么都搜索不出来,排查结果是因为其中一个系统的 tomcat 配置有问题,导致请求的时候乱码了,所以搜不到数据。

    11、ES 索引设置默认分词器

    默认情况下,如果字段不指定分词器,ES 或使用 standard 分词器进行分词;可以通过下面的设置更改默认的分词器。

    2.X 支持设置默认的索引分词器(default_index)和默认的查询分词器(default_search),6.X 已经不再支持。

    <br /> PUT /index<br /> {<br /> "settings": {<br /> "analysis": {<br /> "analyzer": {<br /> "default": {<br /> "type": "ik_max_word",<br /> "tokenizer": "ik_max_word"<br /> }<br /> }<br /> }<br /> }<br /> }<br />

    12、ES 中的魔法参数

  • 索引名:_index
  • 类型名:_type
  • 文档Id:_id
  • 得分:_score
  • 索引排序:_doc

    如果你对排序没有特别的需求,推荐使用 _doc 进行排序,例如执行 Scroll 操作时。

    13、ES 延迟执行数据上卷(Rollup )

    Rollup job 有个 delay 参数控制 job 执行的延迟时间,默认情况下不延迟执行,这样如果某个 interval 的数据已经聚合好了,该 interval 迟到的数据是不会处理的。

    好在 rollup api 可以支持同时搜索裸索引和 rollup 过的索引,所以如果数据经常有延迟的话,可以考虑设置一个合适的 delay,比如 1h、6h 甚至 24h,这样 rollup 的索引产生会有延迟,但是能确保迟到的数据被处理。

    从应用场景上看,rollup 一般是为了对历史数据做聚合存放,减少存储空间,所以延迟几个小时,甚至几天都是合理的。搜索的时候,同时搜索最近的裸索引和历史的 rollup 索引,就能将两者的数据组合起来,在给出正确的聚合结果的情况下,又兼顾了性能。

    Rollup 是实验性功能,不过非常有用,特别是使用 ES 做数据仓库的场景。

    14、ES6.x 获取所有的聚合结果

    ES2.x 版本中,在聚合查询时,通过设置 setSize(0) 就可以获取所有的聚合结果,在ES6.x 中直接设置 setSize(Integer.MAX_VALUE) 等效于 2.x 中设置为 0。

    15、ES Jar 包冲突问题

    经常会遇到 ES 与业务集成时出现 Jar 包冲突问题,推荐的解决方法是使用 maven-shade-plugin 插件,该插件通过将冲突的 Jar 包更换一个命名空间的方式来解决 Jar 包的冲突问题,具体使用可以参考文章:[https://www.jianshu.com/p/d9fb7afa634d](https://www.jianshu.com/p/d9fb7afa634d)。
    ```



    org.apache.maven.plugins
    maven-shade-plugin
    2.4.1

    false



    package

    shade




    com.google.guava
    net.luculent.elasticsearch.guava


    com.fasterxml.jackson
    net.luculent.elasticsearch.jackson


    org.joda
    net.luculent.elasticsearch.joda


    com.google.common
    net.luculent.elasticsearch.common


    com.google.thirdparty
    net.luculent.elasticsearch.thirdparty











    ```
    ### 16、ES 如何选择 Shard 存储文档?
    ES 采用 djb2 哈希算法对要索引文档的指定(或者默认随机生成的)`_id` 进行哈希,得到哈希结果后对索引 shard 数目 n 取模,公式如下:`hash(_id) % n`;根据取模结果决定存储到哪一个 shard 。

    ## 三、Kibana
    ### 1、在 Kiabana 的 Discovery 界面显示自定义字段
    Kibana 的 Discovery 界面默认只显示 time 和 _source 两个字段,这个界面的左半部分,在 Popular 下面展示了很多,你只需要在你需要展示的字段后面点击 add 即可将自定义的字段添加到 discovery 界面。

    ![在 Kiabana 的 Discovery 界面显示自定义字段](http://img.luooqi.com/Fv105mwWpbfcfBGfVNYDxFKaXxIa)

    ### 2、filebeat 的 monitor 指标的说明
  • Total:'All events newly created in the publishing pipeline'
  • Emitted: 'Events processed by the output (including retries)'
  • Acknowledged:'Events acknowledged by the output (includes events dropped by the output)'
  • Queued:'Events added to the event pipeline queue'

    四、社区文章精选

  • [Elastic认证考试心得](https://note.youdao.com/)
  • [一文快速上手Logstash](https://elasticsearch.cn/article/6141)
  • [当Elasticsearch遇见Kafka--Kafka Connect](https://elasticsearch.cn/article/6140)
  • [elasticsearch冷热数据读写分离](https://elasticsearch.cn/article/6127)
  • [elasticsearch优秀实践](https://elasticsearch.cn/article/6126)
  • [ELK 使用小技巧(第 1 期)](https://elasticsearch.cn/article/1006)

    ---
    Any Code,Code Any!

    扫码关注『AnyCode』,编程路上,一起前行。

    ![](http://img.luooqi.com/FoE5jYLo6p4UVmGN8GPjCZz8Xete)