前言:
每当我们遇到问题抓耳挠腮,一脸懵那啥的时候,也许看一下日志就瞬间豁然开朗,所以,一个易用的日志服务器还是很重要的。我们先不介绍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!理论到此结束~~~~
全篇完