zoukankan      html  css  js  c++  java
  • linux服务之rsyslog

    日志片断分析

    systemd:服务报出来的信息
    kvm:内核模块kvm报出来的信息
    kernel: tun: 内核的tun模块报出来的信息
    kernel: br0: 内核的br0模块报出来的信息
    kernel: kvm [1437] kvm进程为pid1437报出来的信息
    Jul 31 11:00:01 localhost systemd: Starting Session 4 of user root.
    Jul 31 11:01:01 localhost systemd: Started Session 5 of user root.
    Jul 31 11:01:01 localhost systemd: Starting Session 5 of user root.
    Jul 31 11:01:55 localhost kvm: 1 guest now active
    Jul 31 11:01:55 localhost kernel: tun: Universal TUN/TAP device driver, 1.6
    Jul 31 11:01:55 localhost kernel: tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
    Jul 31 11:01:55 localhost kernel: device tap0 entered promiscuous mode
    Jul 31 11:01:55 localhost kernel: br0: port 2(tap0) entered forwarding state
    Jul 31 11:01:55 localhost kernel: br0: port 2(tap0) entered forwarding state
    Jul 31 11:01:57 localhost kernel: kvm [1437]: vcpu0 disabled perfctr wrmsr: 0xc2 data 0xffff
    Jul 31 11:01:57 localhost kernel: kvm [1437]: vcpu0 unhandled rdmsr: 0x570
    Jul 31 11:02:10 localhost kernel: br0: port 2(tap0) entered forwarding state
    Jul 31 11:02:17 localhost kernel: br0: port 2(tap0) entered disabled state
    Jul 31 11:02:17 localhost kernel: device tap0 left promiscuous mode
    Jul 31 11:02:17 localhost kernel: br0: port 2(tap0) entered disabled state
    Jul 31 11:02:17 localhost kvm: 0 guests now active
    Jul 31 11:02:33 localhost kvm: 1 guest now active
    Jul 31 11:02:33 localhost kernel: device tap0 entered promiscuous mode
    Jul 31 11:02:33 localhost kernel: br0: port 2(tap0) entered forwarding state
    Jul 31 11:02:33 localhost kernel: br0: port 2(tap0) entered forwarding state
    Jul 31 11:02:48 localhost kernel: br0: port 2(tap0) entered forwarding state
    Jul 31 11:02:59 localhost kernel: kvm [1463]: vcpu0 disabled perfctr wrmsr: 0xc2 data 0xffff
    Jul 31 11:02:59 localhost kernel: kvm [1463]: vcpu0 unhandled rdmsr: 0x570
    Jul 31 11:03:36 localhost systemd: getty@tty1.service has no holdoff time, scheduling restart.
    Jul 31 11:03:36 localhost systemd: Started Getty on tty1.
    Jul 31 11:03:36 localhost systemd: Starting Getty on tty1...
    Jul 31 11:03:58 localhost systemd-logind: New session 6 of user root.
    Jul 31 11:03:58 localhost systemd: Started Session 6 of user root.
    Jul 31 11:03:58 localhost systemd: Starting Session 6 of user root.
    Jul 31 11:10:01 localhost systemd: Started Session 7 of user root.
    Jul 31 11:10:01 localhost systemd: Starting Session 7 of user root.
    Jul 31 11:11:46 localhost yum[1599]: Installed: pciutils-3.2.1-4.el7.x86_64

    http://blog.csdn.net/hxh129/article/details/8089474

    格式  日志设备(类型).(连接符号)日志级别   日志处理方式(action)  其中连接符号有.|.=|.!三种
    日志设备 注释 日志级别 注释 动作  注释
    auth pam产生的日志 debug 有调式信息的,日志信息最多 /var/log/file.log  
    authpriv ssh,ftp等登录信息的验证信息 info 一般信息的日志,最常用 /dev/pts/0  
    cron 时间任务相关 notice 最具有重要性的普通条件的信息 @192.168.0.1 udp远程
    kern 内核 warning 警告级别 @@192.168.0.1:10514 tcp远程
    mark rsyslog服务内部的信息,时间标识 err 错误级别,阻止某个功能或者模块不能正常工作的信息 root 在线root
    uucp unix to unix copy, unix主机之间相关的通讯 cirt 严重级别,阻止整个系统或者整个软件不能正常工作的信息 root,kadefor,up01 在线多个
    lpr 打印 alert 需要立刻修改的信息 * 所有在线
    news 新闻组 emerg 内核崩溃等严重信息 ~ 忽略,丢弃 
    users 用户程序产生的相关信息 none 什么都不记录 ^/tmp/a.sh 执行脚本
    mail 邮件        
    local1~7 自定义的日志设备        

    last 与lastb一样,只不过lastb默认显示的是btmp文件

    [root@test1 ~]# rpm -qa|grep log
    sysklogd-1.4.1-46.el5
    logwatch-7.3-9.el5_6
    logrotate-3.7.4-12
    rsyslog-3.22.1-7.el5

    [root@test1 ~]# rpm  -qa|grep init
    initscripts-8.45.42-1.el5.centos

    [root@test1 ~]# rpm -qa|grep psacct
    psacct-6.3.2-44.el5

    /var/run/utmp 当前的,/var/log/wtmp 历史的,/var/log/btmp 失败的

    [root@cache ~]# last
    root     pts/0        36.44.101.18     Sat Jul 19 19:19   still logged in
    root     pts/0        36.44.101.18     Sat Jul 19 18:59 - 19:18  (00:19)
    root     pts/0        172.16.1.18      Fri Jul 18 22:18 - 01:47  (03:28)
    wtmp begins Mon Jul 14 19:02:38 2014
    [root@cache ~]# last -f /var/log/btmp  查看失败纪录的  -f /var/run/utmp -f /var/log/wtmp
    root     ssh:notty    36.44.101.18     Sat Jul 19 19:18   still logged in
    root     ssh:notty    36.44.101.18     Sat Jul 19 19:18 - 19:18  (00:00)
    btmp begins Sat Jul 19 19:18:54 2014

    登录记账

    登录会话(如login程序,telnet程序和sshd程序)
    /var/run/utmp
    /var/log/wtmp
    /var/log/lastlog
    [root@250-shiyan include]# less bits/utmpx.h
    [root@250-shiyan include]# less utmp.h
    [root@250-shiyan include]# less utmpx.h
    [root@250-shiyan include]# less paths.h
    [root@250-shiyan include]# pwd
    /usr/include

    一般来说,应用程序无需知道/var/run/utmp,/var/log/wtmp这些路径名,因为这些路径名是编译进glibc的。需要引用这些文件的存储位置的程序应该使用在<paths.h>(and <utmpx.h>)中定义的_path_utmp和_path_wtmp路径名常量,而不是在代码中硬编码路径名。

    wtmp和utmp文件都是二进制文件,他们不能被诸如tail命令剪贴或合并(使用cat命令)。用户需要使用who、w、users、last和ac来使用这两个文件包含的信息。
    last命令往回搜索wtmp来显示自从文件第一次创建以来登录过的用户
    lastlog命令查看各个用户最后一次登录时间
    users用单独的一行打印出当前登录的用户,每个显示的用户名对应一个登录会话
    w命令查询utmp文件并显示当前系统中每个用户和它所运行的进程信息
    who命令查询utmp文件并报告当前登录的每个用户
    ac命令根据当前的/var/log/wtmp文件中的登录进入和退出来报告用户连结的时间(小时)

    ac -d按天计算登录的时间,ac -p按用户计算登录时间,ac -d lzb查找此用户每天的登录时间
     
    包含下列结构的一个二进制记录写入这两个文件中:
      struct utmp {
      char ut_line[8]; /* tty line: "ttyh0", "ttyd0", "ttyp0", ... */
      char ut_name[8]; /* login name */
      long ut_time; /* seconds since Epoch */
      };
    登录时,login程序填写这样一个结构,然后将其写入到utmp文件中,同时也将其添写到wtmp文件中。
    注 销时,init进程将utmp文件中相应的记录擦除(每个字节都填以0 ),并将一个新记录添写到wtmp文件中。读wtmp文件中的该注销记录,其ut_name字段清除为0。在系统再启动时,以及更改系统时间和日期的前 后,都在wtmp文件中添写特殊的记录项。who( 1 )程序读utmp文件,并以可读格式打印其内容。后来的UNIX版本提供last( 1 )命令,它读wtmp文件并打印所选择的记录。wtmp文件,它跟踪各个登录和注销事件。
    wted
    wtmp/utmp日志编辑程序。你可以使用这个工具编辑所有wtmp或者utmp类型的文件。
    z2
    utmp/wtmp/lastlog日志清理工具。可以删除utmp/wtmp/lastlog日志文件中有关某个用户名的所有条目。不过,如果用于Linux系统需要手工修改其源代码,设置日志文件的位置。

    连接时间日志
    进程统计日志
    错误日志

    [root@cache ~]# rpm -qa|grep psacct
    psacct-6.3.2-63.el6_3.3.x86_64
    [root@cache ~]# service psacct stop
    Shutting down process accounting:                          [  OK  ]
    [root@test1 account]# service psacct start    服务启动
    Starting process accounting:                               [  OK  ]
    [root@test1 account]# /etc/init.d/psacct start  脚本启动
    Starting process accounting:                               [  OK  ]

    [root@test1 ~]# lastcomm pts/0          通过终端名
    [root@test1 ~]# lastcomm ls               通过命令名
    [root@test1 ~]# lastcomm oracle         通过用户名查询
    [root@cache ~]# lastcomm
    crond             SF    root     __         0.03 secs Sat Jul 19 20:01
    run-parts               root     __         0.03 secs Sat Jul 19 20:01
    S 命令由超级用户执行
    F 命令由fork产生,但没有exec
    D 命令终止并创建一个core文件
    X 命令被sigterm信号终止
    [root@cache ~]# sa
          90   32918.77re       0.02cp    15590k
           2     103.78re       0.00cp    17840k   sshd
           2       0.00re       0.00cp    40344k   rpm
          15   32719.14re       0.00cp    15922k   ***other*
           4       0.00re       0.00cp    27552k   ps
           3      95.59re       0.00cp    14420k   sftp-server
           3       0.00re       0.00cp    27104k   psacct
           6       0.00re       0.00cp     4355k   unix_chkpwd
           4       0.00re       0.00cp    29324k   ls
           7       0.00re       0.00cp    13053k   bash*

    0.36re "实际时间" 单位为分钟。
    0.12cp 系统和用户时间总数(CPU时间, 单位为分钟)。
    31156K 核心使用所占的平均CPU时间, 一个单元的大小为1KB。
    up2date 命令名。
    显示每一个用户:
    [root@test1 ~]# sa -u
    root       0.00 cpu      917k mem accton
    root       0.00 cpu    15806k mem touch
    root       0.00 cpu    16060k mem psacct
    oracle     0.07 cpu    35696k mem oracle
    oracle     0.00 cpu   327296k mem oracle           *
    [root@test1 ~]# sa -a
         245     107.25re       0.12cp    74539k
          44      57.27re       0.05cp    35697k   oracle
           4       0.04re       0.04cp    28412k   rpmq
           1       0.12re       0.03cp    78080k   yum-updatesd-he
           2      24.14re       0.00cp    16330k   sshd
           2      23.90re       0.00cp    16576k   bash
    [root@test1 ~]# sa -b
         249     110.34re       0.12cp    74947k
           4       0.04re       0.04cp    28412k   rpmq
          13       1.24re       0.03cp    14194k   ***other
          46      60.35re       0.06cp    35697k   oracle
           2      24.14re       0.00cp    16330k   sshd
           2      23.90re       0.00cp    16576k   bash
           2       0.00re       0.00cp    16464k   ps

    [root@test1 ~]# sa -m
                                          252     111.34re       0.13cp    75499k
    root                                  156      49.77re       0.07cp    12392k
    oracle                                 94      61.36re       0.06cp   181496k
    sshd                                    2       0.22re       0.00cp    16000k
    你可以通过查看re, k, cp/cpu(见上面输出解释)时间来找出可疑的活动, 或某个用户/命令占用了所有的CPU时间。如果CPU/Memeory使用数(命令)在不断增加, 可以说明命令存在问题。

    logrotate 指令

    compress 通过gzip 压缩转储以后的日志
    nocompress 不需要压缩时,用这个参数

    missingok 如果日志不存在,不会发出抱怨

    dateext  切换后的日志文件会附加上一个短横线和YYYYMMDD格式的日期,没有这个配置项会附加一个小数点加一个数字序号
    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 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
    size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及K (sizek)或者M (sizem). 

    prerotate 命令指定转储以前的动作
    /usr/bin/chattr -a 去掉/var/log/messages文件的“只追加”属性
    endscript 结束 prerotate 部分的脚本
    postrotate 指定转储后的动作
    /usr/bin/killall -HUP syslogd 用来重新初始化系统日志守护程序 syslogd
    /usr/bin/chattr +a /var/log/messages 重新为 /var/log/messages 文件指定“只追加”属性,这样防治程序员或用户覆盖此文件。
    最后的 endscript 用于结束 postrotate 部分的脚本

    1、在/etc/logrotate.d目录下创建一个nginx的配置文件"nginx"配置内容如下
    #vim /etc/logrotate.d/nginx
    /usr/local/nginx/logs/*.log {
    daily
    rotate 5
    missingok
    notifempty
    sharedscripts
    postrotate
        if [ -f /usr/local/nginx/logs/nginx.pid ]; then
            kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
        fi
    endscript
    }

    #/usr/sbin/logrotate -f /etc/logrotate.d/nginx

    4、配置文件说明
    daily:日志文件每天进行滚动
    rotate:保留最5次滚动的日志
    notifempty:日志文件为空不进行滚动
    sharedscripts:运行postrotate脚本
    下面是一个脚本
    postrotate
        if [ -f /usr/local/nginx/logs/nginx.pid ]; then
            kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
        fi
    endscript
    脚本让nginx重新生成日志文件。

    以下两步即可实现一个应用的日志轮转

    [root@109-com1 cron.daily]# cat /etc/logrotate.d/asterisk
    /var/log/asterisk/messages
    {
    missingok
    copytruncate
    create
    notifempty
    rotate 5
    }

    [root@109-com1 cron.daily]# crontab -l

    */5 * * * * /usr/sbin/logrotate /etc/logrotate.d/asterisk

    但是运行却发现每天虽然在生成新日志文件,但是日志还是被写到旧文件里去。好好研究了一下发现这错误犯的真2,rsyslog和logrotate根本就是两个软件包两回事嘛。虽然logrotate重命名了当前log,删了旧log,但是rsyslog不知道哇,打开的文件还是旧文件嘛。当然写的就是旧文件了嘛。

    经探索后发现这个问题有两种解决办法。
    1.copytruncate,拷贝后截断。
    把当前log拷贝后截断。可以理解为把内容拷贝走作为备份,然后清空当前文件。但是这有一个问题就是拷贝和截断之间会有时间差,存在丢数据的可能。
    2.给rsyslog发信号。重新打开log文件。
    在/etc/logrotate.d/zw_log里添加
    sharedscripts
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
    postrotate表示在日志轮转后执行
    sharedscripts表示zw_notice.log、zw_info.log两个日志共享这个脚本,就是说他俩轮转完成后只执行一次这个脚本,默认情况下是每个脚本轮转完成就执行一次。  

    sharedscripts...endscripts设置起来使用才行。至于可用环境为:
    prerotate:在启动logrotate之前进行的命令,例如修改日志文件的属性等;
    postrotate:在做完logrotate之后启动的命令,例如重启某个服务。

    例子:
        sharedscripts
        postrotate
        pkill -USR1 iscsiuio 2> /dev/null || true
        endscript

    /var/log/spooler
    {
        sharedscripts
        postrotate
            /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        endscript
    }

    rsyslog研究

    http://www.rsyslog.com/doc/v5-stable/configuration/basic_structure.html


    rsyslogd日志丢失的解决

    rsyslog报错误消息
    imuxsock begins to drop messages

    增加下面两个参数后,便不丢失日志
    方法1(有效)

    vi /etc/rsyslog.conf,加入下面两句,然后重启rsyslog服务即可
    $IMUXSockRateLimitInterval 0
    $SystemLogRateLimitInterval 0

    方法2(好像不怎么有效)
    $SystemLogRateLimitInterval 60
    $SystemLogRateLimitBurst 3000

  • 相关阅读:
    各国语言缩写列表,各国语言缩写-各国语言简称,世界各国域名缩写
    How to see log files in MySQL?
    git 设置和取消代理
    使用本地下载和管理的免费 Windows 10 虚拟机测试 IE11 和旧版 Microsoft Edge
    在Microsoft SQL SERVER Management Studio下如何完整输出NVARCHAR(MAX)字段或变量的内容
    windows 10 x64系统下在vmware workstation pro 15安装macOS 10.15 Catelina, 并设置分辨率为3840x2160
    在Windows 10系统下将Git项目签出到磁盘分区根目录的方法
    群晖NAS(Synology NAS)环境下安装GitLab, 并在Windows 10环境下使用Git
    使用V-2ray和V-2rayN搭建本地代理服务器供局域网用户连接
    windows 10 专业版安装VMware虚拟机碰到的坑
  • 原文地址:https://www.cnblogs.com/createyuan/p/3854801.html
Copyright © 2011-2022 走看看