1. syslog概念

syslog本身是一种协议, 一个用来描述系统日志格式的协议, 当前的协议包括三部分:

如下面是一个syslog消息:

<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.

其中“<30>”是PRI部分,“Oct 9 22:33:20 hlfedora”是HEADER部分,“auditd[1787]: The audit daemon is exiting.”是MSG部分。

PRI部分由尖括号包含的一个数字构成,这个数字包含了程序模块(Facility)、严重性(Severity),这个数字是由Facility乘以 8,然后加上Severity得来。这个字段仅在日志传送过程中添加,日志文件中不会看到该字段。

HEADER部分包括两个字段,时间和主机名(或IP).

MSG部分又分为两个部分,TAG和Content。其中TAG部分是可选的。“auditd[1787]”是TAG部分,包含了进程名称和进程PID。

2. syslogd

我们通常说的linux中的syslog是指的linux运行的一个服务器软件,该软件叫syslogd, 内核的日志和很多软件比如ssh, postfix 默认都是使用syslogd来记录日志, 当然c语言和PHP都有对应的函数和扩展,用起来也十分方便。

syslogd默认接受的日志来源有三部分

  1. 内核日志;
  2. 本机的用户进程写入的日志;
  3. 其他主机通过udp(514)发过来的日志;

如下图所示

需要注意的是syslogd只支持udp协议,所以如果使用syslog收集日志的话, 当日志长时间大量发送的时候,会有部分日志丢失, 但如果你仅仅是为了收集日志到本地,那么syslog是一个很好的选择。

syslog在使用udp 514端口远程发送时,也会在本地/var/log/messages文件中也同时写入相关内容, 所以, 如果你想查看那些日志丢失, 可以从这个本机的messages日志文件中找到。

3. syslog-ng

从名字意思上可以看出来syslog-ng是指的下一代的syslog, 主要增加的功能是增加了更多的过滤器,比如正则、and、or条件之类, 可以配置使用tcp方式进行日志收集, 也可以与syslog搭配,客户端使用syslog,服务器使用syslog-ng的方式, 但是实验证明这种方式也会有日志丢失。曾经尝试调整了syslog-ng的几个参数,用来防止日志的丢失但是都没有解决, 一下是尝试调整的部分参数。

1) 调整 gc_busy_threshold(n), 官方解释是:当syslog-ng忙时,其进入垃圾信息收集状态的时间一旦分派的对象达到这个数字,syslog-ng就启动垃圾信息收集状态。默认值是:3000, 当垃圾信息收集时就会停止接受日志,导致部分日志丢失。 尝试提高到10000,没有太大作用。 可能因为syslog-ng的这个特性,导致它丢日志成为一种必然。

2) 调整log_fifo_size (2048), 输出队列调整到4096, 没有任何作用。

3) sync(10), 缓存10行写入,改为0,即不论缓存空间有几行,都直接写入日志。

4) php代码调整, 使用正规的流程 openlog syslog closelog三步, 而不是直接使用syslog让扩展自身去open和close, 实验有一定效果, 10w的日志,之前丢失2-8个, 改了之后不丢失了, 但是线上日志量较大,还是会丢失,测试100w时,也会丢失。

4. rsyslog

这个比syslog-ng好的一点就是直接兼容syslog的配置, 并且是开源的, tcp的性能也特别好,很快,快的原因是因为多线程的结构, 而且经过测试不会丢失日志。

以上几个syslog服务器程序收集1000w日志的几个测试数据

客户端 服务器端 日志条数
syslog syslog 735841
syslog syslog-ng(udp) 9999997
syslog rsyslog(udp) 734696
syslog-ng(tcp) syslog-ng(tcp) 10000000
syslog-ng(udp) syslog-ng(udp) 4751978
rsyslog(tcp) rsyslog(tcp) 10000000

注意: syslog-ng使用tcp时,只有使用正规流程 openlog syslog closelog三步的情况才会不丢日志, php直接使用syslog函数(使用扩展本身进行 openlog closelog)写日志会导致日志丢失。

5. flume

这个东西比起以上几个来讲, 要大型一些, 更为专业的日志收集的装置, syslog的工具对于flume来说往往只是承担flume的agent端的其中一个来源(source)的角色,而flume的数据来源很多,tail, file各种工具,支持集群。并且flume的store,支持hdfs。

6 scribe

scribe与flume不同的是, scribe使用thrift框架, 可以直接使用程序(PHP  java等当然都米问题了)发送日志到中央服务器, 类似于Hbase,这一类软件的用法, 其他没做过太多实验就不乱说了。

-----------------------------------------------------------------------------------------------------

欢迎使用 xhprof 进行PHP性能的分析

syslog syslog-ng rsyslog flume scribe 各种尝试的更多相关文章

  1. syslog之二:syslog协议及rsyslog服务全解析

    目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...

  2. syslog协议及rsyslog服务全解析

    背景:需求来自于一个客户想将服务器的日志转发到自己的日志服务器上,所以希望我们能提供这个转发的功能,同时还要满足syslog协议. 一.什么是syslog协议 1.介绍(略) 2.syslog标准协议 ...

  3. syslog,rsyslog and syslog-ng

    http://en.wikipedia.org/wiki/Syslog Syslog is a standard for computer message logging. It permits se ...

  4. Linux日志系统分析:rsyslog、syslog和klog

    参考博客: https://blog.csdn.net/lidonghat/article/details/55004280 https://blog.csdn.net/u012247418/arti ...

  5. Flume NG Getting Started(Flume NG 新手入门指南)

    Flume NG Getting Started(Flume NG 新手入门指南)翻译 新手入门 Flume NG是什么? 有什么改变? 获得Flume NG 从源码构建 配置 flume-ng全局选 ...

  6. 在 Linux 上配置一个 syslog 服务器

    syslog服务器可以用作一个网络中的日志监控中心,所有能够通过网络来发送日志的设施(包含了Linux或Windows服务器,路由器,交换机以及其他主机)都可以把日志发送给它. 通过设置一个syslo ...

  7. Syslog

    一.简介 syslog是一种工业标准的协议,可用来记录设备的日志.在UNIX系统,路由器.交换机等网络设备中,系统日志(System Log)记录系统中任何时间发生的大小事件.管理者可以通过查看系统记 ...

  8. syslog及syslog-ng详解 日志服务器

    服务器的日志对系统工程师来说是至关重要的,一旦服务器出现故障或被入侵,我们需要查看日志来定位问题的关键所在,所以说对于线上跑的服务器而言日志应该合理的处理及管理.下面来   服务器的日志对系统工程师来 ...

  9. Flume NG 简介及配置实战

    Flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用.Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 clo ...

随机推荐

  1. Jul_31 PYTHON REGULAR EXPRESSIONS

    1.Special Symbols and Characters 1.1 single regex 1 . ,Match any character(except \n) ^ ,Match start ...

  2. @font-face usage

    If you haven’t been living in a cave for the past few months, you will have heard lots of talk about ...

  3. 解决:Android编译源码根目录下/system/vold后,通过push命令将编译生成的vold文件push至system/bin下无法正常开机

    这段时间由于工作需要,在对android根目录下/system/vold进行修改编译的时候,在通过adb命令将vold文件push至/system/bin目录下,adb reboot重启手机却发现一直 ...

  4. Python的魔法方法 .

    基本行为和属性 __init__(self[,....])构造函数 . 在实例化对象的时候会自动运行 __del__(self)析构函数 . 在对象被回收机制回收的时候会被调用 __str__(sel ...

  5. 【LeetCode】Best Time to Buy and Sell Stock IV

    Best Time to Buy and Sell Stock IV Say you have an array for which the ith element is the price of a ...

  6. Windows共享设定-使用net use添加网络盘带上账号密码

    食欲 net use \\10.11.1.2\ipc$ /user:dmnm\usr "pwd"

  7. 学习笔记:只有一套app设计稿(5s尺寸)切出4和4s尺寸以及安卓系统主流尺寸的图

    如何在只有一套app设计稿(5s尺寸)切出4和4s尺寸以及安卓系统主流尺寸的图 转自:http://www.zhihu.com/question/23255417   版权归原作者所有 目前ios手机 ...

  8. 用C语言计算圆的面积~!!!!!!!

    #include <stdio.h>void main(){ int a,b,c,y,g,f; printf("圆柱底面的半径,圆柱的高"); scanf(" ...

  9. 配置集成环境xampp-win32-1.7.0-installer.exe

    第一步:准备当然要有xampp-win32-1.7.0-installer.exe这个软件了啊,大家可以去网站上下载这个就不必多说了吧在安装之前一定要将apache,mysql,httpd这一系列进程 ...

  10. 不要在类的函数中使用static字段

    昨天在做存储服务的压力测试,后台是采用多线程根据玩家唯一标识做线程划分的,在测试的过程中发现,进行存储的时候,会发生玩家数据错乱的情况. 一开始怀疑是上层逻辑在处理数据的时候发生了错乱,导致保存的时候 ...