首页 > 代码库 > 基于rsyslog+mysql+loganalyzer构建一个小而美的日志服务器

基于rsyslog+mysql+loganalyzer构建一个小而美的日志服务器

前言:

    每当我们遇到问题抓耳挠腮,一脸懵那啥的时候,也许看一下日志就瞬间豁然开朗,所以,一个易用的日志服务器还是很重要的。我们先不介绍elk,那个牛逼吊炸天的日志分析系统。今天我们先来构建一个小的日志服务器。elk我们以后再说~

正文:

    当我们配置完一个服务,启动报错时,那感觉就像吃了啥一样,别提多难受,除非服务程序本身有检测配置文件的程序,不然我们就得依赖linux自己的集中日志服务器rsyslog了。不过,有时候也许我们想搜索一下某条日志,或者向用可视化的界面进行统计分析。此时我们可以把日志数据保存到mysql中,并且通过loganalyzer以web界面展示出来,方便我们查询,搜索,统计~以后,我们都反着来,先将实现,再讲理论~~~

    rsyslog的主要配置文件是/etc/rsyslog.conf,我们先开启其监听端口,让它不仅可以收集本机的日志,还可以收集其他主机的日志。配置如下。

    

#/etc/rsyslog.conf
#### MODULES ####
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514	

    我们要把日志数据保存到mysql中,首先我们配置我们的数据库服务

#yum install mariadb-server                centos7,6中用mysql配置差不多
#mysql                       通过mysql命令连接到数据库
mysql>GRANT ALL ON Syslog.* TO ‘syslog‘@‘127.0.0.1‘ IDENTIFIED BY ‘syslog‘;
         数据库名为Syslog,用户syslog可以通过127.0.0.1访问此数据库的所有表,密码为syslog
#yum install rsyslog-mysql                    #安装mysql模块相关程序包
#mysql -usyslog -h127.0.0.1 -psyslog < /usr/share/doc/rsyslog-7.4.7/mysql-createDB.sql
         导入数据库~这样就不用我们自己建数据库的表之类的东东啦

默认我们的配置是保存到日志文件中的,我们得让日志保存到数据库中,配置一下rsyslog的配置文件

#### MODULES ####
$ModLoad ommysql      添加相关的模块
				
#### RULES ####
*.info;mail.none;authpriv.none;cron.none       :ommysql:127.0.0.1,Syslog,syslog,syslog
    把除了mail,authpriv,cron的日志保存到mysql中。

然后我们重启rsyslog服务

systemctl restart rsyslog                           Centos7中这样重启服务
service rsyslogs restart                            Centos6中这样

第二部就是配置我们的loganalyzer了。因为此程序貌似以及不更新了,所以我们得用源码安装,不过在此之前得先安装lamp环境。

#yum install httpd php php-mysql php-gd
# tar xf loganalyzer-3.6.5.tar.gz
# cp -a loganalyzer-3.6.5/src  /var/www/html/loganalyzer
#  cd  /var/www/html/loganalyzer
# touch config.php
# chmod 666 config.php

然后就启动httpd服务啦~~

systemctl start httpd

到此我们就可以用浏览器访问loganalyzer了:http://你主机的ip/loganalyzer。

web界面的配置接不详细解释了,基本上就是一直按next,除了有一步骤得配置mysql以外都保持默认就好。

技术分享

技术分享

到此我们就配置完毕了,至于具体的功能就自己探索吧~~~

配置完了我们就来讲讲理论咯~

centos6之前,是一个叫做syslog的东东来记录日志,他主要分两部分,klogd和syslogd,klogd是基于内核的,syslogd就是一个系统上的应用程序了。他们主要是通过TCP或UDP协议的服务完成日志记录传送。

centos6开始就是我们现在使用的rsyslog了,首先它支持多线程,而且可以通过更多的协议来传送日志,比如SSL/TLS/RELP等等,而且还能把日志信息存储在各种数据库中,比如MYSQL,PGSQL,Oracle等。其他还有什么等自定义输出格式呀等等。

第三种就是那个高大上,并且目前很流行的ELK,它是由三个东东组合起来的称呼。

E:elasticsearch,一个分布式搜索引擎,毕竟讲道理来说我们日常操作搜索大于其他方式。

L:logstash,就是用来收集,分析日志的东东

K:kibana,嗯,提供web可视化界面的。

elk我们后面再探讨~

rsyslog主要可以收集以下东东产生的日志。被称为facility。

auth(认证相关), authpriv(认证授权), cron, daemon(守护进程), kern(内核), lpr(打印系统), mail(邮件系统), mark(内核防火墙标记), news(新闻组), security(安全相关),user(用户自己产生的日志), uucp(一个很古老的协议), syslog(自己的), local0-local7(用户可自定义的)

还有一个概念就是优先级   proirity,从低到高有以下几种

debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)

说了这么多,当然是有用的东东,我们可以用这两个东东来自定义如何收集日志。语法如下

facility.priority 	target

表示谁(facility)产生的哪些级别(priority)的日志,要以什么形式(target)处理。

*表示所有的facility,我们也可以自行指定:f1,f2,f3。。。

*表示所有级别,none表示没有级别,PRIORITY表示指定级别及其以上的所有级别,=PRIORITY表示仅记录指定级别的日志信息。

举个例子:*.* 就宝石所有类型,所有级别的日志,*.info表示所有类型,info及以上优先级的日志。

既然已经选择出了我们要处理的日志,就可以通过target字段,指定怎么处理日志。

比如,保存到文件啦,/var/log/message  将时间通知给用户啦,通过网络把日志送往指定的日志服务器啦,或者通过管道用命令处理,|COMMAND.

ok!理论到此结束~~~~

全篇完

本文出自 “机制小风风” 博客,请务必保留此出处http://xiaofengfeng.blog.51cto.com/8193303/1890841

基于rsyslog+mysql+loganalyzer构建一个小而美的日志服务器