浅谈日志分析

日志介绍

1️⃣日志的基本概念

  • 日志:将事件发生的时间、地点、人物、事件等信息保存记录
  • 日志级别:根据事件的关键程度对日志的分级
  • 事件记录格式:一般包含日期时间、主机、进程[pid]、事件内容
  • 基于C/S架构的日志系统:通过TCP或UDP协议的服务完成日志记录传送,将分布在不同主机的日志实现集中管理

2️⃣日志系统的发展

  • sysklogd: CentOS5之前的系统日志服务

    • syslogd: 记录应用日志
    • klogd:记录内核日志
  • rsyslog: CentOS6, 7使用的系统日志服务

    • 支持TCP, UDP
    • 支持日志转储于数据库MySQL, Oracle
    • 强大的过滤器
    • 自定义输出格式
  • ELK:elasticsearch, logstash, kibana

    • 非关系型分布式数据库
    • 专业的日志管理平台

3️⃣rsyslog的关键概念

  • facility:设施,从功能或程序上对日志进行归类
    auth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security(auth), user, uucp, local0-local7(预留自定义), syslog

  • priority:优先级别,从低到高排序
    debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)

rsyslog管理

1️⃣rsyslog 相关文件

  • 程序包:rsyslog
  • 主程序:/usr/sbin/rsyslogd
  • CentOS 6:/etc/rc.d/init.d/rsyslog {start|stop|restart|status}
  • CentOS 7,8:/usr/lib/systemd/system/rsyslog.service
  • 配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
  • 库文件: /lib64/rsyslog/*.so

2️⃣rsyslog配置文件

配置文件格式:由三部分组成

  • MODULES:相关模块配置
  • GLOBAL DIRECTIVES:全局配置
  • RULES:日志记录相关的规则配置

RULES配置格式

  • 格式:facility.priority;facility.priority… target

  • facility

    • *: 所有的facility
    • facility1,facility2,facility3,...:指定的facility列表
  • priority

*:所有级别
none:没有级别,即不记录
PRIORITY:指定级别(含)以上的所有级别
=PRIORITY:仅记录指定级别的日志信息
  • target
文件路径:通常在/var/log/,文件路径前的-表示异步写入
用户:将日志事件通知给指定的用户,*表示登录的所有用户
日志服务器:@host,把日志送往至指定的远程UDP服务器
           @@host 将日志发送到远程TCP日志服务器
管道:| COMMAND,转发给其它命令处理

通常的日志文件的格式:
日志文件有很多,如: /var/log/messages,cron,secure等,基本格式都是类似的。格式如下

事件产生的日期时间 主机 进程(pid):事件内容

3️⃣syslog的网络日志服务

启用网络日志服务功能,可以将多个远程主机的日志,发送到集中的日志服务器,方便统一管理。

配置网络日志服务:修改配置文件,当UDP和TDP服务模块开启

/  centos8启用网络日志功能
[root@centos8 ~]#vim /etc/rsyslog.conf
#### 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")

/ centos6和7启用网络日志功能
vim /etc/rsyslog.conf
#### MODULES ####
# Provides UDP syslog reception
$ModLoadimudp             //取消行前的注释符
$UDPServerRun514          //取消行前的注释符
# Provides TCP syslog reception
$ModLoadimtcp             //取消行前的注释符
$InputTCPServerRun514     //取消行前的注释符

实验:配置centos7的rsyslog网络日志服务

  • 主机配置:两台主机
    日志服务器:负责接收客户端通过UDP或TCP发来的日志信息(IP:172.20.54.1)
    日志客户端:负责发出写入日志请求
    实验1:通过UDP使客户端的事件记录在日志服务器的/var/log/messages中
  • 配置服务端配置文件module部分,开启UDP通信模块
vim /etc/rsyslog.conf
$ModLoad imudp        //删除行前注释符
$UDPServerRun 514     //删除行前注释符
systemctl restart rsyslog
[root@Centos7 ~]# ss -nutlp
Netid  State      Recv-Q Send-Q                Local Address:Port                               Peer Address:Port              
udp    UNCONN     0      0                                 *:514                                           *:*                   users:(("rsyslogd",pid=5649,fd=3))
udp    UNCONN     0      0                              [::]:514                                        [::]:*                   users:(("rsyslogd",pid=5649,fd=4))
  • 配置客户端配置文件rules部分
vim /etc/rsyslog.conf
/ 修改target
*.info;mail.none;authpriv.none;cron.none                @172.20.54.1

systemctl restart rsyslog

/ 客户端测试
[root@Centos7 ~]# logger -p syslog.info "this is test message"

/ 服务端追踪/var/log/messages
[root@Centos7 ~]# tail -f /var/log/messages
.
.
Dec 14 21:51:28 Centos7 systemd: Started System Logging Service.
Dec 14 21:52:26 Centos7 root: this is test message
.
.

实验2:通过TCP使客户端的事件记录显示在日志服务器的所有登录用户终端上

  • 修改服务端配置文件,启用TCP通信模块
vim /etc/rsyslog.conf
$ModLoad imtcp             //删除行前注释符
$InputTCPServerRun 514     //删除行前注释符
local2.*      /var/log/test.log
systemctl restart rsyslog
[root@Centos7 ~]# ss -ntlp
State      Recv-Q Send-Q                   Local Address:Port                                  Peer Address:Port              
LISTEN     0      25                                   *:514                                              *:*                   
users:(("rsyslogd",pid=5675,fd=3))
  • 修改客户端rules配置文件
vim /etc/rsyslog.conf
local2.*               @@172.20.54.1    / TCP模块是@@
systemctl restart rsyslog

/ 客户端测试
[root@Centos7 ~]# logger -p local2.info "this is second test message"
[root@Centos7 ~]# logger -p local2.info "this is third test message"
/ 服务端追踪日志文件
[root@Centos7 ~]# tail -f /var/log/test.log 
Dec 14 22:04:36 Centos7 root: this is second test message
Dec 14 22:04:50 Centos7 root: this is third test message

4️⃣其他常见的日志文件

/var/log/secure:系统安装日志,文本格式,应周期性分析
/var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行
查看
/var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查
看
/var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看
/var/log/dmesg:CentOS7 之前版本系统引导过程中的日志信息,文本格式,开机后的硬件变化
将不再记录
专用命令dmesg查看,可持续记录硬件变化的情况
/var/log/boot.log 系统服务启动的相关信息,文本格式
/var/log/messages :系统中大部分的信息
/var/log/anaconda : anaconda的日志
  • 范例
/ 找出失败登录次数最多的前5个IP
[root@iZm5e7fmdzy1az1fi80v4yZ ~]#lastb | awk '{print $(NF=3) }'|sort -nr|uniq -c | sort -nr| head -5
     10 179.150.129.20
      5 90.220.55.200
      5 36.105.213.11
      5 222.186.175.151
      4 Tue

/ 找出失败登录次数最多的前5个IP
[root@iZm5e7fmdzy1az1fi80v4yZ ~]#lastb | awk '{ip[$3]++}END{for (i in ip){print ip[i],i}}'|sort -nr|head -5 
10 179.150.129.20
5 90.220.55.200
5 36.105.213.11
5 222.186.175.151
4 Tue

日志管理工具journalctl

  • systemd的日志管理工具,可以查看所有内核日志和应用日志

  • 配置文件:/etc/systemd/journald.conf

journalctl用法

#查看所有日志(默认情况下 ,只保存本次启动的日志)
journalctl
#查看内核日志(不显示应用日志)
journalctl -k
#查看系统本次启动的日志
journalctl -b
journalctl -b -0
#查看上一次启动的日志(需更改设置)
journalctl -b -1
#查看指定时间的日志
journalctl --since="2017-10-30 18:10:30"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl --since "2017-01-10" --until "2017-01-11 03:00"
journalctl --since 09:00 --until "1 hour ago"
#显示尾部的最新10行日志
journalctl -n
#显示尾部指定行数的日志
journalctl -n 20
#实时滚动显示最新日志
journalctl -f
#查看指定服务的日志
journalctl /usr/lib/systemd/systemd
#查看指定进程的日志
journalctl _PID=1
#查看某个路径的脚本的日志
journalctl /usr/bin/bash
#查看指定用户的日志
journalctl _UID=33 --since today
#查看某个 Unit 的日志
journalctl -u nginx.service
journalctl -u nginx.service --since today
#实时滚动显示某个 Unit 的最新日志
journalctl -u nginx.service -f
#合并显示多个 Unit 的日志
journalctl -u nginx.service -u php-fpm.service --since today
#查看指定优先级(及其以上级别)的日志,共有80: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debug
journalctl -p err -b
#日志默认分页输出,--no-pager 改为正常的标准输出
journalctl --no-pager
#日志管理journalctl
#以 JSON 格式(单行)输出
journalctl -b -u nginx.service -o json
#以 JSON 格式(多行)输出,可读性更好
journalctl -b -u nginx.serviceqq -o json-pretty
#显示日志占据的硬盘空间
journalctl --disk-usage
#指定日志文件占据的最大空间
journalctl --vacuum-size=1G
#指定日志文件保存多久
journalctl --vacuum-time=1years

MySQL管理日志

实验1:rsyslog将日志记录于MySQL中

  • 实现此功能需要两台主机
    主机1:rsyslog服务器(IP: 172.20.54.1)
    主机2:mysql数据库(IP: 172.20.54.2)

1️⃣主机1安装mysql与rsyslog的接口

[root@Centos7 ~]# yum -y install rsyslog-mysql
[root@Centos7 ~]#  rpm -ql rsyslog-mysql
/usr/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
/ 把数据库创建脚本传给mysql服务器
[root@Centos7 ~]# scp /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql 172.20.54.2:/root

2️⃣主机2安装并配置数据库

[root@Centos7 ~]# yum -y install mariadb-server
[root@Centos7 ~]# systemctl start mariadb
[root@Centos7 ~]# mysql < mysql-createDB.sql 
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Syslog             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(none)]> SHOW TABLES FROM Syslog;
+------------------------+
| Tables_in_Syslog       |
+------------------------+
| SystemEvents           |
| SystemEventsProperties |
+------------------------+
2 rows in set (0.00 sec)
/ 创建授权用户
MariaDB [(none)]> GRANT ALL ON Syslog.* TO 'syslog'@'%' IDENTIFIED BY 'centos';
Query OK, 0 rows affected (0.00 sec)

3️⃣主机1配置rsyslog

  • 编辑/etc/rsyslog.conf文件
/ 载入mysql模块
$modload ommysql
/ 设置rules
local2.*                                               :ommysql:172.20.54.2,Syslog,syslog,centos

systemctl rstart rsyslog

4️⃣查看数据库

MariaDB [Syslog]> USE Syslog;
MariaDB [Syslog]> SELECT * FROM SystemEvents\G;
*************************** 1. row ***************************
                ID: 1
        CustomerID: NULL
        ReceivedAt: 2019-12-15 09:08:18
DeviceReportedTime: 2019-12-15 09:08:18
          Facility: 18
          Priority: 6
          FromHost: Centos7
           Message: this is good message
        NTSeverity: NULL
        Importance: NULL
       EventSource: NULL
         EventUser: NULL
     EventCategory: NULL
           EventID: NULL
   EventBinaryData: NULL
      MaxAvailable: NULL
         CurrUsage: NULL
          MinUsage: NULL
          MaxUsage: NULL
        InfoUnitID: 1
         SysLogTag: root:
      EventLogType: NULL
   GenericFileName: NULL
          SystemID: NULL
1 row in set (0.00 sec)

实验2:通过loganalyzer展示数据库中的日志

  • 本实验环境承接实验1,并且需要添加主机3用于通过web界面展示数据库的日志

  • 主机分工:
    主机1:rsyslog服务器(IP: 172.20.54.1)
    主机2:mysql数据库(IP: 172.20.54.2)
    主机3:apache httpd服务器,php,loganalyzer(IP: 172.20.54.3)

1️⃣主机3安装apache httpd, php

yum install httpd php-fpm php-mysqlnd php-gd
systemctl restart httpd

2️⃣主机3编译安装loganalyzer

tar xvf loganalyzer-4.1.5.tar.gz
cd loganalyzer-4.1.5
cp -r src/ /var/www/html/log     //只复制src子目录的文件至网页存放目录
cd /var/www/html/log/
touch config.php                 //准备安装配置文件
chmod 666 config.php

3️⃣配置loganalyzer

  • 浏览器登录http://172.20.54.3/log/,出现提示如下图
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值