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. 超级链接a+ confirm用法

    示例: <a href="DelServlet?action=${fuwa.id}" onClick="return confirm('你确定要删除?')" ...

  2. 您不能在64-位可执行文件上设置DEP属性?

    我是为dllhost.exe设置DEP时遇到了同样的情况.你需要选择64位系统对应的程序.64位系统:C:\Windows\SysWOW64\dllhost.exe32位系统:C:\Windows\S ...

  3. array_count_values函数

    array_count_values() 函数用于统计数组中所有值出现的次数. 本函数返回一个数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数. 例子 <?php $a=array ...

  4. 解决magento新闻邮件发送一直处于“正在发送”状态问题

    今天在弄magento新闻邮件发送时候发现,单个邮件发送完全没有问题,但是新闻邮件订阅死活都不成功,国内国外的帖子都翻了一遍没有用,最后还是得靠自己了,于是开始慢慢找问题   首先想到是不是cront ...

  5. magento搬家步骤和可能遇到的问题

    将原来网站文件中的var文件中的cache和session文件删除,将media中的缓存文件删除.然后将所有文件制作成一个压缩包,以减少文件体积,方便转移. 将压缩包转移到新的服务器域名指向的文件夹, ...

  6. 【Better Code】repeat

    <JavaScript 框架设计> 版本1: function repeat(target, n) { return (new Array(n + 1)).join(target) } 版 ...

  7. jsonp跨域请求数据实例——手机号码查询

    前言 网上有很多开放的api,我们在本地通过ajax获取数据时,总会碰到一个问题,那就是跨域!如果不借助php等,仅仅通过js怎么解决跨域的问题呢?或许jsonp是个不错的选择. 知识准备 上篇博客 ...

  8. 319. Bulb Switche

    There are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off every ...

  9. Educational Codeforces Round 15 D 数学推公式

    D. Road to Post Office time limit per test 1 second memory limit per test 256 megabytes input standa ...

  10. iPhone 6/iPhone 6 Plus硬件性能

    iPhone 6/iPhone 6 Plus硬件性能 评分 4 分 正 如之前传闻的,这次同时发布了两款iPhone产品,分别是4.7英寸的iPhone 6和5.5英寸的iPhone 6 Plus.苹 ...