rsyslog配置含义

作者: 王歪歪102几 | 来源:发表于2017-10-27 20:00 被阅读303次

    ryslog工作流,输入-处理-输出。linux系统自带的日志收集工具,依赖守护进程。在linux系统中,/var/log/message,/var/log/cron,都是系统通过rsyslog收集的。我看了好多文章,都测试了一遍,整理了一下。

    模块

    模块modules,比如imfile.so,这个地方可以通过lsof |grep rsyslog来查看

    module(load="imfile")#如果需要读文件读时候,需要加载imfile模块

    module(load="imtcp") # 开启tcp,

    input(type="imtcp" port="514")

    规则:

    facility.severity    target

    local5.*  @@remote-host:514 ##local5下的所有类型通过tcp远程输出

    *.info;mail.none;authpriv.none;cron.none;local5.none;local6.none/var/log/messages##所有的info存入/var/log/message,但是cron,local5,local6不存储,这里是为了防止自定义的日志,写入message,  导致文件过大

    facility

    facility可以理解成日志类型,

    auth #pam产生的日志,认证日志

    authpriv #ssh,ftp等登录信息的验证信息,认证授权认证

    cron #时间任务相关

    kern #内核

    lpr #打印

    mail #邮件

    mark(syslog) #rsyslog服务内部的信息,时间标识

    news #新闻组

    user #用户程序产生的相关信息

    uucp #unix to unix copy, unix主机之间相关的通讯

    local 1~7 #自定义的日志设备,这个地方我们业务自定义,测试期间用的local5

    serverity,

    debug #有调式信息的,日志信息最多

    info #一般信息的日志,最常用

    notice #最具有重要性的普通条件的信息

    warning, warn #警告级别

    err, error #错误级别,阻止某个功能或者模块不能正常工作的信息

    crit #严重级别,阻止整个系统或者整个软件不能正常工作的信息

    alert #需要立刻修改的信息

    emerg, panic #内核崩溃等严重信息

    properties,

    属性,可以理解为内置变量,

    msg #匹配message中的msg部分

    rawmsg #从socket收到的信息,一般用来debug

    rawmsg-after-pri #和rawmsg类似,但是syslog PRI被移除了

    hostname #message的主机名

    source #HOSTNAME的别名

    fromhost #message来源的主机名,一般是用在relay chain中

    fromhost-ip #同fromhost,不过获取的是ip,这个地方在f

    syslogtag #message的tag

    programname #是tag的静态部分,例如tag是named[123456],则programname是named,这个地方在php生成的消息的时候,会带[]这种字符,做模板最好用这个

    表达式:

    contains 属性包含指定的字符串

    isequal 属性等于指定的字符串

    startswith 属性由指定字符串开始

    regex POSIX BRE 正则表达式

    ereregex POSIX ERE 正则表达式

    :fromhost-ip, isequal, "127.0.0.1" ?TestFormat

    if $syslogfacility-text == 'local0' and $msg startswith 'DEVNAME' and ($msg contains 'error1' or $msg contains 'error0') then /var/log/somelog

    模板

    消息格式

    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat ## 默认<接收内容的时间> <发送者的hostname> <$InputFileTag> <原始消息%msg%>

    $template MsgFormat,"%msg%\n" ##只保留原始消息

    ###模板,给不同的类型配置模板,根据rule规则过滤,这个地方要和client约定好

    template(name="NgAccessFormat" type="string"

    string= "/data/log/ngaccessremote/%fromhost-ip%/%$YEAR%/%$MONTH%/%$DAY%.log"

    )

    template(name="NgErrorFormat" type="string"

    string= "/data/log/ngerrorremote/%fromhost-ip%/%$YEAR%/%$MONTH%/%$DAY%.log"

    )

    template(name="PhpfpmFormat" type="string"

    string= "/data/log/phpfpmremote/%fromhost-ip%/%$YEAR%/%$MONTH%/%$DAY%.log"

    )

    ###这里要保证不同的日志不要命中同一个

    :syslogtag,startswith,"errorng" ?NgErrorFormat;MsgFormat

    :syslogtag,startswith,"access" ?NgAccessFormat;MsgFormat

    :syslogtag,startswith,"phpfpm" ?PhpfpmFormat;MsgFormat

    :syslogtag,startswith,"codelog" ?CodeLogFormat;MsgFormat

    权限

    ###设置生成的文件权限,默认是rwx------

    $FileOwner root

    $FileGroup root

    $DirCreateMode 0755

    $FileCreateMode 0755

    $Umask 0022

    队列

    这个队列是对output而言,在输出数据对时候,加缓存队列,可以保证消息发送对端失败对情况缓存起来。比如tcp远程发送消息的时候,对方宕机,可以使消息缓存,网络恢复就可以继续发出。缓存分内存,磁盘,还有内存+磁盘。

    direact:没有队列,默认情况

    disk:磁盘,这个情况下,如果传输失败会在workdirectory下看到相应记录,我在测试的时候,把server的端口关掉,就可以模拟网络失败。可以通过tcpdump抓包来看。

    LinkedList,FixedArray 内存

    $WorkDirectory /var/lib/rsyslog

    $ActionQueueType LinkedList

    $ActionQueueFileName local5 ###定义内存,同时制定名字就是内存+缓存的方式

    $ActionResumeRetryCount -1

    $ActionQueueSaveOnShutdown on

    local5.* @@ip:514

    配置

    在配置机器的时候,要注意两个地方。

    1,selinux状态,不要是mac模式,否则syslogd进程没办法读取imfile里定义的文件,即使777也没用

    2,如果需要tcp 或者udp,而且防火墙开了,记得开一下端口。telnet 一下

    3,如果使用了内存加磁盘的方式,注意一下默认内存限制。

    官网地址

    http://www.rsyslog.com/doc/v8-stable/

    后续

    这个只是完成了日志的收集,后面是用通用的elk,还是其他工具,待研究。

    这个rsyslog是基于tcp,查网上资料都说带宽性能好,logstash耗性能,后续会继续压测,和性能测试。

    相关文章

      网友评论

        本文标题:rsyslog配置含义

        本文链接:https://www.haomeiwen.com/subject/yhudpxtx.html