Scribe日志收集工具
Scribe日志收集工具
概述
Scribe是facebook开源的日志收集系统,在facebook内部已经得到大量的应用。它能够从各种日志源上收集日志,存储到一个中央存储系统(可以是NFS,分布式文件系统等)上,以便于进行集中统计分析处理。它为日志的“分布式收集,统一处理”提供了一个可扩展的,高容错的方案。当中央存储系统的网络或者机器出现故障时,scribe会将日志转存到本地或者另一个位置,当中央存储系统恢复后,scribe会将转存的日志重新传输给中央存储系统。
scribe的相关资料比较少,主要限于它的主页(见参考资料1)。此外,它的安装比较复杂,可参见《scribe日志收集系统安装方法介绍》。
架构
如上图所示,Scribe从各种数据源上收集数据,放到一个共享队列上,然后push到后端的中央存储系统上。当中央存储系统出现故障时,scribe可以暂时把日志写到本地文件中,待中央存储系统恢复性能后,scribe把本地日志续传到中央存储系统上。
需要注意的是,各个数据源须通过thrift向scribe传输数据(每条数据记录包含一个category和一个message)。可以在scribe配置用于监听端口的thrift线程数(默认为3)。在后端,scribe可以将不同category的数据存放到不同目录中,以便于进行分别处理。后端的日志存储方式可以是各种各样的store,包括file(文件),buffer(双层存储,一个主储存,一个副存储),network(另一个scribe服务器),bucket(包含多个store,通过hash的将数据存到不同store中),null(忽略数据),thriftfile(写到一个Thrift TFileTransport文件中)和multi(把数据同时存放到不同store中)。
scribe的全局配置
global配置 | 默认值 | 说明 |
port | 0 | 监听端口 |
max_msg_per_second | 10000 | 每秒处理的最大消息数 |
max_quque_size | 5000000 | 消息队列的大小 |
check_interval | 5s | store的检查频率 |
new_thread_per_category | yes | yes的话,会为每个category建立一个线程来处理 |
num_thrift_server_threads | 3 | 线程数 |
例如:
port=1463 max_msg_per_second=2000000 max_queue_size=10000000 check_interval=3
store有3种类型:
- 默认store,处理没有匹配到任何store的category; 配置项:category=default
- 带前缀的store,处理所有以指定前缀开头的category;配置项:category=web*
- 复合categories,在一个store里面包含多个category;配置项:categories=rock paper* scissors
store配置
store 配置 | 默认值 | 说明 |
category | default | 哪些消息被这个store处理,取值范围:default、、 |
type | 存储类型,取值范围:file、buffer、network、bucket、thriftfile、null、multi | |
max_write_interval | 1s | 处理消息队列的时间最小间隔 |
target_write_size | 16K | 当消息队列超过该值时,才进行处理 |
max_batch_size | 1MB | 一次处理的数据量 |
must_succeed | yes | 如果一个处理消息失败,是否重新进入消息队列排队,为no时丢弃该消息 |
例如:
<store> category=statistics type=file target_write_size=20480 max_write_interval=2 </store>
下面介绍不同的store类型:
file
将日志写到文件或者NFS中。目前支持两种文件格式,即std和hdfs,分别表示普通文本文件和HDFS。可配置的选项有:
例如:
<store> category=sprockets type=file file_path=/tmp/sprockets base_filename=sprockets_log max_size=1000000 add_newlines=1 rotate_period=daily rotate_hour=0 rotate_minute=10 max_write_size=4096 </store>
配置解释:
file store 配置 | 默认值 | 说明 |
file_path | /tmp | 文件保存路径 |
base_filename | category name | |
use_hostname_sub_directory | no | 为yes的话,使用hostname来创建子目录 |
sub_directory | 使用指定的名字来创建子目录 | |
rotate_period | 创建新文件的频率 | 可以使用"s"、"m"、"h"、"d"、"w"后缀(秒、分、时、天、周) |
rotate_hour | 1 | 如果totate_period为d,则取值范围:0-23 |
rotate_minute | 15 | 如果totate_period为m,则取值范围:0-59 |
max_size | 1GB | 当文件超过指定大小时进行回滚 |
write_meta | FALSE | 文件回滚时,最后一行包含下一个文件的名字 |
fs_type | std | 取值范围:"std"和"hdfs" |
chunk_size | 0 | 数据块大小,如果消息不超过数据块容量,就不应该跨chunk存储 |
add_newlines | 0 | 为1时,为每个消息增加一个换行 |
create_symlink | yes | 创建一个链接,指向最新的一个写入文件 |
write_stats | yes | 创建一个状态文件,记录每个store的写入情况 |
max_write_size | 1MB | 缓冲区大小,超过这个值进行flush。该值不能超过max_size配置项的值 |
network
network store转发消息到其他scribe服务器上,scribe以长连接的方式批量转发消息。
例如:
<store> category=default type=network remote_host=hal remote_port=1465 </store>
配置解释:
scribe store 配置 | 默认值 | 说明 |
remote_host | 远程主机地址 | |
remote_port | 远程主机端口 | |
timeout | 5000ms | socket超时时间 |
use_conn_pool | FALSE | 是否使用连接池 |
buffer
buffer stores有两个子stores,分别为"primary"和"secondary",当primary store不可用时,才将日志写入secondary store(只能是File Stores或Null Stores)。当primary store恢复工作时,会从secondary store恢复数据(除非replay_buffer=no)。
例如:
<store> category=default type=buffer buffer_send_rate=1 retry_interval=30 retry_interval_range=10<primary>type=networkremote_host=woprremote_port=1456</primary><secondary>type=filefile_path=/tmpbase_filename=thisisoverwrittenmax_size=10000000</secondary> </store>
配置解释:
buffer store 配置 | 默认值 | 说明 |
buffer_send_rate | 1 | 在一次check_interval中,从secondary读取多少次消息并发到primary |
retry_interval | 300s | 在写primary失败后,指定重试的时间间隔 |
retry_interval_range | 60s | 在写primary失败后,重试的时间间隔在一个时间范围内随机选择一个 |
replay_buffer | yes | 是否将secondary的消息恢复到primary |
null
丢弃指定category的消息;
例如:
<store> category=tps_report* type=null </store>
bucket
bucket stores将每个消息的前缀作为key,并hash到多个文件中。
例如:
<store>
category=bucket_me
type=bucket
num_buckets=2
bucket_type=key_hash<bucket0>type=filefs_type=stdfile_path=/tmp/scribetest/bucket0base_filename=bucket0</bucket0><bucket1>...</bucket1><bucket2>...</bucket2>
</store>
配置解释:
bucket store 配置 | 默认值 | 说明 |
num_buckets | 1 | hash表的bucket个数 |
bucket_type | 取值范围:key_hash、key_modulo、random | |
delimiter | : | 识别key的前缀分隔符 |
remove_key | no | 是否删除每个消息的前缀 |
bucket_subdir | 每个子目录的名字 |
multi
multi store将消息同时转发给多个子sotres(如store0, store1, store2, ...)。
例如:
<store> category=default type=multi target_write_size=20480 max_write_interval=1<store0>type=filefile_path=/tmp/store0</store0><store1>type=filefile_path=/tmp/store1</store1> </store>
Thriftfile
Thriftfile store与File store类似,只是前者将消息发送给Thrift TFileTransport 文件;
例如:
<store> category=sprockets type=thriftfile file_path=/tmp/sprockets base_filename=sprockets_log max_size=1000000 flush_frequency_ms=2000 </store>
配置解释:
thriftfile store 配置 | 默认值 | 说明 |
file_path | /tmp | 文件保存路径 |
base_filename | category name | |
rotate_period | 创建新文件的频率 | 可以使用"s"、"m"、"h"、"d"、"w"后缀(秒、分、时、天、周) |
rotate_hour | 1 | 如果totate_period为d,则取值范围:0-23 |
rotate_minute | 15 | 如果totate_period为m,则取值范围:0-59 |
max_size | 1GB | 当文件超过指定大小时进行回滚 |
fs_type | std | 取值范围:"std"和"hdfs" |
chunk_size | 0 | 数据块大小,如果消息不超过数据块容量,就不应该跨chunk存储 |
create_symlink | yes | 创建一个链接,指向最新的一个写入文件 |
flush_frequency_ms | 3000ms | 同步Thrift file 到磁盘的频率 |
msg_buffer_size | 0 | 非0时,拒绝所有大于该值的写入 |
参考文档:
http://dongxicheng.org/search-engine/scribe-installation/
http://dongxicheng.org/search-engine/scribe-intro/
http://blog.octo.com/en/scribe-a-way-to-aggregate-data-and-why-not-to-directly-fill-the-hdfs/
https://github.com/facebookarchive/scribe/wiki/Scribe-Configuration
Scribe日志收集工具相关推荐
- 分布式日志收集工具分析比较
目录 写在最前:为什么做日志收集系统❓ 一.多种日志收集工具比较 1.背景介绍 2.Facebook 的 Scribe 3.Apache 的 Chukwa 4.LinkedIn 的 Kafka 5.C ...
- 性能优越的轻量级日志收集工具,微软、亚马逊都在用!
ELK日志收集系统大家都知道,但是还有一种日志收集系统EFK,肯定有很多朋友不知道!这里的F指的是Fluentd,它具有Logstash类似的日志收集功能,但是内存占用连Logstash的十分之一都不 ...
- Oracle TFA日志收集工具的安装与使用
TFA日志收集工具: 一.介绍: TFA全称:Trace File Analyzer,日志分析工具. TFA会监视的日志,以发现可能影响服务的重大问题,在检测到任何潜在问题时也会自动收集相关的诊断信息 ...
- Oracle GI 日志收集工具 - TFA
1.TFA的目的: TFA是个11.2版本上推出的用来收集Grid Infrastructure/RAC环境下的诊断日志的工具,它可以用非常简单的命令协助用户收集RAC里的日志,以便进一步进行诊断:T ...
- scribe - 日志收集器 分析
1.General description 我们知道,使用日志系统是为了使系统变得更健壮,能够应对各种错误并能从错误中较快地恢复.一个大型的分布式系统生成的日志数量是巨大的,所以需要一个有效的工具对 ...
- 移动应用崩溃日志收集工具对比
背景 移动互联网时代,由于 Android 设备的碎片化,客服人员每天要接到很多用户反馈在各种不同机型上的崩溃问题,又没有办法提供具体的 Crash 日志给开发人员.测试人员每天需要对用户的反馈进行 ...
- 日志收集工具ELK,简单集群配置
因项目部署在多台服务器上,如果出现Bug需要查询日志的时候,日志非常难查询.所以采用Logstash来收集日志,通过Kibana页面将日志展示出来.一开始偷懒,使用Docker安装了个单机版的ELK, ...
- scribe php,Scribe日志收集系统的安装
除此之外本文还收集了网络上的很多资料,加入了自己的一些解决方法,由于没有集中记录,有些地方若出现了相同,还请见谅,感谢原著作者. Scribe是facebook开源的日志收集系统,在facebook内 ...
- scribe日志收集
https://www.xiaomastack.com/2014/11/11/scribe-nginx-php/ 日志管理(4) 用scribe收集nginx和php日志 By 小马 · 十一月 11 ...
最新文章
- TVM示例展示 README.md,Makefile,CMakeLists.txt
- 活动回顾 | 8月7日Apache Flink Meetup
- 信息化基础建设 开发框架
- baidumap vue 判断范围_懂一点前端—Vue快速入门
- MiniO纠删码快速入门
- (七)图像处理中常用算子Laplacian\Sobel\Roberts\Prewitt\Kirsch
- 嵌入式linux寄存器移位寻址,嵌入式系统及应用》 (32+16)教学大纲
- 【软考】中级软件设计师的一些知识点笔记(22.2.10)
- 卫生统计学计算机操作教程第二版,卫生统计学spss中文教程.pdf
- JDK 下载安装 WIN
- 网易云音乐蓝牙音频接收器说明书
- Bar Chart Race」动态可视化
- Sourcetree中使用cherry-pick
- wangEditor 粘贴从 word 复制的带图片内容的最佳实践
- 计算机如何连接隐藏的无线网络,笔记本电脑怎么连接隐藏的无线网wifi
- java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之OS_Part_2整起~IO们那些事【包括五种IO模型:(BIO、NIO、IO多路复用、信号驱动、AIO);零拷贝、事件处理及并发等模型】
- 云计算机怎么分盘,电脑硬盘怎么分区
- 2016年世界编程大赛_在2016年学习的最佳编程语言是什么?
- Android动画-Interpolator(插值器)大全
- 拼多多2018年校招真题
热门文章
- java dayofweek_Java DayOfWeek getDisplayName()用法及代碼示例
- usb过滤驱动inf_N卡驱动全家桶专治工具升级:专为玩家打造
- Maven插件tomcat7-maver-plugin
- java mvc 断点续传_用SpringMVC 实现断点续传 (HTTP)
- python torch exp_Python:PyTorch 保存和加载训练过的网络 (八十)
- Zookeeper分布式一致性原理(三):Chubby分布式锁服务
- 服务器空岛怎么修改地形,迷你世界空岛地形码是什么 空岛地形码怎么输入[多图]...
- golang break label 与goto label
- TinyMCE的使用
- 信息系统开发平台OpenExpressApp - 数据权限