学习ulogd源代码

  • 概述
         ulogd作为iptables/netfilter配套的通信日志的收集发送存储的开源的应用软件,配置管理方便灵活,支持多种通信日志的存储方式,支持多种数据库的存储接口。
    ulogd的源代码可以在[url]http://ftp.netfilter.org/pub/ulogd/[/url]这下载。编译安装的过程就不说了。
  • ulogd的流程逻辑
        在ulogd进程启动后,系统自动解析本程序的配置文件,然后创建接收内核数据的netlink套接字,接着程序初始化系统状态日志文件,初始化输出插件,判断其日志保存方式。系统使用无限循环来接收并处理内核传来的数据,如果系统收到退出信号,就结束本程序进程。其工作流程如下图所示。
 
  • ulogd的配置文件
         如果只是想使用ulogd来记录iptables的日志,只需要在配置文件上做些手脚,使它很好的为我们工作。下面介绍下配置文件中的内容。
         程序程序在读配置文件时,根据标签来决定程序的各种输出方式的选择。在ulogd.conf中常常出现的标签为[global]、[LOGEMU]、 [MYSQL]。其中[global]标签是必修的,它定义了一些全局变量,如nlgroup、logfile、loglevel、rmem、bufsize以及需要加载的输出插件,而其他的一些标签,并不是必须的,是可以选择性的出现的,只有在[global]中定义了对应的plugin后,与之对应的标签中的选项才能生效,比如只有在[global]中定义了plugin="/usr/local/lib/ulogd/ulogd_MYSQL.so"后,ulogd.conf中出现的[MYSQL]标签中的选项才会起作用。
         
         [global]标签中的内容如下表所示:
        [LOGEMU]标签下的内容如下图所示:
          以mysql日志服务器为例,[MYSQL]标签中存放这一些连接mysql数据库的信息:
       
对PGSQL不熟,所以也没对其进行说明。网上有很多文章都是说在linux主机上创建mysql数据库服务器,其实这个服务器是可以建在远程主机上的,甚至windows上。
 
ulogd非常简单,他的配置文件非常简单。好像ulogd的文档中给出了一个ulogd.sample,可以参考下。下面给出我的配置文档:
[global]
nlgroup=1
logfile="/var/log/ulogd.log"
loglevel=5
rmem=131071
bufsize=150000
enable=3
plugin="/usr/local/lib/ulogd/ulogd_BASE.so"
plugin="/usr/local/lib/ulogd/ulogd_LOGEMU.so"
plugin="/usr/local/lib/ulogd/ulogd_MYSQL.so"
[LOGEMU]
file="/var/log/ulogd.syslogemu"
sync=1
[MYSQL]
table="ulogd"
pass="11111111"
user="root"
db="aben"
host="192.168.78.1"
  • ulogd写数据库
         ulogd在解析配置文件时加载ulogd_MYSQL.so,紧接着程序会解析[MYSQL]标签中的内容,然后程序根据[MYSQL]标签中的host、port、user、pass中的内容连接数据库。打开数据库后,获得用户指定database的指定table中的字段名,根据这些字段名,程序会将日志信息输出为特定的格式,然后将这个指定的格式的信息写入mysql服务器中对应的字段中。
        在ulogd的doc文件夹下有一个文档给出了,一个mysql数据表的例子,那是ulogd能获得最多的数据项。ulogd在连接数据库后,会fetch数据库的字段名,然后根据这些字段名创建一个信息的保存格式,当收到信息后重组这些信息,然后发送给mysql日志服务器。
        所以,通过创建自己的数据表以求用最小的空间获取最需要的内容。
 
  • ulogd写本地日志
这个函数被我改写了许多,原函数就是简单的写文件操作。我把它改写为限制文件大小的写操作了,而且数据的存储方式也被我改写了,以二进制存放这些信息更节省空间。

你可能感兴趣的:(职场,休闲,ulogd)