zoukankan      html  css  js  c++  java
  • 第五部分系统管理员 2 日志文件与分析

    认识与分析日志文件

    一   什么是登录文件或日志文件
    a 说明
    记录系统活动信息的文件    何时,何地 ,何人做了什么动作  信息登录    
    日志文件的重要性
    解决系统方面的错误 debug
    解决网络服务的问题
    事件记录簿
    常见的日志文件的文件名
    仅root有权限访问
    /var/log/boot.log     保存当次系统硬件检测和核心支持的功能流程
    /var/log/cron 例行性工作安排
    /var/log/dmesg 系统开机时核心检测过程所产生的各项信息   
    /var/log/lastlog 记录系统上的账号最近一次登入系统时的相关信息
    /var/log/maillog   或者/var/log/mail/* 邮件来往信息
    /var/log/messages 相当重要的日志文件  系统发生的错误信息或重要的信息  都会记录在这个文件中
    /var/log/secure 登录时需要账号和密码的程序  例如  login     gdm    su  sudo    ssh   telnet等
    /var/log/wtmp    /var/log/faillog 记录正确登录系统用户的账号信息与错误登录时使用的账号信息
    /var/log/httpd/*    /var/log/samba/* 各自的网络服务记载各自产生的信息
    日志文件所需相关服务与程序
    分为两类  一类是软件自行处理日志文件的信息  另一种是操作系统中rsyslog.service服务来统一管理日志文件
    需要轮替存储文件来完成日志文件容量与更新的问题   logrotate   新产生的文件替换旧的文件
    针对日志文件所需要的功能   我们需要的服务程序有
    systemd-journald.service     最主要的信息接收者 有systemd提供
    rsyslog.service 主要的日志系统与网络服务的信息   登陆验证等
    logrotate 主要的日志文件轮替功能
    centos7.x 使用systemd提供的journalctl日志管理
    所有经由systemd管理的启动的服务  所产生的信息  会将该信息有systemd-journald.service以二进制的方式记录下来   之后再发送给rsyslog.service作进一步的记载
     
     
    登录文件内容的一般格式
    包括  事件发生的日期与时间 
    发生此事件的主机名称
    启动此事件的服务名称  例如systemd    crond或指令与函数名称  su   login
    该信息的实际内容   信息说明
     
     
    何时查看日志文件
    a 系统不正常
    b daemon无法正常启动
    c 用户无法登陆
    d daemon执行不顺畅
     
     
    二 rsyslog.service记录登陆文件的服务
    linux系统的登陆文件主要由rsyslog.service这个服务负责
    a rsyslog.service的配置文件 /etc/rsyslog.conf 用来定义某项系统信息或服务信息日志文件记录的位置 分类规范分别存储
    各种服务信息记录在rsyslog.conf这个配置文件中 基本上定义了 1.什么服务 2.信息的等级 3.需要记录在哪里 装置或文件或主机
    例如:
    mial.info /var/log/mailog_info
    服务名称
    0 kern(kernel) 核心产生的信息 大部分为硬件检测和核心功能的启用
    1 user 用户等级的信息
    2 mail 邮件的手法
    3 daemon 系统服务
    4 auth 需要用户名和密码 登陆的机制 例如login ssh su等
    5 syslog 由syslog的相关协定产生的信息 其实就是syslogd这个程序本身产生的信息
    6 lpr 打印相关的信息
    7 news 新闻组服务器有关
    8 uucp unix to unix copy protocol
    9 cron 例行性工作安排 cron或at产生信息的地方
    10 authpriv 类似于auth 记录较多的账号私人信息 包括pam模组的运行
    11 ftp 于ftp通信协定相关的额信息输出
    16-23 local0~local17 保留本机用户使用的登陆信息 与终端机互动
     
    以上为linux系统核心的syslog函数定制的服务     
    第三方软件通过调用上述的服务名来记录他们的软件   例如sendmail是邮件收发的软件   会调用syslog内的mail服务名称
     
     
    信息的等级
    由syslog.h定义
    等级数值 等级名称 说明
    7 debug 用来排错产生的信息
    6 info 一般的基本信息说明
    5 notice 正常的信息 比info需要被注意到的
    4 warning (warn) 警告的信息 可能会有问题 但是不至于影响daemon的运行
    3 err(error) 重大的错误信息 例如配置文件的某些设置值会造成服务无法启动
    2 crit 临界点 critical 很严重的错误信息
    1 alert 警告警告
    0 emerg(panic) 严重的错误 硬件有问题 核心无法顺利运行
    debug还要低的等级为none 不需要登录等级 也就是不需要记录
    其中需要注意的是信息等级之前 .=! 的连接符号 代表的意思
    . 代表比后面还要严重的等级都要被记录 info代表等级严重于info的包含info本身的 都会被记录下来
    .= 代表所需要的等级就是后面接的等级而已
    .! 表示不等于 就是除了该等级外的其他等级都记录
     
    记录信息的文件或设备或主机
    日志文件可以记录到文件或者装置上 也可以存放到其他的网络主机上
    日志文件的绝对路径:/var/log/下面的文件
    打印机或者其他 /dev/lp0
    用户的名称
    网络主机 例如@study.tsai 需要对方主机的设置
    * 代表目前线上的所有人
    服务、daemon于函数名称
    syslog 设计指引 所有的要求都写进一个名为syslog.h的头文件中
    rsyslogd 实际的信息分类 daemon程序
    rsyslog.service 服务启动脚本
     
    rsyslog.conf  语法练习   
    1. 将mail的信息写入/var/log/maillog
    mail.info /var/log/maillog
    2. 将news及例行性工作安排cron写入/var/log/cronnews 但是警告信息则记录在/var/log/cronnews.warn中
        news.*;cron.* /var/log/cronnews
    news.=warn;cron.=warn /var/log/cronnews.warn
    3.messages 记录所有的信息 但是不要记录cron mail及news的信息
    *.*;news,cron,mail.none /var/log/messages
    或者
    *.*;news.none,cron.none;mail.none /var/log/messages
     
     
    centos 7.x 默认的配置文件内容 rsyslog.conf
     

      自定义增加日志文件的功能

    将所有额外的信息写入到/var/log/admin.log中
    vim  /etc/rsyslog.conf
    *.info  /var/log/admin.log
    日志文件的安全性设置
    防黑
    将日志文件的权限设置为a 只能增加信息  不能删除
    chattr +a /var/log/admin.log
    lsattr /var/log/admin.log
    注意如果日志文件被vi 或者vim等编辑器 并wq退出 则rsyslogd服务会认为此文件被更动过,则会再写入新的内容
    需要重新启动rsyslogd.service即可。
    另一个问题是+a的属性被设置后 导致该文件无法被删除和修改 则当logratate轮替程序无法删除替换词文件,也就无法实现轮替的功能,所以还需要先将+a的标志去掉
    日志文件服务器的设置
    当局域网内有多个linux主机的时候 此功能比较有用 单个主机再传送一份出去给日志文件服务器
    rsyslogd具有日志文件服务器的功能,默认没有启动。
    默认端口为UPD和TCP的514
      服务器端的设置如下
    在/etc/rsyslog.conf内的设定
    vim /etc/rsyslog.conf
    #provides UDP syslog recepiton
    #$ModLoad imudp
    #$UDPServerRun 514
     
    #provides tcp syslog reception
    #$ModLoad imtcp
    #$inputTCPServerRun 514
     
    systemctl restart rsyslog.service
    netstat -ltnp | grep syslog
     

    客户端的设置如下
    vim /etc/rsyslog.conf
    *.* @@192.168.1.100 此为TCP传输
    *.* @192.168.1.100 此为UDP传输
     
    日志文件的轮替 logrotate
     
    1.logrotate的设置
    需要注意的是chattr 设置了文件的+a属性 rsyslogd利用的是daemon的方式来启动,有需求的时候立即执行 所以logrotate是在规定的时间到了之后才来进行日志文件的轮替,所以这个logrotate程序是挂载在cron底下进行的。
    在/etc/cron.daily/logrotate 进行记录  
    设置文件:
    /etc/logrotate.conf
    /etc/logrotate.d
    logrotate.d中的所有文件都会被主动的读入logrotate.conf中进行
     
    vim /etc/logrotate.conf
    weekly   默认一个礼拜进行一次rotate的工作
    rotate 4   保留的文件数目 也是最大数
    create
    dateext  
    include /etc/logrotate.d   将此目录内的文件读进.conf里来执行
     
    /var/log/wtmp{   针对wtmp这类的日志文件进行的参数设置
    monthly
    ...
    }
     
     
      其中包括文件名部分   
    参数部分   {   }
    执行的脚本部分 
    sharedscripts ...   endscript设定配合使用
    可用的环境
    prerotate   启动轮替之前的指令   例如修改文件的属性
    postrotate 轮替执行完之后的指令   例如重启某个服务
    他们两个之间的指令相当重要
    本例中只针对/var/log中的那些个文件名有效
    轮替完毕后取得syslog的PID后   以kill -HUP重新启动syslogd
    假如 /var/log/messages   这个文件增加了chattr +a的属性时,根据logrotate的工作原理   messages会更名为messages.1
    但是由于有a属性   限制不能改名   所以利用prerotate于postrotate来进行轮替前的属性修改   和之后的动作
    {
    sharedscripts
    prerotate
    /usr/bin/chattr -a /var/log/messages
    endscript
    postrotate
            /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
            /usr/bin/chattr +a /var/log/messages
        endscript
    }
     
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true的意义将rsyslogd重新将rsyslog.conf的配置文件 重新reload   因为配置已经改变。   
     
     
    2.实际测试logrotate的动作
    语法:logrotate [-vf] logfile -v 显示详细过程 f为force 强制 不论是否符合配置文件
    example1:
    logrotate -v /etc/logrotate.conf
    example2:
    logrotate -vf /etc/logrotate.conf
     
    3.自定义日志文件的轮替功能
    example3:
    假设已经建立/var/log/admin.log 这个文件 想要加上a这个隐藏的属性
    轮替配置
    每月一次
    大于100m时 主动轮替 不需要考虑一个月的期限;
    保存5个备份
    备份需要压缩
     
    命令 :1.先添加a的属性
    chattr +a /var/log/admin.log   设置
    lsattr /var/log/admin.log 查看
    mv /var/log/admin.log /var/log/admin.log.1   根据结果查看  a是否成功
    2.建立Logroate的设定文件    增加一个文件在/etc/logrotate.d内就可以了
    vim /etc/logrotate.d/admin
    /var/log/admin.log{
    monthly
    size=100m
    rotate 5
    compress
     
    sharedscripts
    prerotate
    /usr/bin/chattr -a /var/log/admin.log
    endscript
    sharedscripts
    postrotate
    /bin/kill  -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true   重新载入配置文件
    /usr/bin/chattr +a /var/log/admin.log    增加a属性
    endscript
    }
    3.测试
    logrotate -v /etc/logrotate.conf    查看过程
     
    systemd-journald.service介绍
    原来只有rsyslogd的时候,必须等到开机完成 并且执行了rsyslogd的daemon之后才能记录日志    所以核心需要先运行一个klogd的服务   记录开机过程  启动服务过程的日志   然后再讲记录的信息  发送给rsyslogd。
    现在有了systemd的这个核心调用的服务    又是第一个执行的软件   可以主动调用systemd-journald来协助记录日志  所以在开机过程中的所有信息 包括启动服务于服务启动失败等的信息都可以记录到systemd-journald中,但是缺陷是此文件记录的信息是内存中的  也就是代表仅仅记录此次开机运行的日志   以前的日志需要rsyslogd 来协助
    1.使用journalctl来观察日志信息
       语法: journalctl [-nrpf] [--since TIME] [--until TIME] _optional
    n 最近几行
    r 反向输出 新的在前 旧的在后
    p 按照重要性排序
    f 类似于   tail -f   持续显示journal日志的内容
    实例:
    journalctl --since yesterday --until today 显示昨天的日志信息
    journalctl -p err 显示信息等级为错误的信息
    journalctl --SYSTEMD_UNIT=crond.service -n 10 显示最新的10行记录
    2.logger指令的使用 自行添加信息到登陆文件中 主要用来注释等 提示信息
    将信息存储的日志文件当中
    语法:logger [-p 服务名称.等级] “信息”
    logger -p user.info "i will check logger command"
    journalctl SYSLOG_FACILITY=1 -n 3
    接下来会显示出 "i will check logger command" 的记录
    3.保存journal的方式
    如果需要保存journal的日志文件 需要先建立目录
    mkdir /var/log/journal
    chown root:systemd-journal /var/log/journal 更改属主和组
    chmod 2775 /var/log/journal 主 组的权限设置
    systemctl restart .....
    会发现在journal/的目录下回出现日志文件
    当然 rsyslogd和lograotate 回记录日志信息 所以上面所说的并非必要   依据个人习惯
    分析日志文件
     
    可以通过vim或journalctl进入日志文件查阅相关的信息
    last lastlog dmesg等等指令 查看日志信息 比较分散
    centos提供的软件工具 logwatch 专门分析日志文件
    1.默认的logwatch
     
    /etc/cron.daily/0logwatch   先执行logwatch命令
    每天会发一封email给root查看  
    然后用root身份去读取email    执行mail命令即可
     
    2.自己写的日志分析工具
        有journalctl 所产生   抓取日志文件来分析   比对rsyslog.service所产生的日志文件   主要用到底下几个对应的文件名
        /var/log/secure
       /var/log/messages
        /var/log/maillog
    在根目录下解压    压缩包中的文件会自动安装到需要的目录中
       举例:
       tar -zxvf /logfile_centos7.tar.gz -C /
       cat /etc/cron.d/vbirdlogfile
       会显示分析的程序文件
       *****     /root/bin/logfile/logfile.sh &> /dev/null
       执行此命令    sh /root/bin/logfile/logfile.sh   同样会发送邮件给root用户
        mail   同样用mail命令查看 email的信息
  • 相关阅读:
    hibernate4 使用及 新特性
    hibernate数据库配置
    Hibernate 插入,修改,删除,查询语句
    Hibernate之HQL总结
    简单编程题
    冒泡排序
    Accelerating Enum-Based Dictionaries with Generic EnumComparer
    本机自定义域名跳转
    ckeditor自己用的配置文件config.js
    RazorExtensions Templated Razor Delegates
  • 原文地址:https://www.cnblogs.com/dongguolei/p/7902600.html
Copyright © 2011-2022 走看看