精华内容
下载资源
问答
  • 日志管理

    千次阅读 2019-04-22 11:05:29
    rsyslog 系统日志管理 关心问题:哪类程序---》产生的什么日志----》放到什么地方 任务二: logrotate日志轮转 将大量的日志,分割管理,删除旧日志。 任务三: 系统信息可视化: 将来采集 -----> 分析 任务一...

    简介
    任务一:
    rsyslog 系统日志管理
    关心问题:哪类程序---》产生的什么日志----》放到什么地方
    任务二:
    logrotate日志轮转
    将大量的日志,分割管理,删除旧日志。
    任务三:
    系统信息可视化:
    将来采集 -----> 分析
    任务一详解:
    一、处理日志的进程
    第一类:
    rsyslogd: 系统专职日志程序。将绝大部分日志记录,
    和系统操作有关,安全,认证sshd,su,计划任务at,cron...
    第二类:
    httpd/nginx/mysql: 各类应用程序,可以以自己的方式记录日志
    观察 rsyslogd程序
    [root@yangs ~]# ps aux |grep rsyslogd
    root 717 0.0 0.0 219752 3880 ? Ssl 09:05 0:00 /usr/sbin/rsyslogd -n
    二、常见的日志文件(系统、进程、应用程序)
    二、常见的日志文件(系统、进程、应用程序)
    # tail /var/log/messages //系统主日志文件
    # tail -20 /var/log/messages
    # tail -f /var/log/messages //动态查看日志文件的尾部
    # tailf /var/log/secure //认证、安全
    # tail /var/log/maillog //跟邮件postfix相关
    # tail /var/log/cron //crond、at进程产生的日志
    # tail /var/log/dmesg //和系统启动相关
    # tail /var/log/audit/audit.log //系统审计日志
    # tail /var/log/yum.log //yum
    # tail /var/log/mysqld.log //MySQL
    # tail /var/log/xferlog //和访问FTP服务器相关
    # w //当前登录的用户 /var/log/wtmp
    # last //最近登录的用户 /var/log/btmp
    # lastlog //所有用户的登录情况 /var/log/lastlog

    案例1
    请大家使用xshell,ssh命令登陆服务器。
    案例1: SSH登录失败的用户
    [root@localhost ~]# grep 'Fail' /var/log/secure
    了解
    [root@localhost ~]# grep 'Fail' /var/log/secure |awk '{print $11}' |sort |uniq -c|sort -k1 -n -r |head -5
    7 172.16.130.14
    6 172.16.130.70
    5 172.16.130.56
    3 172.16.130.80
    2 172.16.130.76
    sort 分类,排序
    uniq -c 去重
    案例2
    案例2: SSH登录成功的用户
    [root@localhost ~]# grep 'Accepted' /var/log/secure
    了解
    [root@localhost ~]# grep 'Accepted' /var/log/secure |awk '{print $(NF-3)}' |sort |uniq -c
    4 111.201.131.215
    1 116.243.0.213
    1 123.120.14.32
    3 123.120.38.233
    2 221.222.199.175
    1 221.222.202.102
    三、rsyslogd配置
    1.相关程序
    yum install rsyslog logrotate
    (默认已安装)
    2.启动程序
    systemctl start rsyslog.service
    3.相关文件
    # rpm -qc rsyslog //观察日志程序的配置文件
    /etc/rsyslog.conf //rsyslogd的主配置文件(关键)
    /etc/sysconfig/rsyslog //rsyslogd相关文件,定义级别(了解一下)
    /etc/logrotate.d/syslog //和日志办轮转(切割)相关(任务二)
    主配置文件常见配置
    告诉rsyslogd进程 哪个设备,什么样的信息,以及存到哪里。
    # vim /etc/rsyslog.conf
    RULES
    RULES:即规则,是一套生成日志,以及存储日志的策略。
    由设备+级别+存放位置组成。
    由FACILITY+LEVEL+FILE组成。
    authpriv.* /var/log/secure(SSH信息)
    mail.* -/var/log/maillog(发邮件)
    cron.* /var/log/cron(创建任务)
    authpriv.* * <*代表所有终端>
    authpriv.* @192.168.10.230 <UDP>
    authpriv.* @@192.168.10.230 <TCP>
    这里有一个-符号, 表示是使用异步的方式记录, 因为日志一般会比较大
    *.info;mail.none;authpriv.none;cron.none /var/log/messages
    系统日志排除了邮件,认证,计划日志。
    @@表示通过tcp协议发送 @表示通过udp进行转发
    omprog - 发送日志给程序处理
    案例5
    通过邮件日志,了解日志记录。
    终端1
    锁定邮件日志
    tailf /var/log/maillog
    终端2
    发送电子邮件,触发生成日志。
    mail -s 'test1' root
    1234
    ctrl+D
    返回终端1,观察新生成日志。理解日志行为。
    案例6
    通过任务计划,了解日志记录。
    终端1
    tailf /var/log/cron
    终端2
    crontab -e
    观察终端1
    FACILITY&LEVEL
    目的:通过man手册理解设备和级别
    facility设备
    # man 3 syslog
    facility:是系统对某种类型事件的定义。如AUTHPRIV是安全事件,CRON是计划任务事件。
    设备如下:

    LOG_AUTH
    LOG_AUTHPRIV 安全认证
    LOG_CRON clock daemon (cron and at)
    LOG_DAEMON 后台进程
    LOG_FTP ftp daemon
    LOG_KERN kernel messages
    LOG_LOCAL0 through LOG_LOCAL7 用户自定义设备
    LOG_LPR printer subsystem
    LOG_MAIL 邮件系统mail subsystem
    LOG_NEWS news subsystem
    LOG_SYSLOG syslogd自身产生的日志
    LOG_USER (default)
    关于程序和设备的联系问题,程序自身会决定将日志交给哪类设备。如SSH程序会选择安全类设备。这一点由开发者定义。
    vim /etc/ssh/sshd_config
    SyslogFacility AUTHPRIV
    level级别
    # man 3 syslog
    level :是指遇到何种情况(正常、错误)才会记录日志。

    LOG_EMERG 紧急,致命,服务无法继续运行,如配置文件丢失
    LOG_ALERT 报警,需要立即处理,如磁盘空使用95%
    LOG_CRIT 致命行为
    LOG_ERR 错误行为
    LOG_WARNING 警告信息
    LOG_NOTICE 普通,重要的标准信息
    LOG_INFO 标准信息
    LOG_DEBUG 调试信息,排错所需,一般不建议使用
    从下到上,级别从低到高,记录的信息越来越少
    图示
    目的:通过绘图形式来理解日志工作机制。
    图示

    示例
    日志命令
    # logger "run......." //messages日志
    # logger -p emerg "run......." //所有终端
    # logger -p authpriv.info "run......."
    //secure安全日志
    四、日志收集服务器
    目的
    日志可以存放在本地
    日志可以存放在远程服务器
    实战案例
    案例1:将authpriv设备日志记录到/var/log/auth.log
    步骤:
    1.修改日志文件位置
    vim /etc/rsyslog.conf
    #authpriv.* /var/log/secure
    authpriv.* /var/log/auth.log
    2.观察日志文件。
    # ll /var/log/auth.log
    ls: 无法访问/var/log/auth.log: 没有那个文件或目录
    因为没有任何日志记录生成。
    3.重启程序,触发日志生成。
    #systemctl restart rsyslog.service
    # ll /var/log/auth.log
    -rw-------. 1 root root 964 /var/log/auth.log
    cat /var/log/auth.log
    案例2:改变应用程序sshd的日志设备为local5, 并定义local5设备日志记录到/var/log/local5.local
    步骤:
    1.设置ssh程序的日志设备为自定义设备。
    # vim /etc/ssh/sshd_config
    #SyslogFacility AUTHPRIV
    SyslogFacility LOCAL5
    2.设置自定义设备日志文件存放位置。
    # vim /etc/rsyslog.conf
    local5.* /var/log/local5.local
    3.重启生效。
    # systemctl restart sshd
    # systemctl restart rsyslog
    4.尝试登录,触发日志。
    5.观察日志。理解自定义日志设备。
    # ll /var/log/local5.local
    -rw-------. 1 root root 201 /var/log/local5.local
    cat /var/log/local5.local
    案例3:使用logger程序写日志到指定的设备及级别,并发送到集中日志服务器。
    步骤
    服务器1(10.18.41.144)发送日志
    # vim /etc/ssh/sshd_config
    #SyslogFacility AUTHPRIV
    SyslogFacility LOCAL5
    此处修改SSH只是测试
    vim /etc/rsyslog.conf
    local5.* @10.18.41.12
    此处填写另一台设备的IP地址。
    另一台设备是集中日志服务器。
    # systemctl restart sshd
    # systemctl restart rsyslog
    #systemctl stop firewalld
    # systemctl restart rsyslog
    #systemctl stop firewalld
    服务器2(10.18.41.12)接受日志
    # vim /etc/rsyslog.conf
    $ModLoad imudp
    $UDPServerRun 514
    local5.* /var/log/server152.log
    尝试ssh登录服务器1.
    并观察本地日志
    ll /var/log/server152.log
    任务二详解:
    logrotate日志轮转
    简介
    日志 , 记录了程序运行时各种信息。
    通过日志可以分析用户行为,记录运行轨迹,查找程序问题。

    可惜磁盘的空间是有限的,就像飞机里的黑匣子,记录的信息再重要也只能记录最后一段时间发生的事。

    为了节省空间和整理方便,日志文件经常需要按!时间或!大小等维度分成多份,删除时间久远的日志文件。这就是通常说的日志滚动(log rotation)。

    logrotate本身不是系统守护进程,它是通过计划任务crond每天执行
    工作原理
    1 被crond调动
    [root@yangs ~]# cat /etc/cron.daily/logrotate
    #!/bin/sh
    /usr/sbin/logrotate /etc/logrotate.conf //日志轮转,按/etc/logrotate.conf
    2 按照配置进行轮转
    配置文件种类
    logrotate 配置文件:
    主文件:/etc/logrotate.conf (决定每个日志文件如何轮转)
    子文件夹:/etc/logrotate.d/*
    观察主文件和子文件
    [root@tianyun ~]# ls /etc/logrotate.conf /etc/logrotate.d/
    /etc/logrotate.conf
    /etc/logrotate.d/:
    acpid cups iscsiuiolog ppp rpm subscription-manager up2date wpa_supplicant
    conman httpd mgetty psacct setroubleshoot syslog vsftpd.log yum
    主配置文件介绍
    [root@localhost ~]# vim /etc/logrotate.conf
    =========全局设置==========
    weekly //轮转的周期,一周轮转
    rotate 4 //保留4份
    create //轮转后创建新文件
    dateext //使用日期作为后缀
    #compress //是否压缩
    include /etc/logrotate.d //包含该目录下的子配置文件
    /var/log/wtmp { //对某日志文件设置轮转的方法
    monthly //一月轮转一次
    minsize 1M //最小达到1M才轮转
    create 0664 root utmp //轮转后创建新文件,并设置权限
    rotate 1 //保留一份
    }
    /var/log/btmp {
    missingok //丢失不提示
    monthly //每月轮转一次
    create 0600 root utmp //轮转后创建新文件,并设置权限
    rotate 1 //保留一份
    }
    例1:yum日志轮转
    例1:轮转文件/var/log/yum.log
    配置轮转规则
    # vim /etc/logrotate.d/yum
    /var/log/yum.log {
    missingok //丢失不执行
    # notifempty //空文件不论转
    # size 30k //达到30k即可轮转
    # yearly //或者一年一轮转
    daily //缩小周期到1天
    rotate 3 //轮转保留3次
    create 0777 root root
    }
    测试1
    # /usr/sbin/logrotate /etc/logrotate.conf //手动轮转
    # ls /var/log/yum*
    /var/log/yum.log //文件只有一个。因为日期没变

    # grep 'yum' /var/lib/logrotate/logrotate.status //记录所有日志文件最近轮转的时间
    "/var/log/yum.log" 2017-3-31-10:0:23 //如果没有轮转过,第一次只有记录

    修改时间,手动触发轮转
    # date 04011000
    # /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
    例2:messages日志轮转(追加属性)
    目的:
    1.设置系统日志轮转
    2.为系统日志文件增加属性。用于保护日志文件。
    准备工作:
    删除原有的 /etc/logrotate.d/syslog,关于messages的行。
    避免不同的规则互相影响。
    示例
    [root@localhost ~]# cat /etc/logrotate.d/syslog
    /var/log/cron
    /var/log/maillog
    ???????删除掉messages的行
    /var/log/secure
    /var/log/spooler
    {
    missingok
    sharedscripts
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
    }

    第一步:设置轮转
    vim /etc/logrotate.d/messages
    /var/log/messages {
    #notifempty
    daily
    create 0600 root root
    missingok
    rotate 5
    }
    测试:
    /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
    ll /var/log/message*
    发现轮转成功。
    第二步设置追加属性。
    chattr +a /var/log/messages
    测试:
    修改时间,再次手动轮转,发现轮转失败。请思考,为什么。
    /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
    第三步设置轮转脚本
    vim /etc/logrotate.d/messages
    /var/log/messages {
    prerotate
    chattr -a /var/log/messages
    endscript

    #notifempty
    daily
    create 0600 root root
    missingok
    rotate 5

    postrotate
    chattr +a /var/log/messages
    endscript
    }
    修改时间,重启rsyslog程序。进行轮转测试
    第四部总结
    chattr的a属性只能以追加的方式打开,用vi打开是不行的。可以这样写入:ls >> file
    避免日志被误删除
    例3:理解轮转后需重启的概念
    1.通过如下轮转配置示例,理解轮转后执行脚本的语法结构。
    2.轮转配置示例
    例3:/etc/logrotate.d/syslog
    /var/log/cron
    /var/log/maillog
    /var/log/secure
    /var/log/spooler
    {
    missingok
    sharedscripts
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
    }

    注释
    重启 `rsyslog ,`如果重启失败,输入到垃圾桶 || 永远为真
    1) SIGHUP 重新加载配置
    如果左侧命令执行失败了||那么就执行右侧命令。
    && || 示例说明
    1.测试一个存在的IP,返回yes
    [root@localhost ~]# ping -c 1 10.18.42.74 &> /dev/null && echo yes || echo no
    yes

    2.测试一个不存在的IP,返回NO
    [root@localhost ~]# ping -c 1 10.18.42.79 &> /dev/null && echo yes || echo no
    no

    强制轮转的命令:logrotate -f /etc/logrotate.conf
    3.通过实验4,理解重启程序的必要性。
    例4:access_log日志轮转
    预习HTTP和FD知识点
    第一步:安装网站(了解)
    第一步:安装网站(了解)
    [root@localhost ~]# yum -y install httpd
    [root@localhost ~]# echo "AAAAA" > /var/www/html/index.html
    [root@localhost ~]# systemctl start httpd
    [root@localhost ~]# firewall-cmd --permanent --add-service=http
    [root@localhost ~]# firewall-cmd --reload
    第二步:访问网站地址,观察访问日志(了解)
    第二步:访问网站地址,观察访问日志(了解)
    [root@localhost ~]# wc -l /etc/httpd/logs/access_log
    2647 /etc/httpd/logs/access_log
    [root@localhost ~]# awk '{print $1}' /etc/httpd/logs/access_log |sort |uniq -c |sort -k1 -nr
    1310 172.16.120.161
    826 172.16.120.14
    729 172.16.120.210
    638 172.16.120.107
    第三步:观察访问日志有个孪生兄弟。(了解)。
    第三步:观察访问日志有个孪生兄弟。(了解)。
    [root@localhost ~]# ll -i /etc/httpd/logs/access_log /var/log/httpd/access_log
    37552569 -rw-r--r-- 1 root root 658886 Apr 7 10:07 /etc/httpd/logs/access_log
    37552569 -rw-r--r-- 1 root root 658886 Apr 7 10:07 /var/log/httpd/access_log
    第四步:编写轮转规则,只是注释掉重启的语句。(重点理解)
    第四步:编写轮转规则,只是注释掉重启的语句。(重点理解)
    [root@localhost ~]# vim /etc/logrotate.d/httpd
    /var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    # postrotate
    # /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    # endscript
    }
    第五步:轮转,观察轮转后的日志。(了解)
    第五步:轮转,观察轮转后的日志。(了解)
    [root@localhost ~]# ll /var/log/httpd/access* -i //观察原来的日志文件和目标日志文件
    -rw-r--r-- 1 root root 664831 Apr 7 10:08 /var/log/httpd/access_log

    [root@localhost ~]# logrotate -f /etc/logrotate.conf

    [root@localhost ~]# ll /var/log/httpd/access*
    -rw-r--r-- 1 root root 0 Apr 7 10:11 /var/log/httpd/access_log
    -rw-r--r-- 1 root root 664831 Apr 7 10:08 /var/log/httpd/access_log-20170407
    重点注意:原来的文件空了。access_log文件空了。

    第六步:继续访问网站,观察日志文件...(重点理解)
    第六步:继续访问网站,观察日志文件...(重点理解)
    问题来了。原来的文件应该继续写入内容。但是依旧是空的。
    [root@localhost ~]# ls /etc/httpd/logs/* -l
    -rw-r--r-- 1 root root 0 Apr 7 10:11 /etc/httpd/logs/access_log
    -rw-r--r-- 1 root root 1522522 Apr 7 10:12 /etc/httpd/logs/access_log-20170407
    -rw-r--r-- 1 root root 0 Apr 7 10:11 /etc/httpd/logs/error_log
    -rw-r--r-- 1 root root 1124 Apr 7 10:03 /etc/httpd/logs/error_log-20170407
    第七步:根据FD观察程序打开了哪个日志
    第七步:根据FD观察程序打开了哪个日志。注意下面看的是父进程的FD。(了解)
    [root@localhost ~]# pgrep httpd
    6416
    7049
    7055
    7059
    7945
    7947
    7948
    7950
    7951
    7952
    7971
    第八步:父进程打开的依旧是轮训后的新文件。(了解)
    第八步:父进程打开的依旧是轮训后的新文件。(了解)
    因为轮训是将原来的文件改名。重新创建了一个新文件。
    老的access_log改名为access_log20170407
    新的日志文件是重新创建的。access_log文件。

    [root@localhost ~]# ll /proc/6416/fd
    total 0
    lr-x------ 1 root root 64 Apr 7 10:02 0 -> /dev/null
    lrwx------ 1 root root 64 Apr 7 10:02 1 -> socket:[76246]
    l-wx------ 1 root root 64 Apr 7 10:02 2 -> /var/log/httpd/error_log-20170407
    lrwx------ 1 root root 64 Apr 7 10:02 3 -> socket:[76890]
    lrwx------ 1 root root 64 Apr 7 10:02 4 -> socket:[76891]
    lr-x------ 1 root root 64 Apr 7 10:02 5 -> pipe:[76906]
    l-wx------ 1 root root 64 Apr 7 10:02 6 -> pipe:[76906]
    l-wx------ 1 root root 64 Apr 7 10:02 7 -> /var/log/httpd/access_log-20170407

    第九步:手动重启。观察FD调用的文件是哪个?(了解)
    第九步:手动重启。观察FD调用的文件是哪个?(了解)
    [root@localhost ~]# systemctl reload httpd


    [root@localhost ~]# ll /proc/6416/fd
    total 0
    lr-x------ 1 root root 64 Apr 7 10:02 0 -> /dev/null
    lrwx------ 1 root root 64 Apr 7 10:02 1 -> socket:[76246]
    l-wx------ 1 root root 64 Apr 7 10:02 2 -> /var/log/httpd/error_log
    lrwx------ 1 root root 64 Apr 7 10:02 3 -> socket:[76890]
    lrwx------ 1 root root 64 Apr 7 10:02 4 -> socket:[76891]
    lr-x------ 1 root root 64 Apr 7 10:02 5 -> pipe:[96182]
    l-wx------ 1 root root 64 Apr 7 10:02 6 -> pipe:[96182]
    l-wx------ 1 root root 64 Apr 7 10:02 7 -> /var/log/httpd/access_log

    第十步:继续访问网站,观察日志文件...(了解)
    第十步:继续访问网站,观察日志文件...(了解)
    [root@localhost ~]# ll /etc/httpd/logs/access_log*
    -rw-r--r-- 1 root root 1076521 Apr 7 10:17 /etc/httpd/logs/access_log
    -rw-r--r-- 1 root root 1797243 Apr 7 10:15 /etc/httpd/logs/access_log-20170407
    第十一步:启用轮转日志中的重启语句。理解该语句含义(重点理解)
    第十一步:启用轮转日志中的重启语句。理解该语句含义(重点理解)
    [root@localhost ~]# vim /etc/logrotate.d/httpd
    /var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
    /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
    }

    第十二步:修改时间,手动轮转。访问网站并观察日志大小。
    第十二步:修改时间,手动轮转。访问网站并观察日志大小。
    [root@localhost ~]# date 04101000
    Mon Apr 10 10:00:00 CST 2017
    [root@localhost ~]# logrotate -f /etc/logrotate.conf
    [root@localhost~]# ll /etc/httpd/logs/access_log*
    -rw-r--r-- 1 root root 39910 Apr 10 10:00 /etc/httpd/logs/access_log
    -rw-r--r-- 1 root root 1797243 Apr 7 10:15 /etc/httpd/logs/access_log-20170407
    -rw-r--r-- 1 root root 5131350 Apr 10 10:00 /etc/httpd/logs/access_log-20170410
    说明
    说明:
    轮转后 原日志文件 被改名,新日志 文件是创建的。
    应用程序根据inode找到日志文件进行书写,如果不重启,找寻的依旧是老的日志文件。

    展开全文
  • Linux 日志管理 Rsyslog Loganalyzer

    万次阅读 2020-03-23 10:24:04
    Linux 日志管理 Rsyslog Loganalyzer

    Syslog常被称为系统日志或系统记录,是一种用来在互联网协议(TCP/IP)的网上中传递记录档消息的标准。这个词汇常用来指涉实际的syslog 协议,或者那些提交syslog消息的应用程序或数据库。

    syslog协议属于一种主从式协议:syslog发送端会发送出一个小的文字消息(小于1024位组)到syslog接收端。接收端通常名为“syslogd”、“syslog daemon”或syslog服务器。系统日志消息可以被以UDP协议及╱或TCP协议来发送。这些数据是以明码类型被发送。不过由于SSL加密外套(例如Stunnel、sslio或sslwrap等)并非syslog协议本身的一部分,因此可以被用来透过SSL/TLS方式提供一层加密。

    Rsyslog 是syslog 的升级版,一个快速处理收集系统日志的程序,提供了高性能、安全功能和模块化设计,将多种来源输入输出转换结果到目的地。

    Rsyslog的传输方式有三种:

    • UDP 传输协议 

    • 基于传统UDP协议进行远程日志传输,也是传统syslog使用的传输协议;

    • 可靠性比较低,但性能损耗最少

    • 在网络情况比较差,或者接收服务器压力比较高情况下,可能存在丢日志情况。

    • TCP 传输协议 

    • 基于传统TCP协议明文传输,需要回传进行确认,可靠性比较高;

    • 但在接收服务器宕机或者两者之间网络出问题的情况下,会出现丢日志情况。

    • RELP 传输协议 

    • RELP(Reliable Event Logging Protocol)是基于TCP封装的可靠日志消息传输协议;

    • 是为了解决TCP 与 UDP 协议的缺点而在应用层实现的传输协议,也是三者之中最可靠的。

    • 对于线上服务器,为了日志安全起见,建议使用 RELP 协议进行传输。


    • 查看系统中 Rsyslog 版本信息

    • Rsyslog 的主配置文件为 /etc/rsyslog.conf 
    • Rsyslog 的配置主要有以下模块:
    • modules:模块,配置加载的模块,如:ModLoad imrelp  配置加载RELP传输模块
    • global directives:全局配置,配置ryslog守护进程的全局属性,比如主信息队列大小(MainMessageQueueSize)
    • rules:规则(选择器+动作),每个规则由两部分组成,selector部分和action部分,这两部分由一个或多个空格或tab分隔,selector部分指定源和日志等级,action部分指定对应的操作

    • 常用的modules

    • imudp,传统方式的UDP传输,有损耗
    • imtcp,基于TCP明文的传输,只在特定情况下丢失信息,并被广泛使用
    • imrelp,RELP传输,不会丢失信息

    • 规则(rules)

    规则的选择器(selectors)由两部分组成,设施和优先级,由点号.分隔。多个选择器用;分隔,如:*.info;mail.none

    • facility:设施,从功能或程序上对日志收集进行分类

    内建的日志设施有:
    auth(security), authpriv:认证授权和安全相关的消息
    kern:来自Linux内核的消息
    mail:邮件服务系统的各种组件
    mark:防火墙标记
    cron:周期任务计划相关的信息

    daemon:守护进程产生的信息
    news:网络消息子系统
    lpr:打印相关的日志信息
    user:用户进程相关的信息
    local0 to local7:保留,本地使用

    • priority:优先级,日志级别(由低到高)

    debug:包含详细的开发情报的信息,通常只在调试一个程序时使用
    info:情报信息,正常的系统消息,比如骚扰报告,带宽数据等,不需要处理
    notice: 不是错误情况,也不需要立即处理
    warning: 警告信息,不是错误,比如系统磁盘使用了85%等
    err:错误,不是非常紧急,在一定时间内修复即可
    crit:重要情况,如硬盘错误,备用连接丢失
    alert:应该被立即改正的问题,如系统数据库被破坏,ISP连接丢失
    emerg:紧急情况,需要立即通知技术人员

    指定级别

    功能

    *

    所有级别

    none

    没有级别

    priority

    此级别及高于此级别的所有级别

    =priority

    仅此级别

    • 动作 (action)

    action是规则描述的一部分,位于选择器的后面,规则用于处理消息。总的来说,消息内容被写到一种日志文件上,但也可以执行其他动作,比如写到数据库表中或转发到其他主机。

    写到mysql数据库中


    • 实验环境
    • LOG Server CentOS 7.5 192.168.1.2
    • LOG Client CentOS 7.5 192.168.1.3

    • 首先在 LOGServer 192.168.1.2 端安装 Rsyslog、以及RELP协议支持:rsyslog-relp
    • yum -y install rsyslog rsyslog-relp
    • 编辑 /etc/rsyslog.conf 主配置文件

    • vim /etc/rsyslog.conf

    • 在#### MODULES ####下面添加以下信息:

      $ModLoad imrelp    #开启RELP传输协议
      $InputRELPServerRun 514   #设定监听端口

    • 编辑 /etc/sysconfig/rsyslog 开启传输端口监听

    • vim /etc/sysconfig/rsyslog

      -r指定监听端口,-c2 使用兼容模式

    • SYSLOGD_OPTIONS="-r514 -c2"

    • 确认无误 启动 Rsyslog 服务

    • systemctl start rsyslog

    • 查看 514 端口是否被监听

    • ss -alnt | grep 514

    • 在服务器端用 tail -f /var/log/messages 追踪日志

    • tail -f /var/log/messages


    • 接下来在 LOGClient 192.168.1.3 端安装配置 Rsyslog
    • yum -y install rsyslog rsyslog-relp
    • 编辑 /etc/rsyslog.conf 添加以下信息:
      $ModLoad omrelp        #指定传输协议
      *.*    :omrelp:192.168.1.2:514     #设置那些LOG日志被记录以及LOG服务器IP和端口
    • 重启 Rsyslog 服务
    • systemctl restart rsyslog
    • 发送一条测试日志
    • logger -t kern -p err "This is a testlog"


    • 然后回到 LOG Server 192.168.1.2 端查看是否接收到刚才的测试 LOG
    • tail -f /var/log/messages
    • Mar 22 15:47:29 C75_192_168_1_3 kern: This is a testlog


    Loganalyzer是一款syslog日志和其他网络时间数据的web前端,它提供了对日志的简单浏览、搜索、基本分析和一些图表报告的功能。数据可以从数据库或一般syslog文本文件中获取,所有loganalyzer不需要改变现有的记录架构。基于当前的日志数据,它可以处理syslog日志消息windows事件日志记录,支持故障排除,使用户能快速查找日志数据中看出问题的解决方案。

      loganalyzer获取客户端日志会有两种保存模式,一种是直接读取客户端/var/log目录下的日志并保存到服务端该目录下,一种是读取后保存日志服务器数据库中,这里测试的是mariadb数据库

      Loganalyzer基于php开发,需要搭建php运行环境

    • 接下来在 LOGServer 192.168.1.2 端安装配置 lamp 和 日志管理工具:loganalyzer
    • lamp 具体设置请参照拙作:https://blog.csdn.net/gaofei0428/article/details/104058580https://blog.csdn.net/gaofei0428/article/details/104224132
    • yum -y install mariadb mariadb-server php php-fpm php-gd php-mysql httpd rsyslog rsyslog-mysql rsyslog-relp
    • 导入所需要的数据库和表:

    • mysql -uroot -p123456 < /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql

    • mysql-createDB.sql 是安装 rsyslog-mysql 生成的,可以用命令查看

      rpm –ql rsyslog-mysql

    • 添加、授权用户 rsyslog 使用 Syslog 库

    • mysql -uroot -p123456 -e "GRANT ALL ON Syslog.* TO 'rsyslog'@'%' IDENTIFIED BY 'rsyspass';" #需要从网络登陆,%或者 192.168.1.%,localhost只能本地登陆。

    • mysql -uroot -p123456 -e "flush privileges;"   #立即刷新权限

    • 编辑 /etc/rsyslog.conf 主配置文件

    • vim /etc/rsyslog.conf

    • 在#### MODULES ####下面添加以下信息:

      $ModLoad imrelp    #开启RELP传输协议
      $InputRELPServerRun 514   #设定监听端口

      $ModLoad ommysql   #开启 mysql 模块

    • 在#### RULES #### 下面添加

      # rule, send to mysql
      #*.*  :ommysql:database-server,database-name,database-userid,database-password
      *.*     :ommysql:192.168.1.2,Syslog,rsyslog,rsyspass

    • 从 loganalyzer 官网下载
    • wget https://download.adiscon.com/loganalyzer/loganalyzer-4.1.7.tar.gz
    • tar xf loganalyzer-4.1.7.tar.gz
    • cd loganalyzer-4.1.7
    • cp -ar ./src/* /data/web/
    • cp -ar ./contrib/*.sh /data/web/
    • cd /data/web
    • chmod +x ./*.sh
      ./configure.sh   #生成 config.php  文件,属性为 666
    • 确认无误启动服务
    • systemctl start httpd
    • systemctl start php-fpm
    • systemctl restart rsyslog
    • 打开浏览器输入 http://192.168.1.2
    • 点击 here 开始配置
    • Step 1 默认即可 点击 Next
    • Step 2 测试是否可以写入 config.php 点击 Next
    • Step 3 默认 点击 Next
    • Step 7 

      Source Type MYSQL Native  #选择 MYSQL 记录方式
      Select View  EventLog Fields  

      Database Type Options  

      Table type MonitorWare  #默认
      Database Host  192.168.1.2  #MariaDB Server IP
      Database Name  Syslog  #选择数据库
      Database Tablename  SystemEvents  #选择表,注意大小写!
      Database User  rsyslog   #MariaDB授权用户
      Database Password  rsyspass #用户密码
      Enable Row Counting   #默认

    • Step 8 Finish

    • chmod 644 /data/web/config.php

    •  LOGClient 192.168.1.3 端,编辑 /etc/rsyslog.conf 修改以下信息:
    • $Modload ommysql     
      *.* :ommysql:192.168.1.2,Syslog,rsyslog,rsyspass
    • logger -t kern -p err "This is a testlog"

     

    展开全文
  • 日志管理系统

    万次阅读 2019-06-26 11:47:19
    为什么需要日志管理系统 保留现场 自知者自明 所有即将发生的,都取决于已经发生的 数据商业化运作 1.1 日志管理系统的解决方案 机器上的日志实时收集,存储到日志中心 给日志建立索引,通过索引能很快找到...

    一.为什么需要日志管理系统

    1. 保留现场
    2. 自知者自明
    3. 所有即将发生的,都取决于已经发生的
    4. 数据商业化运作

    1.1 日志管理系统的解决方案

    1. 机器上的日志实时收集,存储到日志中心
    2. 给日志建立索引,通过索引能很快找到日志
    3. 架设web界面,在web上完成日志的搜索

    1.2 日志管理系统的困难

    1. 日志量很大,每天几十亿条
    2. 日志的实时收集,延迟控制在分钟级别
    3. 能够在线水平扩展

    1.3 业内解决方案-ELK

         ELK 不是一款软件,而是 Elasticsearch、Logstash 和 Kibana 三种软件产品的首字母缩写:

    • Elasticsearch:分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能

    • Logstash:数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置

    • Kibana:数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示

    1.3.1 简单ELK架构

          把一个 Logstash 数据搜集节点扩展到多个,分布于多台机器,将解析好的数据发送到 Elasticsearch server 进行存储,最后在 Kibana 查询、生成日志报表等 。

    1.3.2 引入消息队列的ELK架构

          使用 Logstash 从各个数据源搜集数据,然后经消息队列输出插件输出到消息队列中。目前 Logstash 支持 Kafka、Redis、RabbitMQ 等常见消息队列。然后 Logstash 通过消息队列输入插件从队列中获取数据,分析过滤后经输出插件发送到 Elasticsearch,最后通过 Kibana 展示。

    1.3.3 ELK方案的问题

    • 运维成本高,每增加一个日志收集,需要手动修改配置
    • 监控缺失,无法准确获取Logstash的状态二. 日志管理系统架构

    二. 日志收集系统架构

    2.1 组件介绍

    •  Log Agent:日志收集客户端,用来收集服务器上的日志
    •  Kafka:基于zookeeper协调的高吞吐量的分布式队列
    •  ES:elasticsearch,开源的分布式搜索引擎,给文档建立索引
    •  Hadoop:分布式计算框架,能够对大量数据进行分布式处理的平台

    2.2.1 日志采集工具介绍

                                                                Logstash

    优势:

           Logstash 主要的有点就是它的灵活性,主要因为它有很多插件,详细的文档以及直白的配置格式让它可以在多种场景下应用。我们基本上可以在网上找到很多资源,几乎可以处理任何问题。

    劣势:

            Logstash 致命的问题是它的性能以及资源消耗(默认的堆大小是 1GB)。尽管它的性能在近几年已经有很大提升,与它的替代者们相比还是要慢很多的。这里有 Logstash 与 rsyslog 性能对比以及Logstash 与 filebeat 的性能对比。它在大数据量的情况下会是个问题。另一个问题是它目前不支持缓存,目前的典型替代方案是将 Redis 或 Kafka 作为中心缓冲池:

    典型应用场景:

           因为 Logstash 自身的灵活性以及网络上丰富的资料,Logstash 适用于原型验证阶段使用,或者解析非常的复杂的时候。在不考虑服务器资源的情况下,如果服务器的性能足够好,我们也可以为每台服务器安装 Logstash 。我们也不需要使用缓冲,因为文件自身就有缓冲的行为,而 Logstash 也会记住上次处理的位置。如果服务器性能较差,并不推荐为每个服务器安装 Logstash ,这样就需要一个轻量的日志传输工具,将数据从服务器端经由一个或多个 Logstash 中心服务器传输到 Elasticsearch:随着日志项目的推进,可能会因为性能或代价的问题,需要调整日志传输的方式(log shipper)。当判断 Logstash 的性能是否足够好时,重要的是对吞吐量的需求有着准确的估计,这也决定了需要为 Logstash 投入多少硬件资源。

                                                                 Filebeat

    优势:

           Filebeat 只是一个二进制文件没有任何依赖。它占用资源极少,尽管它还十分年轻,正式因为它简单,所以几乎没有什么可以出错的地方,所以它的可靠性还是很高的。它也为我们提供了很多可以调节的点,例如:它以何种方式搜索新的文件,以及当文件有一段时间没有发生变化时,何时选择关闭文件句柄。

    劣势:

          Filebeat 的应用范围十分有限,所以在某些场景下我们会碰到问题。例如,如果使用 Logstash 作为下游管道,我们同样会遇到性能问题。正因为如此,Filebeat 的范围在扩大。开始时,它只能将日志发送到 Logstash 和 Elasticsearch,而现在它可以将日志发送给 Kafka 和 Redis,在 5.x 版本中,它还具备过滤的能力。

    典型应用场景:

          Filebeat 在解决某些特定的问题时:日志存于文件,我们希望将日志直接传输存储到 Elasticsearch。这仅在我们只是抓去(grep)它们或者日志是存于 JSON 格式(Filebeat 可以解析 JSON)。或者如果打算使用 Elasticsearch 的 Ingest 功能对日志进行解析和丰富。将日志发送到 Kafka/Redis。所以另外一个传输工具(例如,Logstash 或自定义的 Kafka 消费者)可以进一步丰富和转发。这里假设选择的下游传输工具能够满足我们对功能和性能的要求。

                                                                 Logagent

    优势:

           可以获取 /var/log 下的所有信息,解析各种格式(Elasticsearch,Solr,MongoDB,Apache HTTPD等等),它可以掩盖敏感的数据信息,例如,个人验证信息(PII),出生年月日,信用卡号码,等等。它还可以基于 IP 做 GeoIP 丰富地理位置信息(例如,access logs)。同样,它轻量又快速,可以将其置入任何日志块中。在新的 2.0 版本中,它以第三方 node.js 模块化方式增加了支持对输入输出的处理插件。重要的是 Logagent 有本地缓冲,所以不像 Logstash ,在数据传输目的地不可用时会丢失日志。

    劣势:

          尽管 Logagent 有些比较有意思的功能(例如,接收 Heroku 或 CloudFoundry 日志),但是它并没有 Logstash 灵活。

    典型应用场景:

          Logagent 作为一个可以做所有事情的传输工具是值得选择的(提取、解析、缓冲和传输)。

     

                                                            tailf示例:

    package main
    
    import (
    	"fmt"
    	"github.com/hpcloud/tail"
    	"time"
    )
    func main() {
    	filename := "./my.log"
    	tails, err := tail.TailFile(filename, tail.Config{
    		ReOpen:    true,
    		Follow:    true,
    		Location:  &tail.SeekInfo{Offset: 0, Whence: 2},
    		MustExist: false,
    		Poll:      true,
    	})
    	if err != nil {
    		fmt.Println("tail file err:", err)
    		return
    	}
    	var msg *tail.Line
    	var ok bool
    	for true {
    		msg, ok = <-tails.Lines
    		if !ok {
    			fmt.Printf("tail file close reopen, filename:%s\n", tails.Filename)
    			time.Sleep(100 * time.Millisecond)
    			continue
    		}
    		fmt.Println("msg:", msg)
    	}
    }
    

    2.2.2 Kafka介绍

    介绍:

            Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。

    Kafka的特性:

           高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。

    • 可扩展性:kafka集群支持热扩展
    • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
    • 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
    • 高并发:支持数千个客户端同时读写

    Kafka的应用场景:

    • 异步处理:把非关键流程异步化,提高系统的响应时间和健壮性

     

    • 应用解耦:通过消息队列

    • 流量削峰:缓存消息

     

    Kafka的原理:

            两个服务器Kafka群集,托管四个分区(P0-P3),包含两个使用者组。消费者组A有两个消费者实例,B组有四个消费者实例。每个实例(server)成为broker。无论是kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。

     

     

          一个Topic可以认为是一类消息,每个topic将被分成多个partition(区),每个partition在存储层面是append log文件。任何发布到此partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量),offset为一个long型数字,它是唯一标记一条消息。它唯一的标记一条消息。kafka并没有提供其他额外的索引机制来存储offset,因为在kafka中几乎不允许对消息进行“随机读写”。

    Kafka使用示例:

    package main
    
    import (
    	"fmt"
    	"github.com/Shopify/sarama"
    )
    
    func main() {
    	config := sarama.NewConfig()
    	config.Producer.RequiredAcks = sarama.WaitForAll
    	config.Producer.Partitioner = sarama.NewRandomPartitioner
    	config.Producer.Return.Successes = true
    
    	msg := &sarama.ProducerMessage{}
    	msg.Topic = "nginx_log"
    	msg.Value = sarama.StringEncoder("this is a good test, my message is good")
    
    	client, err := sarama.NewSyncProducer([]string{"192.168.31.177:9092"}, config)
    	if err != nil {
    		fmt.Println("producer close, err:", err)
    		return
    	}
    
    	defer client.Close()
    
    	pid, offset, err := client.SendMessage(msg)
    	if err != nil {
    		fmt.Println("send message failed,", err)
    		return
    	}
    
    	fmt.Printf("pid:%v offset:%v\n", pid, offset)
    }
    

    2.2.3 Elasticsearch介绍

    介绍:

            Elasticsearch(ES)是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,ES能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。

    Near Realtime(NRT) 几乎实时

    Elasticsearch是一个几乎实时的搜索平台。意思是,从索引一个文档到这个文档可被搜索只需要一点点的延迟,这个时间一般为毫秒级。

    Cluster 集群

           群集是一个或多个节点(服务器)的集合, 这些节点共同保存整个数据,并在所有节点上提供联合索引和搜索功能。一个集群由一个唯一集群ID确定,并指定一个集群名(默认为“elasticsearch”)。该集群名非常重要,因为节点可以通过这个集群名加入群集,一个节点只能是群集的一部分。

           确保在不同的环境中不要使用相同的群集名称,否则可能会导致连接错误的群集节点。例如,你可以使用logging-dev、logging-stage、logging-prod分别为开发、阶段产品、生产集群做记录。

    Node节点

          节点是单个服务器实例,它是群集的一部分,可以存储数据,并参与群集的索引和搜索功能。就像一个集群,节点的名称默认为一个随机的通用唯一标识符(UUID),确定在启动时分配给该节点。如果不希望默认,可以定义任何节点名。这个名字对管理很重要,目的是要确定你的网络服务器对应于你的ElasticSearch群集节点。

           我们可以通过群集名配置节点以连接特定的群集。默认情况下,每个节点设置加入名为“elasticSearch”的集群。这意味着如果你启动多个节点在网络上,假设他们能发现彼此都会自动形成和加入一个名为“elasticsearch”的集群。

          在单个群集中,您可以拥有尽可能多的节点。此外,如果“elasticsearch”在同一个网络中,没有其他节点正在运行,从单个节点的默认情况下会形成一个新的单节点名为"elasticsearch"的集群。

    Index索引

           索引是具有相似特性的文档集合。例如,可以为客户数据提供索引,为产品目录建立另一个索引,以及为订单数据建立另一个索引。索引由名称(必须全部为小写)标识,该名称用于在对其中的文档执行索引、搜索、更新和删除操作时引用索引。在单个群集中,您可以定义尽可能多的索引。

    Type类型

           在索引中,可以定义一个或多个类型。类型是索引的逻辑类别/分区,其语义完全取决于您。一般来说,类型定义为具有公共字段集的文档。例如,假设你运行一个博客平台,并将所有数据存储在一个索引中。在这个索引中,您可以为用户数据定义一种类型,为博客数据定义另一种类型,以及为注释数据定义另一类型。

     Document文档

          文档是可以被索引的信息的基本单位。例如,您可以为单个客户提供一个文档,单个产品提供另一个文档,以及单个订单提供另一个文档。本文件的表示形式为JSON(JavaScript Object Notation)格式,这是一种非常普遍的互联网数据交换格式。在索引/类型中,您可以存储尽可能多的文档。请注意,尽管文档物理驻留在索引中,文档实际上必须索引或分配到索引中的类型。

    Shards & Replicas分片与副本

           索引可以存储大量的数据,这些数据可能超过单个节点的硬件限制。例如,十亿个文件占用磁盘空间1TB的单指标可能不适合对单个节点的磁盘或可能太慢服务仅从单个节点的搜索请求。为了解决这一问题,Elasticsearch提供细分你的指标分成多个块称为分片的能力。当你创建一个索引,你可以简单地定义你想要的分片数量。每个分片本身是一个全功能的、独立的“指数”,可以托管在集群中的任何节点。

    Shards分片的重要性主要体现在以下两个特征:

    • 分片允许您水平拆分或缩放内容的大小
    • 分片允许你分配和并行操作的碎片(可能在多个节点上)从而提高性能/吞吐量,这个机制中的碎片是分布式的以及其文件汇总到搜索请求是完全由ElasticSearch管理,对用户来说是透明的。

           在同一个集群网络或云环境上,故障是任何时候都会出现的,拥有一个故障转移机制以防分片和结点因为某些原因离线或消失是非常有用的,并且被强烈推荐。为此,Elasticsearch允许你创建一个或多个拷贝,你的索引分片进入所谓的副本或称作复制品的分片,简称Replicas。

    Replicas的重要性主要体现在以下两个特征:

    • 副本为分片或节点失败提供了高可用性。为此,需要注意的是,一个副本的分片不会分配在同一个节点作为原始的或主分片,副本是从主分片那里复制过来的。
    • 副本允许用户扩展你的搜索量或吞吐量,因为搜索可以在所有副本上并行执行。

     Elasticsearch代码示例:

    package main
    
    import (
    	"fmt"
    	elastic "gopkg.in/olivere/elastic.v2"
    )
    
    type Tweet struct {
    	User    string
    	Message string
    }
    
    func main() {
    	client, err := elastic.NewClient(elastic.SetSniff(false), elastic.SetURL("http://192.168.31.177:9200/"))
    	if err != nil {
    		fmt.Println("connect es error", err)
    		return
    	}
    
    	fmt.Println("conn es succ")
    
    	tweet := Tweet{User: "olivere", Message: "Take Five"}
    	_, err = client.Index().
    		Index("twitter").
    		Type("tweet").
    		Id("1").
    		BodyJson(tweet).
    		Do()
    	if err != nil {
    		// Handle error
    		panic(err)
    		return
    	}
    
    	fmt.Println("insert succ")
    }
    

     

    展开全文
  • pomelo日志管理

    千次阅读 2019-03-25 10:51:28
    日志管理 pomelo 日志是通过 pomelo-logger 模块来管理的,pomelo-logger 是对 log4js 的简单封装,并提供了一些非常有用的 feature。 日志是通过 category 来进行管理与维护的,可以在log4js.json文件中进行配置 { ...

    日志管理

    pomelo 日志是通过 pomelo-logger 模块来管理的,pomelo-logger 是对 log4js 的简单封装,并提供了一些非常有用的 feature。

    日志是通过 category 来进行管理与维护的,可以在log4js.json文件中进行配置

    {
      "appenders": [
        {
          "type": "console"
        },
        {
          "type": "file",
          "filename": "./logs/con-log-${opts:serverId}.log",
          "pattern": "connector",
          "maxLogSize": 1048576,
          "layout": {
            "type": "basic"
          },
          "backups": 5,
          "category": "con-log"
        },
        {
          "type": "file",
          "filename": "./logs/rpc-log-${opts:serverId}.log",
          "maxLogSize": 1048576,
          "layout": {
            "type": "basic"
          },
          "backups": 5,
          "category": "rpc-log"
        },
        {
          "type": "file",
          "filename": "./logs/forward-log-${opts:serverId}.log",
          "maxLogSize": 1048576,
          "layout": {
            "type": "basic"
          },
          "backups": 5,
          "category": "forward-log"
        },
        {
         "type": "file",
         "filename": "./logs/rpc-debug-${opts:serverId}.log",
         "maxLogSize": 1048576,
         "layout": {
          "type": "basic"
         },
         "backups": 5,
         "category": "rpc-debug"
        },
        {
          "type": "file",
          "filename": "./logs/crash.log",
          "maxLogSize": 1048576,
          "layout": {
            "type": "basic"
          },
          "backups": 5,
          "category":"crash-log"
        },
        {
          "type": "file",
          "filename": "./logs/admin.log",
          "maxLogSize": 1048576,
          "layout": {
              "type": "basic"
            }
          ,"backups": 5,
          "category":"admin-log"
        },
        {
          "type": "file",
          "filename": "./logs/pomelo.log",
          "maxLogSize": 1048576,
          "layout": {
              "type": "basic"
            }
          ,"backups": 5,
          "category":"pomelo"
        }
      ],
    
      "levels": {
        "rpc-log" : "ERROR",
        "forward-log": "ERROR"
      },
    
      "replaceConsole": true,
      "lineDebug": false
    }
    
    

    从配置文件中可以看出,每一项(除了console项)都配了category,pomelo-logger 通过 getLogger 的第一个参数指定 category 来把该logger输出的日志定向到该category配置的文件或者其它输出方案。
    你可以添加自己的category,并在getLogger指定该category,你就可以把日志定向到该category所配的输出方案
    注意:不建议使用不指定category的方式来进行配置,这样子所有的logger都会定向到该全局的输出方案

    日志category

    在pomelo中有些指定的category用于输出日志:

    • pomelo: 输出 pomelo 框架里的日志
    • admin-log: 输出 pomelo-admin 用于监控client登陆master时输出的日志
    • crash-log: 输出服务器crash异常时的日志信息
    • rpc-debug: 输出 rpc-debug 的日志,需要开启 rpc-debug 模式
    • forward-log : 输出从前端服务器转发到后端服务器的请求日志
    • rpc-log: 输出 rpc filter 上的日志
    • con-log: 输出 handler filter 上的日志

    日志levels

    可以通过指定日志的levels来控制输出的日志

    "levels": {
        "rpc-log" : "ERROR",
        "forward-log": "ERROR"
    }
    

    日志等级从左到右依次提升:

    TRACE, DEBUG, INFO, WARN, ERROR, FATAL
    

    在levels上等级配的越低,输出的日志范围则越大
    相反,则输出的日志范围越小
    比如:

    var rpc_logger = require('pomelo-logger').getLogger('rpc-log', __filename);
    rpc_logger.info("msg");
    

    这里rpc_logger的输出日志等级是 INFO,而 levels 上配的是 ERROR
    那么该日志就不会被输出到对应的appenders上面
    你需要levels改成低于 INFO 的级别,比如 DEBUG 才会把 rpc_logger 的日志输出

    日志配置项说明

    • type: 指定appenders的类型,可以是console, dataFile, file 等,具体详见 log4js
    • filename: 指定输出文件的路径
    • pattern:指定输出日志的pattern
    • maxLogSize:指定输出日志的最大大小
    • layout:指定输出的layout样式
    • backups:指定最大输出的文件数目
    • category:指定该appender对应的category,如果没有该项,说明该appender是一个全局的appender
    • replaceConsole:指定是否替换默认的console
    • lineDebug:指定是否开启debug显示日志行数
    展开全文
  • Linux日志管理   对运维人员来说,无论管理什么系统,对日志文件的监控、调用、管理都是其中重要的一部分。服务器问题的解决都是从查看系统(错误)日志开始的。本篇文章,我们就来了解一下Linux系统中的日志管理...
  • Linux 日志管理

    千次阅读 2020-02-27 18:08:26
    rsyslog 系统日志管理 一、处理日志的进程 第一类: rsyslogd: 系统专职日志程序。 处理绝大部分日志记录, 系统操作有关的信息,如登录信息,程序启动关闭信息,错误信息 第二类: httpd/nginx/mysql: 各类应用...
  • 用户日志管理

    万次阅读 2018-06-20 15:13:30
    摘要本发明涉及应用系统日志管理技术领域,提供了一种日志管理方法和系统,所述方法包括如下步骤:S1:初始化系统业务功能列表和业务功能方法列表;S2:将业务操作中的具体操作信息与系统日志表和历史数据日志表直接...
  • rsyslog日志管理

    千次阅读 2018-06-27 21:49:53
    Rsyslog日志管理系统 一、常见的系统日志 日志格式:文本日志/二进制日志/数据库日志 默认的相关日志文件: /var/log/boot.log 系统引导日志,记录开机启动信息 /var/log/dmesg 核心的启动日志 /var/log/...
  • Rsyslog日志管理

    千次阅读 2018-08-13 20:49:29
    Linux日志管理 时间是日志管理的必要条件,必须要保持准确 CentOS系统中综合日志记录的内容存放在 /var/log/messages 文件中 日志的事件记录格式:  日期时间 主机 进程[pid]: 事件内容 在Centos6、7开始...
  • 系统日志管理

    千次阅读 2018-07-28 17:27:41
    系统日志管理 一.什么是系统日志  1.系统日志  由进程产生,可以监控系统中发生的事件,便于用户检查维护,保护系统安全。  2.日志管理 1.rsyslog ##此服务时用来采集系统日志的,他不产生日志,只是起到...
  • Greenplum的日志管理

    千次阅读 2020-05-03 17:59:02
    Greenplum的日志管理 本篇文档首先介绍GP的日志架构,日志工具的使用说明,然后介绍一下日志的定期清理配置案例 目录 Greenplum的日志管理 日志架构 日志路径 日志说明 日志常用的参数和配置方案 日志...
  • Nodejs日志管理之日志切割

    千次阅读 2018-10-12 05:00:03
    下面就说下nodejs在实战中的日志管理 日志管理一般有两种,一种是上传到日志服务器,一种是本地保存。 每个公司实现情况不一样,下面只说下本地保存的方案。 基础pm2的日志切割 使用pm2自带的日志切割插件,pm2-...
  • yarn日志管理

    千次阅读 2019-01-28 11:52:14
    在yarn上运行的程序,日志管理是由NodeManager进行管理的。其目录结构如下: NodeManager会在所有目录上为同一个应用程序建立相同的目录结构,并会采用轮询的调度方式将这些目录分配给不同的Container使用。每个...
  • Tomcat日志管理(二)

    万次阅读 2018-03-07 23:44:56
    Tomcat日志管理与配置
  • SAP 日志管理

    千次阅读 2016-10-19 16:29:50
    SAP提供了一系列的标准功能,包括日志管理 我总结了一下,点击进入查看:SAP 日志管理 更多SAP技术文章,可以关注我的公众号 公众号:SAP Technical
  • skynet日志管理

    千次阅读 2018-02-27 17:25:48
    在config里面可以配置自己的日志管理 logger:日志输出目录 daemon 配置 daemon = "./skynet.pid" 可以以后台模式启动 skynet 。 logger = “./skynet.log"配置后台模式下日志输出的目录文件 ...
  • Tomcat日志管理(一)

    万次阅读 2018-03-07 21:50:38
    官方文档地址:http://tomcat.apache.org/tomcat-7.0-doc/logging.htmlTomcat JULITomcat 的日志管理功能是借助于 Apache Commons Logging库来实现的,该库对当今几个流行的日志框架的精简和封装,从而使得 Tomcat ...
  • 日志管理ELK

    千次阅读 2018-03-13 15:52:42
    运维架构日志管理ELK:ElasticSearch 、 Logstash 和 Kibana 介绍,结合redis安装配置及展示更多干货分布式实战(干货)spring cloud 实战(干货)mybatis 实战(干货)spring boot 实战(干货)React 入门实战...
  • JavaWeb 日志管理

    千次阅读 2017-11-28 10:48:23
    java web 开发日志管理 核心工具类 LogAopAction.java(切口类) @Aspect public class LogAopAction { //注入初始化service private InitServiceImp initServiceImp; public void setInitServiceImp...
  • linux基础之日志管理

    千次阅读 热门讨论 2020-02-28 20:53:01
    日志管理 分为两类 1.rsyslog 系统日志管理 2.logrotate 日志轮转 一 . 处理日志的进程 rsyslogd:系统专职日志程序。处理绝大部分日志记录,系统操作有关的信息,如登陆信息,程序启动关闭信息,错误信息 二 . 常见...
  • Java系统日志管理

    万次阅读 2018-07-06 15:24:06
    在一个系统中日志管理是一个很重要的部分,因为当系统发布到线网后出了问题只能看系统日志了,这个时候系统日志起到了一个错误排查功能,同时也可以通过系统日志统计用户吞吐量等等,总之系统日志是系统管理一个重点...
  • java程序日志管理

    千次阅读 2017-02-22 19:59:06
    初入软件开发这一行的人,可能对日志管理的概念并不是很明确,大概是由于经验所限,以至于根本还考虑不到这个问题。 而从某种意义上来说,日志管理实际上也不需要初入这一行的人来管,他们只需要负责实现自己的主要...
  • Spring AOP实现后台管理系统日志管理

    万次阅读 多人点赞 2017-02-08 15:31:52
    AOP+注解 实现后台管理系统日志管理
  • 一、引言 不管什么程序,一般都会有日志的。哪怕你在浏览器上网访问了一个网站,也会有...二、了解日志管理 我们查看nginx安装目录下有个logs,包含了三个文件 "access.log 、error.log、nginx.pid"。 ...
  • 傻瓜式为springcloud服务添加日志管理,按步骤执行即可。 -&amp;gt;整体逻辑(反向开发) preprocess-service: 请求-&amp;gt;PreprocessController-&amp;gt;SysLoggerAspect-&amp;gt;LoggerService...
  • 实现node日志管理

    2019-06-14 08:47:25
    比如权限验证,比如异常处理,比如日志管理。 在看log4js使用方法的时候突然想到自己就可以实现简单的业务,不需要借助组件,虽然简单但是实现了挺开心的。 为什么需要日志管理 自己的node项目写了一段时间了,但...
  • 日志管理(一)-日志级别

    千次阅读 2019-07-22 21:59:43
    日志管理在我们开发中极其的重要,我们可以通过日志来定位问题,也可以来统计所需要的内容。Java中使用比较多日志框架有:log4j,logback。logback是log4j的优化版,由同一个作者开发,在速度和性能上都超过其他的...
  • Spring Boot 日志管理

    千次阅读 2018-08-28 19:25:29
    好的日志管理可以快速定位问题出现的位置,也可以提高代码的阅读性。这篇博文主要介绍一下 Spring Boot 中关于日志方面的知识。 一、Logging 介绍 Spring Boot 为 Java Util Logging,Log4J2 和 Logback 提供了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,186
精华内容 21,274
关键字:

日志管理