实现rabbitmq通过logstash对elasticsearch的增删改。

首先给大家介绍一下logstash是什么样的产品。

下面引用官网的话术:

 

LOGSTASH

集中、转换和存储数据

Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。

Logstash 能够动态地采集、转换和传输数据,不受格式或复杂度的影响。利用 Grok 从非结构化数据中派生出结构,从 IP 地址解码出地理坐标,匿名化或排除敏感字段,并简化整体处理过程。

简单的说,logstash 就是一个服务于elasticearch的,将有用的数据进行整理成elasticsearch规范的数据,然后存入elasticsearch库中。(个人理解,请勿喷。)

现在有一个需求,我们需要将发送到rabbimq的数据进行收集然后存入es中,或许有同学会问,为什么不直接调用es api直接操作数据,这里笔者想说一下,通过消息的形式将数据放入es,只是为了优化系统性能,通过消息的形式对es进行操作,对于服务器的并发量很高的情形,是一个很好的策略和方法。

好了废话不多说,下面开始给大家讲解一下总体思路。

(说明一下,本文章不讨论rabbitmq,还有elasticsearch 以及 logstash的配置和安装,以下操作都是建立在环境搭建完之后 ,实现rabbitmq对es的操作的配置操作。)

1.首先logstash要使用rabbitmq,我们需要在logstash里面下载一个的插件 logstash-input-rabbitmq ,我们需要是通过rabbitmq输入数据,所以使用input 插件,另一个插件就是output插件,因为是要输出数据到es, 顾名思义,我们就需要在logstash下载logstash-output-elasticsearch 的插件。

2.如果上面的插件已经安装成功,就可以修改logstash的配置文件信息了。

下面给大家贴出管道的配置文件 , 文件一个分为三个部分,分别为 input filter output。

1)新增的logstash管道的配置文件,以下红色字体只是注释实际情况需要删除。

input {
    rabbitmq {      
        host => "rabbitmq的ip:5672"
        vhost => "/"
        user => "rabbitmq用户名称"
        password => "rabbimq密码"
        durable => true
        exchange => "pro.community.exchange"    (此处是说明:这个选项是配置指定rabbimq的交换器,告诉logstash 从rabbitmq的哪个交换器读数据。)
        exchange_type => "direct"                        (交换器类型)
        key => "route.logstash.es.create"              (这个是routingkey)
        queue => "community_topic_create"          (rabbimq队列名称)
    }
}
filter {
         
}
output {
    elasticsearch {
        action => "create"          (对es的操作行为,具体可以看官网,这里是新增索引填create)
        hosts => ["elasticsearch的ip:9200"]
        user => "elastic"
        password => "密码"
        index => "索引名称"   
        document_id => "%{documentId}"   (指定es文档id,便于修改和删除)
        document_type => "%{documentType}"
    }
}

2)删除

input {
    rabbitmq {      
        host => "rabbitmq的ip:5672"
        vhost => "/"
        user => "rabbitmq用户名称"
        password => "rabbimq密码"
        durable => true
        exchange => "pro.community.exchange"    (此处是说明:这个选项是配置指定rabbimq的交换器,告诉logstash 从rabbitmq的哪个交换器读数据。)
        exchange_type => "direct"                        (交换器类型)
        key => "route.logstash.es.delete"              (这个是routingkey)
        queue => "community_topic_delete"          (rabbimq队列名称)
    }
}
filter {
         
}
output {
    elasticsearch {
        action => "delete" 
        hosts => ["elasticsearch的ip:9200"]
        user => "elastic"
        password => "密码"
        index => "索引名称"   
        document_id => "%{documentId}"   
        document_type => "%{documentType}"
    }
}

3, update

input {
    rabbitmq {      
        host => "rabbitmq的ip:5672"
        vhost => "/"
        user => "rabbitmq用户名称"
        password => "rabbimq密码"
        durable => true
        exchange => "pro.community.exchange"
        exchange_type => "direct"                
        key => "route.logstash.es.update"  
        queue => "community_topic_update"
    }
}
filter {
    mutate {
        update => { "topicName" => "%{topicName}" }   (更新需要指定映射的字段,其中%{}里面的是json数据字段对应的值。)
        update =>{"content"  => "%{content}" }     
        update => { "title"    => "%{title}"  }
        update =>{ "mode"     => "%{mode}" } 
      }
         
}
output {
    elasticsearch {
        action => "update" 
        hosts => ["elasticsearch的ip:9200"]
        user => "elastic"
        password => "密码"
        index => "索引名称"   
        document_id => "%{documentId}"   
        document_type => "%{documentType}"
    }
}

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值