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. $.noop()和$.map()函数

    最近在项目中发现$.noop()函数,因以前没使用过故查询下,现整理如下: jQuery.noop()函数是一个空函数,它什么也不做. 当某些时候你需要传入函数参数,而且希望它什么也不做的时候,你可以 ...

  2. Note_Master-Detail Application(iOS template)_03_main.m

    // main.m #import <UIKit/UIKit.h>//UIKitk框架提供一系列的Class(类)来建立和管理iPhone OS应用程序的用户界面( UI )接口.应用程序 ...

  3. (spring-第12回【IoC基础篇】)JavaBean的属性编辑器

    在spring实例化bean的最后阶段,spring利用属性编辑器将配置文件中的文本配置值转换为bean属性的对应值,例如: 代码0011 <bean id="car" cl ...

  4. Ubuntu安装Osmocom-BB一只猿多频点WEB脚本

    LAMP(Linux- Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据 库,Perl.PHP或者Pytho ...

  5. UIkit框架介绍

    UIKit Framework The UIKit framework (UIKit.framework) provides crucial infrastructure for implementi ...

  6. PHP图像处理之在原图像处理

    处理原有的图像        图片处理,缩放,裁剪,翻转,旋转,透明,锐化等图片操作        一.创建图片资源            imagecreatetruecolor(width,hei ...

  7. PHP中的错误处理和异常处理

    错误处理:    1.语法错误    2.运行时的错误    3.逻辑错误 错误报告:        错误E_ERROR        警告E_WARNING        注意E_NOTICE 开发 ...

  8. Android SoundPool.play方法的音量与系统音量的关系

    Android中播放音频,除了使用MediaPlayer,还可以使用SoundPool.SoundPool使用音效池的概念来管理多个短促的音效,对于需要短促的提示音的场景特别合适. 通常调用Sound ...

  9. nohup启动命令(转)

    简单而有用的nohup命令在UNIX/LINUX中,普通进程用&符号放到后台运行,如果启动该程序的控制台logout,则该进程随即终止. 要实现守护进程,一种方法是按守护进程的规则去编程(本站 ...

  10. ANTLR3完全参考指南读书笔记[08]

    前言 不要让用户被那些“专业术语”吓住! 用心设计的提示和反馈信息是软件设计者的“职业良心”.   内容 1 存在哪些错误? 2 美化错误提示 3 错误恢复策略   1 存在哪些错误? 在DSL语言开 ...