cacti下syslog插件安装&&syslog-ng统一管理日志
2014-04-17 11:51
639 查看
实验目标
用syslog-ng过滤日志并转存到日志服务器上通过cacti的syslog插件将日志web显示
实验环境
Gentoo 3.8.13系统预安装LAMP ssh
需要软件
syslog-ng## gentoo系统自带
其他需求
Gentoo的安装
Cacti的安装
LAMP环境安装
参考blog相关文章
http://chengchow.blog.51cto.com/all/1642666
服务器需求
至少2台服务器,下面测试我用了4台,相关信息如下:
IP地址 | 主机名称 | 主机编号 |
192.168.254.123 | syslog | 1 |
192.168.254.81 | namenode | 2 |
192.168.254.84 | datanode | 3 |
192.168.254.85 | tasktracker(datanode2) | 4 |
192.168.254.1 | **-***-**(my windows) | 5 |
参考文档
Syslog-ng安装配置http://wenku.baidu.com/view/6a502e7d168884868762d648.html
cacti下syslog插件安装
http://wenku.baidu.com/link?url=FPq9ViSuPqIpKx5BKG79gmDTx8_7l-qN9urGr1XO9K5myzGr1-LWfbwwJn_077DLjNWXrzipI6cwJyB-7-9-edymeamnZqRRPkyHLYYqify
实验步骤
一 syslog服务器配置
Syslog-ng的安装
在主机1上如果没有安装syslog-ng
Shell>USE=”sql” emerge syslog-ng
Shell>/etc/init.d/syslog-ng start
Shell>rc-update add syslog-ng default
Shell>emerge event-log
配置 syslog-ng.conf文件
Shell> cat /etc/syslog-ng/syslog-ng.conf
@version: 3.2 # # configuration file for syslog-ng, customized for remote logging # options { use_fqdn(yes); chain_hostnames(off); keep_hostname(off); flush_lines(0); # The default action of syslog-ng 1.6.0 is to log a STATS line # to the file every 10 minutes. That's pretty ugly after a while. # Change it to every 12 hours so you get a nice daily update of # how many messages syslog-ng missed (0). stats_freq(43200); create_dirs(yes); }; source src { unix-stream("/dev/log" max-connections(256)); internal(); file("/proc/kmsg"); }; destination messages { file("/var/log/messages"); }; destination console_all { file("/dev/tty12"); }; source s_internal { internal(); }; destination d_syslognglog { file("/var/log/syslog-ng.log"); }; log { source(s_internal); destination(d_syslognglog); }; source s_sys { file ("/proc/kmsg" program_override("kernel: ")); unix-stream ("/dev/log"); internal(); }; 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"); }; destination d_spol { file("/var/log/spooler"); }; destination d_boot { file("/var/log/boot.log"); }; destination d_cron { file("/var/log/cron"); }; destination d_rsync { file("/var/log/rsync"); }; destination d_mlal { usertty("*"); }; filter f_filter1 { facility(kern); }; filter f_filter2 { level(info) and not (facility(mail) or facility(authpriv) or facility(cron)); }; filter f_filter3 { facility(authpriv); }; filter f_filter4 { facility(mail); }; filter f_filter5 { level(emerg); }; filter f_filter6 { facility(uucp) or (facility(news) and level(crit)); }; filter f_filter7 { facility(local7); }; filter f_filter8 { facility(cron); }; filter f_filter9 { facility(daemon); }; filter f_filter10 { facility(local6); }; #log { source(s_sys); filter(f_filter1); destination(d_cons); }; #log { source(s_sys); filter(f_filter2); destination(d_mesg); }; #log { source(s_sys); filter(f_filter3); destination(d_auth); }; #log { source(s_sys); filter(f_filter4); destination(d_mail); }; #log { source(s_sys); filter(f_filter5); destination(d_mlal); }; #log { source(s_sys); filter(f_filter6); destination(d_spol); }; #log { source(s_sys); filter(f_filter7); destination(d_boot); }; #log { source(s_sys); filter(f_filter8); destination(d_cron); }; # Remote logging source s_remote { udp(ip(0.0.0.0) port(514)); }; destination r_mesg { file("/var/log/syslog-ng/$YEAR/$MONTH/$HOST/messages" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); }; destination r_auth { file("/var/log/syslog-ng/$YEAR/$MONTH/$HOST/secure" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); }; destination r_mail { file("/var/log/syslog-ng/$YEAR/$MONTH/$HOST/maillog" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); }; destination r_spol { file("/var/log/syslog-ng/$YEAR/$MONTH/$HOST/spooler" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); }; 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)); }; destination r_cron { file("/var/log/syslog-ng/$YEAR/$MONTH/$HOST/cron" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); }; destination r_daemon { file("/var/log/syslog-ng/$YEAR/$MONTH/$HOST/daemon" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); }; destination r_local6 { file("/var/log/syslog-ng/$YEAR/$MONTH/network/messages" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); }; #destination d_separatedbyhosts { # file("/var/log/syslog-ng/$HOST/messages" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); #}; #log { source(s_remote); destination(d_separatedbyhosts); }; log { source(s_remote); filter(f_filter2); destination(r_mesg); }; log { source(s_remote); filter(f_filter3); destination(r_auth); }; log { source(s_remote); filter(f_filter4); destination(r_mail); }; log { source(s_remote); filter(f_filter6); destination(r_spol); }; log { source(s_remote); filter(f_filter7); destination(r_boot); }; log { source(s_remote); filter(f_filter8); destination(r_cron); }; log { source(s_remote); filter(f_filter9); destination(r_daemon); }; log { source(s_remote); filter(f_filter10); destination(r_local6); }; ## cacti settings # cacti local settings destination d_mysql { pipe("/tmp/mysql.pipe" template("INSERT INTO syslog_incoming(host,facility,priority,date,time,message) VALUES('$HOST','$FACILITY','$PRIORITY','$YEAR-$MONTH-$DAY','$HOUR:$MIN:$SEC','$MSG');\n") template-escape(yes)); }; log{ source(s_remote);destination(d_mysql); }; log{ source(s_sys);destination(d_mysql); }; # cacti remote settings #destination r_mysql { # pipe("/tmp/mysql.pipe" owner("root") group("root") # template("INSERT INTO syslog_incoming(host,facility,priority,date,time,message) VALUES('$HOST','$FACILITY','$PRIORITY','$YEAR-$MONTH-$DAY','$HOUR:$MIN:$SEC','$MSG');\n") # template-escape(yes)); #}; #log { source(s_remote); destination(r_mysql); }; ## client settings destination d_udp { udp ("192.168.254.123" port(514)); }; log { source(src);destination(d_udp); };
这里编写的比较乱,是用了Ubuntu syslog-ng自带的配置文件做的修改,本地日志生成被我停掉了,所有日志都是通过514端口获取,包括syslog服务器的日志,具体配置文件的说明参见附件3
添加IP地址对应主机名称解析
有DNS服务器不需要Shell>vi /etc/hosts
![](http://s3.51cto.com/wyfs02/M01/24/6D/wKioL1NPTiqSai1aAACQ9g_5c2w805.jpg)
客户端配置
在2-4上如果没有安装syslog-ng
Shell>emerge syslog-ng
Shell>/etc/init.d/syslog-ng start
Shell>rc-update add syslog-ng default
配置syslog-ng.conf文件
Shell>echo “destination d_udp { udp(“192.168.254.123”prot(514)); }; ” >>/etc/syslog-ng/syslog-ng.confShell>echo “log { source(src);destination(d_udp); };” >> /etc/syslog-ng/syslog-ng.conf
Shell>cat /etc/syslog-ng/syslog-ng.conf
![](http://s3.51cto.com/wyfs02/M01/24/6D/wKiom1NPTpLQ-Dq5AABT8v3izj8063.jpg)
具体配置的说明参考附件3
这里source(src)默认配置自带
重启syslog服务
在1-4上Shell> /etc/init.d/syslog-ng restart
到这里syslog服务器就配置完成了
测试
配置完成去主机1上,进入syslog-ng日志目录,如下![](http://s3.51cto.com/wyfs02/M02/24/6D/wKiom1NPTrDigvgbAABbOSqwL78477.jpg)
可以看到对应的服务器日志文件夹,这里我们用主机2测试,打开 secure(登录验证日志)
Shell>tail -f /var/log/syslog-ng/2014/04/namenode/secure
另外在开一个终端,登录主机2,如果日志有变化,则说明配置成功
![](http://s3.51cto.com/wyfs02/M01/24/6D/wKioL1NPTpDC5-m9AACbyqtG07I705.jpg)
Message/daemon/cron测试日志同上
Message系统日志
Daemon服务开启/关闭日志
Secure用户验证日志
Cron计划任务日志
Windows客户端配置
Windows服务器不支持日志服务器,需要安装一个转换软件evtsys:下载地址为:
http://down.51cto.com/tag-evtsys.html
根据系统的版本下载32位和64位的程序。
解压后是两个文件evtsys.dll和evtsys.exe
把这两个文件拷贝到 c:\windows\system32目录下。
以下操作在CMD下
安装evtsys服务
C:\>evtsys –i –h 192.168.254.123 –p 514
-i 表示安装成系统服务
-h 指定log服务器的IP地址
-p 指定端口
详细参数使用evtsys /?查看
启动evtsys
C:\net start evtsys
停止 evtsys
c:\net stop evtsys
卸载evtsys:
evtsys –u
效果如下
![](http://s3.51cto.com/wyfs02/M01/24/6D/wKioL1NPTp-BVeRDAAOnro0NkVY168.jpg)
这里有个中文字体会转码的问题,如上图操作”View”à”Encoding”à”Unicode(UTF-8)”.
二 cacti syslog插件安装配置
关于cacti配置及cacti syslog插件的安装,参考之前的笔记http://chengchow.blog.51cto.com/all/1642666
下面主要说用cacti syslog插件读取syslog日志
Cacti for syslog的安装目录
![](http://s3.51cto.com/wyfs02/M02/24/6D/wKioL1NPTr_hYnxvAAF0eko2BmY401.jpg)
先配置下权限问题
Shell> cd /var/www/localhost/htdocs/cacti/plugins/syslogShell> chmod –R 755 +x ../syslog
Shell> chown –R cactiuser:cactiuser ../syslog
Syslog数据库导入
这里有两种方法方法1:利用原来的cacti数据(优点是不需要另外创建数据库,缺点是日志文件太多,不方便管理)
Shell> mysql –uroot –p cactidb < syslog.sql
方法2:新建立个数据库管理
Shell> mysql –uroot –p
mysql> create databse syslogdb;
mysql>grant all privileges on syslogdb.* to ‘sysloguser’@’localhost’ indentify by ‘syslogpass’;
mysql>quit
shell> mysql –uroot –p syslogdb < syslog.sql
这里用方法1
Cacti for syslog配置文件修改
Shell> vi ./config.php![](http://s3.51cto.com/wyfs02/M01/24/6D/wKiom1NPTvaw2bCoAAHAlG3xGRg569.jpg)
注意箭头部分,true是使用cactidb数据库,false是使用自建数据库
同步日志的到数据库脚本
Shell> cat ./syslog2mysql.sh#!/bin/bash if [ ! -e /tmp/mysql.pipe ];then mkfifo /tmp/mysql.pipe fi while [ -e /tmp/mysql.pipe ] do mysql -ucactiuser -pcactipass cactidb < /tmp/mysql.pipe done exit 0运行脚本,一个死循环,需要在后台运行
Shell> nohup ./syslog2mysql.sh &
注意,脚本里面的临时文件路径,必须是在syslog-ng.conf里面destination配置路径
添加计划任务
Shell> vi /etc/crontab![](http://s3.51cto.com/wyfs02/M00/24/6D/wKiom1NPTxKiI4aBAABs16qnkuU108.jpg)
这里为了测试方便,改成了1分钟获取一次数据,时间日志同步建议和cacti获取时间同步
登录cacti界面
“console”à”configuration”à”plugins management”会出现如下界面如果没有如下界面也没关系,删除syslog插件重新登录,按照以上步骤就会出现,主要是一些参数的选择
![](http://s3.51cto.com/wyfs02/M02/24/6D/wKioL1NPTvjTms_bAAN5XF6iLVU561.jpg)
第一个选项有MyISAM和Innodb两种数据库类型,建议选innodb.
第二个是数据库结构,5.5以上可以直接选择partitioined table,5.1.6以下不支持.
第三个是日志保存时间,最大为1年.
第一次登录好像还有个参数,没留意什么,直接默认安装了
如果不清楚选项含义,可以全部默认,默认配置性能上不能达到最优,兼容性最好,选择完成点击Install按钮安装。
安装完成,如果有安装clog插件的,顺便看下cacti日志是否有报错;
如果没有错误,继续;
在1-4上面做服务重启或者登录的操作,等待几分钟,点击syslog页面查看,如下界面。
![](http://s3.51cto.com/wyfs02/M01/24/6D/wKiom1NPTzbjrQbmAAcS2mpwQUc580.jpg)
1选择页面2主机名称3过滤选项4日志内容5日志等级颜色标志
附件1:syslog日志获取流程
![](http://s3.51cto.com/wyfs02/M00/24/6D/wKiom1NPT8LA0-gUAAM4WQMpztQ952.jpg)
附件2:cacti for syslog日志获取流程
![](http://s3.51cto.com/wyfs02/M02/24/6D/wKioL1NPT7KC7fQJAAL5Jhq7jpk382.jpg)
附件3: syslog-ng.conf配置简单介绍
Syslog-ng.conf一共有5个字段(1-5)1.Option { };全局选项选项格式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) :目录的UIDdir_group(gid) :目录的GIDdir_perm(perm) :目录的权限,使用八进制方式标注,例如0644owner(uid) :文件的UIDgroup(gid) :文件的GIDperm(perm) :文件的权限,同样,使用八进制方式标注gc_busy_threshold(n) :当syslog-ng忙时,其进入垃圾信息收集状态的时间。一旦分派的对象达到这个数字,syslog-ng就启动垃圾信息收集状态。默认值是:3000。gc_idle_threshold(n) :当syslog-ng空闲时,其进入垃圾信息收集状态的时间。一旦被分派的对象到达这个数字,syslog-ng就会启动垃圾信息收集状态,默认值是:100log_fifo_size(n) :输出队列的行数log_msg_size(n) :消息日志的最大值(bytes)mark(n) :多少时间(秒)写入两行MARK信息供参考,目前没有实现stats(n) :多少时间(秒)写入两行STATUS信息供,默认值是:600sync(n) :缓存多少行的信息再写入文件中,0为不缓存,局部参数可以覆盖该值。time_reap(n) :在没有消息前,到达多少秒,即关闭该文件的连接time_reopen(n) :对于死连接,到达多少秒,会重新连接use_time_recvd(yes|no) :宏产生的时间是使用接受到的时间,还是日志中记录的时间;建议使用R_的宏代替接收时间,S_的宏代替日志记录的时间,而不要依靠该值定义。2.Source { };source <sourcename> { 日志源; 日志源; ... };#日志源可用参数:file (filename) :从指定的文件读取日志信息unix-dgram(filename) :从SOCK_DGRAM模式的unix套接字接收日志消息unix-stream (filename) :从SOCK_STREAM模式的unix套接字接收日志消息udp ( (ip),(port) ) :从UDP端口接收日志tcp ( (ip),(port) ) :从TCP端口接收日志internal() : syslog-ng内部产生的日志pipe(filename),fifo(filename) :从指定的管道或者FIFO设备,读取日志信息可以同时配置多个日志,经典应用source s_sys { file ("/proc/kmsg" log_prefix("kernel: ")); unix-stream ("/dev/log"); internal(); };3.Filter { };filter <filtername> { 过滤参数; };#过滤参数可用:facility(,):根据facility(设备)选择日志消息,使用逗号分割多个facilitylevel(,):根据level(优先级)选择日志消息,使用逗号分割多个level,或使用“..”表示一个范围program(regexp):日志消息的程序名是否匹配一个正则表达式host(regexp):日志消息的主机名是否和一个正则表达式匹配match(regexp):对日志消息的内容进行正则匹配filter():调用另一条过滤规则并判断它的值#过滤参数操作式:And与or 或not 非#facility(设备)可用消息类型Auth用户认证authpriv有特权的用户认证croncron守护进程daemon各种系统守护进程ftpftp守护进程kern内核消息local0-local7保留用于本地用法lpr打印机mail邮件news新闻syslog内部sysloguucpuucp系统user各种用户程序来的消息cacti中filter参数查询的分类
![](http://s3.51cto.com/wyfs02/M01/24/6D/wKioL1NPT_DgM5UwAAA3pQiDKSo801.jpg)
#Level等级:emerg最严重的错误 (如system panic)alert需要立即处理的严重错误critcritical warmingerr普通错误warn警告信息notice比较不严重的信息info普通信息debug除错信息cacti中fileter等级查询的分类
![](http://s3.51cto.com/wyfs02/M02/24/6D/wKiom1NPUAqxGivuAABgTyGps7o230.jpg)
4.Destination { };destination <name> { 目标操作; 目标操作;...;};#目标操作常用参数:file (filename) :写入指定文件unix-dgram(filename) :写入SOCK_DGRAM模式的unix套接字unix-stream (filename) :写入SOCK_STREAM模式的unix套接字tcp(ip),(port) :以TCP协议发送指定主机端口udp (ip),(port) :以UDP协议发送指定主机端口usertty(username) :把日志消息发送到已经登陆的指定用户终端pipe(filename),fifo(filename):把日志消息发送到指定管道或FIFO设备program(parm) :启动指定的程序,并把日志消息发送到该进程的标准输入5.Log { };日志生成
格式
Log {source<sourcename> filter<filtername> destination<destinationname> };
Filter可以省略,不过滤日志。
6.扩展file部分函数的参数syslog-ng除了有全局选项参数外,不同的函数还可以定义其参数,其中包括:6.1、扩展file的宏HOST 日志消息的源发主机名。如果日志消息穿过几个主机,并且chain_hostname()功能已经打开,就使用第一个主机名。FACILITY :日志消息来自的日志设备PRIOPRITY/LEVEL :日志消息的优先级PROGRAM :发送日志消息的程序YEAR :发送日志消息的年份,这个宏既可以指定日志消息送出的时间,也可以指定日志消息收到的时间。这由use_time_recvd()选项控制MONTH :发送日志消息的月份DAY :发送日志消息的日子HOUR :小时MIN :分钟SEC :秒6.2、file的参数log_file_size()日志文件大小program_override()原来的sync参数owner()日志文件用户perm()日志文件权限group()日志文件用户组dir_perm()日志文件夹权限create_dir ()自动创建文件夹6.3、tcp和upd的参数ip(xxx.xxx.xxx.xxx):定义绑定的IP地址port(n):定义绑定的端口max-connections(n):定义最大连接数※TCP基于连接方式传输,不会造成日志丢失,而UDP则不同。但因为传统的syslog基于UDP的514端口,所以,UDP方式也经常会使用到。另外,514也是rshell的默认端口,请注意冲突。实验文档使用的就是udp连接
相关文章推荐
- syslog-ng安装和使用
- 巧用syslog-ng集中管理日志
- 日志系统(syslog)
- 日志主机安装指南 推荐
- syslog-ng和logzilla实现日志集中管理
- syslog-ng应用详解 推荐
- 日志文件系统syslog,syslog-ng
- syslog及syslog-ng详解 推荐
- graylog2+syslog-ng+mongodb构建集中管理日志服务器 推荐
- centos7 syslog-ng错误总结
- syslog-ng详解——日志备份
- syslog-ng详解——syslog-ng配置语法
- TLS encryption and mutual authentication using syslog-ng Open Source Edition
- syslog-ng详解——运行syslog-ng
- syslog-ng详解——安装syslog-ng
- syslog-ng + syslogd + logrotate
- syslog及syslog-ng详解
- [C++] C++小笔记之模板函数
- git基本原理详解
- vs2012自带打包工具进行部署安装