Linux系統日志管理

Linux系統中的日志記錄了系統每天發生的各種各樣的事情,你可以通過它來檢查錯誤發生的原因,或者受到攻擊時攻擊者留下的痕跡。日志對于安全來說,非常重要。

本節索引:

一、日志介紹

二、日志配置

三、日志管理

四、遠程日志

五、實驗:實現遠程日志

六、實驗:實現基于MySQL的遠程日志

七、實驗:通過loganalyzer展示數據庫中的日志

 

一、日志介紹

日志主要包含以下內容:

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

日志級別:事件的關鍵性程度,Loglevel

 

系統中常見日志及說明:

日志文件

 

系統日志服務:

CentOS 5之前版本

syslogd

syslogd: system application 記錄應用日志

klogd: linux kernel 記錄內核日志

事件記錄格式:

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

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

機的日志實現集中管理

 

CentOS 6和7

rsyslog特性:

多線程

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, 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:

*:所有級別;如:”authpriv.*”表示authpriv認證信息服務產生的所有等級日志都記錄

none:沒有級別,即不記錄

PRIORITY:指定級別(含)以上的所有級別

=PRIORITY:僅記錄指定級別的日志信息,其他等級都不記錄。如:”*.emerg”表示任何日志

服務產生的日志,只要等級為emerg就記錄;此用法較少見,了解即可

 

target:

文件路徑:通常在/var/log/,文件路徑前的-表示異步寫入

用戶:將日志事件通知給指定的用戶,* 表示登錄的所有用戶

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

管道: | COMMAND,轉發給其它命令處理

 

/etc/rsyslog.conf

#### RULES ####

# Log all kernel messages to the console.

內核產生的任何日志

# Logging much else clutters up the screen.

#kern.*???????????? ????????????????????????????????????/dev/console

# Log anything (except mail) of level info or higher.

定義了系統中除郵箱,身份驗證,計劃任務以外的其他日志

# Don’t log private authentication messages!

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

定義身份驗證授權相關的日志文件路徑

# The authpriv file has restricted access.

authpriv.*????????????????????????????????????????????? /var/log/secure

定義郵件日志文件路徑,”-“代表異步傳輸

# Log all the mail messages in one place.

mail.*????????????????????????????????????????????????? -/var/log/maillog

定義計劃任務日志文件路徑

# Log cron stuff

cron.*????????????????????????????????????????????????? /var/log/cron

系統出現嚴重問題時,每個人都會收到提示

# Everybody gets emergency messages

*.emerg???????????????????????????????????????????????? :omusrmsg:*

新聞相關服務日志文件

# Save news errors of level crit and higher in a special file.

uucp,news.crit????????????????????????????????????????? /var/log/spooler

本地預留定制日志

# Save boot messages also to boot.log

local7.*??????????????????????????????????????????????? /var/log/boot.log

##################################

 

 

 

三、日志管理

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

 

 

Logrotate工具

logrotate 程序是一個日志文件管理工具。用來把舊的日志文件刪除,并創建新

的日志文件,稱為日志轉儲或滾動??梢愿鶕罩疚募拇笮?,也可以根據其

天數來轉儲,這個過程一般通過 cron 程序來執行

配置文件:/etc/logrotate.conf

Logrotate

 

 

四、遠程日志

Linux系統中的日志不僅可以在本地存儲,還可以遠程發送至指定的主機,設置指定的Mysql數據庫中。

啟用遠程日志服務:

通常的日志格式:

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

如: /var/log/messages,cron,secure

 

配置rsyslog成為日志服務器

#### MODULES ####

# Provides UDP syslog reception

$ModLoad imudp

$UDPServerRun 514

# Provides TCP syslog reception

$ModLoad imtcp

$InputTCPServerRun 514

 

五、實驗:實現遠程日志

前期準備:

虛擬機三臺

發送日志端:192.168.30.10

遠程接收端:192.168.30.17

訪問端:192.168.30.11

 

發送日志端:

修改sshd默認日志為local2,記錄等級至少為INFO

vim /etc/ssh/sshd_config

Linux系統日志管理0

vim /etc/rsyslog.d/ssh.conf

local2.*????????? @192.168.30.17? ? ? ? ? ? ? ? #若使用tcp協議,格式:@@IP

local2.*?? ??????? /var/log/local2.log??????? ? #若要本機和遠程都記錄日志可添加此行

重啟日志及SSH服務

systemctl restart rsyslog sshd

 

遠程接收端:

開啟514端口

#$ModLoad imudp ? ? ? ?==>?? 去掉注釋

#$UDPServerRun 514 ?==>?? 去掉注釋

1

# Save boot messages also to boot.log

local2.*??????????? /var/log/local2.log???????? #添加此行

2

重啟日志服務

systemctl restart rsyslog

查看514端口是否已開啟

ss -untl

3

 

測試:

切換到訪問端ssh連接192.168.30.10

ssh 192.168.30.10

切換到遠程接收端,已收到日志發生端發送過來的日志

4

 

 

六、實驗:實現基于MySQL的遠程日志

前期準備:

虛擬機三臺

發送日志端:192.168.30.10

遠程接收端:192.168.30.17

訪問端:192.168.30.11

 

發送日志端:

安裝rsyslog-mysql包

yum install rsyslog-mysql

rpm -ql rsyslog-mysql

1

將mysql- createDB.sql發送到遠程接收端

scp /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql 192.168.30.17:/root/

 

切換到遠程接收端:

導入數據庫

mysql < mysql-createDB.sql

mysql > use Syslog

mysql > show tables;

2

創建一個syslog授權用戶

mysql > grant all on Syslog.* to syslog@’192.168.30.%’? identified by ‘centos’;

musql > flush privileges;

 

 

日志發送端:

vim /etc/rsyslog.conf

#### MODULES ####

$ModLoad ommysql????????????????? #添加ommysql模塊

3

#### RULES ####

*.info;mail.none;authpriv.none;cron.none???? :ommysql:192.168.30.17,Syslog,syslog,centos

4

重啟日志服務

systemctl restart rsyslog

模擬一條日志信息

logger “this is a test log”

 

切換回遠程接收端

能看到剛剛發送的模擬日志信息

Mysql> select * from SystemEvents\G;

5

 

 

七、實驗:通過loganalyzer展示數據庫中的日志

前期準備:

承接基于MySQL遠程日志的實驗環境

具體步驟:

在rsyslog服務器上準備amp或nmp組合

yum install httpd php php-mysql php-gd

安裝LogAnalyzer

tar xvf loganalyzer-4.1.5.tar.gz

cp -a loganalyzer-4.1.5/src /var/www/html/loganalyzer

cd /var/www/html/loganalyzer

touch config.php

chmod 644 config.php

重啟httpd服務

systemctl start httpd

 

打開瀏覽器: http://192.168.30.17/loganalyzer/,出現下圖頁面,進行一些數據庫的配置后,就可以進入

loganlyzer管理數據庫中的日志了

1

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/101714

(1)
wangxczwangxcz
上一篇 2018-06-25
下一篇 2018-06-25

相關推薦

  • MySQL數據庫服務

    MySQL數據庫的安裝

    2018-06-12
  • 05linux葵花寶典–linux軟件安裝、計劃任務和sed流編輯

    簡要介紹了紅帽系列發行版軟件安裝工具rpm、yum的使用,at、crontab等計劃任務命令的使用,以及sed命令使用

    Linux筆記 2018-04-03
  • shell腳本,find .sed 壓縮打包解壓工具

    關于shell腳本 ,find和sed的應用

    2018-04-10
  • 進程和計劃任務

    進程和計劃任務 進程概念 內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等 Process: 運行中的程序的一個副本,是被載入內存的一個指令集合 進程ID(Process ID,PID)號碼被用來標記各個進程 UID、GID、和SELinux語境決定對文件系統的存取和訪問權限,通常從執行進程的用戶來繼承 存在生命周期 task str…

    2018-05-03
  • ansile

    ansible ansible 是一個自動化運維工具,他是基于python語言實現,基于openssh安全的工具 特性: 1)冪等性:一個任務執行1遍和執行n遍效果一樣 ,不因重復執行帶來意外情況2)無需代理不依賴PKI(無需ssl)3)可使用任何編程語言寫模塊4)YAML格式,編排任務,支持豐富的數據結構5)較強大的多層解決方案 ansible可以直接由一…

    Linux筆記 2018-06-04
  • sed數據流編輯器

    sed(Stream Editor)行編輯器 基礎用法

    2018-04-12
欧美性久久久久