日志管理


日志介紹

日志:

歷史事件:時間,地點,人物,事件
日志級別:事件的關鍵性程度,Loglevel

系統日志服務:
sysklogd :CentOS 5之前版本

syslogd: system application 記錄應用日志
klogd: linux kernel 記錄內核日志

事件記錄格式:

日期時間   主機   進程[pid]: 事件內容

C/S架構:通過TCP或UDP協議的服務完成日志記錄傳送,將分布在不同主機的日志實現集中管理

rsyslog

rsyslog特性:CentOS6和7

多線程
UDP, TCP, SSL, TLS, RELP
MySQL, PGSQL, Oracle實現日志存儲
強大的過濾器,可實現過濾記錄日志信息中任意部分
自定義輸出格式

ELK:elasticsearch, logstash, kibana

非關系型分布式數據庫
基於apache軟件基金會jakarta項目組的項目lucene
Elasticsearch是個開源分布式搜索引擎
Logstash對日志進行收集、分析,並將其存儲供以后使用
kibana 可以提供的日志分析友好的 Web 界面

術語,參見man logger

facility:設施,從功能或程序上對日志進行歸類

auth, authpriv, cron, daemon,ftp,kern, lpr, mail, news, security(auth), user, uucp, local0-local7(自定義log日志級別), syslog

Priority 優先級別,從低到高排序

debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)

參看幫助: man 3 syslog

程序包:rsyslog
主程序:/usr/sbin/rsyslogd
CentOS 6:service rsyslog {start|stop|restart|status}
CentOS 7:/usr/lib/systemd/system/rsyslog.service
配置文件:/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服務的日志文件單獨存放

(1)在sshd配置文件中添加一個本地自定義的Local

[root@centos7~]#vim /etc/ssh/sshd_config

(2)在rsyslog配置文件中將自定義的local級別指定相應的文件路徑

[root@centos7~]#vim /etc/rsyslog.conf

(3)改完配置文件之后重新啟動sshd和rsyslog服務,重啟之后就會自定生成 /var/log/sshd.log文件

[root@centos7~]#systemctl restart sshd rsyslog

(4)查看sshd跟蹤日志結果:

tail /var/log/sshd.log  -f

 實驗:基於網絡日志

基於UDP協議網絡日志

A主機:192.168.34.101

B主機:192.168.34.100

(1)在A主機把UDP協議注釋去掉,修改rsyslog配置文件

[root@centos7~]#vim /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514

*.info;mail.none;authpriv.none;cron.none                @192.168.34.100    指向B主機的IP地址

(2)重啟rsyslog服務

[root@centos7~]#systemctl restart rsyslog

(3)測試結果,查看對方系統日志是否可以收到自己的消息

[root@centos7~]#logger 'I am 192.168.34.101'

 實現TCP協議基於網絡日志

(1)修改rsyslog配置文件內容,打開TCP協議

[root@centos7~]#vim /etc/rsyslog.conf
$ModLoad imtcp
$InputTCPServerRun 514

*.info;mail.none;authpriv.none;cron.none                @@192.168.34.102

(2)重啟rsyslog服務

[root@centos7~]#systemctl restart rsyslog

通常的日志格式:

事件產生的日期時間 主機 進程(pid):事件內容

如: /var/log/messages,cron,secure等
其它的日志文件
/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 統一管理所有 Unit 的啟動日志。帶來的好處就是,可以只用journalctl一個命令,查看所有日志(內核日志和應用日志)。日志的配置文件/etc/systemd/journald.conf

journalctl用法

查看所有日志(默認情況下 ,只保存本次啟動的日志)

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"
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

查看指定優先級(及其以上級別)的日志,共有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

rsyslog將日志記錄於MySQL中 

實驗准備:

A主機:192.168.34.100 (當做數據庫)

B主機:192.168.34.101 (當做日志存放)

C主機:192.168.34.102 (安裝LAP軟件)

(1)A主機安裝數據庫並啟動mariadb服務

[root@centos7~]#yum install mariadb-server -y

(2)在B主機上安裝rsyslog-mysql

[root@centos7~]#yum install rsyslog-mysql

(3)在B主機上查看rsyslog-mysql配置文件

[root@centos7yum.repos.d]#rpm -ql rsyslog-mysql
/usr/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql

 

 (4)將配置文件復制到A主機里

[root@centos7yum.repos.d]#scp /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql 192.168.34.100:
The authenticity of host '192.168.34.100 (192.168.34.100)' can't be established.
ECDSA key fingerprint is SHA256:nl4GdONb/BsSo/TpR+UHsM/gFo4+tLpD40NhCklkf7M.
ECDSA key fingerprint is MD5:55:a8:61:99:c3:52:fd:25:80:95:21:88:2b:98:1b:87.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.34.100' (ECDSA) to the list of known hosts.
mysql-createDB.sql                                                                                             100% 1046   274.8KB/s   00:00 

(5)在A主機上導入傳過來的配置文件,並在A主機mysql數據庫創建一個loguser用戶賬號

[root@centos7~]#mysql < mysql-createDB.sql 
[root@centos7~]#mysql 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.60-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Syslog             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.01 sec)

MariaDB [(none)]> grant all on Syslog.* to loguser@'192.168.34.%' identified by 'centos';
Query OK, 0 rows affected (0.00 sec)

 (6)在B主機上安裝mysql客戶端,並修改rsyslog配置文件內容

[root@centos7yum.repos.d]#yum install mariadb
[root@centos7~]#vim /etc/rsyslog.conf
$ModLoad ommysql
*.info;mail.none;authpriv.none;cron.none                :ommysql:192.168.34.100,Syslog,loguser,centos

 

 

 重啟rsyslog日志服務

[root@centos7yum.repos.d]#systemctl restart rsyslog

驗證rsyslog日志存放在mysql數據庫中  

在B主機上測試

[root@centos7yum.repos.d]#logger 'this is a test log from 192.168.34.100'

在A主機上查看當前的結果

基於LAMP搭建一個loganalyzer,獲取日志信息

官網:https://loganalyzer.adiscon.com/downloads

下載loganalyzer包: 

 (1)在C主機安裝LAP包,並啟動httpd服務

[root@centos777yum.repos.d]#yum install httpd php php-mysql php-gd -y
[root@centos777yum.repos.d]#systemctl start httpd

(2)將下載下來的loganalyzer包傳到linux系統中,解壓此包,並將src目錄復制到/var/www/html目錄下

rz
[root@centos777]#tar -xvf  loganalyzer-4.1.7.tar.gz 
[root@centos777loganalyzer-4.1.7]#cd loganalyzer-4.1.7/
[root@centos777loganalyzer-4.1.7]#cp -r src /var/www/html/log

(3)在/var/www/html/log目錄下新建一個文件,並修改權限為666

[root@centos777log]#touch /var/www/html/log/config.php
[root@centos777log]#chmod 666 /var/www/html/log/config.php

 在網頁上按照步驟往下一步走:192.168.34.102/log,並修改網頁和mysql數據庫連接

在B主機上驗證日志效果:

[root@centos7yum.repos.d]#logger 'this is 2st  test log from 192.168.34.100'

可以在loganalyzer上已經獲取了對應的日志信息

顯示畫圖的效果:

 

 (4)配置完之后,將chonfig.php文件的權限改為644

[root@centos777log]#chmod 644 /var/www/html/log/config.php

Logrotate日志存儲

logrotate 程序是一個日志文件管理工具。用來把舊的日志文件刪除,並創建新的日志文件,稱為日志轉儲或滾動。可以根據日志文件的大小,也可以根據其天數來轉儲,這個過程一般通過 cron 程序來執行

配置文件是 /etc/logrotate.conf

主要參數如下

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如果日志不存在,繼續下一次日志,不提示錯誤

  

 

 

 

  

  

 

 

  

  

  

 

 

 

  

  

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM