zoukankan      html  css  js  c++  java
  • centos 如何用 rsyslog 搭建本地日志服务

    一、问题背景

      最近项目遇到一个问题,服务器响应很慢,team中的两个有经验的工程师找了一台服务器分析了一下,发现问题出在磁盘写入过于频繁。这里大概介绍一下背景,我们的服务器上面主要是跑各种PHP接口,每个接口都有独立的日志,由于磁盘只有一个磁头(这显然谁都知道,ORZ...),而日志又是独立的,即一次请求过来就需要写一次日志,由于日志保存的位置不同,也就是一次请求磁头就需要移动一个位置,机械硬盘大家懂得,这样显然就会导致了日志写入的速度很慢,从而拖慢了服务器的响应时间。

    二、解决思路

      显然问题就出在日志的频繁写入上,试想如果能有一个专门的日志服务来接收日志,而不是每次都直接往硬盘中写入。在此基础上再加入一些缓存机制,写日志的问题肯定会好很多。OK,问题的思路有了,但是如何来搭这套服务呢?有没有一些直接可用的解决方案呢?显然是有的,毕竟我肯定不是第一个遇到这个问题的人。team中的老司机们说 rsyslog 应该能够满足这个要求,而且团队目前也有在用这个服务,可以了解一下。

    三、解决问题的步骤

      1、什么是rsyslog,它能干什么:

      上面说到了 rsyslog 这个工具, rsyslog 是什么呢?简单说 rsyslog 其实是一个集中日志服务器,它可以支持 tcp、udp或者本地文件等当时的输入,然后支持把日志写入到 本地、数据库等等,如下图所示:

      http://www.rsyslog.com/common/images/rsyslog-features-imagemap.png

    什么?要再具体的说下,请参考官网: http://www.rsyslog.com/ 

      2、如何安装 rsyslog 

      centos下安装rsyslog灰常简单,如你所见:  

    	$  yum install rsyslog
    

       3、配置 rsyslog,官网有配置的向导,链接: http://www.rsyslog.com/rsyslog-configuration-builder/,这个做得非常人性化。上面说到 rsyslog 可以支持 TCP、UDP等方式的接收日志,这里不妨先用TCP的方式测试一下,然后把日志写到本地一个tmp 目录。生成的配置如下,然后把这个配置放到 /etc/rsyslog.conf 下面。

    # 加载tcp模块
    module(load="imtcp")
    # tcp方式接收日志,端口号为 514
    input(type="imtcp" port="514")
    # 接收日志后,写入到本地/data1/tmp/testlog 中 action(type="omfile" File="/data1/tmp/testlog")

      怎么样,看上去是不是非常简洁,是的,就是这么简单!

      4、启动rsyslog服务,这一步也灰常简单,如下:

    	$  service rsyslog start 
    

      然后你可以用 ps 命令看下服务是否启动了,如下:

    	$  ps -aux | grep rsyslog 
    

      如果看到类似下图所示的情况,那么服务就起来了:

      5、测试一下服务

      写一个简单的php代码,如下:  

    <?php
    
    $errno = '';
    $errstr = '';
    $fp = stream_socket_client("tcp://xx.xx.xx.xx:514", $errno, $errstr, 30); // 这里需要替换成你的ip地址或者域名
    if (!$fp) {
    	echo "$errstr ($errno)<br />
    ";
    } else {
    	fwrite($fp, "test message !
    ");
    	fclose($fp);
    }
    

     然后运行一下这段代码,可以在 /data1/tmp/testlog (上面指定的接收文件)日志中找到如下一条记录,那么服务就正式搭好了。

    今天暂时就写到这里,未完待续!

  • 相关阅读:
    【3.5】类和实例属性的查找顺序--mro查找
    【3.4】类变量和实例变量
    【3.3】isinstance和type的区别
    【3.2】抽象基类(abc模块)
    【3.1】鸭子类型和多态
    学习笔记 | 浅谈虚拟函数(Virtual Function)
    学习笔记 | Udacity CarND Term 1: Computer Vision and Deep Learning
    命令行 | File Compression in Linux
    Python: if else in a list comprehension
    Topic | Hyperparameter Optimization for Neural Networks
  • 原文地址:https://www.cnblogs.com/smallrookie/p/5677004.html
Copyright © 2011-2022 走看看