<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&服务不可用。Share on Twitter
Share on Google
Share on Facebook
Share on Weibo
Share on Instapaper
Logstash 早期有三个不同的 elasticsearch 插件。&#x.0 版本的时候,开发者彻底重写了 LogStash::Outputs::Elasticsearch 插件。从此,我们只需要用这一个插件,就能任意切换使用 Elasticsearch 集群支持的各种不同协议了。
配置示例
elasticsearch {
host =& &192.168.0.2&
protocol =& &http&
index =& &logstash-%{type}-%{+YYYY.MM.dd}&
index_type =& &%{type}&
workers =& 5
template_overwrite =& true
解释
协议
现在,新插件支持三种协议: node,http 和 transport。
一个小集群里,使用 node 协议最方便了。Logstash 以 elasticsearch 的 client 节点身份(即不存数据不参加选举)运行。如果你运行下面这行命令,你就可以看到自己的 logstash 进程名,对应的 node.role 值是 c:
# curl 127.0.0.1:9200/_cat/nodes?v
heap.percent ram.percent load node.role master name
local 192.168.0.102
logstash-local-
local 192.168.0.2
特别的,作为一个快速运行示例的需要,你还可以在 logstash 进程内部运行一个内嵌的 elasticsearch 服务器。内嵌服务器默认会在 $PWD/data 目录里存储索引。如果你想变更这些配置,在 $PWD/elasticsearch.yml 文件里写自定义配置即可,logstash 会尝试自动加载这个文件。
对于拥有很多索引的大集群,你可以用 transport 协议。logstash 进程会转发所有数据到你指定的某台主机上。这种协议跟上面的 node 协议是不同的。node 协议下的进程是可以接收到整个 Elasticsearch 集群状态信息的,当进程收到一个事件时,它就知道这个事件应该存在集群内哪个机器的分片里,所以它就会直接连接该机器发送这条数据。而 transport 协议下的进程不会保存这个信息,在集群状态更新(节点变化,索引变化都会发送全量更新)时,就不会对所有的 logstash 进程也发送这种信息。更多 Elasticsearch 集群状态的细节,参阅。
如果你已经有现成的 Elasticsearch 集群,但是版本跟 logstash 自带的又不太一样,建议你使用 http 协议。Logstash 会使用 POST 方式发送数据。
小贴士
Logstash 1.4.2 在 transport 和 http 协议的情况下是固定连接指定 host 发送数据。从 1.5.0 开始,host 可以设置数组,它会从节点列表中选取不同的节点发送数据,达到 Round-Robin 负载均衡的效果。
Kibana4 强制要求 ES 全集群所有 node 版本&#x 以上,所以采用 node 方式发送数据的 logstash-1.4(携带的 Elasticsearch.jar 库是 1.1.1 版本) 会导致 Kibana4 无法运行,采用 Kibana4 的读者务必改用 http 方式。
开发者在 IRC freenode#logstash 频道里表示:&高于 1.0 版本的 Elasticsearch 应该都能跟最新版 logstash 的 node 协议一起正常工作&。此信息仅供参考,请认真测试后再上线。
性能问题
Logstash 1.4.2 在 http 协议下默认使用作者自己的 ftw 库,随同分发的是 0.0.39 版。该版本有,长期运行下输出性能越来越差!
解决办法:
对性能要求不高的,可以在启动 logstash 进程时,配置环境变量ENV[&BULK&],强制采用 elasticsearch 官方 Ruby 库。命令如下:
export BULK=&esruby&
对性能要求高的,可以尝试采用 logstash-1.5.0RC2 。新版的 outputs/elasticsearch 放弃了 ftw 库,改用了一个 JRuby 平台专有的 。根据测试,性能跟 ftw 比。
对性能要求极高的,可以手动更新 ftw 库版本,目前最新版是 0.0.42 版,据称内存问题&#x.40 版即解决。
模板
Elasticsearch 支持给索引预定义设置和 mapping(前提是你用的 elasticsearch 版本支持这个 API,不过估计应该都支持)。Logstash 自带有一个优化好的模板,内容如下:
&template& : &logstash-*&,
&settings& : {
&index.refresh_interval& : &5s&
&mappings& : {
&_default_& : {
&_all& : {&enabled& : true},
&dynamic_templates& : [ {
&string_fields& : {
&match& : &*&,
&match_mapping_type& : &string&,
&mapping& : {
&type& : &string&, &index& : &analyzed&, &omit_norms& : true,
&fields& : {
&raw& : {&type&: &string&, &index& : ¬_analyzed&, &ignore_above& : 256}
&properties& : {
&@version&: { &type&: &string&, &index&: ¬_analyzed& },
&type& : &object&,
&dynamic&: true,
&path&: &full&,
&properties& : {
&location& : { &type& : &geo_point& }
这其中的关键设置包括:
template for index-pattern
只有匹配 logstash-* 的索引才会应用这个模板。有时候我们会变更 Logstash 的默认索引名称,记住你也得通过 PUT 方法上传可以匹配你自定义索引名的模板。当然,我更建议的做法是,把你自定义的名字放在 &logstash-& 后面,变成 index =& &logstash-custom-%{+yyyy.MM.dd}& 这样。
refresh_interval for indexing
Elasticsearch 是一个近实时搜索引擎。它实际上是每 1 秒钟刷新一次数据。对于日志分析应用,我们用不着这么实时,所以 logstash 自带的模板修改成了 5 秒钟。你还可以根据需要继续放大这个刷新间隔以提高数据写入性能。
multi-field with not_analyzed
Elasticsearch 会自动使用自己的默认分词器(空格,点,斜线等分割)来分析字段。分词器对于搜索和评分是非常重要的,但是大大降低了索引写入和聚合请求的性能。所以 logstash 模板定义了一种叫&多字段&(multi-field)类型的字段。这种类型会自动添加一个 &.raw& 结尾的字段,并给这个字段设置为不启用分词器。简单说,你想获取 url 字段的聚合结果的时候,不要直接用 &url& ,而是用 &url.raw& 作为字段名。
Elasticsearch 支持 geo_point 类型, geo distance 聚合等等。比如说,你可以请求某个 geo_point 点方圆 10 千米内数据点的总数。在 Kibana 的 bettermap 类型面板里,就会用到这个类型的数据。
其他模板配置建议
doc_values
doc_values 是 Elasticsearch 1.3 版本引入的新特性。启用该特性的字段,索引写入的时候会在磁盘上构建 fielddata。而过去,fielddata 是固定只能使用内存的。在请求范围加大的时候,很容易触发 OOM 报错:
ElasticsearchException[mon.breaker.CircuitBreakingException: Data too large, data for field [@timestamp] would be larger than limit of [9.4mb]]
doc_values 只能给不分词(对于字符串字段就是设置了 &index&:¬_analyzed&,数值和时间字段默认就没有分词) 的字段配置生效。
doc_values 虽然用的是磁盘,但是系统本身也有自带 VFS 的 cache 效果并不会太差。据官方测试,经过 1.4 的优化后,只比使用内存的 fielddata 慢 15% 。所以,在数据量较大的情况下,强烈建议开启该配置:
&template& : &logstash-*&,
&settings& : {
&index.refresh_interval& : &5s&
&mappings& : {
&_default_& : {
&_all& : {&enabled& : true},
&dynamic_templates& : [ {
&string_fields& : {
&match& : &*&,
&match_mapping_type& : &string&,
&mapping& : {
&type& : &string&, &index& : &analyzed&, &omit_norms& : true,
&fields& : {
&raw& : { &type&: &string&, &index& : ¬_analyzed&, &ignore_above& : 256, &doc_values&: true }
&properties& : {
&@version&: { &type&: &string&, &index&: ¬_analyzed& },
&@timestamp&: { &type&: &date&, &index&: ¬_analyzed&, &doc_values&: true, &format&: &dateOptionalTime& },
&type& : &object&,
&dynamic&: true,
&path&: &full&,
&properties& : {
&location& : { &type& : &geo_point& }
如果你有自己单独定制 template 的想法,很好。这时候有几种选择:
在 logstash/outputs/elasticsearch 配置中开启 manage_template =& false 选项,然后一切自己动手;
在 logstash/outputs/elasticsearch 配置中开启 template =& &/path/to/your/tmpl.json& 选项,让 logstash 来发送你自己写的 template 文件;
避免变更 logstash 里的配置,而是另外发送一个 template ,利用 elasticsearch 的 templates order 功能。
这个 order 功能,就是 elasticsearch 在创建一个索引的时候,如果发现这个索引同时匹配上了多个 template ,那么就会先应用 order 数值小的 template 设置,然后再应用一遍 order 数值高的作为覆盖,最终达到一个 merge 的效果。
比如,对上面这个模板已经很满意,只想修改一下 refresh_interval ,那么只需要新写一个:
&order& : 1,
&template& : &logstash-*&,
&settings& : {
&index.refresh_interval& : &20s&
然后运行 curl -XPUT http://localhost:9200/_template/template_newid -d &@/path/to/your/tmpl.json& 即可。
logstash 默认的模板, order 是 0,id 是 logstash,通过 logstash/outputs/elasticsearch 的配置选项 template_name 修改。你的新模板就不要跟这个名字冲突了。
推荐阅读<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&来自:http://www.searchtech.pro/articles//8.html
elasticsearch的config文件夹里面有两个配置文 件:elasticsearch.yml和logging.yml,第一个是es的基本配置文件,第二个是日志配置文件,es也是使用log4j来记录日 志的,所以logging.yml里的设置按普通log4j配置文件来设置就行了。下面主要讲解下elasticsearch.yml这个文件中可配置的 东西。
cluster.name: elasticsearch配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
node.name: "Franz Kafka"节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt文件中,其中有很多作者添加的有趣名字。
node.master: true指定该节点是否有资格被选举成为node,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。
node.data: true指定该节点是否存储索引数据,默认为true。
index.number_of_shards: 5设置默认索引分片个数,默认为5片。
index.number_of_replicas: 1设置默认索引副本个数,默认为1个副本。
path.conf: /path/to/conf设置配置文件的存储路径,默认是es根目录下的config文件夹。
path.data: /path/to/data设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,例:path.data: /path/to/data1,/path/to/data2
path.work: /path/to/work设置临时文件的存储路径,默认是es根目录下的work文件夹。
path.logs: /path/to/logs设置日志文件的存储路径,默认是es根目录下的logs文件夹
path.plugins: /path/to/plugins设置插件的存放路径,默认是es根目录下的plugins文件夹
bootstrap.mlockall: true设置为true来锁住内存。因为当jvm开始swapping时es的效率
会降低,所以要保证它不swap,可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。
同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过`ulimit -l unlimited`命令。
network.bind_host: 192.168.0.1设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0。
network.publish_host: 192.168.0.1设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。
network.host: 192.168.0.1这个参数是用来同时设置bind_host和publish_host上面两个参数。
transport.tcp.port: 9300设置节点间交互的tcp端口,默认是9300。
press: true设置是否压缩tcp传输时的数据,默认为false,不压缩。
http.port: 9200设置对外服务的http端口,默认为9200。
http.max_content_length: 100mb设置内容的最大容量,默认100mb
http.enabled: false是否使用http协议对外提供服务,默认为true,开启。
gateway.type: localgateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,hadoop的HDFS,和amazon的s3服务器,其它文件系统的设置方法下次再详细说。
gateway.recover_after_nodes: 1设置集群中N个节点启动时进行数据恢复,默认为1。
gateway.recover_after_time: 5m设置初始化数据恢复进程的超时时间,默认是5分钟。
gateway.expected_nodes: 2设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复。
cluster.routing.allocation.node_initial_primaries_recoveries: 4初始化数据恢复时,并发恢复线程的个数,默认为4。
cluster.routing.allocation.node_concurrent_recoveries: 2添加删除节点或负载均衡时并发恢复线程的个数,默认为4。
indices.recovery.max_size_per_sec: 0设置数据恢复时限制的带宽,如入100mb,默认为0,即无限制。
indices.recovery.concurrent_streams: 5设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5。
discovery.zen.minimum_master_nodes: 1设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.ping.timeout: 3s设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错。
discovery.zen.ping.multicast.enabled: false设置是否打开多播发现节点,默认是true。
discovery.zen.ping.unicast.hosts: ["host1", "host2:port", "host3[portX-portY]"]设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。
下面是一些查询时的慢日志参数设置index.search.slowlog.level: TRACEindex.search.slowlog.threshold.query.warn: 10sindex.search.slowlog.: 5sindex.search.slowlog.threshold.query.debug: 2sindex.search.slowlog.threshold.query.trace: 500ms
index.search.slowlog.threshold.fetch.warn: 1sindex.search.slowlog.: 800msindex.search.slowlog.threshold.fetch.debug:500msindex.search.slowlog.threshold.fetch.trace: 200ms
阅读(...) 评论()}