elasticsearch源码调试环境小结
Elasticsearch • jingkyks 发表了文章 • 4 个评论 • 16969 次浏览 • 2015-12-16 13:04
---------------------
调试环境是window(linux理论上通用)
用到的工具类:
1:mvn:https://maven.apache.org/
elasticsearch的源码是用mvn工具管理的,根据pom.xml来下载一些依赖包非常方便。
(当然也可以用gradle,由于不太熟悉,就没研究)
安装mvn,注意配置后环境变量即可。官方文档写的很明白。
最好自己修改一下mvn的setting.xml文件中的本地repo
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
我设置成了:
<localRepository>E:/m2/repository</localRepository>
mvn -v 测试以下
2:eclipse:编辑器,应用应该还比较广泛的。我用的最新版的mars。
(intellij idea据说这是一个很牛逼的编辑器,也是因为暂时不熟悉,还没研究)
----------------------
步骤:
1: 去github上选择一个tag版本,我用的是2.1.0.
https://github.com/elastic/ela ... 2.1.0
直接DownloadZip文件即可
(也可以用git clone下来)
解压缩。
假设目录为E:/elasticsearch-2.1.0
2: 编译源代码
cmd 打开命令行
进入源文件目录 E:/elasticsearch-2.1.0
执行 mvn package命令
这个时间段耗时比较长,当然也得根据网速情况。
会出现失败,大多是因为拉取不到依赖包。可以根据提示信息,手动去下载失败的jar,然后拷贝到本地repo对应的文件夹下边即可。
等出现build success信息的时候代表成功了。
可以到core/target目录下看到elasticsearch-2.1.0-SNAPSHOT.jar。
3:转为eclipse工程
可能习惯了eclipse工程,所以这里就直接用mvn转成了eclipse的工程,生成.classpath和.project文件。
进入core目录执行以下指令
mvn eclipse:eclipse
这一步也会消耗一些时间,通常的错误也是jar包下载不成功,根据终端打印的错误信息,把对应jar包直接下载下来,放到本地的repo对应目录下边即可,然后重新运行命令。直到成功。
之后,就会发现出现了.classpath和.project文件了。
然后打开eclipse 直接带入core中的工程即可。
4: 设置运行参数
打开刚刚导入成功的工程:
Run As----Run Configution---Args
设置ProgramArgument 为 start
设置VMArgument为 -Des.path.home=E:\elasticsearch-2.1.0\core\
完毕
-------
现在就就可以运行+调试了。
beats 中的 shipper 配置
Beats • medcl 回复了问题 • 3 人关注 • 1 个回复 • 6042 次浏览 • 2015-12-16 13:36
如何提升ES recovery的速度
Elasticsearch • win1027 回复了问题 • 6 人关注 • 5 个回复 • 7884 次浏览 • 2015-12-23 22:28
怎样让log stash输出number类型数据
Logstash • lephix 回复了问题 • 3 人关注 • 1 个回复 • 5690 次浏览 • 2015-12-17 23:51
elasticsearch maven无法生成jar包
Elasticsearch • medcl 回复了问题 • 2 人关注 • 1 个回复 • 9104 次浏览 • 2015-12-14 16:21
使用elasticsearch对其他数据源进行索引时,如何选用分词器?
Elasticsearch • phantom 回复了问题 • 3 人关注 • 2 个回复 • 5332 次浏览 • 2015-12-23 17:15
请问ES如何进行负载均衡,我怎样通过各个ip访问达到均衡访问的目的
Elasticsearch • jingkyks 回复了问题 • 2 人关注 • 2 个回复 • 4849 次浏览 • 2015-12-12 10:44
Elasticsearch每隔段时间发生/192.168.1.22:62868 => /192.168.1.23:9200
Elasticsearch • 三斗室 回复了问题 • 2 人关注 • 2 个回复 • 6432 次浏览 • 2015-12-10 12:32
Day9: Elasticsearch template的order
Advent • 三斗室 发表了文章 • 3 个评论 • 13482 次浏览 • 2015-12-10 01:13
这时候,不少比较认真看 Logstash 文档的新用户会通过下面这段配置来制定自己的模板策略:
output {
elasticsearch {
host => "127.0.0.1"
manage_template => true
template => "/path/to/mytemplate"
template_name => "myname"
}
}
然而随后就发现,自己辛辛苦苦修改出来的模板,通过 curl -XGET 'http://127.0.0.1:9200/_template/myname' 看也确实上传成功了,但实际新数据索引创建出来,就是没生效!
这个原因是:Logstash 默认会上传一个名叫 logstash 的模板到 ES 里。如果你在使用上面这个配置之前,曾经运行过 Logstash(一般来说都会),那么 ES 里就已经存在这么一个模板了。你可以curl -XGET 'http://127.0.0.1:9200/_template/logstash' 验证。
这个时候,ES 里就变成有两个模板,logstash 和 myname,都匹配 logstash-* 索引名,要求设置一定的映射规则了。
ES 会按照一定的规则来尝试自动 merge 多个都匹配上了的模板规则,最终运用到索引上:https://www.elastic.co/guide/e ... lates
其中要点就是:template 是可以设置 order 参数的!而不写这个参数,默认的 order 值就是 0。order 值越大,在 merge 规则的时候优先级越高。
所以,解决这个问题的办法很简单:在你自定义的 template 里,加一行,变成这样:
{
"template" : "logstash-*",
"order" : 1,
"settings" : { ... },
"mappings" : { ... }
}
当然,其实如果只从 Logstash 配置角度出发,其实更简单的办法是:直接修改原来默认的 logstash 模板,然后模板名称也不要改,就好了:output {
elasticsearch {
host => "127.0.0.1"
manage_template => true
template_overwrite => true
}
}
想了解更全面的 ELK Stack 知识和细节,欢迎购买我的《ELK Stack权威指南》,也欢迎加 QQ 群:315428175 哟。 在ELK中使用sql_last_start参数的时区问题。
Logstash • atomyliu 回复了问题 • 2 人关注 • 2 个回复 • 7120 次浏览 • 2015-12-10 11:33
请问下elasticsearch每次查询500条qps猛跌是怎么回事?
Elasticsearch • debuger 回复了问题 • 4 人关注 • 2 个回复 • 8364 次浏览 • 2015-12-18 10:30
elasticsearch-jdbc mysql导入时typemapping无法识别,请帮忙解决
回复Elasticsearch • jason1 发起了问题 • 1 人关注 • 0 个回复 • 6272 次浏览 • 2015-12-09 18:19
大家一起来写Advent吧
Advent • medcl 发表了文章 • 0 个评论 • 6073 次浏览 • 2015-12-09 17:57
@的操作就是在贴子里@对方的名字,然后你想办法通知到对方就行了,QQ、论坛消息等等反正告诉对方被@和继续就行咯。
没有找到下一个接班的人就继续写下去。哈哈
写Advent,选择发表类型『文章』,分类选择『advent』,话题添加『advent』+其它的自选
下面是一篇ELK的Advent,顺便分享一下。Day 5 - ELK Operations and Administration
欢迎补充完善规则。
Elasticsearch 整合 SQL 嵌套group by
Elasticsearch • DengShk 回复了问题 • 2 人关注 • 2 个回复 • 7479 次浏览 • 2015-12-10 09:44
自建的索引没数据?
Elasticsearch • maxam0128 发表了文章 • 4 个评论 • 7021 次浏览 • 2015-12-09 16:40
logstash==>redis==>logstash==>elasticsearch==>kibana开始我自己在ES上建索引,
建索引语句如下:
curl -XPUT "http://localhost:9200/qn-service" -d '{"mappings":{"_default_":{"properties":{"speaker":{"type":"string","index":"not_analyzed"},"play_name":{"type":"string","index":"not_analyzed"},"line_id":{"type":"integer"},"speech_number":{"type":"integer"}}}}}'
然后通过logstash导数据到ES后,却发现查询不到数据,然后用
curl http://localhost:9200/_cat/indices?v 命令发现索引的数据为空;
发现es自动建的索引有数据,而我自己的索引数据为空。
找了半天原因没找到,然后就将es中得数据删除,
curl -XDELETE *[/url]
用上述方法重建索引;
然后按照书上《ELK权威指南》上得方法,直接导入数据到es,
curl -XPUT http://localhost:9200/_bulk --data-binary @shakespeare.json
却发现自己建的索引还是没有数据,es却多了一个叫shakespeare得索引,这个索引中有数据,那么我有两点疑问1:为什么我用书上建索引的方法建立索引(shakespeare名字被我改成qn-service)却没有数据?
2:shakespeare这个索引是哪里来得?
logstash shipper.conf
input {
file {
path => ["/data/logs/superErpLog/trace/shakespeare.json"]
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter{
json{
source=>"message"
remove_field => ["message"]
}
}
output {
stdout{}
redis {
host => "localhost"
port => 6379
data_type => "list"
key => "performance"
}
}
logstash center.conf
input {
redis {
host => "localhost"
port => 6379
type => "redis-input"
data_type => "list"
key => "performance"
}
}
output {
stdout {}
elasticsearch {
cluster => "elasticsearch"
host => "localhost"
port => 9200
codec => "json"
protocol => "http"
}
}