10月10日 日志管理

1、rsyslog介绍

  • 术语,参见man logger
    facility:设施,从功能或程序上对日志进行归类
    auth, authpriv, cron, daemon,ftp,kern, lpr, mail, news, security(auth), user, uucp, local0-local7, syslog
    Priority 优先级别,从低到高排序
    debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic),优先级越低记录的越详细,越高记录的都是一些大的事件,比如出现严重错误的时候才记录日志,记录的越详细越消耗cpu。
    参看帮助:man 3 syslog
  • 程序包:rsyslog
    主程序:/usr/sbin/rsyslogd
    CentOS 6:service rsyslog{start|stop|restart|status}
    CentOS 7:/usr/lib/systemd/system/rsyslog.service
    rsyslog是一个服务,用于管理日志的一个服务程序
    配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/.conf
    库文件:/lib64/rsyslog/
    .so
    配置文件格式:由三部分组成
    MODULES:相关模块配置
    GLOBAL DIRECTIVES:全局配置
    RULES:日志记录相关的规则配置
  • RULES配置格式:facility.priority;facility.priority… target
    facility:
    *: 所有的facility
    facility1,facility2,facility3,...:指定的facility列表
    priority:
    : 所有级别
    none:没有级别,即不记录
    PRIORITY:指定级别(含)以上的所有级别
    =PRIORITY:仅记录指定级别的日志信息
    target:
    文件路径:通常在/var/log/,文件路径前的-表示异步写入
    用户:将日志事件通知给指定的用户,
    表示登录的所有用户
    日志服务器:@host,把日志送往至指定的远程服务器记录
    管道:| COMMAND,转发给其它命令处理
  • 示例修改sshd服务的日志写到/var/log/sshd.log
1、修改sshd服务的配置文件
vim /etc/ssh/sshd_config 
SyslogFacility local2  --定义一个日志的设施为local2,也就是sshd服务的日志被分类为local2
LogLevel INFO   ---定义日志级别
2、修改rsyslog服务的配置文件
vim /etc/rsyslog.conf 
local2.*            /var/log/sshd.log   ---表示设施为local2的日志的所有级别都写到后面的目录内
3、重启服务
systemctl restart sshd
systemctl restart rsyslog.service 
4、测试
logger -p local2.info "this is a test log"   -p选项用于指定发送的日志为哪种设施哪种级别
[root@centos7 ~]#cat /var/log/sshd.log   ---发现已经写到日志里
Oct 11 15:58:41 centos7 root: this is a test log
  • 示例sshd服务的日志发送给root和zhang用户
vim /etc/rsyslog.conf 
local2.*               zhang,root
systemctl restart rsyslog.service 
测试
[root@centos7 ~]#logger -p local2.info "this is a secend log"
[root@centos7 ~]# root:this is a secend log  ---发现root用户收到这个日志

2、基于udp或tcp的远程日志

两台主机,a为日志服务器,b为应用服务器
- 基于udp的远程日志
在a上操作
vim /etc/rsyslog.conf
$ModLoad imudp  ---表示指定加载哪个模块
$UDPServerRun 514   ---表示指定监听哪个端口
systemctl restart rsyslog
ss -nul   ---可以发现udp的514端口已经打开,处于监听状态
tail -f /var/log/messages   ---跟踪日志
在b上操作
vim /etc/rsyslog.conf
*.info                                          @172.18.21.107  ---表示设施为所有级别为info的应用程序的日志就发送给远程主机a
service rsyslog restart 
logger  "this is a log"     ---测试发送一个日志,发现在a上可以收到这个日志
- 基于tcp的远程日志
在a上操作
vim /etc/rsyslog.conf
$ModLoad imtcp   ---表示指定加载哪个模块
$InputTCPServerRun 514   ---表示指定监听哪个端口
systemctl restart rsyslog
ss -ntl   ---可以发现tcp的514端口已经打开,处于监听状态
tail -f /var/log/messages   ---跟踪日志
在b上操作
vim /etc/rsyslog.conf
*.info                                          @@172.18.21.107  ---表示设施为所有级别为info的应用程序的日志就发送给远程主机a,注意这里要和udp区别开有两个@@
logger  "this is a log"     ---测试发送一个日志,发现在a上可以收到这个日志

3、其它日志

/var/log/secure:系统安装日志,文本格式,应周期性分析
/var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行查看
/var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查看
/var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看
/var/log/dmesg:系统引导过程中的日志信息,文本格式
文本查看工具查看
专用命令dmesg查看
/var/log/messages :系统中大部分的信息
/var/log/anaconda : anaconda的日志

4、日志管理journalctl

Systemd统一管理所有Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件/etc/systemd/journald.conf

查看所有日志(默认情况下,只保存本次启动的日志)
journalctl
查看内核日志(不显示应用日志)
journalctl -k
查看系统本次启动的日志
journalctl -b
journalctl -b -0
查看上一次启动的日志(需更改设置)
journalctl -b -1
查看指定时间的日志
journalctl --since="2017-10-30 18:10:30"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl --since "2017-01-10" --until "2017-01-11 03:00"
journalct l--since 09:00 --until "1 hour ago"
显示尾部的最新10行日志
journalctl -n
显示尾部指定行数的日志
journalctl -n 20
实时滚动显示最新日志
journalctl -f
查看指定服务的日志
journalctl /usr/lib/systemd/systemd
查看指定进程的日志
journalctl _PID=1
查看某个路径的脚本的日志
journalctl /usr/bin/bash
查看指定用户的日志
journalctl _UID=33 --since today
查看某个Unit 的日志
journalctl -u nginx.service
journalctl -u nginx.service--since today
实时滚动显示某个Unit 的最新日志
journalctl -u nginx.service-f
合并显示多个Unit 的日志
journalctl -u nginx.service -u php-fpm.service--since today
查看指定优先级(及其以上级别)的日志,共有8级
0: emerg;1: alert;2: crit;3: err;4: warning;5: notice;6: info;7: debug
journalctl -p err -b
日志默认分页输出,--no-pager 改为正常的标准输出
journalctl --no-pager
以JSON 格式(单行)输出
journalctl-b -u nginx.service-o json
以JSON 格式(多行)输出,可读性更好
journalctl -b -u nginx.serviceqq -o json-pretty
显示日志占据的硬盘空间
journalctl --disk-usage
指定日志文件占据的最大空间
journalctl --vacuum-size=1G
指定日志文件保存多久
journalctl --vacuum-time=1years

5、rsyslog将日志记录于MySQL中

准备两台主机a和b,a为rsyslog服务器,b为数据库服务器,也就是将a中应用产生的日志发送到b的数据库中

在a上的操作
在rsyslog服务器上安装mysql模块相关的程序包
yum install rsyslog-mysql
[root@centos7 ~]#rpm -ql rsyslog-mysql ---这个程序包生成的文件一个为模块文件,也就是rsyslog服务要将日志发送到数据库中需要安装相应的模块,另外一个为创建数据库和表的文件
/usr/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog-7.4.7/mysql-createDB.sql
[root@centos7 ~]#cat /usr/share/doc/rsyslog-7.4.7/mysql-createDB.sql    ---要将日志发送到数据库中需要在对应的数据库服务器上创建如下的数据库和表,注意数据库名的第一个字母为大写
CREATE DATABASE Syslog;
USE Syslog;
CREATE TABLE SystemEvents
(
        ID int unsigned not null auto_increment primary key,
        CustomerID bigint,
        ReceivedAt datetime NULL,
        DeviceReportedTime datetime NULL,
        Facility smallint NULL,
        Priority smallint NULL,
        FromHost varchar(60) NULL,
        Message text,
        NTSeverity int NULL,
        Importance int NULL,
       EventSource varchar(60),
        EventUser varchar(60) NULL,
        EventCategory int NULL,
        EventID int NULL,
        EventBinaryData text NULL,
        MaxAvailable int NULL,
        CurrUsage int NULL,
        MinUsage int NULL,
        MaxUsage int NULL,
        InfoUnitID int NULL ,
        SysLogTag varchar(60),
        EventLogType varchar(60),
        GenericFileName VarChar(60),
        SystemID int NULL
);

CREATE TABLE SystemEventsProperties
(
        ID int unsigned not null auto_increment primary key,
        SystemEventID int NULL ,
        ParamName varchar(255) NULL ,
        ParamValue text NULL
);
[root@centos7 ~]#scp /usr/share/doc/rsyslog-7.4.7/mysql-createDB.sql 172.18.21.106:/app  ---将这个文件发送到b上
[root@centos7 ~]#vim /etc/rsyslog.conf
$ModLoad ommysql     ---在配置文件要加载这个模块
local2.*                                                :ommysql:172.18.21.106,Syslog,lo
guser,1   ---同时用这个模块将日志发送到远程的数据库服务器上,格式为模块名字,数据库ip地址,数据库的名字,授权管理数据库的用户名,密码
[root@centos7 ~]#systemctl restart rsyslog  ---重新启动服务
在b上操作
[root@centos6 app]#mysql -uroot -p"1"< mysql-createDB.sql   ---用标准输入的重定向读取后面文件中的内容,进行创建文件中规定的数据库和表
[root@centos6 app]#mysql -uroot -p"1"
mysql> show databases;  ---查看一下数据库,发现已经生成
mysql> use Syslog;
mysql> show tables;   ---查看表,发现表已经生成
mysql> grant all on Syslog.* to loguser@'172.18.%' identified by "1"  ;---授权一个用户去管理这个数据库
mysql> select count(*) from SystemEvents;  ---查看表中记录的条数,发现为0
在a上测试一下,发起一个日志
[root@centos7 ~]#logger -p local2.info "this is a test log"  ---发起一个日志,设施为local2,级别为info,配置文件中规定这种类型的日志会发送到数据库中,注意local2后面要加级别,不能用*,否则识别不了
在b数据库服务器上操作
mysql> select count(*) from SystemEvents ;  ---发现条数变成1,说明发送到数据库成功
mysql> select * from SystemEvents \G;   ---因为列比较长,可以将列分成一行一行的看,第一列第一行,第二列第一行。。。。

6、通过loganalyzer展示数据库中的日志

准备三台主机,a为rsyslog日志服务器,b为数据库服务器,c为lap服务器,在上面5的基础上进行的操作,a和b已经搭建好了。只需要在c上操作即可

在c上进行的操作,要搭建lap服务
yum install httpd php php-mysql php-gd
vim /etc/httpd/conf/httpd.conf 
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>
systemctl start httpd
测试php是否可以连接数据库
vim /var/www/html/index.php 
<?php
$mysqli=new mysqli("172.18.21.106","loguser","1");
if(mysqli_connect_errno()){
echo "连接数据库失败!";
$mysqli=null;
exit;
}
echo "连接数据库成功!";
$mysqli->close();
phpinfo();
?>
访问网站http://172.18.21.7/,看是否连接数据库成功
cd /app
tar xvf loganalyzer-4.1.5.tar.g  
cd loganalyzer-4.1.5/
cp -r src/ /var/www/html/log  ---只将src目录拷贝到httpd网站的主目录下,src目录下有很多写好的php程序代码,有很多以.php结尾的文件
[root@redhat7 html]#cd /app/loganalyzer-4.1.5/contrib/
[root@redhat7 contrib]#ls
configure.sh  secure.sh
[root@redhat7 contrib]#cat configure.sh ---这是一个脚本
#!/bin/sh
touch config.php
chmod 666 config.php
cd /var/www/html/log/    ---进入此目录下
touch config.php
chmod 666 config.php   ---执行上面脚本里面的内容,当安装loganalyzer时会在config.php文件中写入内容,所以要更改权限
访问网站进行如下图操作
QQ截图20171011194802.png
QQ截图20171011195017.png
QQ截图20171011195846.png
最后要为了安全要将权限修改一下
cd /var/www/html/loganalyzer
chmod644 config.php

7、Logrotate日志存储

logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过cron 程序来执行。

rpm -ql logrotate
配置文件是/etc/logrotate.conf  /etc/logrotate.d

主要参数如下

compress 通过gzip 压缩转储以后的日志
nocompress 不需要压缩时,用这个参数
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖delaycompress 选项,转储并压缩
errors address 转储时的错误信息发送到指定的Email 地址
ifempty 即使是空文件也转储,是缺省选项。
notifempty 如果是空文件的话,不转储
mail address 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下,而不是前一个所说的在指定的目录下
prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行,相当于转储前脚本
postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行,相当于转储后脚本
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
size 大小指定日志超过多大时,就执行日志转储
rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
Missingok 如果日志不存在,提示错误
Nomissingok如果日志不存在,继续下一次日志,不提示错误
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 1 概述 系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误...
    ghbsunny阅读 3,730评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • 日志文件对于一个服务器来说是非常重要的,它记录着服务器的运行信息,许多操作都会写日到日志文件,通过日志文件可以监视...
    时待吾阅读 1,001评论 0 5
  • 温暖的午后是谁的脸 扯一缕青纱遮面 飘浮在遥远的云端 把忧伤作雨花飞溅 温暖的午后是谁的眼 落两行浊泪无言 守望在...
    君怀璧阅读 550评论 2 9
  • 一.几种情绪介绍。 1.愤怒。是一种力量。愤怒是给我们力量,关键是力量如何应用,力量让我们去改变,事件完结后,愤怒...
    长劲鹿生涯规划阅读 895评论 0 0