日誌管理

1、日誌介紹

(1)日誌簡單介紹: php

一、日誌: html

歷史事件: 時間,地點,人物,事件 node

日誌級別:事件的關鍵性程度,Loglevel 日誌等級 mysql

二、系統日誌服務: linux

sysklogd :CentOS 5 以前版本 nginx

syslogd: system application 記錄應用日誌 sql

klogd: linux kernel 記錄內核日誌 數據庫

三、事件記錄格式: apache

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

C/S 架構:經過TCP 或UDP 協議的服務完成日誌記錄傳送,將分佈在不一樣主機的日誌實現集中管理

 

(2)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

① 是個服務 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)

參看幫助:man 3 syslog

 

(3)logger -p rules "顯示的東西" 測試命令

例:logger -p local1.info 'this is a test log'

 

2、rsyslog 服務的介紹

一、配置文件介紹

程序包: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 規則

RULES 配置格式: facility.priority facility.priority… target

例:*.info;mail.none;authpriv.none;cron.none /var/log/messages

facility:設施

*: 全部的facility

facility1,facility2,facility3,... :指定的facility 列表

priority:級別

*: 全部級別

none排除,沒有級別,即不記錄

PRIORITY(只有名字) :指定級別(含)以上的全部級別

=PRIORITY :只記錄,僅記錄指定級別的日誌信息

target:目標

① 文件路徑:一般在/var/log/

② 文件路徑前的- 表示異步寫入用戶

異步:先存一批在內存裏,批量寫入硬盤,效率高

同步:生成日誌,就同步到硬盤裏,安全

例:mail.* -/var/log/maillog

③ 將日誌事件通知給指定的用戶* 表示登陸的全部用戶

例:*.emerg :omusrmsg:*

④ 日誌服務器:@host 或 @@host ,把日誌送往至指定的遠程服務器記錄

⑤ 管道: | COMMAND

⑥ 自定義:local0-7

例子:

例1:自定義ssh服務的日誌: local1.* /var/log/sshd.log

需設置sshd的配置文件/etc/ssh/sshd_config

SyslogFacility local1

LogLevel INFO

需重啓服務

注意:隔開,能夠寫多個arget目標

 

例2:自定義:local2.* along,root,/var/log/sshd.log

測試命令:logger -p local2.info 'this is a test log'

 

例3:日誌以網絡的方式發送到192.168.30.111上

① 在192.168.30.222 機器上設置

local3.*@192.168.30.111 (@走的是udp協議)

在192.168.30.111 機器上設置,提供UDP遠程鏈接的功能默認被註釋了,取消兩行註釋

$ModLoad imtcp 開啓模塊

$InputTCPServerRun 514 使用的端口

加一行

local1.* /var/log/remote.log 日誌存在111 的/var/log/remote.log下

測試:

logger -p local3.info "this is a remote log"

 

② 在192.168.30.222 機器上設置

local3.*@@192.168.30.111 (@@走的是tcp協議)

在192.168.30.111 機器上設置,在tcp的註釋兩行取消

加一行

local1.* /var/log/remote.log 日誌存在111 的/var/log/remote.log下

測試:

logger -p local3.info "this is a remote log"

 

三、其它日誌

/var/log/secure:su切換,系統安裝日誌,文本格式,應週期性分析

/var/log/btmp:當前系統上,用戶的失敗嘗試登陸相關的日誌信息,二進制格式,直接查看的亂碼

lastb 命令進行查看,能夠查看是否有惡意嘗試鏈接

若是想取消錯誤登陸,不要直接刪除btmp文件,>btmp清空就好

/var/log/wtmp:當前系統上,用戶正常登陸系統的相關日誌信息, 二進制格式

last 命令能夠查看

/var/log/lastlog: 每個用戶最近一次的登陸信息, 二進制格式,

lastlog 命令能夠查看

/var/log/dmesg系統引導過程中的日誌信息,文本格式

文本查看工具查看cat dmesg

專用命令dmesg 查看,查看結果都同樣

/var/log/messages :系統中大部分的信息

/var/log/anaconda : anaconda的安裝日誌

 

 

3、日誌管理journalctl ,centos 7特有命令

(1)介紹

Systemd 有統一管理全部 Unit 的啓動日誌。帶來的好處就是,能夠只用journalctl 一個命令,查看全部日誌(內核日誌和應用日誌)。日誌的配置文件/etc/systemd/journald.conf

(2)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 行日誌,不加數字默認是顯示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

例:journalctl -u sshd --since today

實時滾動顯示某個 Unit 的最新日誌

journalctl -u nginx.service -f

合併顯示多個 Unit 的日誌

journalctl -u nginx.service -u php-fpm.service --since today

 

(3)查看指定優先級(及其以上級別)的日誌,共有8級,默認是分頁的

0: emerg

1: alert

2: crit

3: err

4: warning

5: notice

6: info

7: debug

journalctl -p 等級數字或名字 -b

例:journalctl -p 4 -b

日誌默認分頁輸出,--no-pager 改成正常的標準輸出,不分頁

journalctl --no-pager

 

(4)日誌管理journalctl

以 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

journalctl -xe 服務出錯或提示的用法

-x 展開

-e 直接到底部,由於服務剛出錯,生成的日誌應該在最下邊

 

4、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 若是日誌不存在,繼續下一第二天志,不提示錯誤

 

 

5、實驗

實驗一:rsyslog 將日誌記錄於MySQL中

原理:讓centos 6上的日誌記錄到centos 7的數據庫中

 

一、在centos 7上安裝mysql

yum -y install mariadb-server 下包

systemctl start mariadb 開啓服務

mysql_secure_installation 安全腳本

 

二、在centos 6上充當mysql 的客戶端

① 查看rsyslog 與mysql 相關的服務

yum list rsyslog*

② 讓日誌能訪問mysql 的包

yum -y install rsyslog-mysql.x86_64

包裏帶了個腳本,規定了數據庫的一些設置,如數據庫名、表名等

③ 把這個腳本傳到 7 上:

scp /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql @192.168.30.222:

 

三、在centos 7上用這個腳本生成數據庫

① mysql -uroot -p12345 < createDB.sql 以root的身份執行這個腳本,生成指定的數據庫的東西

mysql -uroot -p12345 能夠登陸查看一下,缺乏生成了

② 建立一個在centos6 上能遠程鏈接7 的用戶,並授給他對Syslog數據庫的全部權限,並設置密碼爲along

grant all on Syslog.* to loguser@'192.168.30.111' identified by 'along';

 

四、在centos 6 容許rsyslog-mysql 模塊使用

vim /etc/rsyslog.conf 加兩行

$ModLoad ommysql 容許加載這個模塊

*.info;mail.none;authpriv.none;cron.none :ommysql:192.168.30.222,Syslog,loguser,along 把全部日誌都放到7 上的數據庫

格式: :ommysql:DBHOST,DBNAME,DBUSER, PASSWORD

service rsyslog restart 重啓服務

 

五、測試

在centos 6上隨便生成日誌:

logger "this is a test log"

在centos 7上數據庫中查看:

MariaDB [Syslog]> select * from SystemEvents \G;

不過看着不舒服,爲了看的舒服,搭建lamp,用php實現圖形化界面,利用查看

 

 

實驗二:搭建lamp實現日誌遠程存儲

環境:兩個機器 一臺A:lamp 一臺B:日誌服務器

(1)在A 上實現lamp

一、安包

安裝httpd、php-fpm、php-mysql 包

yum -y install httpd php-fpm php-mysql

 

systemctl start php-fpm 開啓php-fpm服務

 

二、在http的配置文件中設置,讓其支持fpm

DirectoryIndex index.php index.html

去子配置文件,再設置

vim /etc/httpd/conf.d/fcgi.conf

ProxyRequests Off

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1

 

systemctl restart httpd 重啓http服務

 

三、測試php和http的鏈接

vim /var/www/html/index.php

<?php

phpinfo();

?>

 

(2)在B 上充當mysql 的客戶端,和日誌服務器

① 查看rsyslog 與mysql 相關的服務

yum list rsyslog*

② 讓日誌能訪問mysql 的包

yum -y install rsyslog-mysql.x86_64

包裏帶了個腳本,規定了數據庫的一些設置,如數據庫名、表名等

③ 把這個腳本傳到B 上:

scp /usr/share/doc/rsyslog-7.4.7/mysql-createDB.sql @192.168.30.222:

 

(3)在centos 7建立數據庫並受權用戶

yum -y install mariadb-server 下包

systemctl start mariadb

mysql_secure_installation 安全腳本

① mysql -uroot -palong < mysql-createDB.sql 以root的身份執行這個腳本,生成指定的數據庫的東西

mysql -uroot -palong 能夠登陸查看一下,確實生成了

② 建立一個在B 上能遠程鏈接A 的用戶,並授給他對Syslog數據庫的查看權限,並設置密碼爲along

grant select on Syslog.* to loguser@'192.168.30.107' identified by 'along';

 

(4)在B 容許rsyslog-mysql 模塊使用

vim /etc/rsyslog.conf 加兩行

$ModLoad ommysql 容許加載這個模塊

*.info;mail.none;authpriv.none;cron.none :ommysql:192.168.30.222,Syslog,loguser,along 把全部日誌都放到7 上的數據庫

格式: :ommysql:DBHOST,DBNAME,DBUSER, PASSWORD

service rsyslog restart 重啓服務

 

(5)佈署loganalyzer

① 官網下載,rz、解壓

tar xvf loganalyzer-4.1.5.tar.gz

yum -y install php-gd 裝php的圖形包

 

② cd loganalyzer-4.1.5/

mv src/* /var/www/html/ 由於php的源代碼都在src裏,只把這個目錄下全部東西拷過去就行

cd /var/www/html/

touch config.php

chmod 666 config.php

 

③ 網頁打開

一直next操做,填寫本身剛建立的數據庫、表和用戶的信息

完成

相關文章
相關標籤/搜索