Cacti插件详解——Syslog

 
文章出处  http://www.cactifans.org/index.php/2012/03/cacti%e6%8f%92%e4%bb%b6%e8%af%a6%e8%a7%a3-syslog/

cacti中syslog插件,是通过rsyslog或syslog-ng与mysql的交互,将日志存放到mysql数据库中,cacti中的syslog插件从mysql中检索查看日志数据。因此,首先要配置一台rsyslog与mysql的日志中心服务器来接收客户机的日志;其次,配置cacti的syslog插件,通过该插件检索与查询mysql中的日志。可以收集来自linux、windows等服务器和交换机路由器的日志。做到集中和分类查看。

 
说下软件环境
os:centos6.2×86
cacti-0.8.7i-PIA-3.1.tar.gz
syslog-v1.22-2.tgz
rsyslog-4.6.2-12.el6.i686
 
关于cacti的安装我这里就不详细讲了,可以在我的另外二篇文章
 

 

Cacti 0.8.7g在CentOS5.5上的安装(1)

 

Cacti 0.8.7g在CentOS5.5上的安装(2)

由于我们此次安装的是集成PIA的cacti,因此不用单独安装PIA,安装好cacti以后要启用Plugin Management,然后我们下载syslog插件

 

1.设置接收日志

要想接收日志信息,并在cacti的syslog插件中显示接收到的日志,首先是接收日志,有二种办法:

1.使用syslog-ng,在centos5.5及以下系统上,系统默认有syslog,可以发送日志,但不能接受日志,因此要借助于syslog-ng,来接收发送过来的日志,并规范成一个模版,再通过自己写的脚本,插入到mysql数据库里

2.使用rsyslog,rsyslog是在centos6以上系统自带的,rsyslog不仅能接收日志,还可以发送日志,因此要是在centos6以上系统就不需要额外安装syslog-ng接收日志了,用自带的rsylog就可以接收日志,再用rsyslog-mysql就可以把接收到的日志写入mysql数据库

下面我分别说明:

A.使用rsyslog

我用的是centos6.2使用的是rsyslog,配置下就可以用来接受日志。在centos5.5版本自带syslog,可是要收集日志就还要安装syslog-ng用来接受日志。另外还要安装rsyslog-mysql来把接受到的日志插入到mysql数据库里
?
1
yum install -y rsyslog rsyslog-mysql
下面我们要对rsyslog进行设置
?
1
vi /etc/rsyslog.conf
在文件最后添加
?
1
2
3
4
5
$ModLoad imudp.so
$UDPServerRun 514
$ModLoad ommysql
$template cacti_syslog,"INSERT INTO syslog_incoming(facility, priority, date, time, host, message) values (%syslogfacility%, %syslogpriority%, '%timereported:::date-mysql%', '%timereported:::date-mysql%', '%HOSTNAME%', '%msg%')", SQL
*.* >localhost,syslog,cactiuser,cactifans.org;cacti_syslog

然后保存,重新启动rsyslog,并设置rsyslog开机启动

?
1
2
chkconfig rsyslog on
service rsyslog restart

B.使用syslog-ng

syslog-ng在默认的源里没有,可以编译安装,在这里我用yum安装syslog-ng
首先添加一个第三方源

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



安装好后我们配置syslog-ng

?
1
vi /etc/syslog-ng/syslog-ng.conf

在文件最后加入如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
source net {
 
udp();
};
 
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(net); destination(d_mysql); };
log { source(s_sys); destination(d_mysql); };

加入后保存,退出。

我们需要写一个脚本把syslog-ng接受到的数据写入到mysql数据库里
?
1
2
3
4
5
6
7
8
9
10
vi /sbin/syslogtomysql
#!/bin/bash
if [ ! -e /tmp/mysql.pipe ]; then
mkfifo /tmp/mysql.pipe
fi
 
while [ -e /tmp/mysql.pipe ]
do
mysql -u cactiuser --password=cactifans.org syslog < /tmp/mysql.pipe
done
保存退出,我们赋予执行权限
?
1
chmod +x /sbin/syslogtomysql
上面的mysql -u syslog (syslog为用户名 密码为syslogpwd,数据库名为syslog)
我们执行
?
1
/sbin/syslogtomysql &
再启动syslog-ng
?
1
/etc/init.d/syslog-ng start
写好后我们把这个脚本写到开机启动里
?
1
vi /etc/rc.local
添加如下
?
1
/sbin/syslogtomysql &
设置syslog-ng开机启动
?
1
chkconfig syslog-ng on

至此syslog的设置完成

syslog-ng和rsyslog的设置就说到这里,基本都是差不多,不过rsyslog好设置一点不用独立写脚本就成。在centos6以上版本中也可以用syslog-ng来接收日志。以下的安装步骤就一样了。

 

2.配置syslog的数据库

 
?
1
2
3
mysql -uroot -p
create database syslog;
GRANT ALL ON syslog.* TO cactiuser@localhost IDENTIFIED BY 'cactifans.org; quit;
设置的数据库名:syslog 用户名:cactiuser 密码:cactifans.org 可以自行设定
 

3.安装syslog插件

 
?
1
2
3
wget http://docs.cacti.net/_media/plugin:syslog-v1.22-2.tgz -O syslog.tgz
tar zxvf syslog*.tgz -C /var/www/html/plugins
chown -R apache:apache /var/www/html/plugins/syslog
接下来我们进行一下配置
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
vi /var/www/html/plugins/syslog/config.php
......
global $config, $database_type, $database_default, $database_hostname;
global $database_username, $database_password, $database_port;
 
/* revert if you dont use the Cacti database */
$use_cacti_db = false;
 
if (!$use_cacti_db) {
$syslogdb_type = 'mysql';
$syslogdb_default = 'syslog';
$syslogdb_hostname = 'localhost';
$syslogdb_username = 'cactiuser';
$syslogdb_password = 'cactifans.org';
$syslogdb_port = 3306;
}else{
$syslogdb_type = $database_type;
$syslogdb_default = $database_default;
$syslogdb_hostname = $database_hostname;
$syslogdb_username = $database_username;
$syslogdb_password = $database_password;
$syslogdb_port = $database_port;
}
.......
可以看到以上设置$use_cacti_db = false;这个是设置syslog是否要使用cacti的数据库,我在这里不使用cacti的数据,因为syslog往往比较多,日志比较多,为了便于备份和使用,还是选择用一个独立的数据库。因此要在下面设置连接数据库的用户名,密码,数据库名等。设置好后我们打开cacti,点console——Plugin Management,可以看到syslog还没有被启用
 
我们点syslog前面的那个先下箭头的小原点,会出现如下图
 

 

这里是对syslog数据的一些设置第分别为Database Storage Engine(数据库存储引擎)、Database Architecutre(数据库架构)这二项在一般默认,如果你的mysql数据库为5.1.6后者以上可以选择InnoDB Storage 和Partitioned Table,可以提高syslog的性能最后一项是Retention Policy(保留策略)就是要在syslog存储多长的时间,这个可以根据自己的需求设定,最后我们点install
 

就可以看到syslog已经安装,但是还没有启用,我们点那个绿色箭头就可以启用syslog

启用后我们可以看到syslog了

 

4.被监控端设置

 
A.Linux服务器设置
 
如果系统用的是syslog或者sysklog可以添加如下到/etc/syslog.conf(具体位置可能有所不同)
?
1
*.* @192.168.0.111
@后面为你的cacti服务器IP地址
设置完毕后重启syslog或者sysklog服务,并在防火墙上允许upd 514端口
 
如果用的是rsyslog可以在rsylog的配置文件里添加如下(配置文件一般为rsyslog.conf)
?
1
*.* @@192.168.0.111:514
@@后面为你的cacti服务器IP地址一般端口为514
 
设置完毕后重启rsyslog服务,并在防火墙上允许upd 514端口
 
通过以上设置就可以把服务器的所有日志发送到cacti服务器
 
B.网络设备
?
1
logging 192.168.0.111
在设备上指定logging 为cacti的服务器就成了。(设备不通设置方法可能有所不同,可以参考设备说明书)
 
网络设备包括路由器,防火墙交换机。这样就可以在cacti里看到接受到的日志
 
效果图
 
 
syslog可以接受到防火墙,路由器,交换机,服务器的日志,并自动分为7个等级,并用不通的颜色表示,看起来直观,也做到的日志的集中收集与查看.另外还可以在cacti里对的setting里对syslog插件进行一些设置。
本人菜鸟一个,如有错误之处,欢迎大家指正.