ELK 使用小技巧(第 3 期)

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

1、Logstash

一、Filebeat 设置多个 output

在 6.0 以前,Filebeat 能够设置多个输出(必须是不一样类型的输出);从 6.0 开始已经禁止多输出了,只能拥有一个输出,若是想实现多输出,能够借助 logstash 等中间组件进行输出分发。node

2、Elasticsearch

一、ES 用户占用的内存大于为 ES 设置的 heapsize

ES 是 Java 应用,底层存储引擎是基于 Lucene 的,heapsize 设置的是 Java 应用的内存;而 Lucene 创建倒排索引(Inverted Index)是先在内存里生成,而后按期以段文件(segment file)的形式刷到磁盘的,所以 Lucene 也会占用一部份内存。git

elasticsearch.cn/article/32github

二、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。算法

POST /_aliases
{
    "actions" : [
        {
            "add" : {
                 "index" : "test",
                 "alias" : "alias1",
                 "is_write_index" : true
            }
        }
    ]
}
复制代码

三、ES 设置 G1 垃圾回收

修改 jvm.options文件,将下面几行:编程

-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly
复制代码

改成bash

-XX:+UseG1GC
-XX:MaxGCPauseMillis=50
复制代码

便可。app

其中 -XX:MaxGCPauseMillis 是控制预期的最高 GC 时长,默认值为 200ms,若是线上业务特性对于 GC 停顿很是敏感,能够适当设置低一些。可是这个值若是设置太小,可能会带来比较高的 cpu 消耗。jvm

四、ES 和 Zipkin 集成时设置验证信息

java -DKAFKA_ZOOKEEPER=10.14.123.117:2181 
-DSTORAGE_TYPE=elasticsearch 
-DES_HOSTS=http://10.14.125.5:9200 
ES_USERNAME=xxx ES_PASSWORD=xxx 
-jar zipkin.jar
复制代码

五、ES 集群部署报错

问题 1 报错信息以下:async

Received message from unsupported version:[2.0.0] minimal compatible version is:[5.6.0]
复制代码

经排查是集群中存在低版本的 ES 实例,将低版本实例移除便可。

问题 2 报错信息以下:

with the same id but is a different node instance
复制代码

删除对应节点 elsticsearch 文件夹下的 data 文件夹下的节点数据便可。

六、海量中文分词插件

海量分词是天津海量信息技术股份有限公司自主研发的中文分词核心,经测试分词效果仍是不错的,值得一试。

github.com/HylandaOpen…

七、查询一个索引下的全部 type 名

经过下面的 API,便可获取所有的 type,下面的例子中 doc 就是 indexName 索引下的一个 type:

GET http://es127.0.0.1:9200/indexName/_mappings
-----------------------------------------------
{
    indexName: - {
        mappings: - {
            doc: - {
                _all: + {... },
                dynamic_date_formats: + [... ],
                dynamic_templates: + [... ],
                properties: + {... }
            }
        }
    }
}
复制代码

八、索引模板中根据字段值设置别名

设置索引模板的时候,别名可使用 Query 条件来进行匹配。

PUT _template/template_1
{
    "index_patterns" : ["te*"],
    "settings" : {
        "number_of_shards" : 1
    },
    "aliases" : {
        "alias2" : {
            "filter" : {
                "term" : {"user" : "kimchy" }
            },
            "routing" : "kimchy"
        },
        "{index}-alias" : {} 
    }
}
复制代码

九、索引模板设置默认时间匹配格式

ES 默认是不会将 yyyy-MM-dd HH:mm:ss 识别为时间的,能够经过在索引模板进行以下设置实现多种时间格式的识别:

"mappings": {
"doc": {
  "dynamic_date_formats": ["yyyy-MM-dd HH:mm:ss||strict_date_optional_time||epoch_millis"],
复制代码

十、ES 中 Merge 相关设置

Merge 是很是耗费 CPU 的操做;并且若是不是 SSD 的话,推荐将 index.merge.scheduler.max_thread_count 设置为 1;不然 ES 会启动 Math.min(3, Runtime.getRuntime().availableProcessors() / 2) 个线程进行 Merge 操做;这样大部分机械硬盘的磁盘 IO 都很难承受,就可能出现阻塞。

"index": {
  "refresh_interval": "5s",
  "number_of_shards": "3",
  "max_result_window": 10000,
  "translog": {
    "flush_threshold_size": "500mb",
    "sync_interval": "30s",
    "durability": "async"
  },
  "merge": {
    "scheduler": {
      "max_merge_count": "100",
      "max_thread_count": "1"
    }
  },
复制代码

十一、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,代表该字段不能被查询,若是查询会报错。

十二、ES 图片搜索

1三、Term 聚合根据子聚合结果排序

GET /_search
{
    "aggs" : {
        "genres" : {
            "terms" : {
                "field" : "genre",
                "order" : { "playback_stats.max" : "desc" }
            },
            "aggs" : {
                "playback_stats" : { "stats" : { "field" : "play_count" } }
            }
        }
    }
}
复制代码

3、社区文章精选


Any Code,Code Any!

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

相关文章
相关标签/搜索