syslog-ng+loganalyzer(非常详细配置文件)部署收集操作日志

一、syslog-ng 说明

创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、做网站、南州晴隆网络推广、微信小程序、南州晴隆网络营销、南州晴隆企业策划、南州晴隆品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供南州晴隆建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com

二、syslog-ng 下载安装

三、syslog-ng 配置文件详细说明

四、配置syslog-ng收集操作日志

五、使用loganalyzer展示收集日志

1.syslog-ng说明

syslog-ng应用程序是一个灵活和高度可伸缩的系统日志应用程序创建集中的和可信的日志解决方案的理想选择。syslog-ng的主要特征概括如下:

  (1)可靠的日志传输:syslog-ng应用程序使您能够发送你的主机到远程服务器的日志消息使用最新的协议标准。不同服务器的日志可以收集并存储在专用的日志服务器上集中。将日志消息使用TCP协议确保不会有消息丢失。

  (2)使用TLS安全日志:日志消息可能包含敏感信息,不应由第三方访问。因此,syslog-ng支持传输层安全(TLS)协议加密通信。

  TLS也允许宿主的相互的身份验证,并使用X.509证书。

  (3)直接数据库访问:存储数据库中的日志消息使您可以轻松地搜索和查询日志分析的信息和互操作的应用程序。

  syslog-ng应用程序支持以下数据库:MSSQL,MySQL,ORACLE,PostgreSQL,SQLite

  (4)不同平台支持:syslog-ng应用程序的理想选择收集日志在大规模异构环境中使用不同的操作系统和硬件平台,包括Linux、Unix、BSD、Sun Solaris,hp-ux,Tru64,AIX。

  (5)过滤和分类:syslog-ng应用程序可以传入日志消息根据其内容和各种参数,像源主机应用程序,和优先级。目录、文件和数据库表可以创建动态使用宏。

  复杂的过滤使用正则表达式和布尔操作符提供了几乎无限的灵活性,只有重要的日志消息转发给所选择的目的.

  (6)解析和重写:syslog-ng应用程序可以段日志消息命名字段或列,并修改这些字段的值。

  (7)IPv4和IPv6支持:syslog-ng应用程序可以运行在两个IPv4和IPv6网络环境;它可以接收和发送信息到两种类型的网络。

2.syslog-ng下载安装

2.1.下载路径:

   https://my.balabit.com/downloads/syslog-ng/sources/3.6.4/source

   https://my.balabit.com/downloads/eventlog/0.2

2.2.安装eventlog

   tar -xf eventlog_0.2.12.tar.gz 
   cd eventlog_0.2.12/
   ./configure --prefix=/usr/local/eventlog
   make
   make install
   
   export PKG_CONFIG_PATH=/usr/local/eventlog/lib/pkgconfig
   
   tar -xf syslog-ng_3.6.4.tar.gz 
   cd syslog-ng-3.6.4/
   ./configure --prefix=/usr/local/syslog-ng --with-libol=/usr/local/libol
   make
   make install
   
   configure: error: Package requirements (glib-2.0 >= 2.12.0) were not met:
   Requested 'glib-2.0 >= 2.12.0' but version of GLib is 2.10.2
   解决:
   yum install glib2-devel

3.syslog-ng配置文件详细说明

syslog-ng配置文件组成部分:
options { option1(params); option2(params); ... }; //全局选项设置
source s_internal { internal(); };  //定义日志源
destination d_network { network("10.1.2.3" transport("udp"); }; //定义目标
filter  { (""); }; //设置过滤器,选项(例如TLS加密)和其他高级功能。
log { source(s_internal); destination(d_file); }; //创建一个日志语句连接源和当地的目的地。

3.1.syslog-ng的日志处理流程:
source(日志源)->filter(过滤)->destination(目标)->log(日志链)

3.2.选项详细说明
syslog-ng应用程序有许多全局管理域名使用,使用时间戳格式,和其他通用点。每个选项参数,类似于驱动程序规范。设定全球选项,添加一个选项语句syslog-ng配置文件使用下面的语法:options { option1(params); option2(params); ... };


全局选项:
   bad-hostname() [default no]
   //值:正则表达式
   //可通过正规表达式指定某主机的信息不被接受
   
   chain-hostnames() [default no]
   //值:yes | no
   //是否打开主机名链功能,打开后可在多网络段转发日志时有效
   
   check-hostname() [default no]
   //值:yes | no
   //启用或禁止检查主机名包含有效的字符串
   
   create-dirs() [default no]
   //值: yes | no
   //当指定的目标目录不存在时,是否创建该目录
   
   custom-domain() default[empty string]
   //值:string
   //使用这个选项指定一个自定义的域名后附加短主机名接收FQDN。这个选项会影响每一个输出消息:事件日志消息,文件来源,MARK的消息和syslog-ng OSE的内部消息。
   
   dir-group() default[root]
   //值:groupid
   //指定新创建目录的默认组
   
   dir-owner() default[root]
   //值:userid
   //指定新创建目录的默认用户
   
   dir-perm() default[0700]
   //值:permission value
   //指定目录的权限,使用此方式标注,例如0700
   
   DNS-cache() default[yes]
   //值:yes | no
   //启用或禁止DNS缓存
   
   dns-cache-expire() default[3600]
   //值:number
   //指定DNS查询缓存过期时间
   
   dns-cache-expire-failed() default[60]
   //值:number
   //指定失败的DNS缓存过期时间
   
   dns-cache-hosts() default[unset]
   //值:filename
   //指定文件在/etc/hosts,包含静态的IP->HOSTNAME的映射关系,使用此选项解析主机名而非DNS。
   
   dns-cache-size() default[1007]
   //值:number
   //指定DNS缓存主机名的数量
   
   file-template() defalut[local timezone]
   //值:时间偏移量 (如: +03:00)
   //指定一个默认模板,类似文件的目的地使用。例如:
   template t_isostamp { template("$ISODATE $HOST $MSGHDR$MSG\n"); };
   options { file-template(t_isostamp); };
   
   flush-lines() default[100]
   //值:number //指定有多少行文件一次刷新到目的地,syslog-ng应用程序等待这行数积累并发送它们在单个批处理。增加这个数量增加吞吐量随着越来越多的消息被发送在单个批处理,但是也增加了信息延迟。限制延迟调整flush-timeout()选项。默认情况下,syslog-ng所等待100行。syslog-ng不会将消息发送到目的地,直到flush-timeout()时间的流逝(默认10秒)。如果你停止或重新加载syslog-ng OSE的网络资源连接
   
   flush-timeout() default[10000]
   //值:时间以毫秒为单位
   //指定时间syslog-ng等待行积累的输出缓冲区。有关更多信息,查看flush-lines()选项。
   
   frac-digits() default[10000]
   //值:number  //syslog-ng应用程序可以存储的第二个分数显示时间戳ISO8601格式。frac-digits()参数指定数字存储的数量。数字存储分数由零填充如果原始消息的时间戳指定几秒钟。分数可以总是被存储接收到的消息的时间。注意,syslog-ng可以添加non-ISO8601的分数时间戳。
 
   group() default[root]
   //值:groupid
   //输出文件的默认组。默认情况下,syslog-ng改变访问文件的权限(例如/dev/null)。0600根。禁用修改权限,使用这个选项-1
   
   keep-hostname() default[no]
   //值:yes or no
   //启用或禁止主机名重写
   
   keep-timestamp() default[yes]
   //值:yes | no
   //指定syslog-ng是否应该接受发送应用程序收到的时间戳或客户端。如果禁用,接收的时候使用,这个选项可以指定全局每个源。源的地方设置将覆盖全局选项如果可用。
   
   log-fifo-size() default[10000]
   //值:number
   //指定输出消息队列的值
   
   log-msg-size() default[8192]
   //值:number
   //消息的最大长度字节。这个长度包括整个消息(数据结构和单个字段)。可以设置的最大价值是268435456字节(256 mb)。信息使用IETF-syslog消息格式(RFC5424),一个SDATA字段的值的最大大小为64 kb。
   
   mark() default[1200]
   //值:number
   //mark-freq()方法是一个别名弃用mark()选项。这是保留兼容1.6.x syslog-ng版本。
   
   mark-freq() default[1200]
   //值:number[秒]
   //
   
   mark-mode()
   //值:file(), pipe(), unix-stream(), unix-dgram(), program()
   //mark-mode()选项可以设置以下目的驱动:file(), program(),unix-dgram(), unix-stream(), udp(), udp6(), tcp(), tcp6(), pipe(), syslog()在全局选项
   
   normalize-hostnames() default[no]
   //值:yes | no
   //启用此选项,syslog-ng 转换主机名为小写
   
   on-error() default[drop-message]
   //值:drop-message|drop-property|fallback-to-string|silently-drop-message|silently-drop-property|silently-fallback-to-string
   //控制类型转换失败时将会发生什么,syslog-ng大阪证交所不能将一些数据转换成指定的类型。
   默认情况下,syslog-ng丢弃整个消息和打印错误日志。目前,value-pairs()方法使用的设置中的on-error()
   
   owner() default[root]
   //值:userid
   //默认输出文件的所有者。默认情况下,syslog-ng改变访问文件的权限(例如/ dev/null)。0600根。禁用修改权限,使用这个选项-1
   
   perm() default[0600]
   //值:permission value
   //默认输出文件的权限。默认情况下,syslog-ng改变访问文件的权限(例如/ dev/null)。0600根。禁用修改权限,使用这个选项-1
   
   proto-template() default[默认使用协议的消息格式]
   //值:模板名
   //指定一个模板,协议(比如目的地(例如,network()和syslog())例如:
   recv-time-zone()
   template t_isostamp { template("$ISODATE $HOST $MSGHDR$MSG\n"); };
   options { proto-template(t_isostamp); };
   
   recv-time-zone() default[local timezone]
   //值:时区名称,或时区偏移
   //指定接收消息的时区
   
   send-time-zone() default[local timezone]
   //值:时区名称,或时区偏移
   //指定发送消息的时区
   
   stats-freq() default[600]
   //值:number
   //指定两个数据之间的时间信息在几秒钟内。统计数据由syslog-ng发送日志消息,包含统计数据日志消息。设置为0禁用统计信息。
   
   stats-level() default[0]
   //值:0123
   //指定数据的细节syslog-ng收集处理信息。
     0级只收集统计信息的来源和目的地
     1级包含不同的连接和日志文件的详细信息,但有一个轻微的内存开销
     2级包含基于主机名的详细统计数据。
     3级包含详细的统计基础设施等各种信息参数,严重程度,或标记。
	 
   stats-lifetime() default[10]
   //值:number (minutes)
   //控制频率动态计数器过期了。计时器是不准确的,一些计时器可能住有点超过指定的时间。
   动态计数器正在清理在指定时间间隔反复stats-lifetime(),而不是只在重新加载。这将减少使用的内存动态计数器。
   
   sync() or sync-freq() default[0]
   //值:number
   //flush-lines()的别名
   
   threaded() default[yes]
   //值:yes|no
   //使syslog-ng在多线程运行模式时使用多个cpu。
   
   time-reap() deault[60]
   //值:number
   //在没有消息前,到达多少秒,即关闭该文件的连接 
   
   time-reopen() default[60]
   //值:number
   //对于死连接,到达多少秒,会重新连接 
   
   time-sleep() default[0]
   //值:number
   //每次调用之间的等待时间以毫秒为单位的poll()迭代。
   
   time-zone() default[unspecified]
   //值:时区或时区偏移
   //转换时间戳(以及所有日期相关的宏的时间戳)时区,指定此选项。如果不设置这个选项,那么使用原来的时区信息的消息。
   
   use-dns() default[yes]
   //值:yes, no, persist_only
   //启用或禁用DNS的使用。persist_only选项尝试在本地解析主机名从文件(例如/etc/hosts)。
   
   use-fqdn() default[no]
   //值:yes or no
   //添加完全限定域名而不是短主机名。这个选项可以指定,在全局范围内,以及每个源。源的地方设置将覆盖全局选项如果可用。
   
   use-rcptid() default[no]
   //值:yes | no
   //当全局use-rcptid选项设置为yes,syslog-ng自动分配一个独一无二的接待每一个收到的消息ID。你可以访问这个ID和在模板中使用它通过${RCPTID}
   接收ID是一个单调增加48比特位整数,不能是零(如果1)计数器溢出,它重新启动。
   
  
 source  { source-driver(params); source-driver(params); ... };
 source 说明
    file() 
	//指定文件读取消息
	例如:
	source s_file { file("/var/log/messages"); };
	file()选项说明:
		default-facility() //默认设备
		#类型:设备字符串
		#默认:kernel
		
		default-priority() //默认优先级
		#类型:优先级字符串
		#默认:空
		
		file() //读取消息文件路径
		#类型:文件名和路径
		#默认:空
		
		encoding() //字符编码
		#类型:字符
		#默认:空
		
		flags() //指定源的日志解析选项
		#类型:assume-utf8, empty-lines, expect-hostname, kernel,no-multi-line, no-parse, store-legacy-msghdr,syslog-protocol, validate-utf8
		#默认:空
		
		follow-freq() //定期检查源的可读性
		#类型:数字
		#默认:1
		
		keep-timestamp() //指定syslog-ng是否应该接受发送应用程序收到的时间戳或客户端时间戳。
		#类型:yes | no
		#默认:yes
		
		log-fetch-limit() //信息获取的最大数量从源的循环队列中。
		#类型:数字
		#默认:10
		
		log-iw-size() //初始窗口的大小,这个值是在流控制时使用,此值必须大于log-fetch-limit
		#类型:数字
		#默认:100
		
		log-msg-size() //指定接收日志消息的最大大小,如果全局未指定,使用次选项
		#类型:数字
		#默认:1000
		
		multi-line-garbage() //处理多行消息,匹配或不匹配是否需要的消息
		#类型:正则表达式
		#默认:空字串
	
	    multi-line-mode() //多行消息模式
		#类型:indented|regexp
		#默认:空字串
	
	network()
	//指定TCP或UDP方式接收消息
	network()参数说明:
		encoding() //字符编码
		#类型:字符
		#默认:空
		
		flags() //指定源的日志解析选项
		#类型:assume-utf8, empty-lines, expect-hostname, kernel,no-multi-line, no-parse, store-legacy-msghdr,syslog-protocol, validate-utf8
		#默认:空
		
		host-override() //取代${HOST}消息的参数字符串的一部分。
		#类型:字串
		#默认:空
		
		ip() or localip() //指定ip地址
		#类型:字串
		#默认:0.0.0.00
		
		ip-protocol() //使用ipv4或ipv6
		#类型:数字
		#默认:4
		
		ip-tos() //指定出站包的Type-of-Service
		#类型:数字
		#默认:0
		
		ip-ttl() //指定出站包的Type-of-Service
		#类型:数字
		#默认:0
		
		keep-hostname() //启用或禁止主机名重写
		#类型:yes | no
		#默认:no
		
		keep-alive() //使用启用keepalive
		#类型:yes | no
		#默认:yes
		
				
		keep-timestamp() //指定syslog-ng是否应该接受发送应用程序收到的时间戳或客户端时间戳。
		#类型:yes | no
		#默认:yes
		
		log-fetch-limit() //信息获取的最大数量从源的循环队列中。
		#类型:数字
		#默认:10
		
		log-iw-size() //初始窗口的大小,这个值是在流控制时使用,此值必须大于log-fetch-limit
		#类型:数字
		#默认:1000
		
		log-msg-size() //指定接收日志消息的最大大小,如果全局未指定,使用次选项
		#类型:数字
		#默认:8192
		
		max-connections() //指定最大并发连接数
		#类型:数字
		#默认:10
		
		pad-size() //指定块大小
		#类型:数字
		#默认:0
		
		port() or localport() //指定绑定端口tcp默认514,udp默认601
		#类型:数字
		#默认:TCP : 601
		       UDP : 514
		
		program-override() //取代${PROGRAM}消息的参数字符串的一部分。
		#类型:字串
		#默认:空
		
		so-broadcast() //是否启用消息广播
		#类型:yes or no
		#默认:no
		
		so-keepalive() //保持消息,保持打开套接字,只对TCP and UNIX-stream 有效
		#类型:yes or no
		#默认:no
		
		so-rcvbuf() //指定套接字接收缓冲区的大小的字节
		#类型:数字
		#默认:0
		
		so-sndbuf() //指定套接字发送缓冲区的大小的字节
		#类型:数字
		#默认:0
		
		transport()
		#类型:assume-utf8
		#默认:TCP
		
		tls()
		#类型:tls选项
		#默认:n/a
		
		use-dns()
		#类型:yes, no, persist_only
		#默认:yes
		
		use-fqdn()
		#类型:yes or no
		#默认:no
		
	nodejs()
	//接收json消息从nodejs
	
	internal()
	//syslog-ng收集内部产生的消息。
	例如:
	source s_local { internal(); };
	
	pacct()
	//读取进程统计消息
	
	pipe()
	//管道读取消息
	
	program()
	//打开指定程序读取消息
	
	syslog()
	//使用标准的syslog协议,监听读入的消息
	
	tcp ()             
	 //指定的TCP端口接收日志消息 
	 
	udp ()             
	//指定的UDP端口接收日志消息 
	
	unix-dgram()
	//从指定的uninx套接字SOCK_DGRAM接收消息
	
	unix-stream()
	//从指定的uninx套接字SOCK_STREAM接收消息
	
destination  {destination-driver(params); destination-driver(params); ... };
destination 说明:
    amqp()
	//发布消息使用AMQP
	
	file()
	//写日志到指定文件
	file()参数说明:
	
	graphite()
	//发送度量值到Graphite存储time-series数据.
	
	MongoDB()
	//发送消息到mongodb数据库
	
	network()
	//发送消息到远程主机,支持TCP、UDP
	
	pipe()
	//写消息到管道
	
	program()
	//发消息到指定程序
	
	redis()
	//发送消息使用键值对存储到redis
	
	smtp()
	//发送email消息到指定的接收者
	
	syslog()
	//发送消息到指定的远程主机,使用syslog协议
	
	tcp()
	//发送消息到远程主机,通过指定的TCP端口
	
	UDP()
	//发送消息到远程主机,通过指定的UDP端口
	
	unix-dgram()
	//发送消息到指定的unix套接字文件SOCK_DGRAM
	
	unix-stream()
	//发送消息到指定的unix套接字文件SOCK_STREAM
	
	usertty()
	//发送消息到指定的终端用户,如果用户在登录状态
	
filter  { (""); };
fileter 使用的计算操作符:
   数字    字符串操作    含义
    == 		eq          等于
    != 		ne          不等于
    > 		gt          大于
	< 		lt 			小于
	>= 		ge 			大于等于
	=< 		le 			小于等于

filter方法说明:
    facility()
    //基于过滤消息发送功能。
	数字   设备名     含义
	0 		kern      内核消息
	1 		user 	  用户相关消息
	2 		mail 	  邮件相关
	3 		daemon    系统相关
	4 		auth      认证相关
	5 		syslog    syslog消息
	6 		lpr       打印机相关
	7 		news      网络新闻相关
	8 		uucp      UUCP相关
	9 		cron      计划任务相关
	10 		authpriv  权限,授权相关的
	11 		ftp 	  ftp相关
	12 		ntp       NTP相关
	13 		security  安全相关的,与auth 类似 
	14 		console   日志警告
	15 		solaris-cron clock daemon
	16-23 	local0..local7 在本地使用的设备(local0-local7)
	例如:
	facility(user)
	facility(1)
	facility(local0..local5)
	
	
	filter()
	//调用另一个filter方法
	
	host()
	//基于过滤消息发送主机。
	
	inlist() 
	//基于黑白名单过滤
	in-list("", value(""));
	例如:
	/etc/syslog-ng/programlist.list
	kernel
	sshd
	sudo
	filter f_whitelist { in-list("/etc/syslog-ng/programlist.list", value("PROGRAM")); };

	level() or priority()
	//基于等级或优先级过滤
	例如:
	level(warning)
	level(err..emerg)
	
	match()
	//使用正则表达式根据指定的标题或内容过滤消息字段。
	
	message()
	//使用一个正则表达式基于内容过滤消息。
	
	netmask()
	//基于过滤消息发送主机的IP地址。
	
	program()
	//根据发送应用程序过滤消息。
	
	source()
	//选择指定syslog-ng OSE的消息源语句。
	
	tags()
	//选择消息指定的标签

4.配置syslog-ng

配置收集用户操作日志

192.168.1.87(日志操作)

192.168.1.88(日志收集)

4.1.logger命令说明:

   logger一个shell命令接口,往系统写日志

   日志的级别分为七级,从紧急程度由高到底:

emerg 系统已经不可用,级别为紧急 

alert 警报,需要立即处理和解决 

crit 既将发生,得需要预防。事件就要发生 

warnig 警告 

err 错误信息,普通的错误信息 

notice 提醒信息,很重要的信息 

info 通知信息,属于一般信息 

debug 这是调试类信息

   logger [-isd] [-f file] [-p pri] [-t tag] [-u socket] [message ...]
   -i 逐行记录logger的进程ID
   -s 记录信息到标准错误,同系统日志一起
   -f 指定写入的文件
   -p pri 输入消息的特定优先级. 优先级可以是自定义的数值或者诸如 “facility.level” 的格式. 举例: “-p local3.info” local3 facility这个设备的消息级别为info. 默认是 “user.notice.”
   -t 每行记录一个指定的标志
   -u 以特定的socket代替内嵌系统常规工作
   -d 使用一个数据进程代替一个流连接到这个socket.
   — 结束参数列表. 这个允许消息以一个“-”开始
   message 写入log文件的内容消息,可以与-f配合使用
   logger 以0退出表示成功, 大于0表示失败.

4.2.在1.87上配置操作日志记录

4.2.1.配置系统收集环境

   vim /etc/bashrc 
	 # Only display echos from profile.d scripts if we are no login shell
    # and interactive - otherwise just process them to set envvars
    for i in /etc/profile.d/*.sh; do
        if [ -r "$i" ]; then
            if [ "$PS1" ]; then
                . "$i"
            else
                . "$i" >/dev/null 2>&1
            fi
        fi
    done

		unset i
		unset pathmunge
	fi
	# vim:ts=4:sw=4
   
    在/etc/profile.d/下增加脚本
	cd /etc/profile.d/
	vim oprate_cmd.sh
	#!/bin/bash
	declare -r USER_ALL=`/usr/bin/who am i`
	USER_TTY=`echo $USER_ALL | awk '{print $2}'`
	REMOUTE_IP=`echo $USER_ALL | awk '{print $NF}' | awk -F'[()]+' '{print $2}'`
	REMOUTE_USER=`echo $USER_ALL | awk '{print $1}'`

	if [ $USER == root ]; then
			declare -r PROMT="#"
	else
			declare -r PROMT="$"
	fi

	declare -r REAL_USER=$USER

	PROC_ID=$(pstree -p | grep $$ | awk -F'[()]+' '{print $4}')
	export PROMPT_COMMAND='{ MSG=$(history 1 | { read x y; echo $y; });logger "PPID=$PROC_ID" "REMOUTE_USER=$REMOUTE_USER" "tty=$USER_TTY" "REMOUTE_IP=$REMOUTE_IP" "[$REAL_USER@$HOSTNAME `pwd`]"$PROMT "$MSG"; }'
	
	加载最新配置:
	source /etc/bashrc

4.2.2.配置syslog-ng收集配置文件:

#############################################################################
## Default syslog-ng.conf file which collects all local logs into a
## single file called /var/log/messages.
##
@version: 3.3
@include "scl.conf"

options {
    flush_lines(1);
    flush-timeout(100);
    log-fifo-size(10000);
    chain-hostnames(no);
    use-dns(no);
    #use-dns(persist_only);
    use-fqdn(no);
    create-dirs(no);
    keep-timestamp(yes);
};

source s_file {
     unix-stream ("/dev/log");
     internal();
};

filter sys_filter {
      not match('ansible-command' value('MESSAGE')) and not match('logrotate' value('MESSAGE')) and not match('rsyncd' value('MESSAGE')) and not match('CROND' value('MESSAGE')) and and not match('syslog-ng' value('MESSAGE')) and and not match ('sshd' value('MESSAGE'));
      not facility(mail,authpriv,cron);
};

destination d_file {
        file("/app/local/log/cmd_track.log");
};

destination d_remote {
    tcp("10.10.1.1" port(514));
};

log {
        source(s_file);
        filter(sys_filter);
        destination(d_file);
};

log {
        source(s_file);
        filter(sys_filter);
        destination(d_remote);
};

4.2.3.错误解决

# /etc/init.d/syslog-ng start
    Starting syslog-ng: /usr/local/syslog-ng/sbin/syslog-ng: symbol lookup error: /usr/local/syslog-ng/lib/libsyslog-ng-3.6.so.0: undefined symbol: g_malloc_n
                                                           [FAILED]

 yum 报错:

[root@localhost ~]# yum
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:
   /usr/lib64/python2.6/site-packages/_sqlitecache.so: undefined symbol: g_assertion_message_expr
Please install a package which provides this module, or
verify that the module is installed correctly.
It's possible that the above module doesn't match the
current version of Python, which is:
2.6.6 (r266:84292, Nov 22 2013, 12:16:22)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)]
If you cannot solve this problem yourself, please go to
the yum faq at:
  http://yum.baseurl.org/wiki/Faq

glib2 库版本与当前的yum 和 pyton 版本不兼容

重新安装glibc

tar -xf glib-2.28.8.tar.xz
cd glib-2.28.8
./configure
make
make install

启动syslog-ng

/etc/init.d/syslog-ng start

syslog-ng 脚本内容:

#!/bin/bash 
	#  
	# chkconfig: -  60 27 
	# description: syslog-ng SysV script.  
	. /etc/rc.d/init.d/functions 
	 
	syslog_ng=/usr/local/syslog-ng/sbin/syslog-ng 
	prog=syslog-ng 
	pidfile=/usr/local/syslog-ng/var/syslog-ng.pid 
	lockfile=/usr/local/syslog-ng/var/syslog-ng.lock 
	RETVAL=0 
	STOP_TIMEOUT=${STOP_TIMEOUT-10} 
	 
	start() { 
			echo -n $"Starting $prog: " 
			daemon --pidfile=$pidfile $syslog_ng $OPTIONS 
			RETVAL=$? 
			echo 
			[ $RETVAL = 0 ] && touch ${lockfile} 
			return $RETVAL 
	} 
	 
	stop() { 
		echo -n $"Stopping $prog: " 
		killproc -p $pidfile -d $STOP_TIMEOUT $syslog_ng 
		RETVAL=$? 
		echo 
		[ $RETVAL = 0 ] && rm -f $lockfile $pidfile 
	} 
	 
	case "$1" in 
		  start) 
			start 
			;; 
		  stop) 
			stop 
			;; 
		  status) 
				status -p $pidfile $syslog_ng 
			RETVAL=$? 
			;; 
		  restart) 
			stop 
			start 
			;; 
	  *) 
		echo $"Usage: $prog {start|stop|restart|status}" 
		RETVAL=2 
	esac 
	exit $RETVAL

4.2.4.查看收集的日志:

tail /data/log/execute_log 
Jun 14 16:21:41 qmcent3 ckl: PPID=22668 REMOUTE_USER=ckl tty=pts/2 REMOUTE_IP=192.168.1.105 [ckl@qmcent3.com /home/ckl]$ sudo -s
Jun 14 16:21:43 qmcent3 ckl: PPID=22668 REMOUTE_USER=ckl tty=pts/2 REMOUTE_IP=192.168.1.105 [ckl@qmcent3.com /home/ckl]$ ls
Jun 14 16:21:44 qmcent3 ckl: PPID=22668 REMOUTE_USER=ckl tty=pts/2 REMOUTE_IP=192.168.1.105 [ckl@qmcent3.com /home/ckl]$ cd /root/
Jun 14 16:21:44 qmcent3 ckl: PPID=22668 REMOUTE_USER=ckl tty=pts/2 REMOUTE_IP=192.168.1.105 [ckl@qmcent3.com /home/ckl]$ ls
Jun 14 16:21:46 qmcent3 ckl: PPID=22668 REMOUTE_USER=ckl tty=pts/2 REMOUTE_IP=192.168.1.105 [ckl@qmcent3.com /data]$ cd /data/
Jun 14 16:21:46 qmcent3 ckl: PPID=22668 REMOUTE_USER=ckl tty=pts/2 REMOUTE_IP=192.168.1.105 [ckl@qmcent3.com /data]$ ls

4.3.在1.88(收集服务器上)上配置

安装syslog-ng 同上

配置syslog-ng:

 cat /usr/local/syslog-ng/etc/syslog-ng.conf 
#############################################################################
# Default syslog-ng.conf file which collects all local logs into a
# single file called /var/log/messages.
#

@version: 3.6
@include "scl.conf"

options {
	flush_lines(10);
	flush-timeout(5000);
	log-fifo-size(100000);
	chain-hostnames(no);
	use-dns(persist_only);
	use-fqdn(no);
	create-dirs(no);
	keep-timestamp(yes);
};

source s_remote {
   tcp(ip(0.0.0.0) port(514) max-connections(1000));
};

destination d_file {
		file("/data/excute_log/cmd_$YEAR$MONTH$DAY.log");
};

log {
		source(s_remote);
		destination(d_file);
};

启动服务:

/etc/init.d/syslog-ng start
# netstat -ntpl | grep syslog
tcp        0      0 0.0.0.0:514                 0.0.0.0:*                   LISTEN      16329/syslog-ng

查看收集的日志:

    # cd /data/excute_log/
# ls
cmd_20160614.log

5.安装loganalyzer及收集操作日志

5.1.安装loganalyzr

   tar -xf loganalyzer-3.6.6.tar.gz -C /data/ckl-frontend/
   cd /data/ckl-frontend/
   rsync -a loganalyzer-3.6.6/src/* loganalyzer/
   创建config.php
   touch config.php
   chmod 666 config.php

点击here

syslog-ng+loganalyzer(非常详细配置文件)部署收集操作日志

next

syslog-ng+loganalyzer(非常详细配置文件)部署收集操作日志

确认config.php存在,权限666

syslog-ng+loganalyzer(非常详细配置文件)部署收集操作日志

配置数据库:自定义的数据库连接方式

syslog-ng+loganalyzer(非常详细配置文件)部署收集操作日志

创建数据库:

syslog-ng@localhost:(none) 05:34:46 >create database loganalyzer;

syslog-ng+loganalyzer(非常详细配置文件)部署收集操作日志

创建用户:

syslog-ng+loganalyzer(非常详细配置文件)部署收集操作日志

选择源:

syslog-ng+loganalyzer(非常详细配置文件)部署收集操作日志

完成

syslog-ng+loganalyzer(非常详细配置文件)部署收集操作日志

5.2.配置nginx

   配置nginx访问路径指向loganalyzer/

   此处不再做说明

   

5.3.数据库配置

5.3.1.插入数据库出事用户

MySQL5.6安装完没有用户,插入一个用户

insert into user(Host,User,Password,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,ssl_cipher,x509_issuer,x509_subject) values('localhost','syslog-ng',PASSWORD('629893'),'Y','Y','Y','Y','Y','Y','XX','XX','XX');

安装完成loganalyzer后无法登录,提示没有用户,必须加入一个用户:

insert into logcon_users values(1,'syslog-ng','54e4602701a3ccdae80bf951ae2c69fd',1,1,2016);

创建收集日志的表,必须是如下格式:

CREATE TABLE SystemEvents 
( 
        ID int unsigned not null auto_increment primary key, 
        CustomerID bigint, 
        ReceivedAt datetime NULL, 
        DeviceReportedTime datetime NULL, 
        Facility smallint NULL, 
        Priority smallint NULL, 
        FromHost varchar(60) NULL, 
        Message text, 
        NTSeverity int NULL, 
        Importance int NULL, 
        EventSource varchar(60), 
        EventUser varchar(60) NULL, 
        EventCategory int NULL, 
        EventID int NULL, 
        EventBinaryData text NULL, 
        MaxAvailable int NULL, 
        CurrUsage int NULL, 
        MinUsage int NULL, 
        MaxUsage int NULL, 
        InfoUnitID int NULL , 
        SysLogTag varchar(60), 
        EventLogType varchar(60), 
        GenericFileName VarChar(60), 
        SystemID int NULL,
		processid varchar(60) NOT NULL DEFAULT '1',
		checksum int(11) UNSIGNED NOT NULL DEFAULT '0'
);

注意:指定的收集表必须是以上格式,配置关联如下:

vim config.php 
....
$CFG['Sources']['Source1']['ID'] = 'Source1';
$CFG['Sources']['Source1']['Name'] = 'ckl log';
$CFG['Sources']['Source1']['ViewID'] = 'SYSLOG';
$CFG['Sources']['Source1']['SourceType'] = SOURCE_DB;
$CFG['Sources']['Source1']['DBTableType'] = 'monitorware';
$CFG['Sources']['Source1']['DBType'] = DB_MYSQL;
$CFG['Sources']['Source1']['DBServer'] = 'localhost';
$CFG['Sources']['Source1']['DBName'] = 'loganalyzer';
$CFG['Sources']['Source1']['DBUser'] = 'syslog-ng';
$CFG['Sources']['Source1']['DBPassword'] = '629893';
$CFG['Sources']['Source1']['DBTableName'] = 'SystemEvents';  //指定的表
//$CFG['Sources']['Source1']['DBTableName'] = 'systemevents';
$CFG['Sources']['Source1']['DBEnableRowCounting'] = false;
....

5.4.配置syslog-ng收集数据到mysql

    创建管道文件:

mkfifo /var/log/mysql.pipe

修改配置文件:

vim /usr/local/syslog-ng/etc/syslog-ng.conf
@version:3.3
@include "scl.conf"

# syslog-ng configuration file.
#
# This should behave pretty much like the original syslog on RedHat. But
# it could be configured a lot smarter.
#
# See syslog-ng(8) and syslog-ng.conf(5) for more information.
#

options {
		flush_lines (1);
		flush-timeout(100);
		time_reopen (10);
		log_fifo_size (1000000000);
		chain_hostnames (no);
		use_dns (no);
		use_fqdn (no);
		create_dirs (no);
		keep_hostname (yes);
		stats_freq(600);
		log_msg_size(65536);
};

source s_sys {
		file ("/proc/kmsg" program_override("kernel: "));
		unix-stream ("/dev/log");
		internal();
};

source cmd_src {
		tcp(
		 ip(0.0.0.0) 
		 port(514) 
		 log-fetch-limit(12800)
		 log-iw-size(1000)
		 max-connections(100000000)
		 so-rcvbuf(12468)
		);
};

destination cmd_dst {
		file("/app/local/log/oplog/cmdrecord/cmdrecord-$YEAR$MONTH$DAY.log");
};

log { source(cmd_src); 
	  filter(sys_filter);
	  destination(cmd_dst); 
};


#sys filter
filter sys_filter {
   not match('qmuser' value('MESSAGE')) and not match('logrotate' value('MESSAGE')) and not match('rsyncd' value('MESSAGE')) and not match('CROND' value('CROND')) and not match('syslog-ng' value('MESSAGE')) and not match ("sshd" value("MESSAGE"));
  not facility(mail,authpriv,cron);
};


#destination mysql
destination d_mysql {
		 program("/usr/bin/mysql -usyslog-ng -p123245 loganalyzer < /var/log/mysql.pipe");
		 pipe("/var/log/mysql.pipe"
		 template("INSERT INTO SystemEvents(EventID,FromHost,SysLogTag,Facility,EventUser,EventSource,Message,Priority) VALUES('1','$hostname','$TAG','1','$REMOTE_USER','$HOST','$MSG','5');\n")
template-escape(no));
};


log {
		source(cmd_src);
		filter(sys_filter);
		destination(d_mysql);
};

启动进程:

/etc/init.d/syslog-ng restart

查看数据收集:

syslog-ng+loganalyzer(非常详细配置文件)部署收集操作日志

警告:

/etc/init.d/syslog-ng restart
WARNING: the match() filter without the use of the value() option is deprecated and hinders performance, please update your configuration;
start syslog-ng:WARNING: the match() filter without the use of the value() option is deprecated and hinders performance, please update your configuration;

解决:

match 使用如下语法:
filter f_carriage_return {match("\x0d" value ("MESSAGE"));};

错误:

[syslog-ng] Broken TCP connection

解决方法:

Yes, it is. You need to increase log_fetch_limit() and log_fifo_size() 
in this case. Keep your mind the log_fifo_size must be larger than the 
log_fetch_limit.

链接地址:

https://lists.balabit.hu/pipermail/syslog-ng/2010-January/013835.html

https://tools.ietf.org/html/rfc5424#page-13


分享题目:syslog-ng+loganalyzer(非常详细配置文件)部署收集操作日志
分享链接:http://hbruida.cn/article/ghgice.html