20171012 日志管理

  • 日志介绍
  • rsyslog
  • 日志管理journalctl
  • MySQL管理日志

一、日志介绍

(一)日志的基本概念

  • 日志:将事件发生的时间、地点、人物、事件等信息保存记录
  • 日志级别:根据事件的关键程度对日志的分级
  • 事件记录格式:一般包含日期时间、主机、进程[pid]、事件内容
  • 基于C/S架构的日志系统:通过TCP或UDP协议的服务完成日志记录传送,将分布在不同主机的日志实现集中管理

(二)日志系统的发展

  • sysklogd: CentOS5之前的系统日志服务

    • syslogd: 记录应用日志
    • klogd:记录内核日志
  • rsyslog: CentOS6, 7使用的系统日志服务

    • 支持TCP, UDP
    • 支持日志转储于数据库MySQL, Oracle
    • 强大的过滤器
    • 自定义输出格式
  • ELK:elasticsearch, logstash, kibana

    • 非关系型分布式数据库
    • 专业的日志管理平台

(三)rsyslog的关键概念

  • 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)

二、rsyslog

(一)rsyslog相关文件路径

  • 主程序:/usr/sbin/rsyslogd
  • CentOS 6服务管理:service rsyslog {start|stop|restart|status}
  • CentOS 7服务管理:systemctl {start|stop|restart|status} rsyslog.service
  • 配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
  • 库文件:/lib64/rsyslog/*.so

(二)rsyslog配置文件格式

(1)总体分为三部分
  • MODULES:相关模块配置
  • GLOBAL DIRECTIVES:全局配置
  • RULES:日志记录相关的规则配置
(2)RULES配置格式
  • 格式:facility.priority;facility.priority… target

  • facility

    • *:所有的facility
    • facility1,facility2,facility3,...:指定的facility列表
  • priority

    • *:所有级别
    • none:没有级别,即不记录
    • PRIORITY:指定级别(含)以上的所有级别
    • =PRIORITY:仅记录指定级别的日志信息
  • target

    • 文件路径:通常在/var/log/,文件路径前的-表示异步写入
    • 用户:将日志事件通知给指定的用户,*表示登录的所有用户
    • 日志服务器:@host,把日志送往至指定的远程服务器记录
    • 管道:| COMMAND,转发给其它命令处理

(三)rsyslog的网络日志服务

(1)配置网络日志服务:修改配置文件,当UDP和TDP服务模块开启
vim /etc/rsyslog.conf
#### MODULES ####
# Provides UDP syslog reception
$ModLoadimudp             //取消行前的注释符
$UDPServerRun514          //取消行前的注释符
# Provides TCP syslog reception
$ModLoadimtcp             //取消行前的注释符
$InputTCPServerRun514     //取消行前的注释符
(2)实验:配置rsyslog网络日志服务
  • 主机配置:两台主机
    日志服务器:负责接收客户端通过UDP或TCP发来的日志信息(IP:192.168.136.230)
    日志客户端:负责发出写入日志请求

  • 实验1:通过UDP使客户端的事件记录在日志服务器的/var/log/messages中

// 修改服务器配置文件module部分,开启UDP通信模块
vim /etc/rsyslog.conf
$ModLoad imudp        //删除行前注释符
$UDPServerRun 514     //删除行前注释符
systemctl restart rsyslog
// 修改客户端配置文件rules部分
vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none      @192.168.136.230     //修改target
systemctl restart rsyslog

//客户端测试
logger -p syslog.info "this is 1st message"

//服务器查看日志记录
tail /var/log/messages
  • 实验2:通过TCP使客户端的事件记录显示在日志服务器的所有登录用户终端上
// 修改服务器配置文件module和rules部分,开启TCP通信模块
vim /etc/rsyslog.conf
$ModLoad imtcp             //删除行前注释符
$InputTCPServerRun 514     //删除行前注释符
local2.*      *
systemctl restart rsyslog
// 修改客户端配置文件rules部分
vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none    /var/log/messages     //恢复上个实验的修改
local2.*      @@192.168.136.230     //TCP使用两个@
systemctl restart rsyslog

//客户端测试
logger -p local2.info "this is 2nd message"

(四)其他日志

  • /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的日志

三、日志管理journalctl

  • systemd的日志管理工具,可以查看所有内核日志和应用日志

  • 配置文件:/etc/systemd/journald.conf

(一)journalctl查看日志

  • 查看所有日志(默认情况下,只保存本次启动的日志)
    journalctl

  • 查看内核日志(不显示应用日志)
    journalctl -k

  • 查看系统本次启动的日志
    journalctl -b
    journalctl -b -0

  • 查看上一次启动的日志(需更改设置)
    journalctl -b -1

  • 查看指定时间的日志
    journalctl --since="2012-10-30 18:17:16"
    journalctl --since "20 min ago"
    journalctl --since yesterday
    journalctl --since "2015-01-10" --until "2015-01-11 03:00"
    journalctl --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

(二)journalctl查看指定优先级(及其以上级别)的日志,共有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.service -o json-pretty

  • 显示日志占据的硬盘空间
    journalctl --disk-usage

  • 指定日志文件占据的最大空间
    journalctl --vacuum-size=1G

  • 指定日志文件保存多久
    journalctl --vacuum-time=1years

四、MySQL管理日志

(一)实验1:rsyslog将日志记录于MySQL中

  • 实现此功能需要两台主机
    主机1:rsyslog服务器(IP: 192.168.136.230)
    主机2:mysql数据库(IP: 192.168.136.130)
(1)主机1安装mysql与rsyslog的接口
  • 安装rsyslog-mysql
    yum install rsyslog-mysql

  • 查看安装文件路径,其中的SQL脚本文件用于生成数据库,直接传送至主机2

rpm -ql rsyslog-mysql
scp /usr/share/doc/rsyslog-7.4.7/mysql-createDB.sql 192.168.136.130:/root
(2)主机2安装并配置数据库
  • 安装mariadb
yum  install mariadb-server
systemctl start mariadb.service
mysql_secure_installation
  • 用传送来的SQL脚本生成数据库
    mysql -u root -pmagedu < mysql-createDB.sql
  • 创建管理用户并授权
    MariaDB [(none)]> grant all on Syslog.* to loguser@'%' identified by 'centos';
(3)主机1配置rsyslog
  • 编辑/etc/rsyslog.conf文件
vim /etc/rsyslog.conf 
$ModLoad ommysql     //载入模块
local2.*      :ommysql:192.168.136.130,Syslog,loguser,centos      //设置rules
  • 重启rsyslog服务并测试
systemctl restart rsyslog.service
logger -p local2.info "this is the message for rsyslog-mysql"
(4)主机2查看数据库
mysql -u loguser -pcentos
MariaDB [(none)]> use Syslog;
MariaDB [Syslog]> show tables;
MariaDB [Syslog]> select *  from SystemEvents\G;

(二)实验2:通过loganalyzer展示数据库中的日志

  • 本实验环境承接实验1,并且需要添加主机3用于通过web界面展示数据库的日志

  • 主机分工:
    主机1:rsyslog服务器(IP: 192.168.136.230)
    主机2:mysql数据库(IP: 192.168.136.130)
    主机3:apache httpd服务器,php,loganalyzer(IP: 192.168.136.229)

(1)主机3安装apache httpd, php
yum install httpd php php-mysql php-gd
service httpd start
(2)主机3测试是否成功连接到数据库
vim /var/www/html/index.php
<?php
$mysqli=new mysqli("192.168.136.130","loguser","centos");
if(mysqli_connect_errno()){
echo "连接数据库失败!";
$mysqli=null;
exit;
}
echo "连接数据库成功!";
$mysqli->close();
phpinfo();
?>

浏览器登录http://192.168.136.229/,测试连接数据库成功

(3)主机3编译安装loganalyzer
tar xvf loganalyzer-4.1.5.tar.gz
cd loganalyzer-4.1.5
cp -r src/ /var/www/html/log     //只复制src子目录的文件至网页存放目录
cd /var/www/html/log/
touch config.php                 //准备安装配置文件
chmod 666 config.php 
(4)配置loganalyzer
  • 浏览器登录http://192.168.136.229/log/,出现提示如下图
  • 点击here,进入安装过程。依次点击继续,在step 7时,填写mysql数据库的关键信息

红框中的信息按照创建数据库的相关信息填写

Source Type: MYSQL Native
Database Host: 192.168.136.130
Database Name: Syslog
Database Tablename: SystemEvents
Database User: loguser
Database Password: centos
  • 安装成功,显示界面如下,可以看到日志信息

推荐阅读更多精彩内容

  • 【MySQL】Linux下MySQL 5.5、5.6和5.7的RPM、二进制和源码安装 1.1BLOG文档结构图 ...
    尛麦苗阅读 5,168评论 0 30
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 68,112评论 12 115
  • 日志文件对于一个服务器来说是非常重要的,它记录着服务器的运行信息,许多操作都会写日到日志文件,通过日志文件可以监视...
    时待吾阅读 355评论 0 3
  • I/O模型Nginx介绍Nginx的安装和目录结构Nginx的配置Nginx的编译安装 一、I/O模型 (一)I/...
    哈喽别样阅读 152评论 0 0
  • 一.mysql的日志应用 (1)查询日志:general_log 记录查询语句,日志存储位置:文件:file表:t...
    楠人帮阅读 106评论 0 3