整合syslog-ng
一、syslog-ng配置
二、syslog-ng 介绍
一、syslog-ng配置
syslog-ng客户端配置:
打开配置文件
sudo vi /etc/syslog-ng/syslog-ng.conf
首先,定义一个source,也就是日志来源。来源还有很多种定义方法,自己去研究手册就可以了。
source  my_log { unix-stream("/dev/log"); internal(); };
然后定义一个filter,就是过滤器。因为我只发送用户认证日志。
filter f_auth { facility(auth); };
然后定义一个目的地。就是我要把日志发送到什么地方。我使用的是tcp协议。(192.168.1.100就是我的中央日志服务器,它在25214端口监听。 )
destination center_log_server { tcp("192.168.1.100" port(25214)); }  
然后定义发送命令
log { source(my_log); filter(f_auth); destination(center_log_server); };
syslog-ng服务端配置(也就是我的中央日志服务器配置) :
打开配置文件
sudo vi /etc/syslog-ng/syslog-ng.conf
首先,定义一个来源。就是我要从那里读日志(因为服务器在自己的25214端口监听,所以自然也是从那里读了  )。
source log_from { tcp(ip(192.168.1.100), port(25214)); };
定义一个目的地:
destination remote_log { file("/var/log/remote_log"); };
记录日志命令:
log { source(log_from); destination(remote_log); };
好了,配置文件就写好了。
然后创建一下你要把日志输出到的那个文件:
sudo touch /var/log/remote_log
然后重启客户端和服务端的syslog-ng进程。
sudo /etc/init.d/syslog-ng restart
好了,配置完毕。检验一下配置结果就行了。
可以用python的syslog模块来检验,非常方便的。  
二、syslog-ng 介绍
   在UNIX系统的维护中,经常会忽略系统事件的处理。经常检查系统日志对于保持系统的安全和正常运行是至关重要的。但是,系统日志中有太多的噪音,一些不是很重要的信息会掩盖重要的信息。目前的工具很难甄别出系统管理者感兴趣的信息。
   用户可以通过指定facility/priority,把消息发到不同的地方。系统预先定义了12+8个(mail、news、auth等)facility,八个不同的优先级(alert到debug)。
   这其中存在一个问题,大量的程序使用同样的facility(daemon),把日志都保存到一个文件中(messages),即使它们毫无关联。这样就造成用户很难筛选出自己感兴趣的东西。
    第二个问题是,大多数的程序无法改变日志配置,只能修改软件的源代码。
    因此,使用facility作为过滤不是一个好办法。最好能够有一些runtime选项,使用这些选项指定日志facility,建立新的facility。
    syslog- ng的一个设计原则就是建立更好的消息过滤粒度。syslog-ng能够进行基于内容和优先权/facility的过滤。另一个设计原则是更容易进行不同防火墙网段的信息转发,它支持主机链,即使日志消息经过了许多计算机的转发,也可以找出原发主机地址和整个转发链。最后的一个设计原则就是尽量使配置文件强大和简洁。
    syslog-ng的配置基于下面的架构:
    LOG STATEMENTS『SOURCES - FILTERS -DESTINATIONS』
    消息路径 『消息源 - 过滤器 - 目的站』 例如:
    log { source(my_log); filter(f_auth); destination(center_log_server); };

    一个消息路径是由一个或者多个日志消息源、一个或者多个过滤规则以及一个或者多个日志消息目的组成的。来自某个日志消息源的消息进入syslog-ng,如果消息命中某条规则,syslog-ng就把它发送到对应的日志消息目的。
消息源
一些日志消息源驱动器(source driver)组成一个消息源,这些驱动器使用给定的方法收集日志消息。譬如,有的syslog()系统调用使用的AF_UNIX、SOCK_STREAM风格的套接字源驱动器。
在配置文件中,你可以使用下面的语法声明一个日志消息源:
source { source-driver(params); source-driver(params); … };
identifier是给定消息源的唯一标志,但是这个标志符不能和保留字有冲突。
你可以控制使用哪个驱动器来收集日志消息,因而你需要知道你的系统和他的内部syslogd是如何通讯的。下面介绍一下某些平台中,syslogd是如何工作的。
Linux 一个叫作/dev/log的SOCK_STREAM unix套接字
BSD 一个叫作/var/run/log的SOCK_STREAM unix套接字
Solaris(2.5或以下) 一个叫做/dev/log的SVR4风格的STREAMS设备
solaris(2.6或以上) 除了2.6之前版本使用的STREAMS设备之外,使用了一种新的多线程IPC方法调用门。默认情况下,这个调用门是/etc/syslog_door,由syslogd使用。
在syslog-ng中,每个可能的通讯机制都有对应的日志消息源驱动器。例如:如果要打开一个SOCK_DGRAM风格的UNIX套接字进行通讯,你就会用到unix-dgram驱动器,同样SOCK_STREAM式的通讯需要unix-stream驱动器。
例2-1.Linux中的一个源指令
source src { unix-stream(“/dev/log”); internal(); udp(ip(0.0.0.0) port(514)); };
驱动器可以使用参数,参数有些是必需的,有些是可选的。必需的参数一般在前面。上面的指令中,/dev/log就是必需参数。
下面是可用的源驱动器:
internal syslog-ng内部产生的消息
unix-stream 打开指定的SOCK_STREAM模式的unix套接字,接收日志消息
unix-dgram 打开指定的SOCK_DGRAM模式的unix套接字,接收日志消息
file 打开指定的文件读取日志信息
pipe,fifo 打开指定的管道或者FIFO设备,读取日志信息
tcp 在指定的TCP端口接收日志消息
udp 在指定的UDP端口接收日志消息
sun-stream(s) 在solaris系统中,打开一个(多个)指定的STREAM设备,从其中读取日志消息。
internal()
所有syslog-ng内部产生的日志消息都来自这个日志消息源。如果你需要syslog-ng自身产生的警告、错误和提醒信息,就需要在配置文件中加入以下声明:
Declaration: internal()
如果这个消息源驱动器没有被引用,syslog-ng会向你输出报警信息。
例3-1.使用inernal()日志消息源驱动器
source s_local { internal(); };
unix-stream()和unix-dgram()
这 两个日志消息源驱动器比较相似,都打开AF_UNIX类型的套接字,在套接字上监听日志消息。unix-stream()主要用在Linux,使用 SOCK_STREAM参数,是面向连接的,不会造成日志消息的丢失;unix-dgram()用在BSD系统上,使用SOCK_DGRAM参数,是无连 接的,如果系统过载,会造成日志消息丢失。
在使用面向连接的协议时,为了避免造成拒绝服务攻击,需要对同时接受的连接数量进行闲置。这由max-connections()参数实现。
Declaration: unix-stream(filename [options]); unix-dgram(filename [options]);
以下选项可以用于unix-stream和unix-dgram日志消息源驱动器的声明:
名字 参数数据类型 描述 owner() 字符串 设置套接字的uid,默认是:root group() 字符串 设置套接字的gid,默认是:root perm() 数字 设置权限掩码。八进制数字以0开头,例如:0755表示rwxr-xr-x。 keep-alive() yes/no 当syslog-ng重启动,选择是否保持连接,只用于unix-stream()。默认是yes max-connections()数字 同时打开的连接的数目限制,只用于unix-stream()日志消息源驱动器。默认是10。
例3-2.使用unix-stream()和unix-dgram()日志消息源驱动器
source s_stream { unix-stream(”/dev/log” max-connections(10)); }; source s_dgram { unix-dgram(”/var/run/log”); };
tcp()和udp()
使用这两个日志消息源驱动器,你可以使用TCP或者UDP协议从网络上接受日志消息。
UDP是一种简单的用户数据报协议,使用这种协议可能会发生日志消息的丢失,而且这种协议没有重传机制;TCP是一种面向连接的传输层协议,不会造成日志消息的丢失。
这两种消息源驱动器都不需要位置参数。默认情况下,syslog-ng会绑定到0.0.0.0:514,在所有有效的端口上监听。可以使用localip()参数来限制其接受连接的端口。
注意:514端口是rshell使用的端口,因此如果syslog-log和rshell同时使用,你需要为syslog-ng选择另外的端口。
Declaration: tcp([options]); udp([options]);
下面是udp()和tcp()可用的选项:
选项名 数据类型 描述 默认值 ip或者iplocalip 字符串 绑定的IP地址 0.0.0.0
udp()和tcp()使用示例:
source s_tcp { tcp(ip(127.0.0.1) port(1999); max-connections(10); }; source s_udp { udp(); };
file()
通 常,内核会把自己的消息送到一个特殊的文件(BSD系统是/dev/kmsg,Linux系统是/proc/kmsg),因此你需要使用file()日志 消息源驱动器来指定这个文件。在Linux中,klogd会读取内核信息,并转发到syslogd进程,klogd在转发之前会对内核消息进行处理,使用 /boot/System.map文件中的符号名代替原来的地址。如果你不需要这种功能,可以使用-x参数运行klogd。
Declaration: file(filename);
file()日志消息源驱动器示例:
source s_file { file(”/proc/kmsg”); };
pipe()
pipe日志消息源驱动器打开一个命名管道,在这个命名管道监听日志消息。在HP-UX系统中,它用于内部日志消息的获得。
Declaration: pipe(filename);
注意首先你需要使用mkfifo建立命名管道。
例3-6.使用pipe()日志消息源驱动器
source s_pipe { pipe(”/dev/log”); );
sun-streams()
solaris使用STREAMS API把日志消息发送到syslogd进程。你必须在编译syslog-ng时加入这个特征。
新版solaris(>=2.51)中,STREAMS使用一个新的IPC调用门来投递日志消息。syslog-ng支持这种IPC机制。
例如:
引用
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;
参数需要使用括号括住。
过滤器FILTERS
定义格式为:
引用
filter fliter_name { expression; };
含义:
fliter_name:一个过滤器标识
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(*)是无效的。
目的地DESTINATIONS
定义格式为:
引用
destination d_mesg{ destdriver params; destdriver params;  ...  ;};
含义:
d_mesg:一个目的地的标识
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)); };
※配合使用udp或tcp即可实现集中的日志服务器。注意,udp函数的写法上和消息源驱动器中的定义不同。
除了上述的消息路径定义外,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、tcp和upd的参数
ip(xxx.xxx.xxx.xxx): 定义绑定的IP地址
port(n):定义绑定的端口
max-connections(n) : 定义最大连接数
※TCP基于连接方式传输,不会造成日志丢失,而UDP则不同。但因为传统的syslog基于UDP的514端口,所以,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就进入垃圾信息收集状态的时间。该值应该比较高,以保证正常情况下不会打断日志消息的收取。
filter F1; filter F2; ... destination
      D1; destination D2; ... };
把消息源、过滤器、消息目的组合起来就形成一条完整的指令。日志路径中的成员是顺序执行的。凡是来源于指定的消息源,匹配所有指定的过滤器,并送到指定的地址。

syslog-ng客户端,服务器配置相关推荐

  1. 将syslog ng日志写入MySQL(远程)数据库

    Centos6.5 syslog-ng 3.25 mysql 1,yum install syslog-ng.x86_64 2,yum install mysql.x86_64    // 支持mys ...

  2. linux syslog客户端,syslog服务器及客户端配置指南

    第一部分 syslog服务器配置 操作系统:windows server 2008 R2 syslog软件:KIWI syslog 1.安装完成后,不需要特殊的配置,在kiwi syslog serv ...

  3. clickhouse配置项config.xml详解——服务器配置参数

    调研学习clickhouse,上一章介绍了clickhouse的配置项users.xml,这一章介绍另一大项config.xml 从clickhouse的官网看,clickhouse的配置参数主要分了 ...

  4. linux 日志主服务器 syslog

    syslog日志服务 syslog日志的主要用途是系统审计,监测追踪和分析统计,syslog是一个综合的日志记录系统,它主要的功能是方便日志管理和分类存放日志 日志syslog的功能: syslog功 ...

  5. centos7安装dhcp服务器并由客户端动态获取IP地址

    主机架构: 角色 ip地址 网关 dhcp服务器 192.168.8.81 192.168.8.1 客户机1 动态获取 192.168.8.81 客户机2 192.168.8.99 192.168.8 ...

  6. 微软服务器 客户机,网络客户端和服务器技术简介

    网络客户端和服务器技术简介 已完成 7 分钟 关于网络的组成,你首先需要了解网络的构建方式. 服务器是网络的骨干. 通过混合使用集线器.交换机和路由器,可在整个网络中实现连接. 此知识适用于自己组织的 ...

  7. centos 7.6 ——远程访问及控制——(ssh密钥登录、ssh客户端、TCP Wrappers)

    远程访问及控制 文章目录 远程访问及控制 一.ssh基本配置 1. 允许root登录 2. 禁止root远程登录 **注意 3. DenyUsers 黑名单的使用 4. AllowUsers 白名单使 ...

  8. python 实现syslog 服务器

    交换机等网络设备基本上都支持将本地日志通过syslog 协议传输到后端服务器上集中查看和存储,毕竟这类设备的存储容量也有限.操作系统也是支持syslog协议的.从网上看日志集中管理很多都偏向了ELK解 ...

  9. redhat6.x_linux学习笔记

    ULE 学习笔记 ls -l install.log -:rw-r--r--: 1 :root: root :39410 :2012-12-03 :install.log 文件类型 : 权限位 : 硬 ...

  10. 关于jsp和eclipse服务器端的相关配置和JS的区别

    今天配置了一番eclipse的服务器端,由此重新认识了web技术的皮毛: 话不多说,让我们开始: 一: 首先让我们了解一下js和jsp的技术之间的差别: 1)js:https://zh.wikiped ...

最新文章

  1. 【Android 逆向】使用 DB Browser 查看并修改 SQLite 数据库 ( 从 Android 应用数据目录中拷贝数据库文件 | 使用 DB Browser 工具查看数据块文件 )
  2. cocos2d-x游戏实例(8)-A星算法(4)
  3. 《程序员的思维修炼》思维导图
  4. Kaggle Bike Sharing Demand Prediction – How I got in top 5 percentile of participants?
  5. STM32的ADC通道间干扰的问题
  6. linux7 修改服务启动项目命令,centos7服务部署flask项目
  7. 一个简单CI/CD流程的思考
  8. Hibernate 框架基本知识
  9. SQL Server事务日志体系结构
  10. JavaWeb中的Servlet原理是什么?(存库,建议收藏)
  11. [状压dp] 洛谷 P1879 玉米田
  12. c语言周信东实验答案,桂林电子科技大学-C语言-程序设计-习题-答案(周信东)-实验4--数-组...
  13. Linux 实用工具vi
  14. 关于 epoch、 iteration和batchsize
  15. Qt XDF阅读管理
  16. 小迪外卖小程序源码+后台_外卖cps 赚钱小程序源码
  17. 3GPP Release简介
  18. POI-HSSF表格
  19. java实现手机短信发送的功能详细代码
  20. 腾达路由器dns服务器未响应,荣耀猎人游戏路由怎么设置

热门文章

  1. 科研|我最煎熬的学术时刻,是耗时3年完成了一篇论文
  2. Github标星27.1k,可大批量生成假数据,这个工具忒牛
  3. 这才是厉害程序员的标配!
  4. 比勤奋更能决定人生的,是这个底层思维
  5. 百度推出海外版网盘:竟免费不限速
  6. 很抱歉 此功能看似已中断 并需要修复。请使用Windows控制面板中的“程序与功能”选项修复
  7. 《Cortex-M0权威指南》之Cortex-M0编程入门
  8. PyCharm LicenseServer 破解
  9. 存在sql注入漏洞的php,TCCMS在app/controller/news.class.php存在sql注入漏洞
  10. 腾讯四季度数实经济收入首超游戏达479.58亿元