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

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

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

上一篇文章介绍了一些关于scribe的基础知识,也是自己在公司内部分享的一些内容,当时公司很多同事也积极与我沟通,没想到网上也有这么多人关注,下面几篇文章继续分享一些自己研究scribe的一些成果和心得吧!

其实我们研究一个开源的系统,第一步通常是先把它用起来,因为一个开源的系统能够出现在大家的面前肯定是比较出名和流行的,所有功能是比较出色的。所以我们必须很清楚的这些功能,而scribe最大的特点就是配置文件,它强大的功能全部通过配置文件来配置实现的,今天就简单介绍scribe的配置文件。

scribe配置文件详解

1.全局配置项

(1)port:指示scribe服务器在哪一个端口上监听,默认是0,通过命令行参数选项-P可以指定端口,也能够通过配置文件指定。在源代码中就赋值给变量port。

(2)max_msg_per_second:默认值是0,如果这个参数值是0将被忽略。随着最近的改变这个参数很少被关联使用到,max_queue_size参数将被应用到限制每秒最大的消息数。在scribeHandler::throttleDeny被使用。

(3)max_queue_size(按字节):接收消息的队列的最大字节,默认是5,000,000字节。在scribeHandler::Log使用。

(4)check_interval(秒):用于控制多长时间检查一次存储,默认值是5.

(5)new_thread_per_category(是/否):如果为是,将为每一个分类场景创建一个新的线程,否则将创一个单线程为每一个在配置文件中定义的存储。对于前缀存储或默认存储,如果这个参数设置成“否”将导致所有匹配这个分类的消息都由一个单独的存储来处理。否则将为每一个唯一的分类名创建一个新的存储。默认为“是”。

(6)num_thrift_server_threads:为接收消息的监听线程数量,默认是3.

(7)max_conn:最大的链接数。

2.存储配置

Scribe服务器决定怎样将日志消息写入是基于在配置中定义的存储类型和相关参数设置,每一个存储都必须指定一个消息分类来处理三种异常。

(1)默认存储:默认分类处理任何不能被其他存储处理的分类,这儿仅仅能够有一个默认存储。

(2)前缀存储:如果指定分类以一个*结尾,这个存储将处理所有以指定前缀开头的分类。

(3)多个类别:在一个存储定义中能够使用‘categories=’创建多个类别。

在上面三种情况下,在文件存储中将为每一个唯一的分类创建一个子目录(除非new_thread_per_category被设置为false)。

3.存储配置变量

(1)category:决定哪些消息被这个存储处理。

(2)type:存储类型,有file、buffer、network、bucket、thriftfile、null、mutil。

(3)target_write_size:默认是16,384字节,决定在这些消息处理之前在给定分类的消息队列可以增长到多大。

(4)max_batch_size: 默认1,024,000字节(可能没有被开源),决定在内存存储队列中一次能够被处理的数据的总数,这个(加上缓冲文件旋转的大小)控制多大的一个thrift调用可行。

(5)max_write_interval:默认是10秒,决定在这些消息处理之前在给定分类的消息队列可以用多长时间。

(6)must_succeed(yes/no):是否必须成功,如果一个存储处理消息失败是否重新进入消息队列排队,如果设置成 ‘no’,且一个存储不能处理这些消息,消息将被丢弃。默认是yes。强烈建议使用缓存来指一个定二级存储来处理失败的日志。

4.file存储配置

File存储写入消息到一个文件。

(1)file_path:文件路径,默认是“/tmp”。

(2)base_filename:基本文件名称,默认是分类名称。

(3)use_hostname_sub_directory(yes/no):使用服务器的主机名创建一个子目录,默认是no。

(4)sub_directory:使用指定的名称创建一个子目录。

(5)rotate_period:文件创建周期,取值可以是 “hourly”, “daily”, “never”,或者是name[后缀], “never”是默认值,决定多长时间创建一个新文件,特别的后缀“s”, “m”, “h”, “d”, “w”分别代表second(默认)、minutes、hours、days和weeks。

(6)rotate_hour:取值0-23,默认是1,如果rotate_period取值是daily,这个就决定每天的什么时候创建新文件。

(7)rotate_minute:取值0-59,默认是15,如果rotate_period设置为daily或hourly,这个就决定以一个小时过后多久创建一个新文件。

(8)max_size:文件上限大小,默认1,000,000,000多字节,决定在轮流创建一个新文件以前一个文件能够增长到多大。

(9)write_meta:取值yes或其他任何,false为默认值,如果文件被旋转,最后一行将包含“scribe_meta”,跟着就是下一个文件名。

(10)fs_type:文件类型,支持“std”和“hdfs”两种格式,“std”为默认值。

(11)chunk_size:默认值是0,如果一个块大小被指定,在文件内没有消息能够跨越块的边界,除非有消息的大小超过块的大小。

(12)add_newlines:取值0或1,默认是0,如果设置为1,以后的每一个消息都写入一个新行。

(13)create_symlink:yes或其他任何,默认是yes。如果为yes,将保持一个符号链接指向最近一个被写入的文件。

(14)write_stats:yes/no,默认是yes。是否创建一个scribe_stats文件为每一个存储来保持文件写入的轨迹。

(15)max_write_size:默认是1000000字节。File存储将尝试按max_write_size字节的块大小刷新数据到文件系统。max_write_size的大小不能超过max_size。由于target_write_size一定数量的消息被缓存。那么文件存储被调用来保持这些消息。File_store以一次性至少max_write_size大小字节的块来保存这些消息。File存储的最后一次写入比max_write_size小;

(16)write_category:写入一个分类下面;

(17)rotate_on_reopen:循环重新打开。

5.network存储配置

Network存储向其他scribe服务器发送消息。Scribe保持持久的链接打开以至于它能够发送消息。(为了错误信息或者如果下游机器过载,它将重新打开一个链接)。在正常运行的情况下,scribe会基于当前缓存中存在多少条消息等待发送而分批次的发送。(如果scribe备份和缓存消息到本地磁盘,scribe会基于缓存文件大小按块发送消息)

(1)remote_host:发送消息的远程主机的名称或IP地址。

(2)remote_port:在远程主机上的端口。

(3)timeout:socket超时,MS为单位,默认是DEFAULT_SOCKET_TIMEOUT_MS, 在store.h中被设置为5000。

(4)use_conn_pool:yes或者任何其他,默认是false。是否使用连接池代替为每一个远程主机打开的链接。

(5)smc_service:

(6)service_options:

(7)service_cache_timeout:

(8)ignore_network_error:

(9)dynamic_config_type:

6.buffer存储配置

         这是最常用的一种store。该store中包含两个子store,其中一个是primary store,另一个是secondary store。日志会优先写到primary store中,如果primary store出现故障,则scribe会将日志暂存到secondary store中,待primary store恢复性能后,再将secondary store中的数据拷贝到primary store中。其中,secondary store仅支持两种store,一个是file,另一个是null。

(1)max_queue_length:默认2,000,000条消息。如果在队列中的消息数量超过了这个值,buffer存储将切换写入secondary store。

(2)buffer_send_rate:默认值是1。决定每一次check_interval内,多少次从secondary store读出一组消息并且发送到primary store中。

(3)retry_interval:默认是300秒。在写primary store失败以后等待多长时间重新发送到primary store。

(4)retry_interval_range:默认是60秒。将在指定retry_interval区间内随机的选择一个重新发送时间区间。

(5)replay_buffer:取值yes/no,默认是yes。如果设置为 ‘no’,buffer存储不能从secondary store移除消息并且发送到primary store中去。

7.bucket存储配置

Bucket存储使用每个带前缀的消息作为key写入到多个文件中去。能够定义一个隐藏的或明确的bucket。定义隐藏的bucket必须要有一个名称是 “bucket” 子bucket,这个子bucket可以是file存储、network存储或者thriftfile存储。

(1)num_buckets:hash进入的bucket个数,默认是1。不能被hash进入任何bucket的消息将被放入一个特别的0号bucket。

(2)bucket_type: 取值是“key_hash”, “key_modulo”, 或者 “random”。

(3)delimiter:必须是1-255之间的ascii代码,否则默认是 ‘:’。第一次出现在消息前缀中的delimiter在‘hash/modulo’中将被用作key。Random不使用这个delimiter。

(4)remove_key:取值yes/no,默认是是no。是否从消息中移除key前缀。

(5)bucket_subdir:如果使用的是一个单独定义的bucket,每一个子目录的名称根据bucket的数量编号生成。

8.null存储配置

忽略被给分类的所有消息。没有参数。

9.mutil存储配置

一个mutil存储是将所有消息转发到子存储中去的一个存储。一个mutil存储可能有多个名叫“store0”, “store1”, “store2”等等的子存储。

(1)report_success:取值 “all” or “any”, 默认是 “all”。是否所有substores或任何substores必须成功地记录消息,以报告为成功的消息记录在日志消息

10.thriftfile存储配置

Thriftfile存储类似于file存储,出了thriftfile存储是用Thrift TFileTransport file存储消息。

(1)file_path:文件路径,默认是“/tmp”。

(2)base_filename:基本文件名称,默认是分类名称。

(3)rotate_period:文件创建周期,取值可以是 “hourly”, “daily”, “never”,或者是name[后缀], “never”是默认值,决定多长时间创建一个新文件,特别的后缀“s”, “m”, “h”, “d”, “w”分别代表second(默认)、minutes、hours、days和weeks。

(4)rotate_hour:取值0-23,默认是1,如果rotate_period取值是daily,这个就决定每天的什么时候创建新文件。

(5)rotate_minute:取值0-59,默认是15,如果rotate_period设置为daily或hourly,这个就决定以一个小时过后多久创建一个新文件。

(6)max_size:文件上限大小,默认1,000,000,000多字节,决定在轮流创建一个新文件以前一个文件能够增长到多大。

(7)fs_type:文件类型,当前只支持“std”,“std”为默认值。

(8)chunk_size:默认值是0,如果一个块大小被指定,在文件内没有消息能够跨越块的边界,除非有消息的大小超过块的大小。

(9)create_symlink:yes或其他任何,默认是yes。如果为yes,将保持一个符号链接指向最近一个被写入的文件。

(10)flush_frequency_ms:毫秒单位,如果没有指定就使用默认300的 TFileTransport。决定一步到thrift file磁盘时间的频率。

(11)msg_buffer_size:以字节为单位,如果没有指定将使用默认为0的TFileTransport。如果非零,将拒绝写入比这个值大的。

11.总结:今天把基本上所有配置文件选项的意义简单介绍一下,要深入理解这些参数的意义还必须要深入到源代码去,还在scribe的源代码比较简单,很快就可以全面的深入的分析了,下一篇就自己分析的一些简单流程介绍一下,需要深入到还是直接源代码最好。源码之前,了无密码!

分布式日志收集系统: Facebook Scribe之配置文件相关推荐

  1. 一起来解读分布式日志收集系统:Facebook Scribe

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

  2. 分布式日志收集系统: Facebook Scribe

    转载于博主新浪微博:http://weibo.com/freshairbrucewoo. 欢迎大家相互交流,共同提高技术. 以下是我在公司内部分享的关于分布式日志收集系统的PPT内容,现在与大家分享, ...

  3. python分布式日志收集系统_分布式日志收集系统Scribe原理

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

  4. 分布式日志收集系统Apache Flume的设计详细介绍

    问题导读: 1.Flume传输的数据的基本单位是是什么? 2.Event是什么,流向是怎么样的? 3.Source:完成对日志数据的收集,分成什么打入Channel中? 4.Channel的作用是什么 ...

  5. 分布式日志收集系统scribe介绍

    Scribe是facebook开源的日志收集系统,在facebook内部已经得到大量的应用. Scribe是基于一个使用非阻断C++服务器的thrift服务的实现.它能够从各种日志源上收集日志,存储到 ...

  6. python分布式日志收集系统_Go实现海量日志收集系统(一)

    项目背景 每个系统都有日志,当系统出现问题时,需要通过日志解决问题 当系统机器比较少时,登陆到服务器上查看即可满足 当系统机器规模巨大,登陆到机器上查看几乎不现实 当然即使是机器规模不大,一个系统通常 ...

  7. 探秘Hadoop生态12:分布式日志收集系统Flume

    这位大侠,这是我的公众号:程序员江湖.  分享程序员面试与技术的那些事. 干货满满,关注就送.  在具体介绍本文内容之前,先给大家看一下Hadoop业务的整体开发流程:  从Hadoop的业务开发流程 ...

  8. flume分布式日志收集系统操作

    1.flume是分布式的日志收集系统,把收集来的数据传送到目的地去. 2.flume里面有个核心概念,叫做agent.agent是一个java进程,运行在日志收集节点. 3.agent里面包含3个核心 ...

  9. 分布式日志收集系统--Chukwa

    1. 安装部署 1.1 环境要求 1.使用的JDK的版本必须是1.6或者更高版本,本实例中使用的是JDK1.6 2.使用的hadoop的版本必须是Hadoop0.20.205.1及以上版本,本实例中使 ...

  10. Flume日志收集系统架构详解--转

    2017-09-06朱洁大数据和云计算技术 任何一个生产系统在运行过程中都会产生大量的日志,日志往往隐藏了很多有价值的信息.在没有分析方法之前,这些日志存储一段时间后就会被清理.随着技术的发展和分析能 ...

最新文章

  1. 数据库事务原理及并发、死锁
  2. 如何获得当前运行模块在进程地址空间的位置
  3. 你能用微信小程序打开小程序了【附开发方法】
  4. 都说产品要懂数据分析,到底要懂到什么程度?
  5. php 内容转换dom,php – 防止DOMDocument :: loadHTML()转换实体
  6. plsql无法连接64位oracle数据库的解决方法(图文解说)
  7. sturts2标签判断多个条件
  8. 【sklearn学习】集成算法之梯度提升树GBDT
  9. 获取字段为List类型中的泛型类型
  10. FreeRTOS的HOOK,以及(23)FreeRTOS 空闲任务分析
  11. 在qq2003里实现qq2000的皮肤
  12. echarts实现动态的图表
  13. qpsk频谱图matlab,基于MATLAB的QPSK信号调制技术及其频谱分析
  14. 计算机原理---七层网络协议详解
  15. VS简明教程(VS安装、系统建议设置、软件设置、新建工程、发行、编译建议)、VS Code简明教程(安装、汉化、配置python环境、安装插件、新建并运行python程序)
  16. mmd Ray渲染 mikumikudance导入模型阴影很黑
  17. 2018——走过的路
  18. 13个最狂帅炫酷的前沿科技研究项目
  19. Minimum supported Gradle version is 5.1.1. Current version is 4.8
  20. 被野性消费的黄桃罐头,还能火多久!

热门文章

  1. 1304: 防御导弹 (未完)
  2. 【转】Geary's C
  3. phpMyAdmin出现错误 Access denied for user 'root'@'localhost' (using password: NO)
  4. Android开发的第一天
  5. 灰度共生矩阵(Gray Level Co-occurrence Matrix,GLCM)
  6. 崩坏学园2及大部分采用ETC1压缩格式的Unity3D游戏的拆包图处理
  7. 百度地图 android SDKv2.2.0
  8. 1、varargout与nargout区别
  9. Toontrack Superior Drummer for Mac - 鼓音乐制作工具
  10. 修复Mac无法进入睡眠模式的技巧