数据挖掘-06-日志

  1. 1. 日志的挖掘与应用
    1. 1.1. 日志概念
      1. 1.1.1. 日志是什么
      2. 1.1.2. 日志能做什么
      3. 1.1.3. 日志处理
    2. 1.2. 产生日志
    3. 1.3. 传输日志
      1. 1.3.1. Syslog设施(Facility)
    4. 1.4. 储存日志
    5. 1.5. 日志分析
      1. 1.5.1. grep
      2. 1.5.2. awk
      3. 1.5.3. sed
      4. 1.5.4. head/tail

日志的挖掘与应用

日志概念

日志是什么

所谓日志(Log)是指系统所指定对象的某些操作和其操作结果按时间有序的集合。
日志数据的核心就是简单的日志消息。
日志数据可详细累出应用程序的信息、系统性能或用户活动等。
几乎所有的计算机相关的设备、系统、网络、应用都会产生日志。

日志能做什么

  • 故障排除
    日志可用于还原故障现场、梳理故障条例、分析故障根源和系统调试等;
  • 资源管理
    日志记录系统运行状态、软硬件状态、性能容量等资源使用情况信息;
  • 入侵检测
    主机日志(不同于NIDS日志)可用于入侵检测分析;
  • 取证审计
    各个行业都有审计安全的需求
  • 数据挖掘
    日志是数据挖掘的基础信息

日志处理

  • 产生日志:
    操作系统、数据库、中间件、应用、硬件设备等生成日志。
  • 传输日志:
    日志基于某种协议传输。如:SNMP、Syslog协议。
  • 存储日志:
    日志的存储和快速检索分析。
  • 分析日志:
    通过某种组合命令、日志工具或系统分析日志信息,挖掘日志“内涵”。

产生日志

绝大多数IT设备均产生日志,比如:
操作系统,如Linux,Windows等
硬件服务器,如PC server,打印机等
网络设备,如路由器,交换机等
安全设备,如防火墙,防病毒系统等
数据库,如Oracle,MySQL等
中间件,如Apache等

传输日志

日志传输是将日志消息从一个地方转移到另一地方的方式。
日志记录系统获取日志的方式分为两类:

  • 拉:
    应用程序从来源拉取日志消息。该方式一般基于C/S模型。通常以专有格式保存日志数据。
    例如:拉取CheckPoint防火墙日志。
  • 推:
    设备向日志记录系统推送日志数据,必须配备一个日志收集器接收消息。
    例如:Syslog、SNMP、Windows事件日志。

Syslog设施(Facility)

设施 设施码 描述
kern 0 内核信息
user 1 随机的用户日志消息
mail 2 邮件系统日志消息
daemon 3 系统守护进程日志消息
auth 4 安全管理日志消息
syslog 5 系统日志
lpr 6 打印信息
news 7 新闻组信息
uucp 8 由uucp生成的信息
cron 9 计划和任务信息
authpriv 10 私有的安全管理日志消息
ftp 11 ftp守护进程日志消息
NULL 12~15 保留为系统使用
NULL 16~23 保留为本地使用
级别 设施码 描述
emerg 0 该系统不可用
alert 1 需要立即被修改的条件
crit 2 关键事件
err 3 错误
warning 4 警告
notice 5 普通单重要的事件
info 6 有用的信息
debug 7 调试信息
  • Syslog动作
    信息发送的目的地
    /<filename>发送给日志文件的绝对路径
    @<host> 发送给远程syslog服务器IP或域名
    <user> 发送给指定的用户
    * 发送给所有用户

  • Syslog消息组成

PRI= Facility ×8+ Serverity (e.g.<30>)\mathrm{PRI}=\text { Facility } \times 8+\text { Serverity }(\mathrm{e} . \mathrm{g} .<30>)

 HEADER = 时间 + 主机名/IP \text { HEADER = 时间 }+\text { 主机名/IP }

MSG=TAG+ Content (e.g. auditd[1787]: The audit daemon is exiting) \mathrm{MSG}=\mathrm{TAG}+\text { Content (e.g. auditd[1787]: The audit daemon is exiting) }

  • Syslog客户端配置
    编辑syslog.conf(rsyslog.conf)文件
    vi /etc/syslog.conf(vi /etc/rsyslog.conf)
    去掉kern前面的 # 符号
    然后在文件中加入以下内容:
1
2
*.*   @192.168.186.211   
*.* /var/log/authlog

说明: *.*@之间为一个Tab。将设备产生的日志(类型为全部、级别为全部)发送到日志服务器192.168.186.211 和本地文件。

  • 总结
    推送(PUSH)技术是一种建立在客户服务器上的机制,就是由服务器主动将信息发往客户端的技术。同传统的拉(PULL)技术相比,最主要的区别在于推送(PUSH)技术是由服务器主动向客户机发送信息,而拉(PULL)技术则是由客户机主动请求信息。PUSH技术的优势在于信息的主动性和及时性。

储存日志

1
2
3
4
5
6
7
8
9
10
11
12
文本格式储存日志
- 占空间大
二进制格式储存日志
+ 占空间小
- 不方便查看
压缩文件格式储存日志
+ 占空间小
数据库储存日志
+ 方便查询,接口丰富
- 对磁盘的空间和性能有要求
Hadoop储存日志
+ 高可扩展性、低成本效益、灵活、处理快、容错高

NameNode和DataNode时HDFS的两个主要组件
NameNode负责管理存储在HDFS。上所有文件的元数据,它会确认客户端的请求,并记录下文件的名字和存储这个文件的DataNode集合。它把该信息存储在内存中的文件分配表里。

例如,客户端发送一个请求给NameNode,说它要将“abc.log”文件写入到HDFS。那么,其执行流程如下所示。具体为:

Step 1 :客户端发消息给NameNode,说要将“abc.log”文件写入。

Step 2 : NameNode发消息给客户端,叫客户端写到DataNode A、B和D,并直接联系DataNodeB。

Step 3 :客户端发消息给DataNodeB,叫它保存一份“abc.log "文件,并且发送一份副本给DataNodeA和DataNodeD。

Step 4 : DataNodeB发消息给DataNodeA,叫它保存一份“abc.log”文件,并且发送一份副本给DataNodeD。

Step 5: DataNodeA发消息给DataNodeD,叫它保存一份“abc.log”文件。

Step 6: DataNodeD发确认消息给DataNodeA。

Step 7: DataNodeA发确认消息给DataNodeB。

Step 8: DataNode B发确认消息给客户端,表示写入完成。

在分布式文件系统的设计中,挑战之一是如何确保数据的一致性。对于HDFS来说,直到所有要保存数据的DataNodes确认它们都有文件的副本时,数据才被认为写入完成。因此,数据一致性是在写的阶段完成的。一个客户端无论选择从哪个DataNode读取,都将得到相同的数据。

HDFS的读取步骤如下:

Step1 :客户端询问NameNode它应该从哪里读取文件。

Step2 : NameNode发送数据块的信息给客户端。数据块信息包含了保存着文件副本的DataNode的IP地址,以及DataNode在本地硬盘查找数据块所需要的数据块ID.

Step3 :客户端检查数据块信息,联系相关的DataNode,请求数据块。

Step4 : DataNode返回文件内容给客户端,然后关闭连接,完成读操作。

客户端并行从不同的DataNode中获取一个文件的数据块,然后联结这些数据块拼成完整的文件。

日志分析

日志信息应该包括:
WHO(涉及谁?)、WHAT(发生了什么?)、WHERE(发生在哪里?)、WHEN(发生在何时?)、WHY(为什么发生?)、HOW(如何发生?)

日志分析命令
grep更适合单纯的查找或匹配文本
awk 更适合格式化文本,对文本进行较复杂的格式处理
sed 更适合编辑文本

grep

  • grep常用参数
    -c 只输出匹配行的个数。
    -i 不区分大小写(只适用于单字符)。
    -h 查询多文件时不显示文件名。
    -l 查询多文件时只输出包含匹配字符的文件名。
    -n 显示匹配行及行号。
    -s 不显示不存在或无匹配文本的错误信息。
    -v 显示不包含匹配文本的所有行。
    --color:以特定颜色高亮显示匹配关键字

  • grep pattern正则常用参数
    ^ 锚定行的开始 如:^grep匹配所有以grep开头的行。
    \$ 锚定行的结束 如:grep\$匹配所有以grep结尾的行。
    . 匹配一个非换行符的字符 如:gr.p匹配gr后接一个任意字符,然后是p。
    * 匹配零个或多个先前字符 如:*grep匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
    [] 匹配一个指定范围内的字符,如[Gg]rep匹配Grep和grep。
    \< 从匹配正则表达式的行开始
    \> 从匹配正则表达式的行结束

awk

  • awk 常用变量
    FS:输入字符风隔符,默认为空白字符
    OFS:输出字段分隔符,默认为空白 字符
    RS:输入记录分隔符(输入换行符),指定输入时的额换行符
    NF:number of Field,当前行的字段的个数,字段数量
    NR:行号,当前处理的文本行的行号
    FNR:各文件分别计数的行号
    FILENAME:当前文件名
    ARGC:命令行参数的个数
    ARGV:数组,保存的是命令行所给定的各参数

  • awk 常用运算符
    = += -= *= /= %= ^= **=赋值
    ||, && 逻辑或, 逻辑与
    ~ ~!匹配正则表达式和不匹配正则表达式
    < <= > >= != ==关系运算符
    + -加,减
    * / &乘,除与求余
    + - !一元加,减和逻辑非
    ^ ***求幂
    ++ --增加或减少,作为前缀或后缀

sed

  • sed 常用参数
    –n 特殊处理某一行
    –i 修改更改文件内容
    –s 替换取代
    –P 列印
    –d 删除

  • sed 常用命令
    a\: 新增,a的后面可以接字符串,这些字符串会出现在新一行
    i\: 插入,i的后面可以接字符串,这些字符串会出现在目前行的前一行
    c\: 替换,c的后面可以接字符串,这些字符串可以替换n1,n2之间的行
    d: 删除
    p: 打印,通常与sed -n一起使用
    s: 可以部分替换,s动作可以搭配正则表达式。 如: 1,20s/old/new/g

head/tail

head用于查看具体文件的前面几行内容
tail用于查看具体文件的后面几行内容
head –n 10 /etc/passwd | grep nologin