最近需要搭建一套日志监控平台,结合系统本身的特性总结一句话也就是:需要将Kafka中的数据导入到elasticsearch中。那么如何将Kafka中的数据导入到elasticsearch中去呢,总结起来大概有如下几种方式:

  • Kafka->logstash->elasticsearch->kibana(简单,只需启动一个代理程序)
  • Kafka->kafka-connect-elasticsearch->elasticsearch->kibana(与confluent绑定紧,有些复杂)
  • Kafka->elasticsearch-river-kafka-1.2.1-plugin->elasticsearch->kibana(代码很久没更新,后续支持比较差)

elasticsearch-river-kafka-1.2.1-plugin插件的安装及配置可以参考:http://hqiang.me/2015/08/将kafka的数据导入至elasticsearch/

根据以上情况,项目决定采用方案一将Kafka中的数据存入到elasticsearch中去。

一、拓扑图

项目拓扑图如下所示:

此时消息的整体流向为:日志/消息整体流向Flume => kafka => logstash => elasticsearch => kibana

 A.Flume日志收集

  1. agent.sources = r1
  2. agent.channels = c1
  3. agent.sinks = s1
  4.  
  5. agent.sources.r1.type = exec
  6. agent.sources.r1.command = tail -F -n 0 /data01/monitorRequst.log
  7. agent.sources.r1.restart = true //解决tail -F进程被杀死问题
  8.  
  9. agent.channels.c1.type = memory
  10. agent.channels.c1.capacity = 1000
  11. agent.channels.c1.transactionCapacity = 100
  12.  
  13. agent.sinks.s1.type = avro
  14. agent.sinks.s1.port = 50001
  15. agent.sinks.s1.hostname = IP
  16. agent.sources.r1.channels = c1
  17. agent.sinks.s1.channel = c1

Flume日志收集过程中踩过的坑可以参考:http://www.digitalsdp.com/Experiencebbs/maintenance/506.jhtml

 B.Kafka Sink

  1. agent.sources = r1
  2. agent.channels = c2
  3. agent.sinks = s2
  4.  
  5. agent.sources.r1.type = avro
  6. agent.sources.r1.bind = IP
  7. agent.sources.r1.port = 50001
  8.  
  9. agent.channels.c2.type = memory
  10. agent.channels.c2.capacity = 1000
  11. agent.channels.c2.transactionCapacity = 100
  12.  
  13. agent.sinks.s2.type = org.apace.flume.sink.kafka.KafkaSink
  14. agent.sinks.s2.topic = XXX
  15. agent.sinks.s2.brokerList = IP:9091,IP:9092
  16. agent.sinks.s2.batchSize = 20
  17.  
  18. agent.sources.r1.channels = c2
  19. agent.sinks.s2.channel = c2

二、环境搭建

关于Kafka及Flume的搭建在这里不再详细论述,如有需要请参见本文其它说明。在这里重点说明logstash的安装及配置。

A.下载logstash的安装包;

B.新建kafka-logstash-es.conf置于logstash/conf目录下;

C.配置kafka-logstash-es.conf如下:

logstash的配置语法如下:

  1. input {
  2. ...#读取数据,logstash已提供非常多的插件,可以从fileredissyslog等读取数据
  3. }
  4.  
  5. filter{
  6. ...#想要从不规则的日志中提取关注的数据,就需要在这里处理。常用的有grokmutate
  7. }
  8.  
  9. output{
  10. ...#输出数据,将上面处理后的数据输出到fileelasticsearch
  11. }

示例:

  1. input {
  2. kafka {
  3. zk_connect => "c1:2181,c2:2181,c3:2181"
  4. group_id => "elasticconsumer" ---随意取
  5. topic_id => "xxxlog" ---与flume中的Channel保持一致
  6. reset_beginning => false
  7. consumer_threads => 5
  8. decorate_events => true
  9. codec => "json"
  10. }
  11. }
  12. output {
  13. elasticsearch {
  14. hosts => ["c4:9200","c5:9200"]
  15. index => "traceid"--与Kafkajson字段无任何关联关系,注意:index必须小写
  16. index => "log-%{+YYYY-MM-dd}"
  17. workers => 5
  18. codec => "json"
  19. }
  20. }

 运行logstash命令为:nohup bin/logstash -f /XXX/logstash/conf/kafka-logstash-es.conf &

三、调测过程中遇到的一些坑

A.在集成ELK过程中总以为head插件是必须的,其实head插件为非必需品。elasticsearch仅提供了一个数据存储的煤介,head为了让大家更方便的去查看数据;

B.采用以上方案进行布署时,当系统正常运行时,可以在elasticsearch服务器上http://IP:9200/*中搜索index是否创建成功

参考:https://www.slahser.com/2016/04/21/日志监控平台搭建-关于Flume-Kafka-ELK/

http://www.jayveehe.com/2017/02/01/elk-stack/

http://wdxtub.com/2016/11/19/babel-log-analysis-platform-1/

日志收集之--将Kafka数据导入elasticsearch的更多相关文章

  1. Logstash学习之路(四)使用Logstash将mysql数据导入elasticsearch(单表同步、多表同步、全量同步、增量同步)

    一.使用Logstash将mysql数据导入elasticsearch 1.在mysql中准备数据: mysql> show tables; +----------------+ | Table ...

  2. 通过logstash-input-mongodb插件将mongodb数据导入ElasticSearch

    目的很简单,就是将mongodb数据导入es建立相应索引.数据是从特定的网站扒下来,然后进行二次处理,也就是数据去重.清洗,接着再保存到mongodb里,那么如何将数据搞到ElasticSearch中 ...

  3. Hive数据导入Elasticsearch

    Elasticsearch Jar包准备 所有节点导入elasticsearch-hadoop-5.5.1.jar /opt/cloudera/parcels/CDH-5.12.0-1.cdh5.12 ...

  4. 日志收集ELK+kafka相关博客

    SpringBoot+kafka+ELK分布式日志收集 使用 logstash + kafka + elasticsearch 实现日志监控 Kibana 安装 与 汉化 windows系统安装运行f ...

  5. ABP 使用ElasticSearch、Kibana、Docker 进行日志收集

    ABP 使用ElasticSearch.Kibana.Docker 进行日志收集 后续会根据公司使用的技术,进行技术整理分享,都是干货哦别忘了关注我!!! 最近领导想要我把项目日志进行一个统一收集,因 ...

  6. 【大数据实战】将普通文本文件导入ElasticSearch

    以<刑法>文本.txt为例. 一.格式化数据 1,首先,ElasticSearch只能接收格式化的数据,所以,我们需要将文本文件转换为格式化的数据---json. 下图为未处理的文本文件. ...

  7. 安装配置elasticsearch、安装elasticsearch-analysis-ik插件、mysql导入数据到elasticsearch、安装yii2-elasticsearch及使用

    一.安装elasticsearch 获取elasticsearch的rpm:wget https://download.elastic.co/elasticsearch/release/org/ela ...

  8. 用fabric部署维护kle日志收集系统

    最近搞了一个logstash kafka elasticsearch kibana 整合部署的日志收集系统.部署参考lagstash + elasticsearch + kibana 3 + kafk ...

  9. SpringBoot使用Graylog日志收集

    本文介绍SpringBoot如何使用Graylog日志收集. 1.Graylog介绍 Graylog是一个生产级别的日志收集系统,集成Mongo和Elasticsearch进行日志收集.其中Mongo ...

随机推荐

  1. 使用MAVEN打JAR,直接使用

    一.简单的方法: 首先在pom.xml里面添加: <build> <plugins> <plugin> <artifactId>maven-assemb ...

  2. Maven项目同时使用lib下的Jar包

    测试于:Maven 3.0.5, eclipse-jee-indigo-SR2-win32 配置步骤: 在WEB-INF下新建lib目录并加入自己的包: 右键项目 -> Build Path - ...

  3. angularjs也支持script形式的template

    <script type="text/ng-template" id="name"> https://docs.angularjs.org/api/ ...

  4. scala VS python2 操作shell对比例子

    Scala: /** * Created by sunxu on 2015/9/30. */ import scala.sys.process._ import java.io.File //在相应目 ...

  5. SSH使用Log4j

    1. 将Jar文件log4j-1.2.14.jar导入项目. 2. 在src文件夹下新建log4j.properties文件: log4j.rootLogger = debug,stdout,D,E ...

  6. HTML:Hyper Text Markup Language 超文本标记语言

    1.HTML是什么? *Hyper Text Markup Language 超文本标记语言 *Hyper Text:超链接.把不同空间的资源,整合在一起,形成逻辑上的网状结构. *Markup La ...

  7. Webwork【08】结合实战简析Controller 配置

    虽然现在 MVC 框架层出不穷,但做为 Struts 前身的 webwork. 其经典程度不亚于贝利之于足球,双 11 之于淘宝特卖. 本篇将结合 webwork controller 配置文件 xw ...

  8. 《Unix&Linux大学教程》学习笔记二:指令常识

    1:指令的本质——调用可执行程序 在Shell输入命令时,其实就是根据名称运行相应的程序. 2:在系统中查找程序 which 指令名 type 指令名 3:时间与日历 date [-选项] 参数 ca ...

  9. ubuntu普通账户获取root权限的方法以及su和su -的区别

    打开命令窗口 输入命令:sudo passwd root 然后按照上图中的操作进行即可. su和su -的命令的不同: su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shel ...

  10. excel 妙用选择性粘贴

    需要注意的是转置功能,是经常会用到的功能.