RSS

Cacti插件详解——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
settings-v0.71-1.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数据库里 
yum install -y rsyslog rsyslog-mysql
下面我们要对rsyslog进行设置
vi /etc/rsyslog.conf
在文件最后添加
$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开机启动

chkconfig rsyslog on
service rsyslog restart

B.使用syslog-ng

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

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



安装好后我们配置syslog-ng

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

在文件最后加入如下

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数据库里
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
保存退出,我们赋予执行权限
chmod +x /sbin/syslogtomysql
上面的mysql -u syslog (syslog为用户名 密码为syslogpwd,数据库名为syslog)
我们执行
/sbin/syslogtomysql &
再启动syslog-ng
/etc/init.d/syslog-ng start
写好后我们把这个脚本写到开机启动里
vi /etc/rc.local
添加如下
/sbin/syslogtomysql &
设置syslog-ng开机启动
chkconfig syslog-ng on

至此syslog的设置完成

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

2.配置syslog的数据库

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

3.安装 syslog 插件

由于 syslog 依赖 settings 插件,所以安装 syslog 插件之前先安装 settings 插件

先安装 settings 插件

wget http://docs.cacti.net/_media/plugin:settings-v0.71-1.tgz -O settings.tgz 
tar zxvf settings.tgz -C /var/www/html/plugins 
chown -R apache:apache /var/www/html/plugins/settings

再安装 syslog 插件

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