syslog-ng使用详解51CTO博客 - 千亿集团

syslog-ng使用详解51CTO博客

2019-03-06 10:20:41 | 作者: 思璇 | 标签: 日志,音讯,指定 | 浏览: 2418

最近做一个新项目,要做日志会集搜集和处理,拿到机器一看,这批机器用的都是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

源码装置

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源。

rpm -ivh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
yum -y install syslog-ng

设置开机发动项

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目录傍边。

整个装备文件大致分为大局装备、音讯源、过滤器、音讯目的地和日志途径几部分。

如下图所示:

大局装备:

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_的宏替代日志记载的时刻,而不要依托该值界说。

音讯源:

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套接字,接纳日志音讯

过滤器:

filter <filtername> {expression; };
facility() # 依据facility(设备)挑选日志音讯
filter() # 调用另一条过滤规矩
host() # 日志音讯的主机名是否和一个正则表达式匹配
level() or priority() # 依据level(优先级)挑选日志音讯
match() # 对日志音讯的内容进行正则匹配

音讯目的地:

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() # 把日志音讯发送到现已登陆的指定用户终端窗口

音讯途径:

log { source S1; source S2; ...filter F1; filter F2; ... destination D1; destination D2; ... };

装备实例:

  • 单机装备:

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形式:

效劳端装备:

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); };

客户端装备:

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); };

日志入库:

创立需求的库

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;
mkfifo /tmp/mysql.pipe
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~


版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表千亿集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章