1、rsyslog 启用网络日志服务

启用网络日志服务功能,可以将多个远程主机的日志,发送到集中的日志服务器,分别统一管理。 范例: Centos 7 启用网络日志功能

[root@app ~]#vim /etc/rsyslog.conf
#MODULES模块中取消下面行注释
$ModLoad imtcp
$InputTCPServerRun 514

#在客户端指定将日志发送到远程的TCP、UDP的日志服务器
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
*.info;mail.none;authpriv.none;cron.none                @@10.0.0.17          #TCP
*.info;mail.none;authpriv.none;cron.none                @10.0.0.17           #UDP
[root@app ~]#systemctl restart rsyslog

#在日志服务器开启TCP功能
[root@rsyslog-mysql ~]#vim /etc/rsyslog.conf 
$ModLoad imtcp
$InputTCPServerRun 514
[root@rsyslog-mysql ~]#systemctl restart rsyslog

#客户端测试网络日志
[root@app ~]#logger "tihs is test tcp log on 10.0.0.7"

logger1.png

#Centos 8 启用网络日志功能
[root@Rocky ~]# vim /etc/rsyslog.conf 
#取消 imctp,imudp行module注释
#### MODULES ####
...省略...
# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
module(load="imudp") # needs to be done just once
input(type="imudp" port="514")

# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")

2、利用MySQL 存储日志信息

2.1 目标

利用rsyslog日志服务,将收集的日志记录于mysql中

2.2 环境准备

两台主机
一台:rsyslog日志服务器 :10.0.0.17
一台:mariadb数据库服务器 :10.0.0.108

2.3 步骤

2.3.1 在rsyslog服务器上安装连接mysql模块相关程序包

[root@rsyslog ~]#yum -y install rsyslog-mysql
[root@rsyslog ~]#rpm -ql rsyslog-mysql 
/usr/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
#查看sql脚本内容
[root@rsyslog ~]#cat /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
CREATE DATABASE Syslog;
USE Syslog;
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
);

CREATE TABLE SystemEventsProperties
(
        ID int unsigned not null auto_increment primary key,
        SystemEventID int NULL ,
        ParamName varchar(255) NULL ,
        ParamValue text NULL
);

#将sql脚本拷贝到数据库服务器
[root@rsyslog ~]#scp /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql 10.0.0.108:

2.3.2 准备MySQL server

[root@mysql ~]# yum -y install mariadb-server
[root@mysql ~]# mysql_secure_installation
#在数据库服务器上创建相关数据库和表,并创建授权rsyslog用户能连接至当前服务器
[root@mysql ~]# mysql -uroot -p < mysql-createDB.sql 
MariaDB [(none)]> create user rsyslog@'10.0.0.%' identified by '123.com';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> grant all on Syslog.* to rsyslog@'10.0.0.%';
Query OK, 0 rows affected (0.001 sec)

2.3.3 配置日志服务器将日志发送至指定数据库

#配置rsyslog将日志保存到msyql中
[root@rsyslog ~]#vim /etc/rsyslog.conf
#Centos7,6 添加下面行
$ModLoad ommysql

##Centos8添加下面行
module(load="ommysql")

#在Rules语句块加下面行
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
                                                    #   :ommysql:DBHOST,DBNAME,DBUSER,PASSWORD
*.info;mail.none;authpriv.none;cron.none                :ommysql:10.0.0.108,Syslog,rsyslog,123.com
[root@rsyslog ~]#systemctl restart rsyslog.service

测试

#在日志服务器上生成日志
[root@rsyslog ~]#logger "this is test log to mysql on 10.0.0.17"

#在数据库查询到上面的测试日志
MariaDB [Syslog]> select * from SystemEvents\G
...省略...
   Message: this is test log to mysql on 10.0.0.17
...省略...

3、 通过loganalyzer 展示数据库中的日志

loganalyzer是用 php 语言实现的日志管理系统,可将mysql数据库中的日志用web方式进行展示 官网: https://loganalzer.adiscon.com

3.1 步骤

3.1.1 安装php、httpd相关软件包

在10.0.0.108主机上面安装httpd、php和相关软件包

[root@mysql-loganalzer ~]# yum -y install httpd php-fpm php-mysqlnd php-gd
[root@mysql-loganalzer ~]# systemctl enable --now httpd php-fpm

3.1.2 安装 LogAnalyzer

[root@mysql-loganalzer ~]# tar xf loganalyzer-4.1.12.tar.gz
[root@mysql-loganalzer ~]# ls loganalyzer-4.1.12
ChangeLog  contrib  COPYING  doc  INSTALL  src
[root@mysql-loganalzer ~]# mv loganalyzer-4.1.12/src/* /var/www/html/

3.1.3 web页面初始化

访问http://10.0.0.108 初始化 选择: MySQL Native,Syslog Fields,Monitorware loganalzer1.png loganalzer2.png

#创建config.php文件,并修改权限
[root@mysql-loganalzer ~]# touch /var/www/html/config.php
[root@mysql-loganalzer ~]# chmod 666 /var/www/html/config.php 

loganalzer3.png loganalzer4.png 如果没有安装php-gd包,图表显示不出来 loganalzer5.png

3.1.4 安全加固

[root@mysql-loganalzer ~]# chmod 644 /var/www/html/config.php 

4 logrotate 日志转储

4.1 logrotate 介绍

Logrotate 程序是一个日志文件管理工具,用来把旧日志文件删除,并创建新人日志文件,称为日志转储或滚动。可以根据日志文件的大小,也可以根据天数来转储,过程一般通过cron程序来执行

4.2 logrotate 配置

软件包:logrotate 相关文件

  • 计划任务: /etc/cron.daily/logrotate
  • 程序文件:/usr/sbin/logrotate
  • 配置文件:/etc/logrotate.conf
  • 日志文件:/var/lib/logrotate/logrotate.status

4.3 logrotate 配置范例

范例: 设置nginx的日志转储

cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily                   #每日执行
    rotate 100              #保留日志前100天
    missingok               #如日志不存在,不提示错误,继续处理下一个
    compress                #压缩后转储
    delaycomppress          #延迟压缩,和compress一起使用,及下下次压缩
    notifempty              #如空文件,不转储
    create 644 nginx nginx  #转储文件,使用指定的权限,所有者,所属组创建新的日志文件
    postrotate              #postrotate/endscript 在转储以后需要执行的命令,这两个关键字必须单独成行
        if [ -f /apps/nginx/logs/nginx.pid ]; then
            kill -USR1 `cat /apps/nginx/logs/nginx.pid`
        fi
    endscript

}

配置参数 说明

compress #通过gzip压缩转储以后的日志
nocompress #不压缩
copytruncate #用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate #备份日志文件但是不截断
create mode owner group  #转储文件,使用指定的权限,所有 者,所属组创建新的日志文件
nocreate          #不建立新的日志文件
delaycompress     #和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress   #覆盖 delaycompress 选项,转储同时压缩
errors address    #专储时的错误信息发送到指定的Email 地址
ifempty           #即使是空文件也转储,此为默认选项
notifempty        #如果是空文件的话,不转储
mail address      #把转储的日志文件发送到指定的E-mail 地址
nomail            #转储时不发送日志文件
olddir directory  #转储后的日志文件放入指定目录,必须和当前日志文件在同一个文件
系统
noolddir          #转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript #在转储以前需要执行的命令,这两个关键字必须单独成行
postrotate/endscript #在转储以后需要执行的命令,这两个关键字必须单独成行
daily #指定转储周期为每天
weekly #指定转储周期为每周
monthly #指定转储周期为每月
rotate count #指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabooext [+] list #让logrotate不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig,.rpmsave, v, 和 ~
size size 		 #当日志文件到达指定的大小时才转储,bytes(缺省)及KB或MB
sharedscripts     #默认,对每个转储日志运行prerotate和postrotate脚本,日志文件的绝对路径作为第一个参数传递给脚本。 这意味着单个脚本可以针对与多个文件匹配的日志文件条目多次运行(例如/ var / log / news /*.example)。如果指定此项sharedscripts,则无论有多少个日志与通配符模式匹配,脚本都只会运行一次
nosharedscripts   #针对每一个转储的日志文件,都执行一次prerotate 和 postrotate脚本,此为默认值配置参数 说明
missingok         #如果日志不存在,不提示错误,继续处理下一个
nomissingok       #如果日志不存在,提示错误,此为默认值