syslog-ng应用详解
syslog-ng应用详解
科技小能手 2017-11-07 02:43:00 浏览136 评论0
摘要: 最近做一个新项目,要做日志集中收集和处理,拿到机器一看,这批机器用的都是SUSE10 SP2系统,日志服务器用的都是syslog-ng。之前写过写过一篇关于rsyslog的博文,目前也用不上了。总不能把这些机器都挨个装一遍rsyslog吧。
最近做一个新项目,要做日志集中收集和处理,拿到机器一看,这批机器用的都是SUSE10 SP2系统,日志服务器用的都是syslog-ng。之前写过写过一篇关于rsyslog的博文,目前也用不上了。总不能把这些机器都挨个装一遍rsyslog吧。只能硬着头皮学一下syslog-ng了。搜索了一下syslog-ng。发现这个服务还不错。下面我们就具体来了解一下吧。
简介
Syslog-ng是由Balabit IT Security Ltd.维护的一套开源的Unix和类Unix系统的日志服务套件。它是一个灵活的、可伸缩的系统日志记录程序。对于服务器日志集中收集,使用它是一个不错的解决方案。
Syslog-ng主要特性有:
支持SSL/TSL协议
支持将日志写入数据库中,支持的数据库有MySQL, Microsoft SQL (MSSQL),Oracle, PostgreSQL, and SQLite.
支持标准的syslog协议
支持filter、parse以及rewrite
支持更多的平台
更高的负载能力
Syslog-ng工作原理:
Syslog-ng工作模式:
Client mode
Relay mode
Server mode
系统环境:
Centos5.8 x86_64
安装syslog-ng
源码安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
mkdir -p /data/software cd /data/software wget http: //www .balabit.com /downloads/files/syslog-ng/open-source-edition/3 .3.11 /source/syslog-ng_3 .3.11. tar .gz wget http: //www .balabit.com /downloads/files/syslog-ng/open-source-edition/3 .3.11 /source/eventlog_0 .2.12. tar .gz tar zxvfeventlog_0.2.12. tar .gz cd eventlog-0.2.12/ . /configure --prefix= /usr/local/eventlog make && make install cd /data/software tar zxvf syslog-ng_3.3.11. tar .gz cd syslog-ng-3.3.11/ . /configure --prefix= /usr/local/syslog-ng PKG_CONFIG_PATH= "/usr/local/eventlog/lib/pkgconfig" make && make install cp contrib /init .d.RedHat /etc/init .d /syslog-ng chmod +x /etc/init .d /syslog-ng vim /etc/init .d /syslog-ng |
YUM安装
由于Centos5.8 x86_64本身的YUM源并没有syslog-ng,所以需要先安装EPEL源。
1
2
|
rpm -ivh http: //dl .fedoraproject.org /pub/epel/5/i386/epel-release-5-4 .noarch.rpm yum -y install syslog-ng |
设置开机启动项
1
2
3
4
|
chkconfig syslog off service syslog stop chkconfig syslog-ng on service syslog-ng start |
配置文件详解:
如果你的syslog-ng是yum或者RPM包安装的,那配置文件路径为/etc/syslog-ng/syslog-ng.conf。如果你是源码包编译安装的,那配置文件路径一般在安装路径下的etc目录当中。
整个配置文件大致分为全局配置、消息源、过滤器、消息目的地和日志路径几部分。
如下图所示:
全局配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
options { opt1; opt2; ... }; chain_hostnames( yes |no) # 是否打开主机名链功能,打开后可在多网络段转发日志时有效 long_hostnames( yes |no) # 是chain_hostnames的别名,已不建议使用 keep_hostname( yes |no) # 是否保留日志消息中保存的主机名称 use_dns( yes |no) # 是否打开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_的宏代替日志记录的时间,而不要依靠该值定义。 |
消息源:
1
2
3
4
5
6
7
8
9
10
11
|
source <sourcename> {sourcedriver params; sourcedriver params; ... }; internal() # syslog-ng内部产生的消息 file () # 从指定的文件读取日志信息 pipe() # 从指定的管道,读取日志信息 fifo() # 从指定的FIFO设备,读取日志信息 program() # 打开指定的应用程序,从它的标准输出读取消息 sun-stream(), sun-streams() # 在solaris系统中,打开一个(多个)指定的STREAM设备,从其中读取日志消息 tcp(), tcp6() # 在指定的TCP端口接收日志消息 udp(), udp6() # 在指定的UDP端口接收日志消息 unix-dgram() # 打开指定的SOCK_DGRAM模式的unix套接字,接收日志消息 unix-stream() # 打开指定的SOCK_STREAM模式的unix套接字,接收日志消息 |
过滤器:
1
2
3
4
5
6
|
filter <filtername> {expression; }; facility() # 根据facility(设备)选择日志消息 filter() # 调用另一条过滤规则 host() # 日志消息的主机名是否和一个正则表达式匹配 level() or priority() # 根据level(优先级)选择日志消息 match() # 对日志消息的内容进行正则匹配 |
消息目的地:
1
2
3
4
5
6
7
8
9
10
11
|
destination <destname> {destdriver params; destdriver params; ... ; }; file () # 把日志消息写入指定的文件 pipe() # 把日志消息发送到指定的管道 fifo() # 把日志消息发送到指定的FIFO设备 program() # 启动指定的程序,并把日志消息发送到该进程的标准输入 sql() # 把日志消息写入数据库,适用于3.x版本及更高版本的syslog-ng tcp() and tcp6() # 把日志消息发送到指定的TCP端口 udp() and udp6() # 把日志消息发送到指定的UDP端口 unix-dgram() # 把日志消息写入指定的SOCK_DGRAM模式的unix套接字 unix-stream() # 把日志消息写入指定的SOCK_STREAM模式的unix套接字 usertty() # 把日志消息发送到已经登陆的指定用户终端窗口 |
消息路径:
1
|
log { source S1; source S2; ...filter F1; filter F2; ... destination D1; destination D2; ... }; |
配置实例:
单机配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
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 ); }; source s_sys { file ( "/proc/kmsg" log_prefix( "kernel: " )); unix-stream ( "/dev/log" ); internal(); # udp(ip(0.0.0.0) port(514)); }; destination d_cons { file ( "/dev/console" ); }; destination d_mesg { file ( "/var/log/messages" ); }; destination d_auth { file ( "/var/log/secure" );}; destination d_mail { file ( "/var/log/maillog" sync (10)); }; destination d_spol { file ( "/var/log/spooler" ); }; destination d_boot { file ( "/var/log/boot.log" ); }; destination d_cron { file ( "/var/log/cron" ); }; destination d_kern { file ( "/var/log/kern" );}; destination d_mlal {usertty( "*" ); }; filter f_kernel { facility(kern); }; filter f_default { level(info..emerg) and not (facility(mail) or facility(authpriv) or facility( cron )); }; filter f_auth { facility(authpriv); }; filter f_mail { facility(mail); }; filter f_emergency { level(emerg); }; filter f_news { facility(uucp) or (facility(news) andlevel(crit..emerg)); }; filter f_boot { facility(local7); }; filter f_cron { facility( cron ); }; #log { source(s_sys);filter(f_kernel); destination(d_cons); }; log { source (s_sys);filter(f_kernel); destination(d_kern); }; log { source (s_sys);filter(f_default); destination(d_mesg); }; log { source (s_sys);filter(f_auth); destination(d_auth); }; log { source (s_sys);filter(f_mail); destination(d_mail); }; log { source (s_sys);filter(f_emergency); destination(d_mlal); }; log { source (s_sys);filter(f_news); destination(d_spol); }; log { source (s_sys);filter(f_boot); destination(d_boot); }; log { source (s_sys);filter(f_cron); destination(d_cron); }; |
C/S模式:
服务端配置:
1
2
3
4
5
6
7
8
|
source s_sys { file ( "/proc/kmsg" log_prefix( "kernel: " )); unix-stream ( "/dev/log" ); internal(); udp(ip(0.0.0.0) port(514)); }; destination d_mesg { file ( "/var/log/messages" ); }; log { source (s_sys);destination(d_mesg); }; |
客户端配置:
1
2
3
4
5
6
7
|
source s_sys { file ( "/proc/kmsg" log_prefix( "kernel: " )); unix-stream ( "/dev/log" ); internal(); }; destination d_mesg {udp(ip(0.0.0.0) port(514));}; log { source (s_sys);destination(d_mesg); }; |
日志入库:
创建需要的库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
CREATE DATABASE syslog; USE syslog; CREATE TABLE logs ( host varchar (32) default NULL , facility varchar (10) defaultNULL, priority varchar (10) defaultNULL, level varchar (10) default NULL , tag varchar (10) default NULL , date date default NULL , time time default NULL , program varchar (15) default NULL , msg text, seq int (10) unsigned NOT NULLauto_increment, PRIMARY KEY (seq), KEY host (host), KEY seq (seq), KEY program (program), KEY time ( time ), KEY date ( date ), KEY priority (priority), KEY facility (facility) ) TYPE=MyISAM; |
1
|
mkfifo /tmp/mysql .pipe |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
source s_sys { file ( "/proc/kmsg" log_prefix( "kernel: " )); unix-stream ( "/dev/log" ); internal(); udp(ip(0.0.0.0) port(514)); }; destination d_mysql { program( "/usr/bin/mysql-uroot syslog < /tmp/mysql.pipe" ); pipe( "/tmp/mysql.pipe" template("INSERT INTO logs(host, facility, priority, level, tag, date , time , program, msg) VALUES ( '$HOST' , '$FACILITY' , '$PRIORITY' , '$LEVEL' , '$TAG' , '$YEAR-$MONTH-$DAY' , '$HOUR:$MIN:$SEC' , '$PROGRAM' , '$MSG' );\n") template-escape( yes )); }; log { source (s_sys);destination(d_mysql); }; |
到这里为止,syslog-ng常用的配置方法基本上都有了。大家可以尝试安装使用一下,只要灵活配置好配置文件,syslog-ng不光是可以收集系统日志,还可以收集各类服务日志等等。如果大家在使用当中有什么问题欢迎和我交流。O(∩_∩)O~
本文转自 cyr520 51CTO博客,原文链接:http://blog.51cto.com/cyr520/1245650
syslog-ng应用详解的更多相关文章
- Flume NG 配置详解(转)
原文链接:[转]Flume NG 配置详解 (说明,名词对应解释 源-Source,接收器-Sink,通道-Channel) 配置 设置代理 Flume代理配置存储在本地配置文件.这是一个文本文件格式 ...
- 关于syslog日志功能详解 事件日志分析、EventLog Analyzer
关于syslog日志功能详解 事件日志分析.EventLog Analyzer 一.日志管理 保障网络安全 Windows系统日志分析 Syslog日志分析 应用程序日志分析 Windows终端服务器 ...
- syslog之一:Linux syslog日志系统详解
目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...
- syslog及syslog-ng详解 日志服务器
服务器的日志对系统工程师来说是至关重要的,一旦服务器出现故障或被入侵,我们需要查看日志来定位问题的关键所在,所以说对于线上跑的服务器而言日志应该合理的处理及管理.下面来 服务器的日志对系统工程师来 ...
- syslog - 日志文件详解
日志文件,是linux最为重要的记录文件,记录着日常的操作. 我们在linux编程的时候,通常会使用日志文件记录操作和信息,日志系统提供了我们几个API接口供调用 1. API void openlo ...
- Flume NG 配置详解
配置 设置代理 Flume代理配置存储在本地配置文件.这是一个文本文件格式,是Java属性文件格式.在相同的配置文件,可以指定一个或多个代理的配置.配置文件包括每个源,接收器和通道,把它们连接在一起, ...
- ng 目录详解
在新建的项目中需要我们关注的就是package.json和src文件夹 node_modules (项目所需依赖)是package.json所创建的模块安装到node_modules中 src:是代码 ...
- (转)Linux 系统设置 : dmesg 命令详解
原文:https://blog.csdn.net/yexiangCSDN/article/details/80683246 https://www.cnblogs.com/duanxz/p/34770 ...
- linux syslog详解
linux syslog详解 分三部分 一.syslog协议介绍 二.syslog函数 三.linux syslog配置 一.syslog协议介绍 1.介绍 在Unix类操作系统上,syslog广 ...
- FastDFS分布式文件系统配置文件详解
一.tracker配置文件详解: # is this config file disabled# false for enabled# true for disableddisabled=false# ...
随机推荐
- 解决Android SDK Manager无法更新下载
Android Studio2.2版本有一个bug,当在gradle文件编写代码时,程序会自动同步编译,这时整个程序都处于页面卡顿状态,要等待很久才能缓过来.最近实在忍受不了这种龟速,刚好发现有了新的 ...
- inittab 解析
Linux完成内核(Kernel)引导后,会由init初始化进程调用/etc/inittab配置文件(ps -aux | less,init进程号为始终为1,是所有系统进程的起点,init进程也有一个 ...
- 在AJAX里 使用【 JSON 】 返回数据类型 实现简单的下拉菜单数据
在AJAX里 使用JSON返回数据类型 实现简单的下拉菜单数据 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...
- UIScrollView的一些关系
contentInsets和contentoffset以及contentSize 可见范围: contentSize + contentInsets 也就是(contentSize.width+con ...
- VS在解决方案中添加一个别人给的项目,我自己的项目主窗体中不能调用
提示缺少Using引用,我在主窗体中已经写了Using XX,还是提示“未能找到类型或命名空间名“ XX”(是否缺少Using指令或程序集引用?)”,以前只要Using 一下就好了,后来想了一下,要在 ...
- 406 UDP协议是面向非连接的协议
HTTP The Definitive Guide Table 3-1. Common HTTP methods Method Description Message body? GET ...
- python basic
#遍历一个序列,很多传统语言过来的,习惯用下标遍历,Python中序列是可迭代的,直接for即可! colors=['red','green','blue','yellow'] for color i ...
- mysql中建立索引的一些原则
1.先存数据,再建索引 有索引的好处是搜索比较快但是在有索引的前提下进行插入.更新操作会很慢 2.不要对规模小的数据表建立索引,数据量超过300的表应该有索引:对于规模小的数据表建立索引 不仅不会提高 ...
- [dpdk] 使用pktgen生成tcp三次握手的测试流量
pktgen: http://dpdk.org/browse/apps/pktgen-dpdk/refs/ git clone git://dpdk.org/apps/pktgen-dpdk pktg ...
- [development][dpdk] dpdk-pmdinfo 工具的使用
发现了一个工具 dpdk-pmdinfo 但是文档介绍的很不清楚, http://dpdk.org/doc/guides/tools/pmdinfo.html 经过摸索, 这可能就是一个查询 dpdk ...