linux日志集中管理查看syslog-ng+splunk

标签: 技术 日志 splunk syslog-ng | 发表时间:2012-12-31 16:57 | 作者:C1G
出处:http://blog.c1gstudio.com

syslog-ng ,可以简单的看成取代 syslog 的的日志服务器,企业级的.目前我们使用的 syslog-ng 开源版本是启动于十年之前的 syslog-ng 项目的“直系后代”.syslog-ng可运行与“server”和“agent”模式,分别支持 UDP、可靠的TCP和加密的TLS协议.syslog 可以用来在混合复杂的环境里建立灵活的、可靠的日志服务器.

syslog-ng开源版本的特性还有:

1. 支持SSL/TSL协议
2. 支持将日志写入数据库中,支持的数据库有MySQL, Microsoft SQL (MSSQL), Oracle, PostgreSQL, and SQLite.
3. 支持标准的syslog协议
4. 支持filter、parse以及rewrite
5. 支持更多的平台
6. 更高的负载能力

syslog-ng 对性能进行了优化,可以处理巨大的数据量.一般的硬件,在正确的配置下,可以实时地处理75000个消息每秒钟,超过24GB的RAW日志每小时.

前言
在标准的 Linux 中有一个 syslog .通常设置格式为

  1. <设备 facility>.<严重性 priority>.<动作>

默认系统预先定义了12+8个(mail、news、auth等)facility,八个不同的优先级(alert到debug).通常我们也只能根据这些来做一些操作.备注中有详细的解释.

在 syslog-ng 中.就不一样,非常强大,只需要定义来源,和目标位置,有可能需要定义一个过滤.
示例为:

  1. {Source;filter;destination;}

其中的每一个字段的会在下面进行详细的说明,这也必须在 syslog_ng.conf 文件中定义你想要的.

一.安装 syslog-ng
直接用 yum

  1. yum install syslog-ng

源码安装

http://www.balabit.com/downloads/files?path=/libol

wget http://www.balabit.com/downloads/files?path=/libol/0.3/libol-0.3.18.tar.gz
wget http://www.balabit.com/downloads/files?path=/syslog-ng/open-source-edition/3.3.7/source/eventlog_0.2.12.tar.gz
wget http://www.balabit.com/downloads/files?path=/syslog-ng/open-source-edition/3.3.7/source/syslog-ng_3.3.7.tar.gz

1.安装eventlog

  1. tar -zxvf eventlog_0.2.12.tar.gz
  2. cd  eventlog-0.2.12
  3. ./configure --prefix=/usr/local/eventlog
  4. make && make install

2.安装libol

  1. mv files\?path\=%2Flibol%2F0.3%2Flibol-0.3.18.tar.gz libol-0.3.18.tar.gz
  2. tar -zxvf libol-0.3.18.tar.gz
  3. cd libol-0.3.18
  4. ./configure --prefix=/usr/local/libol
  5. make && make install

3.安装syslog-ng

  1. yum install pcre
  2. # 设置环境变量
  3. export PKG_CONFIG_PATH=/usr/local/eventlog/lib/pkgconfig/
  4.  
  5. tar -zxvf syslog-ng_3.3.7.tar.gz
  6. cd syslog-ng-3.3.7
  7. ./configure --prefix=/usr/local/syslog-ng --with-libol=/usr/local/libol/
  8. make && make install

二.配置syslog-ng

1.打开iptables接收端口,这里只开放给内网

  1. iptables -A INPUT -p tcp -m tcp -s 192.168.0.0/16 --dport 514 -j ACCEPT
  2. iptables -A INPUT -p udp -m udp -s 192.168.0.0/16 --dport 514 -j ACCEPT

2.配置全局配置
全局配置的是在 /etc/syslog-ng/syslog-ng.conf 中.
新板本中sync变成flush_lines,long_hostnames变成 chain_hostnames.
Your configuration file uses an obsoleted keyword, please update your configuration; keyword=’sync’, change=’flush_lines’
Your configuration file uses an obsoleted keyword, please update your configuration; keyword=’long_hostnames’, change=’chain_hostnames’

接收远程日志并按年月日和主机地址集中的一个文件中,示例:

  1. options {
  2. keep_hostname(off);
  3. chain_hostnames(off);
  4. flush_lines(1);
  5. log_fifo_size(1024);
  6. create_dirs(yes);     # if a dir does not exist create it
  7. owner(root);          # owner of created files
  8. group(root);          # group of created files
  9. perm(0600);              # permissions of created files
  10. dir_perm(0700);    # permissions of created dirs
  11. };
  12. source s_local {
  13. system();
  14. unix-stream("/dev/log");     # local system logs
  15. file("/proc/kmsg");          # local kernel logs
  16. internal();
  17. };
  18. source s_all {
  19. udp(ip(0.0.0.0) port(514));   # remote logs # arriving at 514/udp
  20. };
  21. destination d_local_file {
  22. file("/var/syslog/$YEAR.$MONTH/$HOST/log-$DAY.log" owner(root) group(root) perm(0600) dir_perm(0700) create_dirs(yes));
  23. };
  24. destination d_net_file {
  25. file("/var/syslog/$YEAR.$MONTH/$HOST/log-$DAY.log" owner(root) group(root) perm(0600) dir_perm(0700) create_dirs(yes));
  26. };
  27.  
  28. log {
  29. source(s_local);
  30. destination(d_local_file);
  31. };
  32. log {
  33. source(s_all);
  34. destination(d_net_file);
  35. };

全局选项(option)
chain_hostnames 是否使用长主机名记录,也就是使用完全符合标准的域名.
flush_lines 设置一次向目的地发送几行消息.如果设成0,一收到消息就发送
sync_freq 在写入文件之前,可以缓冲的日志消息行数
use_dns 是否使用 DNS ,选项包括:yes、no和persist_only.选项设成了‘persist_only’,
因而会检查 /etc/hosts 文件,以解析主机名,这时并不依赖DNS 服务器.
stats_freq 两个状态消息(关于丢失日志消息的统计消息)消息之间间隔的时间(以秒为单位).0表示禁用发送STATS消息.
normalize_hostnames 是否对主机名转换成小写.
keep_hostname 如果要进行转发或透过外部服务器传送,该选项就会保留主机名,那样主机最终到达中央服务器后,
主机名会一并到达,而不是依赖DNS(或/etc/hosts)
来源(source)
internal syslog-ng 内部产生的消息
unix-stream 打开指定的SOCK_STREAM模式的unix套接字,接收日志消息
unix-dgram 打开指定的SOCK_DGRAM模式的unix套接字,接收日志消息
file 打开指定的文件读取日志信息
pipe,fifo 打开指定的管道或者FIFO设备,读取日志信息
tcp 在指定的TCP端口接收日志消息
udp 在指定的UDP端口接收日志消息
program 来自程序
syslog 来自网络上syslog格式的信息

目的地(destination)
file() file 是 syslog-ng 最重要的日志消息目的驱动器之一.使用它,你可以把日志消息定向到一些文件中.
logstore() 存储成二进制格式可以加密压缩
pipe() 通过pipe()日志消息目的驱动器把日志消息发送到/dev/xconsole之类的命名管道.
program() 驱动器fork出一个进程,使用给定的参数执行一个特定的程序,然后把日志消息送到这个进程的标准输入设备.
sql() 存储到mysql,oracel,mssql等数据库中
syslog() 转发到远程日志服务器上
unix-stream()和unix0dgram() 通过这两个日志消息目的驱动器把日志消息发送到一个SOCK_STREAM或者SOCK_DGRAM模式的UNIX套接字.
udp()和tcp() 使用TCP或者UDP协议把日志消息送到本地网络上或者internet上的另外的主机.
usertty() 使用这个日志消息目的驱动器把日志消息送到一个登录用户使用的终端.

3.启动
/usr/local/syslog-ng/sbin/syslog-ng

关闭
pkill syslog-ng

4.调试
在其它的节点的 Linux 上在 syslog.conf 或rsyslog.conf 中配置
vi /etc/syslog.conf 或vi /etc/rsyslog.conf

  1. *.*                   @syslog-ng 服务器 ip
  1. /etc/init.d/syslog restart

用 logger 来进行测试

  1. logger -p local3.info hello

这样在syslog-ng 的服务器上就能见到 message 的信息了

三 splunk

splunk看着比LogZilla(php-syslog-ng)强.
Splunk 是一款顶级的日志分析软件,如果你经常用 grep、awk、sed、sort、uniq、tail、head 来分析日志,那么你需要 Splunk。能处理常规的日志格式,比如 apache、squid、系统日志、mail.log 这些。对所有日志先进行 index,然后可以交叉查询,支持复杂的查询语句。然后通过直观的方式表现出来。日志可以通过文件方式传倒 Splunk 服务器,也可以通过网络实时传输过去。或者是分布式的日志收集。总之支持多种日志收集方法。

这个软件分为免费版本和专业版本。专业版本的价格是 3 万多刀。免费版本的功能也足够强大了。

下载后为企业试用版,可以转为免费版,免费版和收费版的差异
The Free license includes 500 MB/day of indexing volume, is free (as in beer), and has no expiration date.

The following features that are available with the Enterprise license are disabled in Splunk Free:

Multiple user accounts and role-based access controls
Distributed search
Forwarding in TCP/HTTP formats (you can forward data to other Splunk instances, but not to non-Splunk instances)
Deployment management (including for clients)
Alerting/monitoring

1.安装aplunk
从 http://www.splunk.com 注册个用户,乱填的可能不通过
下载 splunk tarball
当前最新为splunk-5.0.1
解压 splunk tarball 并将其移动到 /usr/local/splunk

2.打开iptables
splunk默认运行在8000端口,打开iptables设置充许访问的ip

  1. iptables -A INPUT -p tcp -m tcp -s 192.168.0.39 --dport 8000-j ACCEPT

3.启动

  1. /usr/local/splunk/bin/splunk start

第一次运行会进行一些设置,按”y”同意

4.设置日志分析目录
进入http://localhost:8000 第一次需要重设密码
然后点击添加数据,选择本地文件,还有tcp端口接收syslog-ng转发

5.修改syslog-ng配置
过滤不同日志存入不同文件,并转发至splunk

  1. options {
  2. use_dns (no);
  3.         use_fqdn(no);
  4.         chain_hostnames(off);
  5.         keep_hostname(off);
  6.         flush_lines(0);
  7.         stats_freq(43200);
  8.         create_dirs(yes);
  9. };
  10. source s_internal { internal(); };
  11. destination d_syslognglog { file("/var/log/syslog-ng.log"); };
  12. log { source(s_internal); destination(d_syslognglog); };
  13.  
  14. source s_sys { system();file("/proc/kmsg"); unix-stream("/dev/log");};
  15. destination d_cons { file("/dev/console"); };
  16. destination d_mesg { file("/var/log/messages"); };
  17. destination d_auth { file("/var/log/secure"); };
  18. destination d_mail { file("/var/log/maillog"); };
  19. destination d_spol { file("/var/log/spooler"); };
  20. destination d_boot { file("/var/log/boot.log"); };
  21. destination d_cron { file("/var/log/cron"); };
  22. destination d_rsync { file("/var/log/rsync"); };
  23. destination d_mlal { usertty("*"); };
  24.  
  25. filter f_filter1     { facility(kern); };
  26. filter f_filter2     { level(info) and
  27.                      not (facility(mail)
  28.                         or facility(authpriv) or facility(cron)); };
  29. filter f_filter3     { facility(authpriv); };
  30. filter f_filter4     { facility(mail); };
  31. filter f_filter5     { level(emerg); };
  32. filter f_filter6     { facility(uucp) or
  33.                      (facility(news) and level(crit)); };
  34. filter f_filter7     { facility(local7); };
  35. filter f_filter8     { facility(cron); };
  36. filter f_filter9     { facility(daemon); };
  37. filter f_filter10     { facility(local6); };
  38.  
  39. #log { source(s_sys); filter(f_filter1); destination(d_cons); };
  40. log { source(s_sys); filter(f_filter2); destination(d_mesg); };
  41. log { source(s_sys); filter(f_filter3); destination(d_auth); };
  42. log { source(s_sys); filter(f_filter4); destination(d_mail); };
  43. log { source(s_sys); filter(f_filter5); destination(d_mlal); };
  44. log { source(s_sys); filter(f_filter6); destination(d_spol); };
  45. log { source(s_sys); filter(f_filter7); destination(d_boot); };
  46. log { source(s_sys); filter(f_filter8); destination(d_cron); };
  47.  
  48. # Remote logging
  49. source s_remote {
  50.         udp(ip(192.168.0.39) port(514));
  51. };
  52.  
  53. destination r_mesg { file("/var/log/syslog-ng/$YEAR.$MONTH/$HOST/messages" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };
  54. destination r_auth { file("/var/log/syslog-ng/$YEAR.$MONTH/$HOST/secure" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };
  55. destination r_mail { file("/var/log/syslog-ng/$YEAR.$MONTH/$HOST/maillog" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };
  56. destination r_spol { file("/var/log/syslog-ng/$YEAR.$MONTH/$HOST/spooler" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };
  57. destination r_boot { file("/var/log/syslog-ng/$YEAR.$MONTH/$HOST/boot.log" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };
  58. destination r_cron { file("/var/log/syslog-ng/$YEAR.$MONTH/$HOST/cron" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };
  59. destination r_daemon { file("/var/log/syslog-ng/$YEAR.$MONTH/$HOST/daemon" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };
  60. destination r_local6 { file("/var/log/syslog-ng/$YEAR.$MONTH/network/messages" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };
  61. #destination d_separatedbyhosts {
  62. #       file("/var/log/syslog-ng/$HOST/messages" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes));
  63. #};
  64.  
  65.  
  66. #log { source(s_remote); destination(d_separatedbyhosts); };
  67. log { source(s_remote); filter(f_filter2); destination(r_mesg); };
  68. log { source(s_remote); filter(f_filter3); destination(r_auth); };
  69. log { source(s_remote); filter(f_filter4); destination(r_mail); };
  70. log { source(s_remote); filter(f_filter6); destination(r_spol); };
  71. log { source(s_remote); filter(f_filter7); destination(r_boot); };
  72. log { source(s_remote); filter(f_filter8); destination(r_cron); };
  73. log { source(s_remote); filter(f_filter9); destination(r_daemon); };
  74. log { source(s_remote); filter(f_filter10); destination(r_local6); };
  75.  
  76. #splunk use 1999 port
  77. destination d_tcp { tcp("localhost" port(1999) localport(999)); };
  78. log { source(s_remote); destination(d_tcp); };

6.加入自运行
echo ‘/usr/local/syslog-ng/sbin/syslog-ng’ >> /etc/rc.local
echo ‘/usr/local/splunk/bin/splunk start’ >> /etc/rc.local

参考:

http://www.php-oa.com/2012/01/13/linux-syslog-ng.html

http://blog.163.com/dingding_jacky/blog/static/1669127872011113011048416/

http://andyxu.blog.51cto.com/2050315/888583

http://bbs.linuxtone.org/thread-2082-1-3.html

http://www.phpwebgo.com/2012/05/14/318.html

http://www.balabit.com/sites/default/files/documents/syslog-ng-v3.0-guide-admin-en.html/bk01-toc.html

http://docs.splunk.com/Documentation/Splunk

相关 [linux 日志 管理] 推荐:

linux日志集中管理查看syslog-ng+splunk

- - C1G军火库
syslog-ng ,可以简单的看成取代 syslog 的的日志服务器,企业级的.目前我们使用的 syslog-ng 开源版本是启动于十年之前的 syslog-ng 项目的“直系后代”.syslog-ng可运行与“server”和“agent”模式,分别支持 UDP、可靠的TCP和加密的TLS协议.syslog 可以用来在混合复杂的环境里建立灵活的、可靠的日志服务器..

linux logrotate - 日志翻滚

- - Linux - 操作系统 - ITeye博客
logrotate是用来更新备份系统的日志文件(日志翻滚),这里介绍apache为什么可以每天生成一个新的日志,而nginx需要自己去切割日志. 这里不介绍logroate具体配置文件. 在系统的cron.daily里面有logrotate脚本每天执行,脚本会调用/etc/logrotate.d里面的配置文件,里面包括了httpd,syslog等.

linux查找日志技巧

- - 操作系统 - ITeye博客
1.先必须了解两个最基本的命令:. tail  -n  10  test.log; 查询日志尾部最后10行的日志. tail -n +10 test.log; 查询10行之后的所有日志;. head -n 10  test.log; 查询日志文件中的头10行日志;. head -n -10  test.log; 查询日志文件除了最后10行的其他所有日志;.

日志管理

- - CSDN博客系统运维推荐文章
#很关键 [root@client01 ~]# ls /var/log/ anaconda.ifcfg.log. tallylog #关键日志,大部分记录在里面 [root@client01 ~]# ls /var/log/messages /var/log/messages. [root@client01 ~]# ps -ef|grep log #系统日志服务 root.

linux grep 查看大日志文件

- - 掘金 后端
这是我参与更文挑战的第7天,活动详情查看:. 如果❤️我的文章有帮助,欢迎点赞、关注. 这是对我继续技术创作最大的鼓励. linux grep 查看大日志文件. 今天隔离还在继续,在家办公. mysql 机器io/负载上升的预警,异常发生在. 15:45 ~ 16:00 之间. 为了事后为了查明原因,需要翻看慢查询日志.

Linux 包管理速查表(新)

- 董 - 笨兔兔
本次系列图片在LInuxtoy文章基础上,增加了FreeBSD,MacOS,dpkg,rpm,aptitude等新的内容. 对于新添加的FreeBSD,MacOS不知道对不对,敬请各位指出. 但总起感觉,这样的比较实在意义不太大. 抽空将各个软件包管理方法的具体用法总结出来. #2,Dpkg 常用指令操作快速参考.

Oracle 管理之 Linux 网络基础

- - CSDN博客数据库推荐文章
1、TCP/IP 网络配置文件. TCP/IP 网络配置文件. IP配置文件:/etc/sysconfig/network-scripts/ifcfg-eth0. 网管配置文件:/etc/sysconfig/network. 域名解析:/etc/host.conf. 主机配置:/etc/hosts.

linux下用logratate进行日志分割处理

- - 操作系统 - ITeye博客
服务器上的tomcat的catalina.out文件越来越大,查看起来很不方便,以前每次都是想起来的时候手工清理一下(cat /dev/null > catalina.out), 后来发现了logratate这个工具,Ubuntu下的mysql,nginx好像也是用的这个工具还定期整理log的. 配置文件为/etc /logrotate.conf,和很多其它ubuntu下的工具一下,也可以把配置文件写在/etc/logrotate.d/下面.

在Linux上使用logwatch分析监控日志文件

- - SegmentFault 最新的文章
在维护Linux服务器时,经常需要查看系统中各种服务的日志,以检查服务器的运行状态. 如登陆历史、邮件、软件安装等日志. 系统管理员一个个去检查会十分不方便;且大多时候,这会是一种被动的检查,即只有在发现系统运行异常时才会想到去查看日志以获取异常的信息. 那么如何主动、集中的分析这些日志,并产生报告,定时发送给管理员就会显得十分重要.

Linux应用自动删除n天前日志

- - 操作系统 - ITeye博客
Linux应用总结(1):自动删除n天前日志. linux是一个很能自动产生文件的系统,日志、邮件、备份等. 虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情. 不用你去每天惦记着是否需要清理日志,不用每天收到硬盘空间不足的报警短信,想好好休息的话,让我们把这个事情交给机器定时去执行吧.