精华内容
下载资源
问答
  • 分布式日志收集系统

    千次阅读 2013-01-31 17:48:12
    转自:http://blog.csdn.net/wanweiaiaqiang/article/details/7065370 我的独立博客网址是:... ... ...欢迎大家相互交流,共同提高技术。...以下是我在公司内部分享的关于分布式日志收集系统的PP

    转自:http://blog.csdn.net/wanweiaiaqiang/article/details/7065370

    我的独立博客网址是:http://wuyouqiang.sinaapp.com/

    我的新浪微博:http://weibo.com/freshairbrucewoo

    欢迎大家相互交流,共同提高技术。

    以下是我在公司内部分享的关于分布式日志收集系统的PPT内容,现在与大家分享,希望对于需要使用的人能够起到基本的入门作用或是了解!

    1.分布式日志收集系统:背景介绍

    许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下特征:

    (1) 构建应用系统和分析系统的桥梁,并将它们之间的关联解耦;

    (2) 支持近实时的在线分析系统和类似于Hadoop之类的离线分析系统;

    (3) 具有高可扩展性。即:当数据量增加时,可以通过增加节点进行水平扩展。

     

    2.分布式日志收集系统:Facebook Scribe主要内容

    (1)Scribe简介及系统架构

    (2)Scribe技术架构

    (3)Scribe部署结构

    (4)Scribe主要功能和使用方案

    (5)Scribe的具体应用实例

    (6)Scribe的扩展

    (7)Scribe研究体会

     

    3.Scribe简介

    Scribe是facebook开源的日志收集系统,在facebook内部已经得到大量的应用。 Scribe是基于一个使用非阻断C++服务器的thrift服务的实现。它能够从各种日志源上收集日志,存储到一个中央存储系统 (可以是NFS,分布式文件系统等)上,以便于进行集中统计分析处理。它为日志的“分布式收集,统一处理”提供了一个可扩展的,高容错的方案。

     

    4.Scribe的系统架构

    如上图所示:Scribe从各种数据源上收集数据,放到一个共享队列上,然后push到后端的中央存储系统上。当中央存储系统出现故障时,scribe可以暂时把日志写到本地文件中,待中央存储系统恢复性能后,scribe把本地日志续传到中央存储系统上。

     

    5.Scribe的技术架构

    如上图所示:Scribe服务器底层数据通信框架是Thrift,Thrift也是Facebook开源的,并得到了广泛的使用。也用到了C++的准标准库boost,主要使用共享指针和文件相关的功能。Thrift也用到了libevent开发库和socket编程技术。

     

    6.Scribe部署结构

     

    7.Scribe的主要功能

    1.支持多种存储类型:7种并且可扩展

    2.日志自动切分功能:按文件大小和时间切分

    3.灵活的客户端:

    (1)支持多种常用语言(Thrift提供支持);

    (2)可与应用系统集成;可以作实现独立客户端

    4.支持日志分类功能(Facebook有上百种日志分类)

    5.其他功能

    (1)连接池

    (2)灵活的日志缓存大小

    (3)多线程功能(消息队列)

    (4)scribe服务器之间可以转发日志

    6.以上功能都是可以通过配置文件来灵活配置

     

    8.Scribe使用方案

    (1)和产生日志文件的应用系统集成

    scribe能够和各种应用系统很好的集成是因为它提供几乎所有的开发语言的开发包

    (2)应用系统在本地产生日志文件,使用一个独立运行的客户端程序同样,独立的客户端也可以采用各种语言开发,我们采用的是python来开发客户端

     

    9.Scribe的具体应用实例

    1.Facebook肯定大量的使用,主要用于处理Facebook级别日志,一旦有新的日志分类生成,Scribe将自动处理。(Facebook有上百个日志分类)。

    2. Twitter:一款分布式实时统计系统Rainbird使用了scribe

    3.我的公司:

    (1)*****

    (2)*****

    (3)*****

    (4)*****

    (5)*****

    (6)*****

    4.其他

     

    10.Scribe的扩展:存在的问题

    虽然scribe系统是如此的优秀,但是也存在着一些不足和问题,针对存在的问题我们对scribe进行扩展。我们发现scribe存在的主要问题如下:

    1、单点故障问题

    有三个地方存在单点故障:

    (1)中心服务器

    (2)本地服务器

    (3)收集日志的客户端程序

    2、日志丢失问题

    当日志文件发生切分的时候可能导致日志丢失

    3、历史日志收集问题

    4、scribe服务器挂了没有及时通知

     

    11.Scribe的扩展:问题解决方案

    针对上面我们提出的问题,主要提供如下相应的解决方案:

    1.中心服务器单点故障

    可以部署多个中心服务器,然后本地服务器通过配置文件可以自动在这些服务器之间进行切换

    2.其余的问题我们都是通过自己写的python客户端解决的

    python客户端我们是基于一个开源的项目进行二次开发的,因为开源的python客户端功能很简单,只是跟踪一个日志文件并把日志文件的数据读取导入到scribe本地服务器

     

    12.Scribe的扩展:python客户端

    我们开发的python客户端主要实现了如下功能:

    1、解决本地scribe服务器的单点故障

    我们可以通过配置多个本地scribe服务器(通过配置文件配置,相当的灵活),python脚本会根据配置的这些服务器自动切换(当一个scribe挂掉之后自动切换,如果挂掉本地scribe服务器重新启动以后又会自动切换回去。

    2、解决日志丢失的问题

    开源的python客户端是按照固定的时间间隔扫描日志文件是否有变化,如果在这个时间段内发生日志切换会导致日志丢失。我们同样是采用这个方式去检测日志文件,不过我们在发生日志切分的时候会再次去检测被切分走得日志文件是否已经收集完毕。

    3、解决历史日志收集

    如果在我们运行python客户端以前已经产生了日志,这部分的日志收集也是我们新增的一个功能

    4、解决自身的单点故障问题

    不排除我们的python客户端也会挂掉的时候,当我们下次启动怎样保证我们收集的日志不重复不丢失是需要解决的问题。我们的解决方案就是对已经收集的日志文件的各种信息做序列化(主要是已经收集日志文件的位置)

    5、收集日志文件怎样保证按照日志生成的顺序收集

    日志的生成顺序就是跟他们文件的建立时间是相关的,通过这一点我们可以实现。

    6、及时通知机制

    为了及时的通知到scrib服务器挂掉的信息到相关人员,我们开发了邮件通知机制,就是当某一个本地scribe服务器挂掉以后会触发邮件发送

     

    13.Scribe研究体会

    怎样从我们工作的内容深入学习?

    1.每个人在公司负责开发的内容都是很有限的,怎样从我们开发的内容入手深入研究和学习更多的知识?

    2.Scribe研究的例子!

     

    14.总结:以上内容有一些是来至互联网,在加入了自己的一些理解,希望对需要的人有所帮助!


    展开全文
  • ELK分布式日志收集系统的搭建

    万次阅读 2020-03-30 14:44:48
    ELK分布式日志收集系统的搭建 filebeat+logstash+elasticsearch+kibana搭建一个分布式的日志收集系统

    ELK分布式日志收集系统的搭建

    filebeat+logstash+elasticsearch+kibana搭建一个分布式的日志收集系统

    1.linux下filebeat下载安装

    • deb:安装
     curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.1-amd64.deb
    
    sudo dpkg -i filebeat-7.6.1-amd64.deb
    
    • 启动filebeat
     sudo service filebeat start
    
    • filebeat配置文件在/etc/filebeat/filebeat.yml中
    #=========================== Filebeat inputs =============================
    
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/folio/okapi/okapi.log
      tag: ["okapi"]
      fields:
        index: 'filebeat-7.6-okapi'
    - type: log
      enabled: true
      paths:
        - /var/lib/okapi/mod-circulation/info.log
      tag: ["circulation"]
      fields:
        index: 'filebeat-7.6-circulation'
    
      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
      multiline.negate: true
      multiline.match: after
    #============================= Filebeat modules ===============================
    
    filebeat.config.modules: 
      path: ${path.config}/modules.d/*.yml
      reload.enabled: false
    
    #==================== Elasticsearch template setting ==========================
    
    setup.template.settings:
      index.number_of_shards: 1
    
    #============================== Kibana =====================================
    
    setup.kibana:
    
    #----------------------------- Logstash output --------------------------------
    output.logstash:
      hosts: ["172.168.13.208:5044"]
    
    #================================ Processors=====================================
    
    processors:
      - add_host_metadata: ~
      - add_cloud_metadata: ~
      - add_docker_metadata: ~
      - add_kubernetes_metadata: ~
    
    
    

    3.linux下logstash下载安装

    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
    
    sudo apt-get install apt-transport-https
    
    echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
    
    sudo apt-get update && sudo apt-get install logstash
    
    • logstash启动
     sudo systemctl start logstash.service
    
    • logstash配置文件在/etc/logstash目录下conf.d 中以config为结尾的配置文件
    
    input {
    
      beats {
               port => 5044
            }
    }
    filter {
      grok {
        match => { "message" => "(?<timestamp>%{TIMESTAMP_ISO8601})" }
      }
    }
    
    output {
    
      if [fields][index] == "filebeat-7.6-okapi" {
        elasticsearch {
          hosts => ["172.168.13.208:9200"]
          ## index 默认值是"logstash-%{+YYYY.MM.dd}",不允许包含大写字母
          index => "filebeat-okapi"
          }
       }else if [fields][index] == "filebeat-7.6-circulation" {
        elasticsearch {
          hosts => ["172.168.13.208:9200"]
          index => "filebeat-circulation"
          }
        }
    }
    
    

    3.linux下elasticsearch下载安装

     wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
    
    sudo apt-get install apt-transport-https
    
    echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
    
    sudo apt-get update && sudo apt-get install elasticsearch
    
    • 要将Elasticsearch配置为在系统启动时自动启动,请运行以下命令:
    sudo /bin/systemctl daemon-reload
    sudo /bin/systemctl enable elasticsearch.service
    
    • Elasticsearch启动停止
    sudo systemctl start elasticsearch.service
    sudo systemctl stop elasticsearch.service
    
    • elasticsearch配置文件在/etc/elasticsearch/elasticsearch.yml
    
    # ------------------------------------ Node ------------------------------------
    
    node.name: master
    
    # ----------------------------------- Paths ------------------------------------
    
    path.data: /var/lib/elasticsearch
    
    path.logs: /var/log/elasticsearch
    
    # ---------------------------------- Network -----------------------------------
    
    network.host: 0.0.0.0
    
    # --------------------------------- Discovery ----------------------------------
    
    cluster.initial_master_nodes: ["master"]
    
    # ---------------------------------- Various -----------------------------------
    
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    
    

    3.linux下kibana下载安装

    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
    
    sudo apt-get install apt-transport-https
    
    echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
    
    sudo apt-get update && sudo apt-get install kibana
    
    • 要将Kibana配置为在系统启动时自动启动,请运行以下命令:
    sudo /bin/systemctl daemon-reload
    
    sudo /bin/systemctl enable kibana.service
    
    • Kibana启动停止
    sudo systemctl start kibana.service
    
    sudo systemctl stop kibana.service
    
    • logstash配置文件在/etc/kibana/kibana.yml
    
    server.basePath: "/kibana"
    #i18n.locale: "en"
    i18n.locale: "zh-CN"
    server.port: 5601
    server.host: "0.0.0.0"
    elasticsearch.hosts: ["http://127.0.0.1:9200/"]
    kibana.index: ".kibana"
    
    
    展开全文
  • Flume 分布式日志收集系统 概述 运行机制 安装 部署 使用 配置文件书写 Source选型 Channel选型 Sink选型 系统结构图 Flume 拦截器(时间戳、静态、正太筛选、UUID、主机) Flume优化(负载均衡、故障转移)

    Flume 概述

    • 提供的一个高可用的高可靠的分布式海量日志采集、聚合和传输的系统
    • 支持在日志系统中定制各类数据发送方,用于收集数据
    • 提供对数据进行简单处理,并可定制数据接受方

    Flume 官方英文文档

    运行机制

    Flume核心(agent:把 数据 从 数据源(source) 收集 过来,再将 收集到的数据 送到 指定目的地(sink);为了保证输送的过程一定成功,在送到目的地(sink)之前,会先缓存数据到channel(临时存储),当Channel存储到一定值时,将数据写入到Sink中,待数据完全传输到目的地(sink)后,Flume再删除自己缓存的数据, agent本身是一个 Java进程,一般运行在日志收集节点

    每一个 agent相当于一个数据传递员,内部有三个组件

    • Source采集源,用于跟数据源对接,以采集数据;
    • Sink目的地,采集数据的传送目的,可以是下一级 agent的采集源 或 最终存储系统(HDFS 、Hive 或 Hbase
    • Channel临时存储容器,它将从source处接收到的event格式数据缓存起来,直到它们都到达sinks
      channal是一个完整的事务,这一点保证了数据在收发的时候的一致性. 并且它可以和任意数量的sourcesink链接

    在整个数据的传输过程中,流动的是 eventFlume内部数据传输的最基本单元,是一个字节数组)

    • event代表着一个数据的最小完整单元,也是事务的基本单位, 本身为一个字节数组Source 流向 Channel 再到 Sink
    • event将传输的数据进行封装,完整的 event包括:event headers 和 event body两部分,其中 event body就是 Flume收集到的日记记录
    • 收集文本文件时,通常一个event代表一行数据

    Flume安装部署使用

    安装

    前置条件:

    • Java 1.7 or later
    • sourceschannelssinks提供充足的内存
    • channles提供充足的磁盘空间
    • agent提供读和写权限

    安装步骤:

    1. 上传安装包到数据源所在节点上
    2. 解压 tar -zxvf apache-flume-1.9.0-bin.tar.gz
    3. 进入 flume的目录,修改 conf / flume-env.sh,在里面配置 JAVA_HOME
    4. 配置flume环境变量:
      vi ~/.bash_profile
      
      export FLUME_HOME=/root/bigdata/flume/bin
      export PATH=$FLUME_HOME/bin:$PATH
      
      source /root/.bash_profile
      
    5. 检查是否配置成功:flume-ng version 查看flume版本
    6. 根据数据采集需求在配置文件中书写配置采集方案(文件名可任意自定义)
    7. 启动Flume并运行配置文件Flume路径/Flume-ng agent -n agent名字 -f 配置文件名

    配置文件书写

    配置 Flume 文件 步骤

    1. Agent、及其下的 source、channal 和 sink 命名
      为提高辨识度,命名格式一般如下:
      Agent命名为:source类型-channel类型-sink类型。如:exec-memory-kafka
      source命名为:source类型-name。如:exec-source
      channal命名为:channal 类型-name。如:memory-channel
      sink命名为:sink类型-name。如:kafka-sink

    2. 选型 并 配置 source

    3. 选型 并 配置 channal

    4. 选型 并 配置 sink

    5. sourcesink 通过channal绑定起来

      Agent名字.sources.source名字.channel=channel名字
      Agent名字.sinks.sink名字.channel=channel名字
      
      例如:
      exec-memory-avro.sources.exec-source.channels = memory-channel
      exec-memory-avro.sinks.avro-sink.channel = memory-channel
      

    选型并配置Source

    选型及配置格式:

    agent名字 . sources . source名字 . type = Source 类型
    agent名字 . sources . source名字 . 配置2 = value 
    agent名字 . sources . source名字 . 配置3 = value
    

    Avro Source:序列化数据源 通过网络传输

    用于监听IP(非必本机,而是网络数据来源地IP) 和端口,用于获取数据
    需要指定type,bind,ip、port,其他都可以使用默认配置,并且可以配置拦截IP的请求,对其不进行监听
    模板配置如下:
    在这里插入图片描述
    在这里插入图片描述

    ThriftSource:序列化数据源

    Avro Source相差无几,但是不支持IP过滤
    模板配置如下:
    在这里插入图片描述

    Exec Source:执行 指定的Linux命令行的数据源

    可以运行指定的Unix命令并一直执行,例如:读取文件 作为flume数据的来源
    需要配置type 和 运行命令;但不保证数据一定能够输送到channel,如果出现问题,则数据可能丢失
    在这里插入图片描述
    模板配置如下:
    在这里插入图片描述

    Spooling Directory Source: 监控指定目录

    允许用户把文件放到磁盘上所谓Spooling目录,然后监控指定目录,一旦出现新的文件,就会解析新文件的内容,并传输到定义的sink中,传输过程中的解析逻辑可以自行指定,如果文件读取完毕之后,文件会重命名,或者可选择删除
    其可靠性较强,而且即使flume重启,也不会丢失数据,为了保证可靠性,只能是不可变的,唯一命名的文件可以放在目录下,而且文件生成之后,一般不会更改,所以适合离线数据处理
    模板配置如下:
    在这里插入图片描述

    Taildir Source :监控指定的多个文件

    一旦文件内有新写入的数据,就会将其写入到指定的sink
    来源可靠性高,不会丢失数据,建议使用,但目前不适用于Windows系统
    其不会对于跟踪的文件有任何处理,不会重命名也不会删除,不会做任何修改,却别与Spooling Source
    目前不支持读取二进制文件,支持一行一行的读取文本文件
    模板配置如下:
    在这里插入图片描述

    • positionFile 参数:用于记录每个拖尾文件的索引节点,绝对路径和最后位置,JSON格式的文件,默认为〜/ .flume / taildir_position.json
    • filegroups 参数:以空格分隔的文件组列表。每个文件组指示一组要尾部的文件
    • filegroups.文件组名:文件组的绝对路径。正则表达式(而非文件系统模式)只能用于文件名
    • fileHeader 是否添加存储绝对路径文件名的标头 ,默认为false
    • headers.文件组名字.headerKey:标头值是使用标头键设置的值。可以为一个文件组指定多个标题

    NETCAT Source:通过指定 端口和ip 监控的数据源

    监听指定的端口,把传入的每一行文本都作为event传入sink中,可以通过nc -k -l [host] [port]来作为外部数据来源,flume可以通过此种来源进行监听
    模板配置如下:
    在这里插入图片描述

    Kafka Source:直接对接Kafka的数据源

    Kafka指定的topic中读取数据,如果您有多个运行的Kafka Source,则可以为它们配置相同的Consumer Group,以便每个源都可以读取主题的唯一分区集
    模板配置如下:
    在这里插入图片描述

    • kafka.topicsKafka使用者将从topics中读取消息,值为:以逗号分隔的topic列表
    • kafka.bootstrap.servers:来源使用的Kafka集群中的代理列表
    • kafka.consumer.group.id:唯一识别的消费群体。在多个来源或代理中设置相同的ID表示它们属于同一使用者组
    • batchSize:批量写入通道的最大消息数 ,默认为: 1000
    • batchDurationMillis:将批处理写入通道之前的最长时间(以毫秒为单位)默认为: 1000

    选型并配置Channel

    选型及配置格式:

    agent名字 . channels. channels名字 . type = channels类型
    agent名字 . channels. channels名字 . 配置2 = value 
    agent名字 . channels. channels名字 . 配置3 = value
    

    Memory Channel 临时存储到内存中

    数据存储在内存队列中,可配置的对列大小。对于需要更高吞吐量并准备在代理发生故障时丢失分段数据的Source而言,它是理想的选择
    在这里插入图片描述

    • capacity 通道中存储的最大事件数 ,默认为:100
    • transactionCapacity 通道从source获取或提供给接收器的最大事件数 ,默认为:100
    • byteCapacityBufferPercentage 定义了byteCapacity与 通道中所有事件的总大小之间的缓冲区百分比,以反映报头中的数据, 默认为20%
    • byteCapacity 允许的最大内存总字节数,默认值是等于JVM可用最大内存的80%

    File Channel: 临时存储到指定文件中

    在这里插入图片描述

    • checkpointDir 用于存储 检查点文件 的目录 ,默认为~/.flume/file-channel/checkpoint
    • dataDirs 逗号分隔的目录列表,用于存储日志文件。在不同的磁盘上使用多个目录可以提高文件通道的性能, 默认为~/.flume/file-channel/data

    Kafka Channel: 临时存储在Kafka集群中(必须单独安装)

    Kafka提供高可用性和复制功能,因此,如果代理或Kafka代理崩溃,这些事件将立即对其他接收器可用
    在这里插入图片描述

    • kafka.bootstrap.servers 通道使用的Kafka集群中的代理列表 ,格式是逗号分隔的主机名列表:端口
    • kafka.topicchannels将使用Kafkatopic 默认为flume-channel
    • kafka.consumer.group.id 通道用于在Kafka注册的用户组ID。多个通道必须使用相同的主题和组,以确保当一个代理发生故障时,另一个代理可以获得数据

    JDBC Channel

    存储在由数据库支持的持久存储中。JDBC通道目前支持嵌入式Derby。这是一个持久的渠道,对于可恢复性非常重要的流动是理想的
    在这里插入图片描述

    选型并配置Sink

    选型及配置格式:

    agent名字 . sinks. sink名字 . type = channels类型
    agent名字 . sinks. sink名字 . 配置2 = value 
    agent名字 . sinks. sink名字 . 配置3 = value
    

    HDFS Sink:写入到HDFS

    支持创建文本和序列文件,可以根据 写入时间、数据大小或 事件数 定期滚动文件(关闭当前文件并创建一个新文件)。还可按时间戳或启动器对数据进行存储/分区
    HDFS目录路径可能包含格式化转义序列,这些序列将由HDFS接收器取代,以生成用于存储事件的目录/文件名。使用此接收器需要安装hadoop,以便Flume可以使用Hadoop jarHDFS群集进行通信。
    在这里插入图片描述 在这里插入图片描述
    路径中可使用的转义字符表:
    在这里插入图片描述

    Hive Sink:写入到Hive

    将包含 分隔文本或JSON数据的事件 直接流到Hive表或分区中。使用Hive事务编写事件。一旦将一组事件提交给Hive,它们就会立即对Hive查询可见。flume将流向的分区可以预先创建,如果流缺失,则可以选择创建分区。来自传入event数据的字段被映射到Hive表中的相应列
    在这里插入图片描述在这里插入图片描述
    上面的配置会将时间戳四舍五入到最后10分钟。
    例如,2012年6月12日,时间戳标头设置为11:54:34 AM,“国家”标头设置为“中国”的事件将评估为该分区(大陆=“ asia”,国家=“中国”,时间=‘2012-06-12-11-50’。序列化器配置为接受包含三个字段的制表符分隔的输入,并跳过第二个字段。
    Hive下沉提供了以下序列化器:
    JSON:处理UTF8编码的Json event(严格语法)时,不需要进行配置。JSON中的对象名称直接映射到Hive表中具有相同名称的列。内部使用org.apache.hive.hcatalog.data.JsonSerDe,但独立于Hive表的Serde。该序列化程序需要安装HCatalog
    DELIMITED:处理简单的分隔文本事件。内部使用LazySimpleSerde,但独立于Hive表的Serde
    在这里插入图片描述
    Hive表 demo :
    create table weblogs ( id int , msg string ) partitioned by (continent string, country string, time string) clustered by (id) into 5 buckets stored as orc;

    Avro Sink:对接Avro source

    该接收器构成了Flume分层收集支持的一半。发送到该接收器的Flume事件将转换为Avro Event,并发送到已配置的主机名/端口对。这些事件是从已配置的通道中以已配置的批次大小批量获取的
    在这里插入图片描述
    Avro Sink Demo
    在这里插入图片描述

    Kafka Sink:写入到Kafka实时消息队列

    可以将数据发布到 Kafka topic。目标之一是将FlumeKafka集成在一起,便于 批处理系统 处理来自各种Flume Source的数据
    当前支持Kafka 0.10.1.0或更高版本。测试已完成至2.0.1,这是发行时的最高可用版本
    在这里插入图片描述
    Kafka Sink Demo
    在这里插入图片描述

    写入到HBase

    Hbase配置是从类路径中遇到的第一个hbase-site.xml中提取的。由配置指定的HbaseEventSerializer类实现Event的转换为HBase并写入或增加到Hbase中。该接收器提供与HBase相同的一致性保证,HBase当前是按行原子性。如果HBase无法写入某些event,则接收器将重播该事务中的所有事件。

    HBaseSink:同步写入到HBase

    HBaseSink支持将数据写入安全的HBase。代理运行的用户必须具有对接收器配置为写的表的写权限。可以在配置中指定用于对KDC进行身份验证的主体和密钥表。Flume代理的类路径中的hbase-site.xml必须将身份验证设置为kerberos
    为了方便起见,Flume随附了两个串行器。SimpleHbaseEventSerializer(org.apache.flume.sink.hbase.SimpleHbaseEventSerializer)将事件主体原样写入HBase,并可选地增加Hbase中的列。这主要是一个示例实现。RegexHbaseEventSerializer(org.apache.flume.sink.hbase.RegexHbaseEventSerializer)基于给定的regex分解事件主体,并将每个部分写入不同的列。
    在这里插入图片描述
    Hbase Sink Demo
    在这里插入图片描述
    HBase2Sink等效于HBase 2.XHBaseSink。所提供的功能和配置参数与HBaseSink相同(接收器类型和包/类名称中的hbase2标记除外)。
    类型是FQCN:org.apache.flume.sink.hbase2.HBase2Sink

    Async HBase Sink:异步写入到Hbase

    使用异步模型将数据写入HBase。由配置指定AsyncHbaseEventSerializer类实现将Event转换为HBase并写入或增加到Hbase中。该Sink使用Asynchbase API写入HBase。该Sink提供与HBase相同的一致性保证,HBase当前是按行原子性。如果HBase无法写入某些事件,则Sink将重播该事务中的所有事件。AsyncHBaseSink只能与HBase 1.x一起使用。其使用的异步客户端库不适用于HBase2
    类型为FQCN:org.apache.flume.sink.hbase.AsyncHBaseSink
    在这里插入图片描述
    Hbase Sink Demo
    在这里插入图片描述

    Flume 采集系统结构图

    • 单个 agent 采集数据在这里插入图片描述
    • 两个agent串联;单个agent包含多个channelsink
      在这里插入图片描述
    • 多级 agent之间串并联在这里插入图片描述

    Flume 拦截器

    Source读取events发送到Sink的时候,会对event 进行封装,包括event header 和 event body两部分,events header中加入一些有用的信息,event body为数据
    flume中的拦截器(interceptor),便是用于sourcechannel之间,用来更改或者检查Flume的events数据;或者对events的内容进行过滤,完成初步的数据清洗

    Interceptors拦截器

    Timestamp Interceptor:时间戳拦截器

    将当前时间戳(毫秒)加入到events header中,key名为:timestamp,值为当前时间戳。
    比如在使用HDFS Sink时候,根据events的时间戳生成结果文件,hdfs.path = hdfs://cdh5/tmp/dap/%Y%m%d hdfs.filePrefix = log%Y%m%d%H:会根据时间戳将数据写入相应的文件中。但可以用其他方式代替(设置useLocalTimeStamp = true

    agent名字 . sources . source名字 . interceptors = 命名拦截器
    agent名字 . sources . source名字 . interceptors . 拦截器名 . type = org.apache.flume.interceptor.TimestampInterceptor$Builder
    

    Static Interceptor:静态拦截器

    用于在events header中加入一组静态的key和value
    拦截器的配置如下:

    agent名字 . sources . source名字 . interceptors = 命名拦截器
    agent名字 . sources . source名字 . interceptors . 拦截器名 . type = static
    agent名字 . sources . source名字 . interceptors . 拦截器名 . key = 静态拦截器的键
    agent名字 . sources . source名字 . interceptors . 拦截器名 . value = 静态拦截器的值
    

    Regex FilteringInterceptor 根据正则匹配事件

    筛选出与配置的正则表达式相匹配的事件。可以用于包含事件和排除事件。常用于数据清洗,通过正则表达式把数据过滤出来
    拦截器配置如下: 例: 1:2.3:2

    agent名字 . sources . source名字 . interceptors = 命名拦截器
    agent名字 . sources . source名字 . interceptors . 拦截器名 . regex = (\\d):(\\d):(\\d)
    

    其它拦截器

    UUID InterceptorUUID拦截器

    用于在每个events header生成一个UUID字符串
    例如:b5755073-77a9-43c1-8fad-b7a586fc1b97。生成的UUID可以在sink中读取并使用。

    Host Interceptor:主机名拦截器

    将运行Flume agent主机名 或 IP地址加入events header中,key名为:host(也可自定义)

    日志收集案例

    案例场景:A、B 两台日志服务器实时生产日志主要类型为:access.lognginx.logweb.log

    现在要求:把 A、B 机器中的 access.lognginx.logweb.log 采集汇总到 C 机器上,然后统一收集到 hdfs 中。但是在 hdfs 中要求的目录为:

    /source/logs/access/20200101/**
    /source/logs/nginx/20200101/**
    /source/logs/web/20200101/**
    

    重点:利用拦截器在数据中添加标识,进行数据的区分,

    flume的收集架构图:
    在这里插入图片描述

    实现步骤

    1. 在服务器 A 和服务器 B 上创建配置文件,命名为exec-memory-avro.conf,其配置如下:
      # 命名 agent 及其下的 Source、channel 和 sink
      exec-memory-avro.sources = access-source nginx-source web-source
      exec-memory-avro.sinks = avro-sink
      exec-memory-avro.channels = memory-channel
      
      # 选型并配置source
      exec-memory-avro.sources.access-source.type = exec
      exec-memory-avro.sources.access-source.command = tail -F /root/logs/access.log
      exec-memory-avro.sources.access-source.interceptors = i1
      exec-memory-avro.sources.access-source.interceptors.i1.type = static
      # static 拦截器的功能就是往采集到的数据的 header 中插入自己定义的 key-value 对
      exec-memory-avro.sources.access-source.interceptors.i1.key = type
      exec-memory-avro.sources.access-source.interceptors.i1.value = access
      
      exec-memory-avro.sources.nginx-source.type = exec
      exec-memory-avro.sources.nginx-source.command = tail -F /root/logs/nginx.log
      exec-memory-avro.sources.nginx-source.interceptors = i2
      exec-memory-avro.sources.nginx-source.interceptors.i2.type = static
      exec-memory-avro.sources.nginx-source.interceptors.i2.key = type
      exec-memory-avro.sources.nginx-source.interceptors.i2.value = nginx
      
      exec-memory-avro.sources.web-source.type = exec
      exec-memory-avro.sources.web-source.command = tail -F /root/logs/web.log
      exec-memory-avro.sources.web-source.interceptors = i3
      exec-memory-avro.sources.web-source.interceptors.i3.type = static
      exec-memory-avro.sources.web-source.interceptors.i3.key = type
      exec-memory-avro.sources.web-source.interceptors.i3.value = web
      
      # 选型并配置channel
      exec-memory-avro.channels.memory-channel.type = memory
      exec-memory-avro.channels.memory-channel.capacity = 20000
      exec-memory-avro.channels.memory-channel.transactionCapacity = 10000
      
      # 选型并配置sink 
      exec-memory-avro.sinks.avro-sink.type = avro
      exec-memory-avro.sinks.avro-sink.hostname = 192.168.19.137
      exec-memory-avro.sinks.avro-sink.port = 44444
      
      # 绑定source 、sink 和 channel
      exec-memory-avro.sources.access-source.channels = memory-channel
      exec-memory-avro.sources.nginx-source.channels = memory-channel
      exec-memory-avro.sources.web-source.channels = memory-channel
      exec-memory-avro.sinks.avro-sink.channel = memory-channel
      
    2. 在服务器 C 上创建配置文件 avro-memory-hdfs.conf 文件内容为
      # 命名 agent 及其下的 Source、channel 和 sink
      avro-memory-hdfs.sources = avro-source
      avro-memory-hdfs.sinks = hdfs-sink
      avro-memory-hdfs.channels = memory-channel
      
      # 选型并配置source
      avro-memory-hdfs.sources.avro-source.type = avro
      avro-memory-hdfs.sources.avro-source.bind = 192.168.19.137
      avro-memory-hdfs.sources.avro-source.port =44444
      #添加时间拦截器
      avro-memory-hdfs.sources.avro-source.interceptors = i1
      avro-memory-hdfs.sources.avro-source.interceptors.i1.type = org.apache.flume.interceptor.TimestampInterceptor$Builder
      
      # 选型并配置channels
      avro-memory-hdfs.channels.memory-channel.type = memory
      avro-memory-hdfs.channels.memory-channel.capacity = 20000
      avro-memory-hdfs.channels.memory-channel.transactionCapacity = 10000
      
      # 选型并配置sink
      avro-memory-hdfs.sinks.hdfs-sink.type = hdfs
      #%{type} 可以将前面的数据中的key对应的value取出
      avro-memory-hdfs.sinks.hdfs-sink.hdfs.path=hdfs://192.168.19.137:9000/headlines/logs/%{type}/%Y-%m-%d
      avro-memory-hdfs.sinks.hdfs-sink.hdfs.filePrefix =events
      avro-memory-hdfs.sinks.hdfs-sink.hdfs.fileType = DataStream
      avro-memory-hdfs.sinks.hdfs-sink.hdfs.writeFormat = Text
      #时间类型
      avro-memory-hdfs.sinks.hdfs-sink.hdfs.useLocalTimeStamp = true
      #生成的文件不按条数生成
      avro-memory-hdfs.sinks.hdfs-sink.hdfs.rollCount = 0
      #生成的文件按时间生成
      avro-memory-hdfs.sinks.hdfs-sink.hdfs.rollInterval = 30
      #生成的文件按大小生成
      avro-memory-hdfs.sinks.hdfs-sink.hdfs.rollSize  = 10485760
      #批量写入 hdfs 的个数
      avro-memory-hdfs.sinks.hdfs-sink.hdfs.batchSize = 10000
      #flume 操作 hdfs 的线程数(包括新建,写入等)
      avro-memory-hdfs.sinks.hdfs-sink.hdfs.threadsPoolSize=10
      #操作 hdfs 超时时间
      avro-memory-hdfs.sinks.hdfs-sink.hdfs.callTimeout=30000
      
      # 绑定 source、channel 和 sink
      avro-memory-hdfs.sources.avro-source.channels = memory-channel
      avro-memory-hdfs.sinks.hdfs-sink.channel = memory-channel
      
    3. 配置完成之后,先启动服务器 C 上的 flume,启动命令在 flume 安装目录下执行 :
      /Flume安装路径/flume-ng agent -c conf -f /root/bigdata/flume/conf/avro-memory-hdfs.conf -name avro-memory-hdfs -Dflume.root.logger=DEBUG,console
      
    4. 然后在启动服务器上的 A 和 B,启动命令在 flume 安装目录下执行 :
      /root/bigdata/flume/bin/flume-ng agent -c conf -f /root/bigdata/flume/conf/exec-memory-avro.conf -name exec-memory-avro - Dflume.root.logger=DEBUG,console
      

    Flume优化

    load balance 负载均衡

    用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法。Load balancing Sink Processor能够实现负载均衡功能
    在这里插入图片描述
    Agent1 是一个路由节点,负责将 Channel 暂存的 Event 均衡到对应的多个 Sink 组件上,而每个 Sink 组件分别连接到一个独立的 Agent 上,配置格式,如下所示:

    Agent名 . sinkgroups = Sink组名
    Agent名 . sinkgroups . Sink组名 . sinks = 组成员Agent名  Agent2 Agent3 
    Agent名 . sinkgroups . Sink组名 . processor . type = load_balance        # 以负载均衡的形式处理组成员
    Agent名 . sinkgroups . Sink组名 . processor . backoff = true    # 将失败的 sink 放入黑名单
    Agent名 . sinkgroups . Sink组名 . processor . selector = round_robin    # 将event随机分配给组成员
    Agent名 . sinkgroups . Sink组名 . processor . selector . maxTimeOut = 10000 #在黑名单放置的超时时间,超时结束时,若仍然无法接收,则超时时间呈指数增长
    

    Failover Sink Processor 故障转移机制

    Failover Sink Processor 维护一个Sink组件优先级列表,当最高优先级的Sink组件发生故障,会自动将event传递到下一个优先级的Sink组件,只要列表中有一个 Sink组件可用,整个机制就不会真正发生故障。
    原理是将发生故障的 Sink组件 降级到一个 故障池,并为其分配一个冷却时间,随着故障的连续,冷却时间增加。一旦 Sink 组件成功发送一个事件,它将会恢复到活动池。 Sink 组件 仍具有与之相关的优先级,数值越大,优先级越高。
    常见配置格式如下:

    Agent名 . sinkgroups = Sink组名
    Agent名 . sinkgroups . Sink组名 . sinks = 组成员Agent名  Agent2 Agent3 
    Agent名 . sinkgroups . Sink组名 . processor . type = failover      # 以故障转移的形式处理组成员
    Agent名 . sinkgroups . Sink组名 . processor . priority . 组成员Agent名1 = 优先级数值    # 优先级值, 绝对值越大表示优先级越高
    Agent名 . sinkgroups . Sink组名 . processor . priority . 组成员Agent名2 = 优先级数值
    ......
    Agent名 . sinkgroups . Sink组名 . processor . maxpenalty = 20000   # 失败的 Sink 的最大回退期(millis)
    
    展开全文
  • ELK分布式日志收集系统

    千次阅读 2020-07-31 15:25:15
    ELK分布式日志收集系统 一、传统系统日志收集的问题 在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每台节点上使用传统的命令方式查询,这样效率非常...

    ELK分布式日志收集系统

    一、传统系统日志收集的问题

    在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每台节点上使用传统的命令方式查询,这样效率非常底下。
    通常,日志被分散在储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。
    集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。

    二、ELK分布式日志收集系统介绍

    1. ElasticSearch是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
    2. Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
    3. Kibana是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

    三、Logstash介绍

    Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
    核心流程:Logstash事件处理有三个阶段:inputs → filters → outputs。是一个接收,处理,转发日志的工具。支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。

    四、ELK分布式日志收集原理

    1. 每台服务器集群节点安装Logstash日志收集系统插件
    2. 每台服务器节点将日志输入到Logstash中
    3. Logstash将该日志格式化为json格式,根据每天创建不同的索引,输出到ElasticSearch中
    4. 浏览器使用安装Kibana查询日志信息

    五、ELK环境搭建

    (1)新建SpringBoot项目作为日志的提供者

    在application.properties中添加:

    logging.file.path=app_log/log
    

    此时运行该项目在根目录下会生成app_log/log文件夹,下面有spring.log。里面便存储着我们运行时的日志信息。
    为了效果演示,添加Controller。

    @RestController
    @Slf4j
    public class TestController {
    
        @GetMapping("/GetTest")
        public String GetTest(){
            log.info("哈哈哈");
            log.error("哦哦哦哦哦");
            log.warn("警告");
            return "success";
        }
    }
    

    下面打包成jar包,上传至CenterOS服务器,并启动。

    (2)安装Elasticsearch

    Elasticsearch的安装在我博客中有详细的安装说明及集群的搭建,这部分可参考:

    https://blog.csdn.net/qq_43692950/article/details/107689309

    (3)配置Logstash环境

    Logstash环境要和上面springboot项目部署的在一台主机上。
    下载链接:

    https://elasticsearch.cn/download/

    这里我用的logstash-6.4.3版本。
    将logstash-6.4.3上传至服务器:

    scp G:\Optimize\Util\elasticserch\logstash-6.4.3.tar.gz root@192.168.2.125:/home/bxc/bxc/es
    

    解压:

    tar -zxvf logstash-6.4.3.tar.gz
    

    进入bin文件夹创建config文件夹:

    cd logstash-6.4.3/bin
    mkdir config
    

    创建文件log.conf 写入下面内容:

    input {
        # 从文件读取日志信息 输送到控制台
        file {
            path => "/home/bxc/bxc/log/app_log/log/spring.log" ##指向上面springboot项目运行日志生成的路径
            codec => "json" ## 以JSON格式读取日志
            type => "elasticsearch"
            start_position => "beginning"
        }
    }
    
    # filter {
    #
    # }
    
    output {
        # 标准输出 
        # stdout {}
        # 输出进行格式化,采用Ruby库来解析日志   
         stdout { codec => rubydebug }
         elasticsearch {
            hosts => ["192.168.2.125:9200"]  ##es的地址
            index => "es-%{+YYYY.MM.dd}" ##es 索引的生成方式
        }	      
    
    }
    
    

    回到bin目录,执行:
    ./logstash -f /config/log.conf

    此时,访问原来springboot项目的Controller,看这边控制台会打印日志信息,证明配置成功。
    在这里插入图片描述

    六、配置Kibana环境

    我这边直接下载的windows环境下的,然后设置远程服务器的es地址即可。
    下载链接:

    https://elasticsearch.cn/download/

    注意:Kibana环境要和你的es的环境版本一致。

    修改kibana-6.4.3-windows-x86_64\config\kibana.yml

    elasticsearch.url: "http://192.168.2.125:9200"
    

    然后点击bin/kibana.bat运行
    最后在浏览器输入下面地址即可看到kibana界面:

    http://localhost:5601

    找到dev tools开发工具里,这在边就可以对es进行各种操作了。
    比如:查看刚才的信息:

    GET /es-2020.07.31/_search
    

    反馈结果:

    {
      "took": 2,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 21,
        "max_score": 1,
        "hits": [
          {
            "_index": "es-2020.07.31",
            "_type": "doc",
            "_id": "KRGeo3MBinEzx9s_9x-s",
            "_score": 1,
            "_source": {
              "host": "localhost.localdomain",
              "tags": [
                "_jsonparsefailure"
              ],
              "type": "elasticsearch",
              "@timestamp": "2020-07-31T06:46:11.271Z",
              "@version": "1",
              "path": "/home/bxc/bxc/log/app_log/log/spring.log",
              "message": "2020-07-31 14:46:10.929  WARN 23932 --- [http-nio-8080-exec-8] c.bxc.testelk.Controller.TestController  : 警告"
            }
          },
          {
            "_index": "es-2020.07.31",
            "_type": "doc",
            "_id": "KhGeo3MBinEzx9s_-B8r",
            "_score": 1,
            "_source": {
              "host": "localhost.localdomain",
              "tags": [
                "_jsonparsefailure"
              ],
              "type": "elasticsearch",
              "@timestamp": "2020-07-31T06:46:11.258Z",
              "@version": "1",
              "path": "/home/bxc/bxc/log/app_log/log/spring.log",
              "message": "2020-07-31 14:46:10.489 ERROR 23932 --- [http-nio-8080-exec-5] c.bxc.testelk.Controller.TestController  : 哦哦哦哦哦"
            }
          },
          {
            "_index": "es-2020.07.31",
            "_type": "doc",
            "_id": "HxGeo3MBinEzx9s_ah8z",
            "_score": 1,
            "_source": {
              "host": "localhost.localdomain",
              "tags": [
                "_jsonparsefailure"
              ],
              "type": "elasticsearch",
              "@timestamp": "2020-07-31T06:45:33.944Z",
              "@version": "1",
              "path": "/home/bxc/bxc/log/app_log/log/spring.log",
              "message": "2020-07-31 14:45:33.029  INFO 23932 --- [http-nio-8080-exec-1] c.bxc.testelk.Controller.TestController  : 哈哈哈"
            }
          },
        ]
      }
    }
    

    至此一个简易的ELK环境就搭建成功了!

    七、Kibana基本使用

    1. 创建索引
    PUT /testindex
    
    1. 查询索引
    GET /testindex
    
    1. 添加文档
      /索引名称/类型/id
    PUT /testindex/user/2
    {
      "name":"abc",
      "sex":2,
      "age":18
    }
    
    1. 根据id查询文档
    GET /testindex/user/1
    
    1. 查询全部
    GET /testindex/_search
    
    GET /testindex/user/_search
    
    1. 查询多个id分别为1、2
    GET /testindex/user/_mget
    {
      "ids":["1","2"]
    }
    
    1. 精确查询
    GET /testindex/user/_search
    {
      "query": {
        "term": {
          "name": "abc"
        }
      }
    }
    
    1. 模糊查询
    GET /testindex/user/_search
    {
      "from": 1,
      "size": 2, 
      "query": {
        "match": {
            "name": "abc"
          }
      }
    }
    
    1. 删除索引
    DELETE /testindex
    
    展开全文
  • 以下是我在公司内部分享的关于分布式日志收集系统的PPT内容,现在与大家分享,希望对于需要使用的人能够起到基本的入门作用或是了解! 1.分布式日志收集系统:背景介绍 许多公司的平台每天会产生大量的日志(一般为...
  •  flume是由cloudera软件公司产出的可分布式日志收集系统,后与2009年被捐赠了apache软件基金会,为hadoop相关组件之一。尤其近几年随着flume的不断被完善以及升级版本的逐一推出,特别是flume-ng;同时flume内部的...
  • 1.分布式日志收集系统:背景介绍 许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下特征: (1) 构建应用系统和...
  • Scribe 分布式日志收集系统 转载于:https://www.cnblogs.com/gaoj87/p/3255176.html
  • 以下是我在公司内部分享的关于分布式日志收集系统的PPT内容,现在与大家分享,希望对于需要使用的人能够起到基本的入门作用或是了解! 1.分布式日志收集系统:背景介绍 许多公司的平台每天会产生大量的日志...
  • 分布式日志收集系统 为什么要搭建分布式日志收集系统 在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每台节点上使用传统的命令方式查询,这样效率...
  • 前言 系统一大,就会拆分成多个独立的进程,比如web+wcf/web api等,也就成了...分布式日志收集系统就登场了。 今天介绍一款 全开源日志收集、展示系统 - logstash(基于java)+kibana(基于JRuby, logstash已自带)...
  • [系统架构]分布式日志收集系统

    千次阅读 2014-11-04 10:25:06
    前言系统一大,就会拆分成多个独立的进程,比如web+wcf/web api等,也就成...分布式日志收集系统就登场了。今天介绍一款全开源日志收集、展示系统 - logstash(基于java)+kibana(基于JRuby, logstash已自带)+Elastic
  • 分布式日志收集系统原理

    千次阅读 2014-03-26 16:08:07
    1.分布式日志收集系统:背景介绍 许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下特征: (1) 构建应用...
  • 分布式日志收集系统实践(视频教程) 日志收集软件五花八门,最终用户没有精力,也不可能把所有的日志工具都拿过来试一遍,很多企业常见架构如图1所示。 图1 传统日志收集架构 用Linux管理服务器存储Cisco日志案例...
  • 1.分布式日志收集系统:背景介绍 许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下特征: (1) 构建应用系统...
  • 1.flume是分布式日志收集系统,把收集来的数据传送到目的地去。 2.flume里面有个核心概念,叫做agent。agent是一个java进程,运行在日志收集节点。通过agent接收日志,然后暂存起来,再发送到目的地。 3.agent里面...
  • Flume是Cloudera公司的一款高性能、高可能的分布式日志收集系统。现在已经是Apache Top项目。Github地址。同Flume相似的日志收集系统还有Facebook Scribe,Apache Chuwka,Apache Kafka(也是LinkedIn的)。Flume是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,646
精华内容 1,058
关键字:

分布式日志收集系统