suse日志服务器配置

syslog-ng 的主配置文件存放在: /etc/syslog-ng/syslog-ng.conf
1
、架构

syslog-ng的配置基于下面的架构:

LOG STATEMENTSSOURCES  FILTERS DESTINATIONS
消息路径『消息源-过滤器-目的站』
也就是说,通过定义多个消息源,把匹配上若干个过滤器的消息导向到指定的目的地,从而组成一个消息路径。

2
、消息源SOURCES
定义格式为:
source <sourcename> { sourcedriverparams; sourcedriverparams; ... };
含义:
<sourcename>
:一个消息源的标识
sourcedriver
:消息源驱动器,可以支持若干参数,并使用分号 隔离多个消息源驱动器
   消息源驱动器有:
        file (filename)  :从指定的文件读取日志信息
       unix-dgram  (filename) 
:打开指定的 SOCK_DGRAM 模式的 unix 套接字,接收日志消息
       unix-stream (filename) 
:打开指定的 SOCK_STREAM 模式的 unix 套接字,接收日志消息
       udp ( (ip),(port) ) 
:在指定的 UDP 端口接收日志消息
       tcp ( (ip),(port) ) 
:在指定的 TCP 端口接收日志消息
       sun-streams (filename) 
:在 solaris 系统中,打开一个(多个)指定的 STREAM 设备,从其中读取日志消息
       internal() 
 syslog-ng 内部产生的消息
       pipe(filename),fifo(filename) 
:从指定的管道或者 FIFO 设备,读取日志信息
例如:
source s_sys {
   file ("/proc/kmsg" log_prefix("kernel: "));
   unix-stream ("/dev/log");
   internal();
   # udp(ip(0.0.0.0) port(514)); #
如果取消注释,则可以从 udp 514 端口获取消息
};
linux使用/dev/log作为SOCK_STREAM unix的套接字,BSD使用/var/run/log
参数需要使用括号括住。


3
、过滤器 FILTERS
定义格式为:
filter <filtername> { expression; };
含义:
<filtername>
:一个过滤器标识
expression
:表达式
表达式支持: 逻辑操作符 and (和)、 or (或)、 not (非);
            函数:可使用正规表达式描述内容
    过滤函数有:
    facility(,) :根据 facility (设备)选择日志消息,使用逗号分割多个 facility
    level(,)
:根据 level (优先级)选择日志消息,使用逗号分割多个 level ,或使用 “..” 表示一个范围
    program(regexp)
:日志消息的程序名是否匹配一个正则表达式
    host(regexp)
:日志消息的主机名是否和一个正则表达式匹配
    match(regexp)
:对日志消息的内容进行正则匹配
    filter()
:调用另一条过滤规则并判断它的值
例如:
filter f_filter2   { level(info..emerg) and
                    not facility(mail,authpriv,cron); };
这里的level定义info,相当于syslog.=info,并不包括更低的等级;
若需要包括更低的等级,请使用“..”表示一个等级范围;
另外,filter(DEFAULT),用于捕获所有没有匹配上的日志消息。filter(*)是无效的。


4
、目的地DESTINATIONS
定义格式为:
destination <destname> { destdriverparams; destdriverparams;  ...  ;};
含义:
<destname>
:一个目的地的标识
destdriver
:目的地驱动器
目的地驱动器有:
      file (filename)  :把日志消息写入指定的文件
      unix-dgram  (filename) 
:把日志消息写入指定的 SOCK_DGRAM 模式的 unix 套接字
      unix-stream (filename) 
:把日志消息写入指定的 SOCK_STREAM 模式的 unix 套接字
      udp  (ip),(port) 
:把日志消息发送到指定的 UDP 端口
      tcp (ip),(port) 
:把日志消息发送到指定的 TCP 端口
      usertty(username) 
:把日志消息发送到已经登陆的指定用户终端窗口
      pipe(filename),fifo(filename) 
:把日志消息发送到指定的管道或者 FIFO 设备
      program(parm) 
:启动指定的程序,并把日志消息发送到该进程的标准输入
举例:
destination d_mesg { file("/var/log/messages"); };
destination d_syslog { udp ("192.168.228.225" port(514)); };
配合使用udptcp即可实现集中的日志服务器。注意,udp函数的写法上和消息源驱动器中的定义不同。

5
、消息路径LOG STATEMENTS
定义格式为:
log  { source S1; source S2; ... filter F1; filter F2; ... destination
      D1; destination D2; ... };
把消息源、过滤器、消息目的组合起来就形成一条完整的指令。日志路径中的成员是顺序执行的。凡是来源于指定的消息源,匹配所有指定的过滤器,并送到指定的地址。
同样的,每条日志消息都会经过所有的消息路径,并不是匹配后就不再往下执行的,请留意。

三、选项参数

除了上述的消息路径定义外, syslog-ng 还可以设定一些选项参数以优化其操作。
全局的选项参数,定义在配置文件的开头位置:
六、参考资料
man syslog-ng.conf
man 8 syslog-ng


options { opt1; opt2; ... };

选项有:
      chain_hostnames(yes|no) 
:是否打开主机名链功能,打开后可在多网络段转发日志时有效
      long_hostnames(yes|no) 
:是 chain_hostnames 的别名,已不建议使用
      keep_hostname(yes|no) 
:是否保留日志消息中保存的主机名称,否时,总是使用来源主机来作重写日志的主机名
      use_dns(yes|no) 
:是否打开 DNS 查询功能,应使用防火墙保护使用 syslog-ng 的节点安全,并确认所有主机都是可以通过 dns 解释的,否则请关闭该选项。
      use_fqdn(yes|no) 
:是否使用完整的域名
      check_hostname(yes|no) 
:是否检查主机名有没有包含不合法的字符
      bad_hostname(regexp) 
:可通过正规表达式指定某主机的信息不被接受
      dns_cache(yes|no) 
:是否打开 DNS 缓存功能
      dns_cache_expire(n) 
DNS 缓存功能打开时,一个成功缓存的过期时间
      dns_cache_expire_failed(n) 
DNS 缓存功能打开时,一个失败缓存的过期时间
      dns_cache_size(n) 
DNS 缓存保留的主机名数量
      create_dirs(yes|no) 
:当指定的目标目录不存在时,是否创建该目录
      dir_owner(uid) 
:目录的 UID
      dir_group(gid) 
:目录的 GID
      dir_perm(perm) 
:目录的权限,使用八进制方式标注,例如 0644
      owner(uid) 
:文件的 UID
      group(gid) 
:文件的 GID
      perm(perm) 
:文件的权限,同样,使用八进制方式标注
      gc_busy_threshold(n)  :当 syslog-ng 忙时,其进入垃圾信息收集状态的时间。一旦分派的对象达到这个数字, syslog-ng 就启动垃圾信息收集状态。默认值是: 3000
      gc_idle_threshold(n) 
:当 syslog-ng 空闲时,其进入垃圾信息收集状态的时间。一旦被分派的对象到达这个数字, syslog-ng 就会启动垃圾信息收集状态,默认值是: 100
      log_fifo_size(n) 
:输出队列的行数
      log_msg_size(n) 
:消息日志的最大值( bytes
      mark(n) 
:多少时间(秒)写入两行 MARK 信息供参考,目前没有实现
      stats(n) 
:多少时间(秒)写入两行 STATUS 信息供,默认值是: 600
      sync(n) 
:缓存多少行的信息再写入文件中, 0 为不缓存,局部参数可以覆盖该值。
      time_reap(n) 
:在没有消息前,到达多少秒,即关闭该文件的连接
      time_reopen(n) 
:对于死连接,到达多少秒,会重新连接
      use_time_recvd(yes|no) 
:宏产生的时间是使用接受到的时间,还是日志中记录的时间;建议使用 R_ 的宏代替接收时间, S_ 的宏代替日志记录的时间,而不要依靠该值定义。
例如:
options {
   sync (0);
   time_reopen (10);
   log_fifo_size (1000);
   long_hostnames (off);
   use_dns (no);
   use_fqdn (no);
   create_dirs (no);
   keep_hostname (yes);
};


四、部分函数的参数
syslog-ng
除了有全局选项参数外,不同的函数还可以定义其参数,其中包括:
   1
、扩展 file的宏
HOST 
日志消息的源发主机名。如果日志消息穿过几个主机,并且 chain_hostname ()功能已经打开,就使用第一个主机名。
FACILITY 
:日志消息来自的日志设备
PRIOPRITY/LEVEL 
:日志消息的优先级
PROGRAM 
:发送日志消息的程序
YEAR 
:发送日志消息的年份,这个宏既可以指定日志消息送出的时间,也可以指定日志消息收到的时间。 这由 use_time_recvd ()选项控制
MONTH 
:发送日志消息的月份
DAY 
:发送日志消息的日子
HOUR 
:小时
MIN 
:分钟
SEC 
:秒
       2
 file的参数
例如: log_file_size ()、 sync ()、 owner ()、 perm ()等,请参考上面的全局设定
       3
tcpupd的参数
ip
xxx.xxx.xxx.xxx ):定义绑定的 IP 地址
port
n ):定义绑定的端口
max-connections
n ):定义最大连接数
TCP基于连接方式传输,不会造成日志丢失,而UDP则不同。但因为传统的syslog基于UDP514端口,所以,UDP方式也经常会使用到。
另外,514也是rshell的默认端口,请注意冲突。

举例:
destination d_mail { file("/var/log/maillog" sync(10)); };
这里定义的 sync(10) 会覆盖全局配置,表示若写入的日志数量达到 10 ,才写入 maillog 文件。

五、关于垃圾收集状态
当满足一定的条件, syslog-ng 即会进入垃圾收集状态,而暂时不再接受日志信息。这时,会造成非连接的传输协议的日志丢失(例如 UDP )。通过设置下面两个选项可以控制:
      gc_idle_threshold(n) 

意思是,一旦被分派的对象到达这个数字,并且当  syslog-ng 空闲时( 100 微秒内没有日志消息到达)。此时, syslog-ng 就会启动垃圾信息收集状态。
已分配的对象可通过 -v 命令行参数指定其的最小值。而 syslog-ng 这个值应该比较小,但比已分配的对象要大即可。
例如,  空闲状态, syslog-ng 会显示:
Nov 13 16:35:35 syslogng syslog-ng[4510]: STATS: dropped 0
Nov 13 16:45:35 syslogng syslog-ng[4510]: STATS: dropped 0
       当忙时:

gc_busy_threshold(n) :当syslog-ng忙时,一旦分派的对象达到这个数字,syslog-ng就进入垃圾信息收集状态的时间。该值应该比较高,以保证正常情况下不会打断日志消息的收取。

=========================================================================================================================================================

    syslog的配置文件
[root@localhost ~]# vim /etc/syslog.conf
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
#把除邮件、新闻组、授权信息、计划任务等外的所有通知性消息都写入messages文件中
# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure
# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog
##把邮件、新闻组中仅通知性消息写入info文件,其他信息不写入,“-”表示支持异步写入,在有大量日志需要写入的时候,日志能够先缓存在内存中后写入到磁盘上。
# Log cron stuff
cron.*                                                  /var/log/cron
#把计划任务的日志信息都写入到/var/log/cron
# Everybody gets emergency messages
*.emerg                                                 *
#通常应广播到当前所有用户;
# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler
# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
 
从它配置文件中可以看出日志文件设置的格式如下
facility.level action
facility定义日志消息的范围,常见的facility有kern,authpriv,mail,cron,uucp ,local0-local7 (与自定义程序使用) 和通配*
                                  
level日志级别:
emerg:emerg 紧急,处于Panic状态。通常应广播到所有用户;
alert:告警,当前状态必须立即进行纠正。例如,系统数据库崩溃;
crit:关键状态的警告。例如,硬件故障;
err:阻止工具或某些子系统部分功能实现的错误条件,等同error
warning :预警信息,等同warn
notice:具有重要性的普通条件
info:提供信息的消息
debug:不包含函数条件或问题的其他信息
none:没有重要级,通常用于排错
action:定义日志存放的位置
上面就是linux日志的内容,有时候为了安全,需要把日志放到日志服务器上,下面就设置个简单日志服务器.
我使用192.168.1.99做日志服务器,配置如下:
默认情况下linux主机只接受本机的产生的日志,所以要开启99这个主机接受我的另一台机器产生的日志
[root@localhost ~]# # vim /etc/sysconfig/syslog
SYSLOGD_OPTIONS="-r -m 0" #修改成这样
[root@localhost ~]# service syslog restart
[root@localhost ~]# echo  > /var/log/messages  ##清空99主机上日志记录
[root@localhost ~]# cat !$
cat /var/log/messages
[root@localhost ~]#
然后我在开一台机器192.168.1.188让其产生的日志都传到192.168.1.99上,配置如下:
[root@localhost ~]# vim /etc/syslog.conf
*.info;mail.none;authpriv.none;cron.none                @192.168.1.99 ##也可以是域名,但需要dns解析到。
[root@localhost ~]#  echo  > /var/log/messages
[root@localhost ~]# cat !$
cat /var/log/messages
[root@localhost ~]#
[root@localhost ~]#  service syslog restart
Shutting down kernel logger:                               [  OK  ]
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
Starting kernel logger:                                    [  OK  ]
此时在99主机上查看日志记录:
[root@localhost ~]# cat /var/log/messages
Apr 12 12:18:31 192.168.1.188 syslogd 1.4.1: restart.
Apr 12 12:18:31 192.168.1.188 kernel: klogd 1.4.1, log source = /proc/kmsg started.
记录已经到99主机上了,这样一个最简单没有经过优化日志服务器已经建成
日志服务器不但能够记录服务和系统产生的日志,也可以记录很多网络设备产生的日志。
只需要在日志服务器上定义
[root@localhost ~]# vim /etc/syslog.conf
local7.info                                             /var/log/route.log
[root@localhost ~]#  service syslog restart
同时在路由器全局模式下设置
 #logging on
 #logging 192.168.1.99
 #logging trap info                                                                        
 #logging facility local7
但是很多时候我们需要考虑日志服务器的安全
1,不能让所有的主机都能向日志服务器发送日志
2,不能能够让所有的用户都能够连接到日志服务器
3,日志的备份等一系列问题
对于前两条我们可以通过iptables来实现
# iptables -A INPUT -s 192.168.1.188 -p tcp --dport 22 -j ACCEPT
# iptables -A OUTPUT  -s 192.168.1.99 -d 192.168.1.188  -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -s 192.168.1.188 -d 192.168.1.99 -p udp --dport 514 -j ACCEPT
#iptables -P INPUT DROP
ps:设置后只有188主机的日志弄够同步到日志服务器上,也只要188主机弄够远程连接到日志服务器。
linux使用logrotate来对日志管理,通常包括日志备份,删除,这一过程通常用cron程序来执行
logrotate是个很好用日志管理工具,他的配置文件有两部分组成:/etc/logrotate.conf 和:/etc/logrotate.d下所有的文件
[root@localhost logrotate.d]# vim  /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    minsize 1M
    create 0664 root utmp
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    minsize 1M
    create 0600 root utmp
    rotate 1
}
# system-specific logs may be also be configured here.
这是centos默认的配置,可以看出他的语法和简单,只要明白关键字是什么意识就知道怎样使用
compress 通过gzip 压缩转储以后的日志
nocompress 不压缩以后的日志
rotate count 指定日志文件删除之前转储的次数,0 指没有备份,4指保留4个备份
create mode owner group 转储文件,使用指定的文权限,属主和属组创建新的日志文件
nocreate 不建立新的日志文件
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
prerotate/endscript在转储以前需要执行的命令需要放到这两关键字中间,这两关键字必须单独成行
postrotate/endscript 在转储以后需要执行的命令需要放到这两关键字中间,这两关键字必须单独成行
missingok:如果日志文件丢失,进入到下一个不发出错误消息
sharedscripts 一个脚本可以运行日志文件条目多次匹配多个文件
include就是包括/etc/logrotate.d下的配置文件,同时/etc/logrotate.d下的配置文件设置属性的高于/etc/logrotate.conf 设置的,所有当两者有冲突的时候,优先使用/etc/logrotate.d下的配置文件下的设置,我们自己定义(无论是网络设备还服务)的日志管理都可以按照下面格式来定义。
[root@localhost logrotate.d]# cat syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}
[root@localhost logrotate.d]# cat httpd
/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值