ELK Tips 主要介绍一些 ELK 使用过程当中的小技巧,内容主要来源为 Elastic 中文社区。java
在 6.0 以前,Filebeat 能够设置多个输出(必须是不一样类型的输出);从 6.0 开始已经禁止多输出了,只能拥有一个输出,若是想实现多输出,能够借助 logstash 等中间组件进行输出分发。node
ES 是 Java 应用,底层存储引擎是基于 Lucene 的,heapsize 设置的是 Java 应用的内存;而 Lucene 创建倒排索引(Inverted Index)是先在内存里生成,而后按期以段文件(segment file)的形式刷到磁盘的,所以 Lucene 也会占用一部份内存。git
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
}
}
]
}
复制代码
修改 jvm.options
文件,将下面几行:编程
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly
复制代码
改成bash
-XX:+UseG1GC
-XX:MaxGCPauseMillis=50
复制代码
便可。app
其中 -XX:MaxGCPauseMillis
是控制预期的最高 GC 时长,默认值为 200ms,若是线上业务特性对于 GC 停顿很是敏感,能够适当设置低一些。可是这个值若是设置太小,可能会带来比较高的 cpu 消耗。jvm
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
复制代码
问题 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 文件夹下的节点数据便可。
海量分词是天津海量信息技术股份有限公司自主研发的中文分词核心,经测试分词效果仍是不错的,值得一试。
经过下面的 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"],
复制代码
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"
}
},
复制代码
copy_to
参数时,copy_to
的目标字段并不会在 source 中存储,此时 store 就派上用场了;GET /_search
{
"aggs" : {
"genres" : {
"terms" : {
"field" : "genre",
"order" : { "playback_stats.max" : "desc" }
},
"aggs" : {
"playback_stats" : { "stats" : { "field" : "play_count" } }
}
}
}
}
复制代码
Any Code,Code Any!
扫码关注『AnyCode』,编程路上,一块儿前行。