日志分析_日志分析工具 - CSDN
精华内容
参与话题
  • 日志分析方法

    千次阅读 2018-06-03 21:32:52
    日志分析方法 日志分析方法 分析方法: 1.特征字符分析(Signature-based): 2.访问频率分析(Frequency analysis) 1.漏洞扫描检测: 2.暴力破解检测: 3.webshell 检测 难点: 风险评估模型: 参考: ...

    日志分析方法


    分析方法:

    1.特征字符分析(Signature-based):

    在日志中查找已知的漏洞特征,去发现黑客攻击行为, 是最简单的方法。

    2.访问频率分析(Frequency analysis)

    在黑客攻击过程中,需要对系统进行各种特定的访问,这些访问与正常用户访问有很大差别, 每种攻击行为都有不同的特征。

    通过对大量用户访问数据的挖掘,可以发现这些异常访问行为。

    1.漏洞扫描检测:

    黑客使用漏洞扫描器对 Web 应用进行扫描,可以用匹配 User-Agent 特征的方式进行检测。如果自定义扫描器的 User-Agent,这个方法的效果可能会不好。

    但可匹配扫描器扫描的行为

    • 访问目标离散
    • 来源地址相对固定
    • 访问结果大多数失败

    根据这些特征对 Web 访问日志进行分析,即可提取出来可疑的扫描行为。

    2.暴力破解检测:

    暴力破解密码的特征是

    • 相对固定的来源地址
    • 对登录URL短时间内高频率发起请求

    与漏洞扫描的区别主要是目标 URL 固定。

    3.webshell 检测

    如果黑客发现系统漏洞,并且利用漏洞获得上传权限,会向系统 上传 webshell。

    webshell 是一种后门程序,此程序由脚本语言编写, 可以在 Web 服务器上运行,攻击者可以通过网页执行系统命令,读写 系统文件。

    从访问行为的角度看,webshell 通常

    • 只有攻击者访问
    • 来源地址相对固定
    • 访问时间相对集中
    • 无内嵌其他页面

    通过这些特 征即可提取出可疑文件,再通过人工确认的方式,检测出 webshell。


    难点:

    • 1.日志中POST数据是不记录的,所以攻击者如果找到的漏洞点为POST请求,那么刚刚上面的注入请求就不会在日志中体现

    • 2.状态码虽然表示了响应状态,但是存在多种不可信情况,如服务器配置自定义状态码。

      • 如在我经验中,客户服务器配置网站应用所有页面状态码皆为200,用页面内容来决定响应,或者说服务器配置了302跳转,用302到一个内容为“不存在页面”(你可以尝试用curl访问http://www.baidu.com/test.php看看响应体)
    • 3.攻击者可能使用多个代理IP,假如我是一个恶意攻击者,为了避免日后攻击被溯源、IP被定位,会使用大量的代理IP从而增加分析的难度(淘宝上,一万代理IP才不到10块钱,就不说代理IP可以采集免费的了)
      如果一个攻击者使用了大量不同的IP进行攻击,那么使用上面的方法可能就无法进行攻击行为溯源

    • 4.无恶意webshell访问记录,刚才我们采用的方法是通过“webshell”这个文件名从日志中找到恶意行为,如果分析过程中我们没有找到这么一个恶意webshell访问,又该从何入手寻找攻击者的攻击路径呢?

    • 5.分析过程中我们还使用恶意行为关键字来对日志进行匹配,假设攻击者避开了我们的关键字进行攻击?比如使用了各种编码,16进制、Base64等等编码,再加上攻击者使用了代理IP使我们漏掉了分析中攻击者发起的比较重要的攻击请求

    • 6.APT攻击,攻击者分不同时间段进行攻击,导致时间上无法对应出整个攻击行为

    • 7.日志数据噪声(这词我也不知道用得对不对)上文提到过,攻击者可能会使用扫描器进行大量的扫描,此时日志中存在大量扫描行为,此类行为同样会被恶意行为关键字匹配出,但是此类请求我们无法得知是否成功扫描到漏洞,可能也无法得知这些请求是扫描器发出的,扫描器可使用代理IP、可进行分时策略可伪造客户端特征可伪造请求来源伪造成爬虫。此时我们从匹配出的海量恶意请求中很难得出哪些请求攻击成功了


    风险评估模型:

    在这些 Web 日志中提取出动态页面的动态交互参数,
    通过字符串截取或正则匹配的方式便能完成这样的需求。在获得了交互参数后,
    统计这些参数中含有某种类型攻击的关键词的数量,以及
    这些关键词占总提交参数的百分比,
    - 在Web日志中


    参考:

    携程ELK日志分析平台深耕之路

    B站日志系统的前世今生

    展开全文
  • 日志分析及管理

    2019-03-17 16:05:56
    一、日志的作用 二、rsyslog服务介绍 三、日志文件的存放位置 四、常见日志文件内容介绍 五、用户验证相关日志 六、常用日志操作命令 七、日志管理策略 八、日志转储功能(logrotate) 一、日志的作用 用于记录系统...

    一、日志的作用
    二、rsyslog服务介绍
    三、日志文件的存放位置
    四、常见日志文件内容介绍
    五、用户验证相关日志
    六、常用日志操作命令
    七、日志管理策略
    八、日志转储功能(logrotate)

    一、日志的作用
    用于记录系统、程序运行中发生的各种事件,有助于定位问题的根本原因
    通过阅读日志,有助于诊断和解决系统故障
    操作日志也重要
    要会看日志
    如何用日志呢?如下所示:
    在这里插入图片描述
    Linux系统日志目录:/var/log/messages,一行一条日志记录,如图所示:
    在这里插入图片描述
    日志文件的分类
    内核及系统日志
    由系统服务rsyslog统一进行管理,日志格式基本相似,日志格式可以自己定义,也 可以由rsyslog统一管理,由rsyslog统一管理的日志格式基本类似
    用户日志
    记录系统用户登录及退出系统的相关信息
    程序日志
    由各种应用程序独立管理的日志文件,记录格式不统一

    Rsyslog记录日志的一般格式

    二、rsyslog服务介绍
    在这里插入图片描述
    Rsyslog系统日志由系统服务 rsyslog统一管理
    软件包:rsyslog-5.8.10-8
    主要程序:/sbin/rsyslogd
    配置文件:/etc/rsyslog.conf,#注释,通过修改配置文件可以改变工作方式

    要使用rsyslog必须先安装rsyslog,检测是否有安装包:rpm -q rsyslog,看一下当前版本:rsyslogd -v,如下所示:
    

    [root@centos—text ~]# rpm -q rsyslog
    rsyslog-5.8.10-10.el6_6.x86_64
    [root@centos—text ~]# rsyslogd -v
    rsyslogd 5.8.10, compiled with:
    FEATURE_REGEXP: Yes
    FEATURE_LARGEFILE: No
    GSSAPI Kerberos 5 support: Yes
    FEATURE_DEBUG (debug build, slow code): No
    32bit Atomic operations supported: Yes
    64bit Atomic operations supported: Yes
    Runtime Instrumentation (slow code): No

    See http://www.rsyslog.com for more information.
    [root@centos—text ~]#
    也可以通过查看是否有rsyslog的进程查看,如下:
    [root@centos—text ~]# ps -ef | grep rsyslog
    root 1241 1 0 Nov10 ? 00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    root 15812 15068 0 15:46 pts/0 00:00:00 grep rsyslog
    [root@centos—text ~]#

    查看配置文件如下:
    [root@centos—text ~]# cat /etc/rsyslog.conf
    rsyslog v5 configuration file

    For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
    If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html

    MODULES

    $ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
    KaTeX parse error: Expected 'EOF', got '#' at position 18: …dLoad imklog #̲ provides kerne…ModLoad immark # provides --MARK-- message capability

    Provides UDP syslog reception
    #KaTeX parse error: Expected 'EOF', got '#' at position 15: ModLoad imudp #̲UDPServerRun 514

    Provides TCP syslog reception
    #KaTeX parse error: Expected 'EOF', got '#' at position 15: ModLoad imtcp #̲InputTCPServerRun 514

    GLOBAL DIRECTIVES

    Use default timestamp format
    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

    File syncing capability is disabled by default. This feature is usually not required,
    not useful and an extreme performance hit
    #$ActionFileEnableSync on

    Include all config files in /etc/rsyslog.d/
    $IncludeConfig /etc/rsyslog.d/*.conf

    RULES ####//规则主要在这里,规则记录了各种日志如何处理

    Log all kernel messages to the console.
    Logging much else clutters up the screen.
    #kern.* /dev/console

    #Log anything (except mail) of level info or higher.
    #Don’t log private authentication messages!
    *.info;mail.none;authpriv.none;cron.none /var/log/messages

    #The authpriv file has restricted access.
    authpriv.* /var/log/secure

    Log all the mail messages in one place.
    mail.* -/var/log/maillog

    Log cron stuff
    cron.* /var/log/cron

    Everybody gets emergency messages
    *.emerg *

    Save news errors of level crit and higher in a special file.
    uucp,news.crit /var/log/spooler

    Save boot messages also to boot.log
    local7.* /var/log/boot.log

    begin forwarding rule

    The statement between the begin … end define a SINGLE forwarding
    rule. They belong together, do NOT split them. If you create multiple
    forwarding rules, duplicate the whole block!
    Remote Logging (we use TCP for reliable delivery)

    An on-disk queue is created for this action. If the remote host is

    down, messages are spooled to disk and sent when it is up again.
    #KaTeX parse error: Expected 'EOF', got '#' at position 32: …ar/lib/rsyslog #̲ where to place…ActionQueueFileName fwdRule1 # unique name prefix for spool files
    #KaTeX parse error: Expected 'EOF', got '#' at position 30: …DiskSpace 1g #̲ 1gb space limi…ActionQueueSaveOnShutdown on # save messages to disk on shutdown
    #KaTeX parse error: Expected 'EOF', got '#' at position 30: …e LinkedList #̲ run asynchrono…ActionResumeRetryCount -1 # infinite retries if host is down

    remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
    #. @@remote-host:514

    end of the forwarding rule ###
    [root@centos—text ~]#
    在配置文件中,以#开头的都是注释,配置文件中设置日志处理的规则,规则写的格式如下:
    在这里插入图片描述

    配置文件:/etc/rsyslog.conf语法
    日志设备(类型).(连接符号)日志级别 日志处理方式(action)
    日志设备(可以理解为日志类型):
    在这里插入图片描述

    日志级别
    NONE: 什么都不记录
    EMERG(紧急):会导致主机系统不可用的情况
    ALERT(警告):必须马上采取措施解决的问题
    CRIT(严重):比较严重的情况
    ERR(错误):运行出现错误
    WARNING(提醒):可能会影响系统功能的事件
    NOTICE(注意):不会影响系统但值得注意
    NFO(信息):一般信息
    DEBUG(调试):程序或系统调试信息等
    从下到上,级别从低到高,记录的信息越来越少

    连接符号
    . :记录大于等于后面的级别日志
    .=:只记录等于后面的级别日志
    .!=:只记录不等于后面的级别日志
    日志处理方式(即将日志如何处理)
    本地文件:通常就是文件的绝对路径
    打印机:例如 /dev/lp0 这个打印机装置
    用户名称:显示给用户
    远程主机:例如 @202.100.100.1
    *:所有在线的用户
    系统日志文件
    系统日志保存位置
    默认位于:/var/log 目录下
    主要日志文件介绍
    内核及公共消息日志:/var/log/messages
    计划任务日志:/var/log/cron
    系统引导日志:/var/log/dmesg
    邮件系统日志:/var/log/maillog
    程序日志文件
    由相应的应用程序独立进行管理
    Web服务:/var/log/httpd/
    access_log、error_log
    代理服务:/var/log/squid/
    access.log、cache.log、squid.out、store.log
    FTP服务:/var/log/xferlog
    分析工具
    文本查看、grep过滤检索、Webmin管理套件中查看
    awk、sed等文本过滤、格式化编辑工具
    Webalizer、Awstats等专用日志分析工具
    用户日志文件(不能通过cat查看,要通过工具查看)
    保存了用户登录、退出系统等相关信息
    /var/log/lastlog:最近的用户登录事件
    /var/log/wtmp:用户登录、注销及系统开、关机事件
    /var/run/utmp:当前登录的每个用户的详细信息
    /var/log/secure:与用户验证相关的安全性事件
    用户登录分析
    who、w、users、last、ac、lastlog
    日志命令
    主动记录日志工具
    logger:从命令行直接向系统日志文件写入一行信息,logger是记录(产生)日志 的工具,rsyslog是处理日志的。
    Logger如何用呢?
    [root@centos—text ~]# echo “123456” | logger -it “test” -p authpriv.info
    [root@centos—text ~]# tail /var/log/secure
    Nov 12 21:57:08 centos—text sshd[12193]: pam_unix(sshd:session): session closed for user root
    Nov 13 04:13:48 centos—text sshd[13939]: Accepted password for root from 172.16.2.17 port 56389 ssh2
    Nov 13 04:13:48 centos—text sshd[13939]: pam_unix(sshd:session): session opened for user root by (uid=0)
    Nov 13 11:03:01 centos—text sshd[13939]: Received disconnect from 172.16.2.17: 0:
    Nov 13 11:03:01 centos—text sshd[13939]: pam_unix(sshd:session): session closed for user root
    Nov 13 11:03:31 centos—text sshd[15064]: Accepted password for root from 172.16.2.17 port 49232 ssh2
    Nov 13 11:03:31 centos—text sshd[15064]: pam_unix(sshd:session): session opened for user root by (uid=0)
    Nov 13 16:18:11 centos—text sshd[15911]: Accepted password for root from 172.16.2.17 port 53059 ssh2
    Nov 13 16:18:11 centos—text sshd[15911]: pam_unix(sshd:session): session opened for user root by (uid=0)
    Nov 13 16:20:49 centos—text test[15945]: 123456
    [root@centos—text ~]#
    -p指定如何根据规则处理此条日志
    -it指定第三列子系统名
    一个日志发过来后,会匹配每一个规则,如果匹配成功就会按相应的规则处理一遍。

    修改/etc/rsyslog.conf配置文件后,要重启rsyslog后新的配置文件才会有效,service rsyslog restart。重启就会重新加载新的配置文件,就可加载到新的配置文件了。

    selinux 用来加强Linux的一个模块,该模块会让好多功能不能实现,一般我们会关掉它。网络安全方面会通过其他的模块实现。
    [root@centos—text ~]# sestatus -v
    SELinux status: enabled
    SELinuxfs mount: /selinux
    Current mode: enforcing
    Mode from config file: enforcing
    Policy version: 24
    Policy from config file: targeted

    Process contexts:
    Current context: unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    Init context: system_u:system_r:init_t:s0
    /sbin/mingetty system_u:system_r:getty_t:s0
    /usr/sbin/sshd system_u:system_r:sshd_t:s0-s0:c0.c1023

    File contexts:
    Controlling term: unconfined_u:object_r:user_devpts_t:s0
    /etc/passwd system_u:object_r:etc_t:s0
    /etc/shadow system_u:object_r:shadow_t:s0
    /bin/bash system_u:object_r:shell_exec_t:s0
    /bin/login system_u:object_r:login_exec_t:s0
    /bin/sh system_u:object_r:bin_t:s0 -> system_u:object_r:shell_exec_t:s0
    /sbin/agetty system_u:object_r:getty_exec_t:s0
    /sbin/init system_u:object_r:init_exec_t:s0
    /sbin/mingetty system_u:object_r:getty_exec_t:s0
    /usr/sbin/sshd system_u:object_r:sshd_exec_t:s0
    [root@centos—text ~]#

    关掉selinux如下:
    修改配置文件,
    [root@centos—text ~]# vim /etc/selinux/config
    #This file controls the state of SELinux on the system.
    SELINUX= can take one of these three values:
    enforcing - SELinux security policy is enforced.
    permissive - SELinux prints warnings instead of enforcing.
    disabled - No SELinux policy is loaded.
    SELINUX=disabled//改为disabled
    SELINUXTYPE= can take one of these two values:
    targeted - Targeted processes are protected,
    mls - Multi Level Security protection.
    SELINUXTYPE=targeted
    然后重启内核,即重启计算机reboot

    日志管理策略
    A.及时作好备份和归档
    B.控制日志访问权限
    日志中可能会包含各类敏感信息,如账户、口令等
    C.集中管理日志
    使用日志服务器便于日志的统一收集、整理和分析
    杜绝日志信息的意外丢失、恶意篡改或删除

    应用示例:
    调整rsyslog服务设置,建立集中管理的日志服务器
    将客户机B中所有日志消息,自动发送到服务器A的日志文件中(客户机可能会有多个)

    在这里插入图片描述

    前提他们都有rsyslog,客户机也要对日志进行处理,服务器也会处理接收到的日志

    这个过程至少要有两台计算机,一个服务器,一个客户机

    A.在服务器上配置:172.16.50.59 172.16.3.37 要关闭防火墙service iptables stop
    1、修改/etc/rsyslog.conf文件,把以下2项的注释取消
    $ModLoad imudp
    $UDPServerRun 514 开放514端口 netstat -anp | grep :514查看有没有514端口
    例如:加一行*.* /opt/all.log
    2、重启rsyslog服务
    service rsyslog restart

    [root@rehl6–text ~]# vim /etc/rsyslog.conf

    rsyslog v5 configuration file

    For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
    If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html

    MODULES ####

    $ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
    KaTeX parse error: Expected 'EOF', got '#' at position 18: …dLoad imklog #̲ provides kerne…ModLoad immark # provides --MARK-- message capability

    #Provides UDP syslog reception
    $ModLoad imudp
    $UDPServerRun 514

    Provides TCP syslog reception
    #KaTeX parse error: Expected 'EOF', got '#' at position 15: ModLoad imtcp #̲InputTCPServerRun 514

    GLOBAL DIRECTIVES ####

    Use default timestamp format
    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

    File syncing capability is disabled by default. This feature is usually not required,
    not useful and an extreme performance hit
    #$ActionFileEnableSync on

    Include all config files in /etc/rsyslog.d/
    $IncludeConfig /etc/rsyslog.d/*.conf

    RULES ####

    Log all kernel messages to the console.
    Logging much else clutters up the screen.
    #kern.* /dev/console

    Log anything (except mail) of level info or higher.
    “/etc/rsyslog.conf” 80L, 2941C
    Log anything (except mail) of level info or higher.
    Don’t log private authentication messages!
    .info;mail.none;authpriv.none;cron.none /var/log/messages
    The authpriv file has restricted access.
    authpriv.
    /var/log/secure
    Log all the mail messages in one place.
    mail.* -/var/log/maillog

    Log cron stuff
    cron.* /var/log/cron

    Everybody gets emergency messages
    *.emerg *

    Save news errors of level crit and higher in a special file.
    uucp,news.crit /var/log/spooler

    Save boot messages also to boot.log
    local7.* /var/log/boot.log
    . /opt/all.log

    begin forwarding rule

    The statement between the begin … end define a SINGLE forwarding
    rule. They belong together, do NOT split them. If you create multiple
    forwarding rules, duplicate the whole block!
    Remote Logging (we use TCP for reliable delivery)

    An on-disk queue i
    [root@rehl6–text ~]# service rsyslog restart
    Shutting down system logger: [ OK ]
    Starting system logger: [ OK ]

    B.在客户机上配置:172.16.50.60 172.16.3.36 要关闭sestatus
    1、修改/etc/rsyslog.conf文件,在最后加一行,内容如下:
    . @服务器IP 例如:加一行 . @172.16.50.59
    一个@用UDP传输层协议 两个@用TCP传输层协议
    2、重启rsyslog服务
    service rsyslog restart

    [root@centos—text ~]# vim /etc/rsyslog.conf

    rsyslog v5 configuration file

    For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
    If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html

    MODULES ####

    $ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
    KaTeX parse error: Expected 'EOF', got '#' at position 18: …dLoad imklog #̲ provides kerne…ModLoad immark # provides --MARK-- message capability

    Provides UDP syslog reception
    #KaTeX parse error: Expected 'EOF', got '#' at position 15: ModLoad imudp #̲UDPServerRun 514

    Provides TCP syslog reception
    #KaTeX parse error: Expected 'EOF', got '#' at position 15: ModLoad imtcp #̲InputTCPServerRun 514

    GLOBAL DIRECTIVES ####

    Use default timestamp format
    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

    File syncing capability is disabled by default. This feature is usually not required,
    not useful and an extreme performance hit
    #$ActionFileEnableSync on

    Include all config files in /etc/rsyslog.d/
    $IncludeConfig /etc/rsyslog.d/*.conf

    RULES ####

    Log all kernel messages to the console.
    Logging much else clutters up the screen.
    #kern.* /dev/console

    Log anything (except mail) of level info or higher.
    Don’t log private authentication messages!
    *.info;mail.none;authpriv.none;cron.none /var/log/messages

    The authpriv file has restricted access.
    authpriv.* /var/log/secure
    Log all the mail messages in one place.
    mail.* -/var/log/maillog

    Log cron stuff
    cron.* /var/log/cron

    Everybody gets emergency messages
    *.emerg *

    Save news errors of level crit and higher in a special file.
    uucp,news.crit /var/log/spooler

    Save boot messages also to boot.log
    local7.* /var/log/boot.log
    . @172.16.3.37

    begin forwarding rule

    The statement between the begin … end define a SINGLE forwarding
    Remote Logging (we use TCP for reliable delivery)

    An on-disk queue is created for this action. If the remote host is
    down, messages are spooled to disk and sent when it is up again.
    #KaTeX parse error: Expected 'EOF', got '#' at position 32: …ar/lib/rsyslog #̲ where to place…ActionQueueFileName fwdRule1 # unique name prefix for spool files

    C.测试
    在客户机通过logger添加日志
    在服务器上查看日志

    日志转储功能
    系统时时刻刻都在产生日志,如果不及时清理,很快就会填满硬盘,但如果要手工清理,又很麻烦。这种情况下,logrotate 这个程序很好的完成这个任务。
    logrotate 用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大小,也可以根据天数来转储,这个过程一般通过crond进程来执行,logrotate 还可以用于压缩日志文件。
    Logrotate做的工作其实是重命名(mv),创建(touch)新文件(旧文件_日期),删除(rm)旧文件。

    logrotate的主配置文件:/etc/logrotate.conf
    主配置文件如下:
    [root@centos—text ~]# cat /etc/logrotate.conf
    see “man logrotate” for details
    rotate log files weekly
    Weekly //默认每周转储一次

    keep 4 weeks worth of backlogs
    rotate 4 //默认存储四个

    create new (empty) log files after rotating old ones
    create

    use date as a suffix of the rotated file
    Dateext //后缀

    uncomment this if you want your log files compressed
    #compress

    RPM packages drop log rotation information into this directory
    include /etc/logrotate.d //次要配置文件

    no packages own wtmp and btmp – we’ll rotate them here
    /var/log/wtmp { //存储文件格式如下:
    Monthly //
    create 0664 root utmp//
    minsize 1M//
    rotate 1//
    }//

    /var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
    }

    system-specific logs may be also be configured here.
    [root@centos—text ~]#

    主要参数:
    参数 功能
    compress 通过gzip 压缩转储以后的日志
    nocompress 不需要压缩时,用这个参数
    copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
    nocopytruncate 备份日志文件但是不截断
    create mode owner group 转储文件,使用指定的文件模式创建新 的日志文件
    nocreate 不建立新的日志文件
    delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
    nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
    errors address 专储时的错误信息发送到指定的Email 地址
    ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
    notifempty 如果是空文件的话,不转储
    mail address 把转储的日志文件发送到指定的E-mail 地址
    nomail 转储时不发送日志文件
    olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
    noolddir 转储后的日志文件和当前日志文件放在同一个目录下
    prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
    postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
    daily 指定转储周期为每天
    weekly 指定转储周期为每周
    monthly 指定转储周期为每月
    rotate count(数字) 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
    tabootext [+] list 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig .rpmsave
    size size( 数字和单位) 当日志文件到达指定的大小时才转储,可以指定bytes(缺省)以及KB(sizek)或者MB (sizem).

    Logrotate的次要配置文件:/etc/logrotate.d/*

    次要配置文件其中之一如下:
    [root@centos—text ~]# cd /etc/logrotate.d/
    [root@centos—text logrotate.d]# ls
    ConsoleKit cups dracut mcelog numad psacct sssd syslog yum
    [root@centos—text logrotate.d]# cat yum
    /var/log/yum.log {
    missingok
    notifempty
    yearly
    create 0600 root root
    }[root@centos—text logrotate.d]#

    每个文件代表一种日志的配置
    在这里插入图片描述
    也可以在次要配置文件目录中创建新的配置文件,格式和其他的保持一致即可,例如创建一个新的配置文件如下:
    172.16.3.37[root@rehl6–text logrotate.d]# vim log.all
    [root@rehl6–text logrotate.d]# cat log.all
    /opt/all.log{
    daily
    size 10k
    rotate 3
    }
    [root@rehl6–text logrotate.d]#
    然后172.16.3.36[root@centos—text ~]# echo “123456” | logger -it “3.37” -p local2.info //多次执行这个,使文件大小达到10k
    然后转储172.16.3.37[root@rehl6–text logrotate.d]# logrotate /etc/logrotate.conf
    可以看到变化,有了一个新的文件后缀的那个
    172.16.3.37[root@rehl6–text opt]# ll
    total 160
    -rw------- 1 root root 0 Jan 12 20:33 all.log
    -rw------- 1 root root 158175 Jan 12 20:31 all.log-20190112
    drwxr-xr-x. 2 root root 4096 Mar 11 2015 rh
    然后172.16.3.36[root@centos—text ~]# echo “123456” | logger -it “3.37” -p local2.info //多次执行这个,使文件再次增大
    但是文件再次达到10k,也不会创建新的文件了,这种情况下,重启rsyslog即可
    172.16.3.37[root@rehl6–text opt]# service rsyslog restart
    Shutting down system logger: [ OK ]
    Starting system logger: [ OK ]
    [root@rehl6–text opt]#
    然后172.16.3.36[root@centos—text ~]# echo “123456” | logger -it “3.37” -p local2.info //多次执行这个,使文件再次增大
    172.16.3.37[root@rehl6–text opt]# ll
    total 164
    -rw------- 1 root root 1355 Jan 12 20:40 all.log
    -rw------- 1 root root 158395 Jan 12 20:39 all.log-20190112
    drwxr-xr-x. 2 root root 4096 Mar 11 2015 rh
    [root@rehl6–text opt]#
    文件再次增大了,此时考虑不能一直手工重启rsyslog,且每次转储完都应该重启,所以将重启命令写入新的配置文件,
    172.16.3.37[root@rehl6–text logrotate.d]# cat log.all
    /opt/all.log{
    daily
    size 10k
    rotate 3
    postrotate
    service rsyslog restart
    endscript
    }
    [root@rehl6–text logrotate.d]#
    然后172.16.3.36[root@centos—text ~]# echo “123456” | logger -it “3.37” -p local2.info //多次执行这个,使文件再次增大
    然后看一下是否转储了,发现未转储,因为每天只转储一次
    172.16.3.37
    [root@rehl6–text opt]# ll
    total 164
    -rw------- 1 root root 2433 Jan 12 20:46 all.log
    -rw------- 1 root root 158395 Jan 12 20:39 all.log-20190112
    drwxr-xr-x. 2 root root 4096 Mar 11 2015 rh

    然后 172.16.3.37[root@rehl6–text opt]# logrotate -v /etc/logrotate.conf可以看到
    在这里插入图片描述
    说明已经存在,跳过了,如果还想转储可以改一下系统时间,如下:
    172.16.3.37[root@rehl6–text opt]# date
    Sat Jan 12 20:56:27 CST 2019
    [root@rehl6–text opt]# date -s “2019-1-13 10:00:00”
    Sun Jan 13 10:00:00 CST 2019
    [root@rehl6–text opt]# date
    Sun Jan 13 10:00:02 CST 2019
    [root@rehl6–text opt]#
    此时再去看一下有没有报哪个问题,发现没有了172.16.3.37[root@rehl6–text opt]# logrotate -v /etc/logrotate.conf
    rotating pattern: /opt/all.log 10240 bytes (3 rotations)
    empty log files are rotated, old logs are removed
    considering log /opt/all.log
    log needs rotating
    rotating log /opt/all.log, log->rotateCount is 3
    dateext suffix ‘-20190113’
    glob pattern ‘-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’
    renaming /opt/all.log to /opt/all.log-20190113
    creating new /opt/all.log mode = 0600 uid = 0 gid = 0
    running postrotate script
    Shutting down system logger: [ OK ]
    Starting system logger: [ OK ]

    然后,172.16.3.37[root@rehl6–text opt]# ll
    total 184
    -rw------- 1 root root 221 Jan 13 10:10 all.log
    -rw------- 1 root root 158395 Jan 12 20:39 all.log-20190112
    -rw------- 1 root root 17774 Jan 13 10:10 all.log-20190113
    drwxr-xr-x. 2 root root 4096 Mar 11 2015 rh
    [root@rehl6–text opt]#
    会发现多了一个13结尾的
    再写入发现往新的文件写了。
    可以再次改时间转储,会发现转储文件最多有3个,因为设置的最多为3个,大于三个就删除了。

    日志转储
    logrotate -v /etc/logrotate.conf //转储主配置文件即可,因为主配置文件包括次要配置文件
    -f:强制转储
    -v:显示具体信息
    重启rsyslog :service rsyslog restart

    [root@localhost ~]# cat /etc/logrotate.d/syslog
    /var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
    sharedscripts
    postrotate
    /bin/kill -HUP cat /var/run/syslogd.pid 2> /dev/null 2> /dev/null || true
    /bin/kill -HUP cat /var/run/rsyslogd.pid 2> /dev/null 2> /dev/null || true
    endscript
    }

    展开全文
  • 日志分析方法概述

    万次阅读 2016-08-22 15:09:56
    注:写得有点乱,但目前市面上这...日志在计算机系统中是一个非常广泛的概念,任何程序都有可能输出日志:操作系统内核、各种应用服务器等等。日志的内容、规模和用途也各不相同,很难一概而论。 本文讨论的日志处理方

    注:写得有点乱,但目前市面上这方面内容的确不多,mark一下~
    http://blog.csdn.net/pkueecser/article/details/9569251

    大数据应用--系统监控与日志分析

    http://wenku.baidu.com/link?url=8CJ-URMjVTVaw3GM1AZ2w9A7V0CIeRz3dx7xvysILLk6IdWpJGT889gQ7-824G4hAK-T2tdqZY1Lo6CEN1hgqHQNlHhVFykWJ_9XQW6EN5K
    大数据日志分析产品(电商方向)
    https://www.sensorsdata.cn/manual/event_ana.html

    =============

    日志在计算机系统中是一个非常广泛的概念,任何程序都有可能输出日志:操作系统内核、各种应用服务器等等。日志的内容、规模和用途也各不相同,很难一概而论。

    本文讨论的日志处理方法中的日志,仅指Web日志。其实并没有精确的定义,可能包括但不限于各种前端Web服务器——apache、lighttpd、tomcat等产生的用户访问日志,以及各种Web应用程序自己输出的日志。

    在Web日志中,每条日志通常代表着用户的一次访问行为,例如下面就是一条典型的apache日志:

    211.87.152.44 – - [18/Mar/2005:12:21:42 +0800] “GET / HTTP/1.1″ 200 899 “http://www.baidu.com/” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Maxthon)”

    从上面这条日志中,我们可以得到很多有用的信息,例如访问者的IP、访问的时间、访问的目标网页、来源的地址以及访问者所使用的客户端的UserAgent信息等。如果需要更多的信息,则要用其它手段去获取:例如想得到用户屏幕的分辨率,一般需要使用js代码单独发送请求;而如果想得到诸如用户访问的具体新闻标题等信息,则可能需要Web应用程序在自己的代码里输出。

    为什么要分析日志

    毫无疑问,Web日志中包含了大量人们——主要是产品分析人员会感兴趣的信息,最简单的,我们可以从中获取网站每类页面的PV值(PageView,页面访问量)、独立IP数(即去重之后的IP数量)等;稍微复杂一些的,可以计算得出用户所检索的关键词排行榜、用户停留时间最高的页面等;更复杂的,构建广告点击模型、分析用户行为特征等等。

    既然这些数据是如此的有用,那么当然已经有无数现成的工具可以帮助我们来分析它们,例如awstats、Webalizer,都是专门用于统计分析Web服务器日志的免费程序。

    另外还有一类产品,它们不分析直接日志,而是通过让用户在页面中嵌入js代码的方式来直接进行数据统计,或者说我们可以认为它是直接让日志输出到了它们的服务器。典型的代表产品——大名鼎鼎的Google Analytics,另外还有国内的cnzz、百度统计等。

    很多人可能会说,既然如此,我们为什么还需要自己来分析日志,有必要吗?当然有。我们的用户(产品分析人员)需求是无穷尽的,上面说的这几类工具虽然很好很强大,但显然没办法满足全部的需求。

    无论是本地分析的工具,还是在线的分析服务,它们虽然提很丰富的的统计分析功能,可以做一定程度的配置,但是依然很有限的。要进行稍复杂点的分析,或者要做基于日志的数据挖掘,依然需要自己来完成。

    另外绝大多数日志分析工具都是只能用于单机的,数据量稍大就没辙了。同时那些提供在线分析的服务对于单个站点通常也都有最大流量的限制——这是很容易理解的,他们也需要考虑服务器的负载。

    所以,很多时候还是得靠自己。

    怎么进行日志分析

    这并不是一个简单的问题。即使我们把“日志”限定为Web日志,依然包含了成千上万种可能的格式和数据,而是“分析”更是难以定义,也许是简单的统计值的计算,也许是复杂的数据挖掘算法。

    下面并不打算讨论这些复杂的问题,而只是笼统的讨论如何构建进行日志分析工作的基础。有了这些基础会让基于日志的简单统计分析变得很简单,并让复杂的分析挖掘等变得可行。

    少量数据的情况

    先考虑最简单的情况,在数据规模比较小的时候,也许是几十MB、几百MB或者几十GB,总之就是在单机处理尚能忍受的时候。一切都很好办,现成的各种Unix/Linux工具——awk、grep、sort、join等都是日志分析的利器,如果仅仅是想知道某个页面的PV,一个wc+grep就能搞定。如果有稍复杂的逻辑,那就使用各种脚本语言,尤其是perl,配合伟大的正则表达式,基本就可以解决所有的问题。

    例如,我们想从上面提到的apache日志中得到访问量最高前100个IP,实现很简单:

    cat logfile | awk ‘{a[$1]++} END {for(b in a) print b”\t”a[b]}’|sort -k2 -r|head -n 100

    不过当我们需要频繁去分析日志的时候,上面的做法在一段时间之后可能就会让我们头疼如何进行各种日志文件、用于分析的脚本文件、crontab文件等等的维护,并且可能会存在大量重复的代码来做数据格式的解析和清洗,这个时候也许就需要更合适的东西,比如——数据库。

    当然,要使用数据库来进行日志分析还是需要一些代价的,最主要的就是如何将各种异构的日志文件导入的数据库中——这个过程通常称为ETL(Extraction-Transformation-Loading)。幸好依然有各种现成的开源、免费的工具来帮助我们做这件事情,并且在日志种类不太多的时候,自己写几个简单的脚本来完成这项工作也并不困难。例如可以将上面的日志去掉不必要的字段,然后导入如下的数据库中:

    现在需要考虑一下用什么数据库来存储这些数据。MySQL是一个很经典的开源数据库,它的传统引擎(MyISAM或者InnoDB,行存储)也许并不非常的适合日志数据的存储,但是在小数据量的时候还是很够用的。而且,在这方面现在已经有了更好的选择,例如开源且免费的Infobright、Infinidb,都是专门为数据仓库应用而进行了优化的数据引擎,采用列存储,有良好的数据压缩,处理几百GB的数据基本上不是问题。

    使用数据库的好处之一就是,伟大的SQL可以帮我们很简单的完成绝大部分的统计分析工作——PV只需要SELECT+COUNT,计算搜索词排行只需要SELECT+COUNT+GROUP+ORDER+LIMIT。此外,数据库本身的结构化存储模式也让日志数据的管理变的更简单,减少运维代价。

    同样还是上面的那个例子,简单的一个SQL就可以搞定:

    SELECT * FROM (SELECT ip, COUNT(*) AS ip_count FROM apache_log GROUP BY ip) a ORDER BY ip_count DESC LIMIT 100

    至于性能问题,数据库的索引和各种优化机制通常会让我们的统计分析工作变得更快,并且上面提到的Infobright和Infinidb都专门为类似SUM、COUNt之类的聚集应用做了优化。当然也不是绝对的会快,例如在数据库中进行LIKE操作,通常会比grep一个文件还要慢很多。

    更进一步的,使用基于数据库的存储,可以很容易的进行OLAP(联机分析处理)应用,从日志中挖掘价值会变的更加简单。

    更多的数据怎么办

    一个好的数据库似乎会让事情变的很简单,但是别忘了前面提到的都是单机数据库。一台单机在存储容量、并发性上毫无疑问都是有很大限制的。而日志数据的特点之一就是随时间持续增长,并且由于很多分析过程往往需要历史数据。短时间内的增长也许可以通过分库、分表或者数据压缩等来解决,不过很显然并不是长久之计。

    想要彻底解决数据规模增长带来的问题,很自然的会想到使用分布式技术,结合上面的结论,也许使用某个分布式数据库是一个好选择,那么对最终用户就可以完全透明了。这个的确是很理想的情况,不过现实往往是残酷的。

    首先,实现比较完美的分布式数据库(受限于CAP原则)是一个非常复杂的问题,因此在这里并不像单机数据库那样,有那么多开源的好东西可以用,甚至于商用的也并不是太多。当然,也并非绝对,如果有钱,还是可以考虑一下Oracle RAC、Greenplum之类东西。

    其次,绝大多数分布式数据库都是NoSQL的,所以想继续用上SQL的那些优点基本上是没指望,取而代之的都是一些简单、难以使用的接口。单从这点看来,使用这些数据库的价值已经降低很多了。

    所以,还是先现实一点,先退一步考虑如何解决的超大规模的日志的分析问题,而不是想如何让它变的像在小数据规模时那样简单。单单想做到这点,目前看来并不是太难,并且依然有免费的午餐可以吃。

    Hadoop是伟大的Apache基金会下面的一套分布式系统,包括分布式文件系统(HDFS)、MapReduce计算框架、HBase等很多组件——这些基本都是Google的GFS/MapReduce/BigTable的克隆产品。

    Hadoop经过数年的发展,目前已经很成熟了,尤其是其中的HDFS和MapReduce计算框架组件。数百台机器的集群已经被证明可以使用,可以承担PB级别的数据。

    Hadoop项目中的HBase是一个按列存储的NoSQL分布式数据库,它提供的功能和接口都非常简单,只能进行简单的K-V查询,因此并不直接适用于大多数日志分析应用。所以一般使用Hadoop来做日志分析,首先还是需要将日志存储在HDFS中,然后再使用它提供的MapReduce API编写日志分析程序。

    MapReduce是一种分布式编程模型,并不难学习,但是很显然使用它来处理日志的代价依然远大于单机脚本或者SQL。一个简单的词频统计计算可能都需要上百代码——SQL只需要一行,另外还有复杂的环境准备和启动脚本。

    例如同样还是上面的例子,实现就要复杂的多,通常需要两轮MapReduce来完成。首先要在第一轮的mapper中计算部分ip的访问次数之和,并以ip为key输出:

    //遍历输入,并聚合结果

    foreach(record in input) {

    ip = record.ip;

    dict[ip]++;

    }

    //用emit输出,第一个参数为key,用于reduce的分发

    foreach(<ip, count> in dict) {

    emit(ip, count);

    }

    然后在第一轮的reduce中就可以得到每个ip完整的计数,可以顺便排个序,并且只保留前100个。

    count = 0;

    //对于每个key(ip),遍历所有的values(count),并累加

    while(input.values.hasNext()) {

    count += input.values.next();

    }

    //插入到大小为100的堆中

    heap_insert(input.key, count);

    在reduce结束的时候输出:

    //输出当前reduce中count最高的100个ip

    foreach(<ip, count> in dict) {

    emit(ip, count);

    }

    由于reduce一般会有很多个,所以最后还需要将所有reduce的输出进行合并、再排序,并得到最终的前100个IP以及对应的访问量。

    所以,使用Hadoop来做日志分析很显然不是一件简单事情,它带来了很多的额外的学习和运维成本,但是至少,它让超大规模的日志分析变成了可能。

    怎样变得更简单

    在超大规模的数据上做任何事情都不是一件容易的事情,包括日志分析,但也并不是说分布式的日志分析就一定要去写MapReduce代码,总是可以去做进一步的抽象,在特定的应用下让事情变得更简单。

    也许有人会很自然的想到如果能用SQL来操作Hadoop上的数据该有多好。事实上,不仅仅只有你一个人会这么想,很多人都这么想,并且他们实现了这个想法,于是就有了Hive。

    Hive现在也是Hadoop项目下面的一个子项目,它可以让我们用SQL的接口来执行MapReduce,甚至提供了JDBC和ODBC的接口。有了这个之后,Hadoop基本上被包装成一个数据库。当然实际上Hive的SQL最终还是被翻译成了MapReduce代码来执行,因此即使最简单的SQL可能也要执行好几十秒。幸好在通常的离线日志分析中,这个时间还是可以接受的。更重要的是,对于上面提到的例子,我们又可以用一样的SQL来完成分析任务了。

    当然Hive并不是完全的兼容SQL语法,而且也不能做到完全的对用户屏蔽细节。很多时候为了执行性能的优化,依然需要用户去了解一些MapReduce的基本知识,根据自己的应用模式来设置一些参数,否则我们可能会发现一个查询执行很慢,或者压根执行不出来。

    另外,很显然Hive也并不能覆盖所有的需求,所以它依然保留插入原始MapReduce代码的接口,以便扩展。

    更多的问题

    即使有了Hive这样一个类似于数据库的东西,我们依然还有很多事情需要做。例如时间久了,可能会有越来越多的需要例行执行的SQL,而这些SQL中,也许有一些是做了重复的事情;也许有一些的执行效率非常低下,一个复杂的SQL就占满了所有的计算资源。这样的系统会变得越来越难以维护的,直到有一天例行的SQL终于跑不完了。而最终用户往往不会去关心这些事情,他们只关心自己提交的查询是不是能即时得到响应,怎么样才能尽快的拿到结果。

    举个简单的例子,如果发现在使用apache_log的所有查询中,几乎没有人用其中的user_agent字段,那么我们完全可以把这个字段去除掉,或者拆分成两张表,以减少多数查询的IO时间,提高执行的效率。

    为了系统化的解决这些问题,我们可能需要引入例行任务的调度机制,可能需要去分析所有的SQL来发现哪些是可以合并的、哪些的性能需要优化,使用的数据表是不是需要做水平或者垂直分表等等。根据实际情况的不同,这时事情可能是人工来完成,也可能是写程序来自动分析并调整。

    再者随着日志类型、分析需求的不断增长。用户会越来越多的抱怨很难找到想要的数据在哪份日志里,或者跑的好好的查询因为日志格式的变化而突然不能用了。另外上面提到的ETL过程也会变得复杂,简单的转换导入脚本很可能已经解决不了问题。这时候可能需要构建一个数据管理系统,或者干脆考虑建立一个所谓的数据仓库。

    总之,随着日志数据量、日志类型、用户数量、分析需求等等的不断增长,越来越多的问题会逐渐浮现出来,日志分析这件事情可能就不再像我们最初想的那么简单,会变得越来越有价值,也越来越有挑战。




    Web日志挖掘分析的方法

    日志文件的格式及其包含的信息
    ①2006-10-17 00:00:00②202.200.44.43 ③218.77.130.24 80 ④GET ⑤/favicon.ico 
    ⑥Mozilla/5.0+(Windows;+U;+Windows+NT+5.1;+zh-CN;+rv:1.8.0.3)+Gecko/20060426
    +Firefox/1.5.0.3。
    ①访问时间;②用户IP地址;③访问的URL,端口;④请求方法(“GET”、“POST”等);
    ⑤访问模式;⑥agent,即用户使用的操作系统类型和浏览器软件。

    一、日志的简单分析
    1、注意那些被频繁访问的资源
    2、注意那些你网站上不存在资源的请求。常见的扫描式攻击还包括传递恶意参数等:
    3、观察搜索引擎蜘蛛的来访情况
    4、观察访客行为
    应敌之策:
    1、封杀某个IP
    2、封杀某个浏览器类型(Agent)
    3、封杀某个来源(Referer)
    4、防盗链
    5、文件重命名
    作用:
    1.对访问时间进行统计,可以得到服务器在某些时间段的访问情况。
    2.对IP进行统计,可以得到用户的分布情况。
    3.对请求URL的统计,可以得到网站页面关注情况。
    4.对错误请求的统计,可以更正有问题的页面。

    二、Web挖掘
    根据所挖掘的Web 数据的类型,可以将Web 数据挖掘分为以下三类:Web 内容挖掘(Web Content Mining)、Web 结构挖掘(Web Structure Mining)、Web 使用挖掘(Web Usage Mining)(也称为Web日志挖掘)。
    ①Web内容挖掘。Web内容挖掘是指从文档的内容中提取知识。Web内容挖掘又分为文本挖掘和多媒体挖掘。目前多媒体数据的挖掘研究还处于探索阶段,Web文本挖掘已经有了比较实用的功能。Web文本挖掘可以对Web上大量文档集合的内容进行总结、分类、聚类、关联分析,以及利用Web文档进行趋势预测等。Web文档中的标记,例如<Title>和<Heading>等蕴含了额外的信息,可以利用这些信息来加强Web文本挖掘的作用。 
    ②Web结构挖掘。Web结构挖掘是从Web的组织结构和链接关系中推导知识。它不仅仅局限于文档之间的超链接结构,还包括文档内部的结构。文档中的URL目录路径的结构等。Web结构挖掘能够利用网页间的超链接信息对搜索引擎的检索结果进行相关度排序,寻找个人主页和相似网页,提高Web搜索蜘蛛在网上的爬行效率,沿着超链接优先爬行。Web结构挖掘还可以用于对Web页进行分类、预测用户的Web链接使用及Web链接属性的可视化。对各个商业搜索引擎索引用的页数量进行统计分析等。 
    ③Web使用记录挖掘。Web使用记录挖掘是指从Web的使用记录中提取感兴趣的模式,目前Web使用记录挖掘方面的研究较多,WWW中的每个服务器都保留了访问日志,记录了关于用户访问和交互的信息,可以通过分析和研究Web日志记录中的规律,来识别网站的潜在用户;可以用基于扩展有向树模型来识别用户浏览序列模式,从而进行Web日志挖掘;可以根据用户访问的Web记录挖掘用户的兴趣关联规则,存放在兴趣关联知识库中,作为对用户行为进行预测的依据,从而为用户预取一些Web页面,加快用户获取页面的速度,分析这些数据还可以帮助理解用户的行为,从而改进站点的结构,或为用户提供个性化的服务。
    通过对Web服务器日志中大量的用户访问记录深入分析,发现用户的访问模式和兴趣爱好等有趣、新颖、潜在有用的以及可理解的未知信息和知识,用于分析站点的使用情况,从而辅助管理和支持决策。当前,web日志挖掘主要被用于个性化服务与定制、改进系统性能和结构、站点修改、商业智能以及web特征描述等诸多领域。

    三、Web日志挖掘的方法
    (一)首先,进行数据的预处理。
    从学习者的访问日志中得到的原始日志记录并不适于挖掘,必须进行适当的处理才能进行挖掘。因此,需要通过日志清理,去除无用的记录;对于某些记录,我们还需要通过站点结构信息,把URL路径补充成完整的访问序列;然后划分学习者,并把学习者的会话划分成多个事务。
    (二)其次,进行模式发现
    一旦学习者会话和事务识别完成,就可以采用下面的技术进行模式发现。模式发现, 是对预处理后的数据用数据挖掘算法来分析数据。分有统计、分类、聚类、关等多种方法。
    ① 路径分析。它可以被用于判定在一个站点中最频繁访问的路径,还有一些其它的有关路径的信息通过路径分析可以得出。路径分析可以用来确定网站上的频繁访问路径, 从而调整和优化网站结构, 使得用户访问所需网页更加简单快捷, 还可以根据用户典型的浏览模式用于智能推荐和有针对性的电子商务活动。例如:70% 的学习者在访问/ E-Business /M2时,是从/EB开始,经过/ E-Business /SimpleDescription,/ E-Business /M1;65%的学习者在浏览4个或更少的页面内容后就离开了。利用这些信息就可以改进站点的设计结构。
    ② 关联规则。 使用关联规则发现方法,可以从Web的访问事务中找到的相关性。关联规则是寻找在同一个事件中出现的不同项的相关性,用数学模型来描述关联规则发现的问题:x=>y的蕴含式,其中x,y为属性——值对集(或称为项目集),且X∩Y空集。在数据库中若S%的包含属性——值对集X的事务也包含属性——值集Y,则关联规则X=>Y的置信度为C%。
    ③ 序列模式。在时间戳有序的事务集中,序列模式的发现就是指那些如“一些项跟随另一个项”这样的内部事务模式。它能发现数据库中如“在某一段时间内,客户购买商品A,接着会购买商品B,尔后又购买商品C,即序列A→B→C出现的频率高”之类的信息。序列模式描述的问题是:在给定的交易序列数据库中,每个序列按照交易的时间排列的一组交易集,挖掘序列函数作用是返回该数据库中高频率出现有序列。
    ④ 分类分析。发现分类规则可以给出识别一个特殊群体的公共属性的描述,这种描述可以用于分类学习者。分类包括的挖掘技术将找出定义了一个项或事件是否属于数据中某特定子集或类的规则。该类技术是最广泛应用于各类业务问题的一类挖掘技术。分类算法最知名的是决策树方法,此外还有神经元网络、Bayesian分类等。例如:在/ E-Business /M4学习过的学习者中有40%是20左右的女大学生。
    ⑤聚类分析。可以从Web访问信息数据中聚类出具有相似特性的学习者。在Web事务日志中,聚类学习者信息或数据项能够便于开发和设计未来的教学模式和学习群体。聚类是将数据集划分为多个类,使得在同一类中的数据之间有较高的相似度,而在不同类中的数据差别尽可能大。在聚类技术中,没有预先定义好的类别和训练样本存在,所有记录都根据彼此相似程度来加以归类。主要算法有k—means、DBSCAN等。聚类分析是把具有相似特征的用户或数据项归类,在网站管理中通过聚类具有相似浏览行为的用户。基于模糊理论的Web页面聚类算法与客户群体聚类算法的模糊聚类定义相同,客户访问情况可用URL(Uj)表示。有Suj={(Ci,fSuj(Ci))|Ci∈C},其中fSuj(Ci)→[0,1]是客户Ci和URL(Uj)间的关联度:式中m为客户的数量,hits(Ci)表示客户Ci访问URL(Uj)的次数。利用Suj和模糊理论中的相似度度量Sfij定义建立模糊相似矩阵,再根据相似类[Xi]R的定义构造相似类,合并相似类中的公共元素得到的等价类即为相关Web页面。
    ⑥统计。统计方法是从Web 站点中抽取知识的最常用方法, 它通过分析会话文件, 对浏览时间、浏览路径等进行频度、平均值等统计分析。虽然缺乏深度, 但仍可用于改进网站结构, 增强系统安全性, 提高网站访问的效率等。
    ⑦协同过滤。协同过滤技术采用最近邻技术,利用客户的历史、喜好信息计算用户之间的距离,目标客户对特点商品的喜好程度由最近邻居对商品的评价的加权平均值来计算。
    (三)最后,进行模式分析。
    模式分析。基于以上的所有过程,对原始数据进行进一步分析,找出用户的浏览模式规律,即用户的兴趣爱好及习惯,并使其可视化,为网页的规划及网站建设的决策提供具体理论依据。其主要方法有:采用SQL查询语句进行分析;将数据导入多维数据立方体中,用OLAP工具进行分析并给出可视化的结果输出。(分类模式挖掘、聚类模式挖掘、时间序列模式挖掘、序列模式挖掘、关联规则等)

    四、关联规则
    (一)关联规则
    顾名思义,关联规则(association rule)挖掘技术用于于发现数据库中属性之间的有趣联系。一般使用支持度(support)和置信度(confidence)两个参数来描述关联规则的属性。 
    (二)Apriori方法简介
    Apriori算法最先是由Agrawal等人于1993年提出的,它的基本思想是:首先找出所有具有超出最小支持度的支持度项集,用频繁的(k—1)-项集生成候选的频繁k-项集;其次利用大项集产生所需的规则;任何频繁项集的所有子集一定是频繁项集是其核心。
    Apriori算法需要两个步骤:第一个是生成条目集;第二个是使用生成的条目集创建一组关联规则。当我们把最小置信度设为85%,通过关联规则的形成以及对应置信度的计算,我们可以从中得到以下有用的信息:
    1.置信度大于最小置信度时:我们可以这样认为,用户群体在浏览相关网页时,所呈列的链接之间是有很大关联的,他们是用户群的共同爱好,通过网页布局的调整,从某种意义上,可以带来更高的点击率及潜在客户;
    2.置信度小于最小置信度时:我们可以这样认为,用户群体对所呈列链接之间没太多的关联,亦或关联规则中的链接在争夺用户。

    五、网站中Web日志挖掘内容
      (1)网站的概要统计。网站的概要统计包括分析覆盖的时间、总的页面数、访问数、会话数、惟一访问者、以及平均访问、最高访问、上周访问、昨日访问等结果集。
      (2)内容访问分析。内容访问分析包括最多及最少被访问的页面、最多访问路径、最多访问的新闻、最高访问的时间等。
      (3)客户信息分析。客户信息分析包括访问者的来源省份统计、访问者使用的浏览器及操作系统分析、访问来自的页面或者网站、来自的IP地址以及访问者使用的搜索引擎。
      (4)访问者活动周期行为分析。访问者活动周期行为分析包括一周7天的访问行为、一天24小时的访问行为、每周的最多的访问日、每天的最多访问时段等。
      (5)主要访问错误分析。主要访问错误分析包括服务端错误、页面找不到错误等。
      (6)网站栏目分析。网站栏目分析包括定制的频道和栏目设定,统计出各个栏目的访问情况,并进行分析。
    (7)商务网站扩展分析。商务网站扩展分析是专门针对专题或多媒体文件或下载等内容的访问分析。
    (8)有4个方向可以选择:①对用户点击行为的追踪,click stream研究;②对网页之间的关联规则的研究;③对网站中各个频道的浏览模式的研究;④根据用户浏览行为,对用户进行聚类,细分研究;(如果你能够结合现有的互联网产品和应用提出一些自己的建议和意见,那就更有价值了。)
    (9)发现用户访问模式。通过分析和探究Web日志记录中的规律,可以识别电子商务的潜在客户,提高对最终用户的服务质量,并改进Web服务器系统的性能。 
    (10)反竞争情报活动。反竞争情报是企业竞争情报活动的重要组成部分。

    六、相关软件及算法
    (一)相关软件:
    1.数据挖掘的专用软件wake。
    2.用OLAP工具
    3.已经有部分公司开发出了商用的网站用户访问分析系统,如WebTrends公司的CommerceTrends 3.0,它能够让电子商务网站更好地理解其网站访问者的行为,帮助网站采取一些行动来将这些访问者变为顾客。CommerceTrends主要由3部分组成:Report Generation Server、Campain Analyzer和Webhouse Builder。
    4.Accrue公司的Accrue Insight,它是一个综合性的Web分析工具,它能够对网站的运行状况有个深入、细致和准确的分析,通过分析顾客的行为模式,帮助网站采取措施来提高顾客对于网站的忠诚度,从而建立长期的顾客关系。
    (二)相关算法:
    1.运用各种算法进行数据挖掘:GSP算法, Prefixspana算法,
    2.关联规则分析:Apriori、FP-growth算法等。
    3.Apriori算法及其变种算法
    4.基于数据库投影的序列模式生长技术(database project based sequential pattern growth)
    5. Wake算法、MLC++等
    6. PageRank算法和HITS算法利用Web页面间的超链接信息计算“权威型”(Authorities)网页和“目录型”(Hubs)网页的权值。Web结构挖掘通常需要整个Web的全局数据,因此在个性化搜索引擎或主题搜索引擎研究领域得到了广泛的应用。
    7.参考检索引擎的挖掘算法,比如Apache的lucene等。

    七、日志分析的价值或应用
    ①在自己的网站上安装了网站统计的代码,如Google analytics、量子统计、百度统计、cnzz、51.la等,这些工具可以统计网站的流量,也就是网站上访客可看到的所有页面的访问量,但是这些统计工具都不能统计你主机上资源的原始访问信息,例如某个图片被谁下载了。
    ②如果你的网站遭到了攻击、非法盗链和不良请求等,通过分析原始访问日志能大概分析出端倪来,例如:往主机上传了一个mp3,不幸被百度mp3收录,引来大量的盗链,导致我的主机流量猛增!通过分析日志,可以找出问题根源,删除了那个mp3,主机流量也降下来了。
    ③分析访客来源(Referer)。这一段是告诉我们访客是从哪里来到这一个网页。有可能是网站其他页,有可能是来自搜索引擎的搜索页等。通过这条来源信息,你可以揪出盗链者的网页。
    ④网站日志分析软件都能提供关于服务器的浏览量、统计网站所有页面和相关文件被显示的次数、访问最多的网页、客户端访问最频繁的文件、访问者的IP分布、每日访问统计、每周每月等的统计结果。1.访问者访问时段分析。结合IP地址和时段之间的关系可以将来访者大致的身份作一个基本的判断。如按上班前、工作期间、下班后、节假日等,可以针对访客的初步性质安排合适的内容,如产品信息和广告;2.访问者地区分布。分析通过将访问者的IP地址转换为地理区间可以分析出来访者的大致地理分布范围。
    ⑤相关产品推荐。通过以上的关联分析,有了用户频繁访问路径和链接之间的兴趣度,可以构建个性化推荐系统模型。对于实证例子,我们可以在置信度高于最低置信度的相关链接之间,建立某种信息快速互联的桥梁,亦或是在网页规划中,充分考虑链接之间的关联关系,从而为更人性化、合理化的网页设计提供决策依据。如:当客户浏览/newimg/num1.gif时,有0.91的概率会浏览/newimg/num4.gif,那么,在两者之间就存在很高的关联性,从而我们有必要对这两个链接建立某种跟紧密的联系。
    ⑥个性挖掘:针对单个用户的使用记录对该用户进行建模,结合该用户基本信息分析他的使用习惯、个人喜好,目的是在电子商务环境下为该用户提供与众不同的个性化服务。
    ⑦系统改进:Web服务(数据库、网络等)的性能和其他服务质量是衡量用户满意度的关键指标,Web 用法挖掘可以通过用户的拥塞记录发现站点的性能瓶颈,以提示站点管理者改进Web缓存策略、网络传输策略、流量负载平衡机制和数据的分布策略。此外,可以通过分析网络的非法入侵数据找到系统弱点,提高站点安全性,这在电子商务环境下尤为重要。
    ⑧站点修改:站点的结构和内容是吸引用户的关键。Web 用法挖掘通过挖掘用户的行为记录和反馈情况为站点设计者提供改进的依,比如页面连接情况应如何组织、那些页面应能够直接访问等。
    ⑨智能商务:用户怎样使用Web站点的信息无疑是电子商务销售商关心的重点,用户一次访问的周期可分为被吸引、驻留、购买和离开四个步骤,Web用法挖掘可以通过分析用户点击流等Web日志信息挖掘用户行为的动机,以帮助销售商合理安排销售策略。
    ⑩Web特征描述:这类研究跟关注这样通过用户对站点的访问情况统计各个用户在页面上的交互情况,对用户访问情况进行特征描述。


    展开全文
  • 如何分析网站日志

    千次阅读 2019-09-26 15:35:50
    一条访问日志如下: 112.10.94.234 - - [22/Aug/2017:14:01:26 +0800] “POST /item/detail.mooc?a=1&amp;b=2&amp;c=5 HTTP/1.1” 200 2582 “http://www.chinamoccs.com/study/initplay/540.mooc” ...

    一条访问日志如下:

    112.10.94.234 - - [22/Aug/2017:14:01:26 +0800] “POST /item/detail.mooc?a=1&b=2&c=5 HTTP/1.1” 200 2582 “http://www.chinamoccs.com/study/initplay/540.mooc” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebkit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8”

    从日志中获取的信息

    • 用户的IP:城市,网络运营商
    • 访问时间:提取具体的访问小时数
    • 请求链接:提取有效的链接
    • 来源链接:分类(自身,搜索引擎等)
    • 客户端信息:提取用户操作系统,浏览器名称等等

    网站的流量分析常见指标

    • IP(独立IP):即独立IP数。00:00 - 24:00内相同IP地址被计算一次。
    • PV(访问量):即Page View,即页面浏览量,用户每次刷新即被计算一次。
    • UV(独立访客):即Unique Visitor,访问您网站的一个客户端为一个访客(一般在Cookie中分配唯一编号)。
      在这里插入图片描述

      注:Cookie在日志中一般是收集不到的,所以UV一般是通过IP + 用户客户端操作系统来进行确定的。

    这三个指标单独出现往往没有什么意义,但是我们可以把它们关联起来进行分析:

    1. PV 和 UV 数很接近的时候,我们就可能会认为用户访问我们网站的时候点击次数并不多,每个用户可能进来点了一两次就离开我们的网站了,网站的内容可能并不吸引用户。

    2. IP 大于 UV 时,我们就可能会认为使用家庭宽带的用户比较多,因为家庭宽带的IP是不固定的,可能会发生变动。

    3. UV 大于 IP 时,我们就可能会认为使用非家庭宽带(公司,团体机构)的用户比较多,因为很多公司的出口IP(外网IP)是固定的,所有的员工都使用这同一个出口IP访问网络。

    网站的流量分析

    访问趋势图:即一段时间中用户在各个时间段用户访问情况,也可以按PV,UV,IP指标细分。
    在这里插入图片描述
    从这张图中我们可以看出上午的9点到11点,下午的14点到18点是用户访问的小高峰,通过这样的一个线图我们就可以大致了解我们服务器的一个负载情况。在知道了我们服务器再一天中的负载情况之后,我们就可以来调整我们网站中的一些程序。

    分析: 我们经常会有一些统计的任务需要去定时执行,我们就可以在用户访问次数比较低的时间段去执行我们的定时任务,来减轻服务器高峰期的压力。

    网站的来源分析

    访问来源分析:即用户从各个来源网站进入本站的占比。
    搜索引擎来源:即来源中的各个搜索引擎的占比。

    在这里插入图片描述
    分析:

    1. 从访问来源占比中可以看出:从搜索引擎进入本站的占比并不高,说明用户在输入了某些与本站有关的内容后,大部分信息并不能直接在搜索引擎上显示出来(或者排名比较靠后,在后面几页才能搜到),说明网站的SEO做的不到位,还需要进一步提高SEO。

    2. 从搜索引擎占比可以看出:使用百度的用户比较多,我们就可以在具体的搜索引擎上打些广告。(例如:本站)。

    网站的访问分析

    访问链接TopN:即用户访问最多的链接。
    恶意攻击IP:搜集疑似恶意攻击本网站的IP,用于IP黑名单。

    在这里插入图片描述
    分析:

    1. 通过访问链接TopN,我们就可以知道用户最经常访问我们网站的什么链接,知道了这些之后如果我们想增加我们网站商品的销量,就可以在这些页面上打打广告,放上一些对应商品的链接,或者一些优惠的链接。

    2. 我们的网站可以被任意用户访问,很多的恶意攻击往往是来自一些具有竞争关系的同行,它们使用恶意攻击的方式使我们的网站变的不稳定,降低我们正常用户的体验。我们就可以把这样的恶意访问的IP列入黑名单。我们判定是否是恶意访问IP的依据是:大量的404请求。

    网站的访客分析

    访客地域分布:即访客所处的地理位置。
    访客浏览器:即访客采用什么样的浏览访问网站,如Chrome,Firefox等。

    在这里插入图片描述

    分析:

    1. 从访客的地域分布我们可以看出华东地区的访问用户比较多,我们总不能老让用户去访问我们在新疆购买的服务器吧?那么我们就可以把服务器部署到离我们大量用户较近的地域,提升用户的访问体验。

    2. 从访客的浏览器中我们可以看出使用Firefox,Chrome访问我们网站的用户比较多,我们就可以针对性的对我们的网站进行优化,查看我们页面的样式在这些浏览器上加载是否正常,有没有位置错乱的情况。如果有样式错乱的情况,需要针对性的进行修复,以提升用户的体验。

    访客操作系统:即访客所使用的操作系统,如windows,OS X,安卓,IOS等。
    访客网络运营商:即访客所使用的网络运营商,如电信,联通,移动等等。

    在这里插入图片描述
    分析:

    1. 从访客操作系统分布我们可以看出使用Windows,OS X访问我们网站的用户比较多,而通过安卓,IOS访问的用户比较少,我们就可以猜测大多数用户通过PC端访问我们的网站,我们就可以针对PC端的网页进行一些优化,多增加一些内容,而较少的考虑在响应式的情况下手机端布局的变化。

    2. 从访客网络运营商分布我们可以看出:使用电信,联通的访问人数比较多。我们就可以增加一些电信服务器的配额。但是,如果使用阿里云的服务器就不需要考虑这些情况,它在内部自动做了多网合一。

    网站的优化

    在这里插入图片描述
    针对上面分析的一些结论我们就可以对我们网站进行一些优化:

    1. 网站程序优化:考虑页面再不同浏览器上的显示情况。
    2. 网站服务器优化:将程序部署在离大量用户较近的服务器上。
    3. 搜索引擎推广:针对用户经常使用的搜索引擎做一些推广。

    关注我的微信公众号(曲健磊的个人随笔),观看更多精彩内容:
    在这里插入图片描述

    展开全文
  • 有的朋友会问,好好的Windows日志为什么要把它转成Syslog呢?呵呵,当Windows服务器比较少的时候,我们是不需要这样做的。但试想如果你管理着成千上百台的Windows机器,你会一台一台的登录上去用Event Viewer查看吗...
  • 网站日志分析(一)

    2020-07-31 23:09:39
    利用阿里云数加平台进行网站日志分析 基于茶叶网站的日志分析 注:实验所用数据并非真实数加,只是模拟用户操作数据。 概述: 网站访问日志是用户在访问网站服务器时产生的日志,它包含了各种原始信息,一般以.log...
  • IT安全业界的无数实践告诉我们,健全的日志记录和分析系统,是系统正常运营、优化以及安全事故响应的基础,虽然安全系统厂商为我们提供了五花八门的解决方案,但基石仍是具有充足性、可用性、安全性的日志记录系统。...
  • python日志分析

    千次阅读 2019-06-17 17:32:05
    日志分析 生产中会出现大量的系统日志、应用程序日志,安全日志等,通过贵日志的分析可以了解服务器的负载,健康状况,可以分析客户的分布情况、客户的行为,甚至基于这些分析可以做出预测。 一般采集流程: ...
  • 开源:通用的日志分析工具(LogViewer)

    万次阅读 2018-06-29 20:27:28
    本工具最早是制作出来查看我的 FTL(Fast Trace Log) 二进制日志文件的, 后来因为去做Java后台,经常看 SpringBoot, Tomcat 等的日志, 就简单重构了一下, 从而支持通过正则来通用的分析日志. LogViewer 一个...
  • FTP服务器日志解析

    万次阅读 2016-12-22 09:24:51
    FTP服务器日志解析
  • IIS日志分析工具

    千次阅读 2017-11-20 15:50:57
    日志分析工具有很多,所以对于新手来说,选择一款合适的工具便显得尤其复杂, https://www.iis.net/downloads
  • 日志分析工具goaccess

    万次阅读 2012-04-16 21:21:13
    但由于历史原因,nginx在日志分析工具相较于传统的apache、lighthttp等要匮乏的多。 作为性能测试工程师的我,无论在性能分析还是在测试环境维护都离不开日志的分析,所以逼得我必须掌握日志分析的技巧,当然简单的...
  • 如何分析jvm dump 内存日志

    万次阅读 2013-12-06 15:06:00
    如何dump出jvm日志。 1. 在jvm启动的参数中,新增 jvm参数。这样在发生jvm 内存溢出时,就会直接dump出java.hprof 文件了。
  • 全栈必备 Log日志

    万次阅读 2017-06-12 08:32:26
    连自己都没想到,log日志居然如此的丰富多彩,有很多有趣的问题,不仅仅是一种全栈必备的技能,更是一种开发者的基本素养。
  • GC 日志分析工具 —— GChisto

    万次阅读 2016-02-28 15:44:54
    《Java 性能优化权威指南》介绍了一款分析 GC 日志的离线分析工具, 不过官网上没有下载的地方, 需要自己从 SVN 上拉下来编译。 GChisto 以表格和图形化的方式展示 GC 次数、 持续时间等, 提高了分析 GC 日志的...
  • Nginx访问日志分析

    千次阅读 2019-04-11 15:06:18
    1.首先说明Nginx日志存放在系统的哪个位置,可以使用下列命令: 找到*/nginx/logs/access.log这个关键路径,就是Nginx的访问日志的位置。(其中*代表你电脑nginx文件夹前面的路径) 2.Nginx默认的日志格式如下:...
  • gc日志分析工具

    万次阅读 2012-11-26 09:35:04
    性能测试排查定位问题,分析调优过程中,会遇到要分析gc日志,人肉分析gc日志有时比较困难,相关图形化或命令行工具可以有效地帮助辅助分析。 Gc日志参数 通过在tomcat启动脚本中添加相关参数生成gc日志 -...
  • 用户行为日志分析概述

    千次阅读 2018-06-01 22:50:28
    用户行为日志分析:Nginx,Ajax日志数据内容: 1,访问的系统属性:操作系统,浏览器等等 2.点击的url,从哪个url跳转过来,页面停留时间 3.访问信息:session_id,访问ip等日志分析的意义: 1.网站的眼睛 2....
  • python抓取并分析日志样本

    千次阅读 2019-02-23 11:10:07
    最近需要帮我哥做个python小功能,功能的目的就是分析现有的一堆access日志文件(不包含实时增量分析,仅针对固定样本日志,约400mb),从中查找出包含某一关键字的日志,并提取ip出来,统计同一ip出现的次数。...
  • 日志服务与日志分析工具

    万次阅读 2018-09-12 01:05:16
    系统日志生成服务功能:日志服务是根据日志配置文件进行提供相应的功能服务,对于各种服务的信息等级的设定将不同服务的不懂等级信息记录在不同的文件里面。日志管理服务分类:1.rsyslogd 普通日志管理服务采集各种...
1 2 3 4 5 ... 20
收藏数 513,306
精华内容 205,322
关键字:

日志分析