0%

日志服务器rsyslog+loganalyzer+logrotate配置

最近某客户有过等保的需求,但是缺乏一个日志服务器。临时搞一个应付检查,后期再丰富和完善相关功能。

rsyslog是什么

rsyslog是一个syslogd的多线程增强版。从centos6之后系统中的syslog服务被rsyslog所替代。几乎所有的网络设备都可以通过syslog协议,将日志信息以多种协议传输到远端服务器。

  • 多线程
  • TCP,SSL,TLS,RELP
  • MySQL,PostgreSQL,Oracle等
  • 过滤系统日志消息
  • 可配置输出格式
  • 适用于企业级

loganalyzer是什么

使用PHP开发,可以通过WEB轻松浏览系统日志,并且实时的对网络事件进行分析和生成报告。可以通过:https://loganalyzer.adiscon.com/download/ 获取最新版本。

logrotate是什么

logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。

rsyslog配置

系统配置完成之后,日志以文本文件形式和存入Mysql数据库的形式并存,文本用来取证,数据库用来查询展示。文本日志存放在:/var/log/rsyslog目录中,以日志客户端ip地址命名文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 事先配置ip地址,关闭防火墙和selinux,调整系统事件或者启用ntp
yum install ntp ntpdate
systemctl start ntpd
systemctl enable ntpd
ntpdate ntp1.aliyun.com
systemctl disable firewalld
systemctl stop firewalld
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
# 安装rsyslog-mysql和数据库
yum install mariadb-server mariadb rsyslog-mysql
systemctl start mariadb
systemctl enable mariadb
# 执行配置数据库脚本
mysql_secure_installation
# 输入数据库超级管理员root的密码(注意不是系统root的密码),第一次进入还没有设置密码则直接回车
Enter current password for root (enter for none):
Set root password? [Y/n] # 设置密码,y
New password: # 新密码
Re-enter new password: # 再次输入密码
Remove anonymous users? [Y/n] # 移除匿名用户, y
# 拒绝root远程登录,n,不管y/n,都会拒绝root远程登录
Disallow root login remotely? [Y/n]
# 删除test数据库,y:删除。n:不删除,数据库中会有一个test数据库,一般不需要
Remove test database and access to it? [Y/n]
# 重新加载权限表,y。或者重启服务也许
Reload privilege tables now? [Y/n]
# 创建rsyslog所需数据库
mysql -u root -p < /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
# 创建mysql用户用于访问Syslog数据库
mysql> grant all privileges on Syslog.* to 用户名@localhost identified by '密码';
mysql> flush privileges;
mysql> exit
# 创建rsyslog配置文件(尽量不动原有配置文件)
mkdir -p /var/log/rsyslog
vi /etc/rsyslog.d/other.conf
### GLOBAL DIRECTIVES ###
# 加载mysql模块
$ModLoad ommysql
# 加载immark模块,提供标记信息的能力
$ModLoad immark
# 开启udp端口
$ModLoad imudp
$UDPServerRun 514
# 开启tcp端口
$ModLoad imtcp
$InputTCPServerRun 514

# 指定日志记录格式避免获取不到IP地址
template(name="stdSQLformat" type="string" option.sql="on" string="insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('%msg%', %syslogfacility%, '%fromhost-ip%', %syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%')" )

*.* :ommysql:127.0.0.1,Syslog,用户名,密码;stdSQLformat
# Use default timestamp format # 使用默认时间戳格式
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
#$template myFormat,"%timestamp% %fromhost-ip% %syslogtag% %msg%\n"
#$ActionFileDefaultTemplate myFormat
# 根据客户端的IP单独存放主机日志在不同目录,rsyslog需要手动创建
$template RemoteLogs,"/var/log/rsyslog/%fromhost-ip%.log"
# 排除本地主机IP日志记录,只记录远程主机日志
:fromhost-ip, !isequal, "127.0.0.1" ?RemoteLogs
# 忽略之前所有的日志,远程主机日志记录完之后不再继续往下记录
& stop

LogAnalyzer配置

1
2
3
4
5
6
7
8
9
10
11
yum install httpd php php-gd php-cli php-mysql php-pdo php-common
wget https://download.adiscon.com/loganalyzer/loganalyzer-4.1.11.tar.gz
tar -zxf loganalyzer-4.1.11.tar.gz
mkdir -p /var/www/html/loganalyzer
cp -a src/* /var/www/html/loganalyzer/
cp -a contrib/* /var/www/html/loganalyzer/
cd /var/www/html/loganalyzer/
# 该脚本将创建配置文件config.php并且设置666权限,清安装完毕之后执行secure.sh将权限个改为644
chmod +x configure.sh
sh ./configure.sh
# 打开浏览器安装即可,过程中记得区分数据库和表的名称大小写。安装完毕之后请删除install.php

logrotate配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
vi /etc/logrotate.d/other
# 制定要轮转的文件
/var/log/rsyslog/*.log {
# 忽略错误
missingok
# 每天分割日志
daily
# 保存180份
rotate 180
# 文件必须大于200M,切周期到了才会轮转
minsize 200M
# 使用日期作为命名格式
dateext
# 轮转后压缩
compress
# 和compress一起使用,保留一份最近的,下一次轮转再压缩
delaycompress
#如果文件为空,不轮转
notifempty
}

待解决问题

日志进入mysql之后的格式不对,后续需要学习入库时候的模板语法。或者直接更换elk入库es。

参考

https://www.rsyslog.com/doc/v8-stable/configuration/templates.html 格式参考
https://www.rsyslog.com/how-to-bind-a-template/ 绑定模板