日誌服務管理和文件共用服務

来源:https://www.cnblogs.com/Willoneday/archive/2022/11/08/16866104.html
-Advertisement-
Play Games

一、系統日誌管理 1 系統日誌介紹 1.1 sysklogd 系統日誌服務 CentOS 5 之前版本採用的日誌管理系統服務 klogd: linux kernel 記錄內核日誌 syslogd: system application 記錄應用日誌 1.2 rsyslog 系統日誌服務 rsyslo ...


一、系統日誌管理

1 系統日誌介紹

1.1 sysklogd 系統日誌服務

CentOS 5 之前版本採用的日誌管理系統服務

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

 

1.2 rsyslog 系統日誌服務

rsyslog是CentOS 6 以後版本的系統管理服務.它提供了高性能,出色的安全性和模塊化設計。 儘管rsyslog最初是常規的syslogd,但已發展成為一種瑞士軍刀式的記錄工具,能夠接受來自各種來源的輸入,並將其轉換,然後輸出到不同的目的地。

當應用有限的處理時,RSYSLOG每秒可以將超過一百萬的消息傳遞到本地目的地。 即使在遠程的目的地和更精細的處理中,性能通常也被認為是“驚人的”。

 

1.3 ELK

ELK:由Elasticsearch, Logstash, Kibana三個軟體組成

  • 非關係型分散式資料庫
  • 基於apache軟體基金會jakarta項目組的項目lucene
  • Elasticsearch是個開源分散式搜索引擎,可以處理大規模日誌數據,比如:Nginx、Tomcat、系統日誌等功能
  • Logstash對日誌進行收集、分析,過濾,並將其存儲供以後使用
  • Kibana 可以提供的日誌分析友好的 Web 界面

 


2 rsyslog 管理

2.1 系統日誌術語

  • facility 設施:從功能或程式上對日誌進行歸類
#內置分類
auth, authpriv, cron, daemon,ftp,kern, lpr, mail, news, security(auth),user, uucp, syslog

#自定義的分類
local0-local7
  • Priority 優先順序別:從低到高排序
debug,info, notice, warn(warning), err(error), crit(critical), alert,emerg(panic)
  • logger 命令:可在系統日誌中輸入消息
#範例
[root@rsyslog ~]# logger "this is a test log"
[root@rsyslog ~]# cat /var/log/messages
Nov  8 03:30:05 rsyslog root[2127]: this is a test log

 

2.2 rsyslog 相關文件

  • 程式包:rsyslog
  • 主程式:/usr/sbin/rsyslogd
  • CentOS 6:/etc/rc.d/init.d/rsyslog {start|stop|restart|status}
  • CentOS 7,8:/usr/lib/systemd/system/rsyslog.service
  • 配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
  • 庫文件: /lib64/rsyslog/*.so

 

2.3 rsyslog配置文件

/etc/rsyslog.conf 配置文件格式:由三部分組成

  • MODULES:相關模塊配置
  • GLOBAL DIRECTIVES:全局配置
  • RULES:日誌記錄相關的規則配置

RULES配置格式

facility.priority; facility.priority…  target

facility格式

* #所有的facility
facility1,facility2,facility3,... #指定的facility列表

priority格式

*: 所有級別
none:沒有級別,即不記錄
PRIORITY:指定級別(含)以上的所有級別
=PRIORITY:僅記錄指定級別的日誌信息

target格式

  • 文件路徑:通常在/var/log/,文件路徑前的-表示非同步寫入
  • 用戶:將日誌事件通知給指定的用戶,* 表示登錄的所有用戶
  • 日誌伺服器:@host,把日誌送往至指定的遠程UDP日誌伺服器 @@host 將日誌發送到遠程TCP日誌伺服器
  • 管道: | COMMAND,轉發給其它命令處理

通常的日誌文件的格式

日誌文件有很多,如: /var/log/messages,cron,secure等,基本格式都是類似的。格式如下

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

 

範例:將ssh服務的日誌記錄至自定義的local的日誌設備
#修改sshd服務的配置
[root@rocky01 ~]# vim /etc/ssh/sshd_config
#SyslogFacility AUTHPRIV #更改此行
SyslogFacility local6

#修改rsyslog的配置
[root@rocky01 ~]# vim /etc/rsyslog.d/sshd.conf
local6.* /var/log/sshd.log

[root@rocky01 ~]# systemctl reload sshd
[root@rocky01 ~]# systemctl restart rsyslog.service

#測試
#ssh登錄後,查看/var/log/sshd.log有記錄
[root@rocky01 ~]# tail -f /var/log/sshd.log
Nov  7 16:26:12 rocky01 sshd[3903]: Accepted password for root from 10.0.0.1 port 51367 ssh2

 

 

2.4 啟用網路日誌服務

啟用網路日誌服務功能,可以將多個遠程主機的日誌,發送到集中的日誌伺服器,方便統一管理。

埠:514

範例:CentOS 8 啟用網路日誌功能

#接收日誌的伺服器
[root@rocky01 ~]# vim /etc/rsyslog.conf
#udp和tcp開啟一個即可(同網段UDP,不同網段TCP)
## MODULES ####
...省略...
# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
module(load="imudp") # needs to be done just once
input(type="imudp" port="514")

# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")

[root@rocky01 ~]# systemctl restart rsyslog

#在客戶端指定將日誌發送到遠程的TCP、UDP的日誌伺服器
#一個@是UDP,兩個@@是TCP
[root@rocky02 ~]# vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info;mail.none;authpriv.none;cron.none @@10.0.0.8:514 #TCP
*.info;mail.none;authpriv.none;cron.none @10.0.0.8:514 #UDP
[root@rocky02 ~]# systemctl restart rsyslog

 

2.5 常見日誌文件

/var/log/secure:系統安全日誌,文本格式,應周期性分析

/var/log/btmp:當前系統上,用戶的失敗嘗試登錄相關的日誌信息,二進位格式,lastb命令進行查看

/var/log/wtmp:當前系統上,用戶正常登錄系統的相關日誌信息,二進位格式,last命令可以查看

/var/log/lastlog:每一個用戶最近一次的登錄信息,二進位格式,lastlog命令可以查看

/var/log/dmesg:CentOS7 之前版本系統引導過程中的日誌信息,文本格式,開機後的硬體變化將不再記錄,也可以通過專用命令dmesg查看,可持續記錄硬體變化的情況

/var/log/boot.log 系統服務啟動的相關信息,文本格式

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

/var/log/anaconda : anaconda的日誌

 


3 journalctl 日誌管理工具 

CentOS 7 以後版,利用Systemd 統一管理所有 Unit 的啟動日誌。帶來的好處就是,可以只用journalctl一個命令,查看所有日誌(內核日誌和應用日誌)。

日誌的配置文件:

/etc/systemd/journald.conf

journalctl命令格式:

journalctl [OPTIONS...] [MATCHES...]

範例: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

 


二、實戰案例:利用 MySQL 存儲日誌信息

目標

  • 利用rsyslog日誌服務,將收集的日誌記錄於MySQL中

環境準備

  • 兩台主機
  • 10.0.0.128:rsyslog日誌伺服器
  • 10.0.0.130:mysql資料庫伺服器

註:可配合網路日誌功能

(1)在rsyslog伺服器上安裝連接mysql模塊相關的程式包

[root@rsyslog ~]# yum install -y rsyslog-mysql
#mysql-createDB.sql需導入到資料庫伺服器
[root@rocky01 ~]# rpm -ql rsyslog-mysql
/usr/lib/.build-id
/usr/lib/.build-id/09
/usr/lib/.build-id/09/927b14f8ca6dfdeca2c2bbe1369b56e6470382
/usr/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog/mysql-createDB.sql

#將sql腳本複製到資料庫服庫上
[root@rsyslog ~]# scp /usr/share/doc/rsyslog/mysql-createDB.sql 10.0.0.130:/data

(2)準備MySQL Server

[root@mysql ~]# yum install -y mysql-server
#在mariadb資料庫伺服器上創建相關資料庫和表,並授權rsyslog能連接至當前伺服器
#Syslog庫為mysql-createDB.sql里所創建的庫,創建的用戶名可自定義
[root@mysql ~]# mysql
mysql> source /data/mysql-createDB.sql
mysql> create user 'rsyslog'@'10.0.0.%' identified by '123456';
mysql> grant all on Syslog.* to 'rsyslog'@'10.0.0.%';

(3)配置日誌伺服器將日誌發送至指定資料庫

#配置rsyslog將日誌保存到mysql中
[root@rsyslog ~]# vim /etc/rsyslog.conf
#
####MODULES####
#在 MODULES 語言下麵,如果是 CentOS 8 加下麵行
module(load="ommysql")
#在 MODULES 語言下麵,如果是 CentOS 7,6 加下麵行
$ModLoad ommysql

#在RULES語句塊加下麵行的格式
#分類可自行修改
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
*.info;mail.none;authpriv.none;cron.none                :ommysql:10.0.0.130,Syslog,rsyslog,123456

[root@rsyslog ~]# systemctl restart rsyslog

(4)測試

#在日誌伺服器上生成日誌
[root@rsyslog ~]# logger "this is a test log"

#在資料庫上查詢到上面的測試日誌
[root@mysql ~]# mysql Syslog
mysql> select * from SystemEvents\G
*************************** 1. row ***************************
                ID: 1
        CustomerID: NULL
        ReceivedAt: 2022-11-08 02:27:49
DeviceReportedTime: 2022-11-08 02:27:49
          Facility: 1
          Priority: 5
          FromHost: rsyslog
           Message: this is a test log
...省略...

 


三、logrotate 日誌轉儲

1 logrotate 介紹

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

 

2 logrotate 配置

軟體包:logrotate

相關文件

  • 計劃任務:/etc/cron.daily/logrotate
  • 程式文件:/usr/sbin/logrotate
  • 配置文件: /etc/logrotate.conf
  • 日誌文件:/var/lib/logrotate/logrotate.status

配置文件主要參數如下:

配置參數 說明
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 指定轉儲周期為每月
rotate count 指定日誌文件刪除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份
tabooext [+] list 讓logrotate不轉儲指定擴展名的文件,預設的擴展名是:.rpm-orig,.rpmsave, v, 和 ~
size size 當日誌文件到達指定的大小時才轉儲,bytes(預設)及KB或MB
sharedscripts 預設,對每個轉儲日誌運行prerotate和postrotate腳本,日誌文件的絕對路徑作為第一個參數傳遞給腳本。 這意味著單個腳本可以針對與多個文件匹配的日誌文件條目多次運行(例如/ var / log / news /*.example)。 如果指定此項sharedscripts,則無論有多少個日誌與通配符模式匹配,腳本都只會運行一次
nosharedscripts 針對每一個轉儲的日誌文件,都執行一次prerotate 和 postrotate腳本,此為預設值
missingok 如果日誌不存在,不提示錯誤,繼續處理下一個
nomissingok 如果日誌不存在,提示錯誤,此為預設值

 

3 logroate 配置範例

範例: 設置nginx的日誌轉儲

cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    rotate 100
    missingok
    compress
    delaycompress
    notifempty
    create 644 ngnix nginx
    postrotate
        if [ -f /app/nginx/logs/nginx.pid ]; then
            kill -USR1 `cat /app/nginx/logs/nginx.pid`
        fi
    endscript
}

範例:對指定日誌手動執行日誌轉儲

#生成測試日誌
[root@centos8 ~]#dd if=/dev/zero of=/var/log/test1.log bs=2M count=1
[root@centos8 ~]#dd if=/dev/zero of=/var/log/test2.log bs=2M count=1

#針對不同的日誌創建轉儲配置文件
[root@centos8 ~]#cat /etc/logrotate.d/test1
/var/log/test1.log {
    daily
    rotate 5
    compress
    delaycompress
    missingok
    size 1M
    notifempty
    create 640 bin nobody
    postrotate
        echo `date +%F_%T` >> /data/test1.log
    endscript
}

[root@centos8 ~]#cat /etc/logrotate.d/test2
/var/log/test2.log {
    daily
    rotate 5
    compress
    delaycompress
    missingok
    size 1M
    notifempty
    create 644 root root
    postrotate
        echo `date +%F_%T` >> /data/test2.log
    endscript
}

#針對一個測試日誌,手動執行日誌轉儲
[root@centos8 ~]#logrotate /etc/logrotate.d/test1
[root@centos8 ~]#ll /var/log/test*
-rw-r----- 1 root root 0 Dec 14 16:38 /var/log/test1.log
-rw-r--r-- 1 root root 2097152 Dec 14 16:35 /var/log/test1.log.1
-rw-r--r-- 1 root root 2097152 Dec 14 16:36 /var/log/test2.log
[root@centos8 ~]#ls /data
test1.log
[root@centos8 ~]#cat /data/test1.log
2019-11-12_14:00:14

#對所有日誌進行手動轉儲
[root@centos8 ~]#logrotate /etc/logrotate.conf
[root@centos8 ~]#ll /var/log/test*
-rw-r--r-- 1 bin nobody 0 Nov 12 14:00 /var/log/test1.log
-rw-r--r-- 1 root root 2097152 Nov 12 13:59 /var/log/test1.log.1
-rw-r--r-- 1 root root 0 Nov 12 14:01 /var/log/test2.log
-rw-r--r-- 1 root root 2097152 Nov 12 13:59 /var/log/test2.log-20191112

[root@centos8 ~]#ls /data
test1.log test2.log
[root@centos8 ~]#cat /data/test1.log
2019-11-12_14:01:51

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 文件 1.File對象 java封裝的一個操作文件及文件夾(目錄)的對象。可以操作磁碟上的任何一個文件和文件夾。 2.創建文件 方式一:根據路徑構建一個File對象new File(path) //方式一 @Test public void create01(){ try { String path ...
  • 目錄 一. EGL 前言 二. EGL 繪製流程簡介 三.eglCreatePbufferSurface 函數簡介 1.eglCreatePbufferSurface 簡介 2.eglCreatePbufferSurface 和 eglCreateWindowSurface 區別 四.eglCrea ...
  • Switch語法 switch作為Java內置關鍵字,卻在項目中真正使用的比較少。關於switch,還是有那麼一些奧秘的。 要什麼switch,我有if-else 確實,項目中使用switch比較少的一個主要原因就在於它的作用能被if-else代替,況且switch對類型的限制,也阻礙了switch ...
  • 作為一個實用主義的學習者,最關心的問題一定是 “我為什麼要選擇學Python,學會之後我可以用來做什麼?”。 在上篇《為什麼選擇Python入門》文章中,我們已經明白了為什麼選擇學習Python,本文就帶你瞭解學完Python之後可以用來做什麼。Python之所以能火爆全網,得益於Python廣泛的 ...
  • 變數 變數的使用步驟:聲明、賦值、使用 package main import "fmt" func main(){ // 1.變數的聲明 var age int // 2.變數的賦值 age = 18 // 3.變數的使用 fmt.Println("age = ",age) // 4.變數的聲明和 ...
  • 題目:質數之和 已知,第一個質數是2,第二個質數是3,第三個質數是5,第四個質數是7,第五個質數是11,第六個質數是13,第七個質數是17,輸入兩個不相等的正整數a和b,求出第a個質數到第b個質數當中所有質數和。a和b之間以空格間隔,其中a和b都小於200。 輸入1:1 4 輸出1:17 輸入2:7 ...
  • 知道的朋友瞭解 我不是屬於講按部就班技術的那種人。什麼xx入門 ,入門到精通,入門到入土。 其實非要嚴格說的話已經跟angularjs 什麼ajax 偏的有點遠了,之所以還是叫這個名稱,因為都屬於web應用 ,叫這個名稱是一種延續,其實這個系列持續了幾年了 是我自己從學習到一種適合我自己環境的特有應 ...
  • nuget打包靜態資源的問題 前段時間做了個區劃包, 爬了點數據生成了一個 region-tree.json 文件, 存放了全國一直到街道級的區劃數據 然後又寫了點代碼解析處理這個文件 當時的 csproj 中對這個資源是這樣引用的 <ItemGroup> <None Include="region ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...