Linux 日志管理

Linux 日志管理

一.Linux 下的日志服務簡介

1.1 CentOS5 之前的版本

centos5 之前的版本使用系統和內核日志分離的格式記錄日志
syslogd:該服務專門用于記錄系統日志(system application logs)
klogd: 該服務專門用于記錄內核日志(linux kernel logs)
centos5 之前事件的記錄格式
日期 時間 主機 進程[PID]: 事件內容
C/S 架構: 通過 TCP 或者 UDP 協議的服務完成日志記錄和傳輸,
可以將分布在不同主機的日志實現集中管理

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-RmUk9NpK-1691887663986)(png/2020-03-15-19-59-44.png)]

1.2 CentOS6 以后的版本

centos6 以后的版本將內核日志和系統日志合并為一個,統一使用 rsyslog
服務管理日志。

rsyslog 服務有以下特點:
多線程
支持多種協議: DUP,TCP,SSL,TLS,RELP
可以借助多種數據庫存儲日志: MySQL,PGSQL,Oracle
使用強大的過濾器過濾日志的任何內容
還可以自定義輸出格式

ELK–另一種日志收集和處理的架構

  • ELK:由 Elasticsearch, Logstash, Kibana 三個軟件組成,有以下特點
    非關系型分布式數據庫
    基于 apache 軟件基金會 jakarta 項目組的項目 lucene
    Elasticsearch 是個開源分布式搜索引擎,可以處理大規模日志
    數據,比如:Nginx、Tomcat、系統日志等功能
    Logstash 對日志進行收集、分析,過濾,并將其存儲供以后使用
    Kibana 可以提供的日志分析友好的 Web 界面

ELK 和 LAMP 類似,三個開源軟件的組合可以讓日志管理變得極其便利和直觀,
前提了解各個軟件的特點和用法,有機的組合。

二.使用 rsyslog 服務管理系統日志

2.1 rsyslog 管理日志涉及的俗語

facility:設施,從功能或程序上對日志進行歸類
auth
authpriv
cron
daemon
ftp
kern
lpr
mail
news
security(auth)
user
uucp
local0-local7
syslog

local0-local7: 可以用戶自定義的日志類型

Priority 優先級別,下面的優先級別從左到右從低到高排序
debug-->info-->notice-->warn(warning)-->err(error)-->crit(critical)-->alert--> emerg(panic)
  • 參看幫助: man syslog,man logger

2.2 rsyslog 相關文件

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 配置文件

2.3.1 配置文件格式

rsyslog 配置文件格式由三部分組成
MODULES: 相關的模塊配置
GLOBAL DIRECTIVES: 全局配置
RULES: 日志記錄相關的規則配置
RULES 規則配置格式
facility.priority; facility.prioriry... target
facility 日志類型·
priority 日志
target 目標,表示日志存放的文件路徑

facility 格式

*                          # *號表示所有類型的日志
faciluty1,facility2,...    # 多個類型的日志使用逗號分隔

priority 格式

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

target 格式

文件路徑: 通常在/var/log/,文件路徑前的-表示異步寫入
用戶:     將日志事件通知給指定的用戶,* 表示登錄的所有用戶
日志服務器:@host,把日志送往至指定的遠程UDP日志服務器 @@host 將日志發送到遠程TCP日志服務器
管道:     | COMMAND,轉發給其它命令處理
  • 如:
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

上面例子表示記錄優先級在info及以上的日志到文件/var/log/messages
日志優先級別 none 為無優先級,即表示不記錄 mail,authpriv 和
cron 類型的日志

2.3.2 通常的日志格式

  • 由于日志的多樣性,linux 下記錄日志的文件很多,記錄的基本格式如下:
    事件產生的日期和時間 主機 進程(PID): 事件內容
常見的日志文件有
/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 的日志
  • 范例:日志文件格式
[root@centos8 ~]#tail /var/log/messages
Nov 12 08:34:18 centos8 dnf[14114]: Metadata cache created.
Nov 12 08:34:18 centos8 systemd[1]: Started dnf makecache.
Nov 12 09:35:14 centos8 systemd[1]: Starting dnf makecache...
Nov 12 09:35:14 centos8 dnf[14249]: Metadata cache refreshed recently.
Nov 12 09:35:14 centos8 systemd[1]: Started dnf makecache.
Nov 12 10:21:22 centos8 systemd[1]: Starting man-db-cache-update.service...
Nov 12 10:21:22 centos8 systemd[1]: Reloading.
Nov 12 10:21:22 centos8 systemd[1]: Started man-db-cache-update.service.
[root@centos8 ~]#tail /var/log/secure
Nov 11 18:27:12 centos8 groupadd[11940]: group added to /etc/group: name=dhcpd,GID=177
Nov 11 18:27:12 centos8 groupadd[11940]: group added to /etc/gshadow: name=dhcpd
Nov 11 18:27:12 centos8 groupadd[11940]: new group: name=dhcpd, GID=177
Nov 11 18:27:12 centos8 useradd[11948]: new user: name=dhcpd, UID=177, GID=177,home=/, shell=/sbin/nologin

2.3.3 將 ssh 服務的日志記錄到自定義的日志文件中

  • 要想將 ssh 服務的日志記錄到指定的文件,首先需要在 ssh 的服務配置文件中
    指明將其日志類型記錄為自定義類型(local0-local7 共 8 種自定義類型),
    然后編輯 rsyslog 的配置文件,指明將自定義的日志類型存放在什么位置。
    最后重啟 rsyslog 服務即可。大體過程如下:
# 修改sshd服務的配置
Vim /etc/ssh/sshd_config
SyslogFacility local2
Service sshd reload
# 修改rsyslog的配置
Vim /etc/rsyslog.conf
Local2.*  /var/log/sshd.log
Systemctl  restart rsyslog
# 測試
Ssh登錄后,查看/var/log/sshd.log有記錄
# logger測試
logger -p local2.info "Hello sshd, this is a test message!"
# 查看日志更新情況
tail /var/log/sshd.log

2.4 網絡日志服務

centos6 以后,rsyslog 就支持網絡日志。啟用網絡日志服務功能,可以
將多個遠程主機的日志,發送到集中的日志服務器,方便統一管理。

2.4.1 CentOS 7|6 啟用網絡日志功能

啟動 rsyslog 的網絡功能其實就是修改 rsyslog 的配置文件,加載支持
tcp 和 udp 通訊的模塊,默認監聽 514 端口

具體操作如下:

[root@centos8 ~]#vim /etc/rsyslog.conf
####MODULES####
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

2.4.2 CentOS 8 啟用網絡日志功能

centos8 的配置文件語法有點變化,只不過本質是一樣的,都是加載相應的
支持模塊。

[root@centos8 ~]#vim /etc/rsyslog.conf
#### 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")

2.5 日志管理工具–journalct

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

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

  • 語法journalctl [OPTIONS...] [MATCHES...]

2.5.1 journalctl 選項說明

--no-full, --full, -l如果字段內容超長則以省略號(...)截斷以適應列寬。默認顯示完整的字段內容(超長的部分換行顯示或者被分頁工具截斷)。老舊的 -l/--full 選項 僅用于撤銷已有的 --no-full 選項,除此之外沒有其他用處。
-a, --all完整顯示所有字段內容, 即使其中包含不可打印字符或者字段內容超長。
-f, --follow只顯示最新的日志項,并且不斷顯示新生成的日志項。 此選項隱含了 -n 選項。
-e, --pager-end在分頁工具內立即跳轉到日志的尾部。 此選項隱含了 -n1000以確保分頁工具不必緩存太多的日志行。 不過這個隱含的行數可以被明確設置的 -n選項覆蓋。 注意,此選項僅可用于 less(1) 分頁器。
-n, --lines=限制顯示最新的日志行數。 --pager-end 與 --follow 隱含了此選項。此選項的參數:若為正整數則表示最大行數; 若為 "all" 則表示不限制行數;若不設參數則表示默認值10行。
--no-tail顯示所有日志行, 也就是用于撤銷已有的 --lines= 選項(即使與 -f 連用)。
-r, --reverse反轉日志行的輸出順序, 也就是最先顯示最新的日志。
-o, --output=控制日志的輸出格式。 可以使用如下選項:short這是默認值, 其輸出格式與傳統的 syslog[1] 文件的格式相似, 每條日志一行。short-iso與 short 類似,只是將時間戳字段以 ISO 8601 格式顯示。short-precise與 short 類似,只是將時間戳字段的秒數精確到微秒級別。short-monotonic與 short 類似,只是將時間戳字段的零值從內核啟動時開始計算。short-unix與 short 類似,只是將時間戳字段顯示為從"UNIX時間原點"(1970-1-1 00:00:00UTC)以來的秒數。 精確到微秒級別。verbose以結構化的格式顯示每條日志的所有字段。export將日志序列化為二進制字節流(大部分依然是文本) 以適用于備份與網絡傳輸(詳見Journal Export Format[2] 文檔)。json將日志項按照JSON數據結構格式化, 每條日志一行(詳見 Journal JSON Format[3]文檔)。json-pretty將日志項按照JSON數據結構格式化, 但是每個字段一行, 以便于人類閱讀。json-sse將日志項按照JSON數據結構格式化,每條日志一行,但是用大括號包圍, 以適應Server-Sent Events[4] 的要求。cat僅顯示日志的實際內容, 而不顯示與此日志相關的任何元數據(包括時間戳)--utc以世界統一時間(UTC)表示時間
--no-hostname不顯示來源于本機的日志消息的主機名字段。 此選項僅對 short系列輸出格式(見上文)有效。
-x, --catalog在日志的輸出中增加一些解釋性的短文本, 以幫助進一步說明日志的含義、問題的解決方案、支持論壇、 開發文檔、以及其他任何內容。并非所有日志都有這些額外的幫助文本, 詳見 Message Catalog DeveloperDocumentation[5] 文檔。注意,如果要將日志輸出用于bug報告, 請不要使用此選項。
-q, --quiet當以普通用戶身份運行時, 不顯示任何警告信息與提示信息。 例如:"-- Logs begin at...", "-- Reboot --"
-m, --merge混合顯示包括遠程日志在內的所有可見日志。
-b [ID][±offset], --boot=[ID][±offset]顯示特定于某次啟動的日志, 這相當于添加了一個 "_BOOT_ID=" 匹配條件。如果參數為空(也就是 ID 與 ±offset 都未指定), 則表示僅顯示本次啟動的日志。如果省略了 ID , 那么當 ±offset 是正數的時候, 將從日志頭開始正向查找,否則(也就是為負數或零)將從日志尾開始反響查找。 舉例來說, "-b1"表示按時間順序排列最早的那次啟動, "-b 2"則表示在時間上第二早的那次啟動; "-b-0"表示最后一次啟動, "-b -1"表示在時間上第二近的那次啟動, 以此類推。 如果±offset 也省略了, 那么相當于"-b -0", 除非本次啟動不是最后一次啟動(例如用--directory 指定了另外一臺主機上的日志目錄)。如果指定了32字符的 ID , 那么表示以此 ID 所代表的那次啟動為基準計算偏移量(±offset), 計算方法同上。 換句話說, 省略 ID 表示以本次啟動為基準計算偏移量(±offset)。
--list-boots列出每次啟動的 序號(也就是相對于本次啟動的偏移量)、32字符的ID、第一條日志的時間戳、最后一條日志的時間戳。
-k, --dmesg僅顯示內核日志。隱含了 -b 選項以及 "_TRANSPORT=kernel" 匹配項。
-t, --identifier=SYSLOG_IDENTIFIER僅顯示 syslog[1] 識別符為 SYSLOG_IDENTIFIER 的日志項。可以多次使用該選項以指定多個識別符。
-u, --unit=UNIT|PATTERN僅顯示屬于特定單元的日志。 也就是單元名稱正好等于 UNIT 或者符合 PATTERN模式的單元。 這相當于添加了一個 "_SYSTEMD_UNIT=UNIT" 匹配項(對于 UNIT 來說),或一組匹配項(對于 PATTERN 來說)。可以多次使用此選項以添加多個并列的匹配條件(相當于用"OR"邏輯連接)。
--user-unit=僅顯示屬于特定用戶會話單元的日志。 相當于同時添加了 "_SYSTEMD_USER_UNIT=""_UID=" 兩個匹配條件。可以多次使用此選項以添加多個并列的匹配條件(相當于用"OR"邏輯連接)。
-p, --priority=根據日志等級(包括等級范圍)過濾輸出結果。 日志等級數字與其名稱之間的對應關系如下(參見 syslog(3))"emerg" (0), "alert" (1), "crit" (2), "err" (3),"warning" (4), "notice" (5), "info" (6), "debug" (7) 。若設為一個單獨的數字或日志等級名稱, 則表示僅顯示小于或等于此等級的日志(也就是重要程度等于或高于此等級的日志)。 若使用 FROM..TO.. 設置一個范圍,則表示僅顯示指定的等級范圍內(含兩端)的日志。 此選項相當于添加了 "PRIORITY="匹配條件。
-c, --cursor=從指定的游標(cursor)開始顯示日志。[提示]每條日志都有一個"__CURSOR"字段,類似于該條日志的指紋。
--after-cursor=從指定的游標(cursor)之后開始顯示日志。 如果使用了 --show-cursor 選項,則也會顯示游標本身。
--show-cursor在最后一條日志之后顯示游標, 類似下面這樣,以"--"開頭:-- cursor: s=0639...游標的具體格式是私有的(也就是沒有公開的規范), 并且會變化。
-S, --since=, -U, --until=顯示晚于指定時間(--since=)的日志、顯示早于指定時間(--until=)的日志。參數的格式類似 "2012-10-30 18:17:16" 這樣。 如果省略了"時:分:秒"部分,則相當于設為 "00:00:00" 。 如果僅省略了"秒"的部分則相當于設為 ":00" 。如果省略了"年-月-日"部分, 則相當于設為當前日期。 除了"年-月-日 時:分:秒"格式,參數還可以進行如下設置: (1)設為 "yesterday", "today", "tomorrow"以表示那一天的零點(00:00:00)(2)設為 "now" 以表示當前時間。(3)可以在"年-月-日 時:分:秒"前加上 "-"(前移)"+"(后移)前綴以表示相對于當前時間的偏移。 關于時間與日期的詳細規范, 參見systemd.time(7)
-F, --field=顯示所有日志中某個字段的所有可能值。 [譯者注]類似于SQL語句:"SELECT DISTINCT某字段 FROM 全部日志"
-N, --fields輸出所有日志字段的名稱
--system, --user僅顯示系統服務與內核的日志(--system)、 僅顯示當前用戶的日志(--user)。如果兩個選項都未指定,則顯示當前用戶的所有可見日志。
-M, --machine=顯示來自于正在運行的、特定名稱的本地容器的日志。 參數必須是一個本地容器的名稱。
-D DIR, --directory=DIR僅顯示來自于特定目錄中的日志, 而不是默認的運行時和系統日志目錄中的日志。
--file=GLOBGLOB 是一個可以包含"?""*"的文件路徑匹配模式。 表示僅顯示來自與指定的 GLOB模式匹配的文件中的日志, 而不是默認的運行時和系統日志目錄中的日志。可以多次使用此選項以指定多個匹配模式(多個模式之間用"OR"邏輯連接)--root=ROOT在對日志進行操作時, 將 ROOT 視為系統的根目錄。 例如 --update-catalog 將會創建ROOT/var/lib/systemd/catalog/database
--new-id128此選項并不用于顯示日志內容, 而是用于重新生成一個標識日志分類的 128-bit ID 。此選項的目的在于 幫助開發者生成易于辨別的日志消息, 以方便調試。
--header此選項并不用于顯示日志內容, 而是用于顯示日志文件內部的頭信息(類似于元數據)
--disk-usage此選項并不用于顯示日志內容,而是用于顯示所有日志文件(歸檔文件與活動文件)的磁盤占用總量。
--vacuum-size=, --vacuum-time=, --vacuum-files=這些選項并不用于顯示日志內容,而是用于清理日志歸檔文件(并不清理活動的日志文件), 以釋放磁盤空間。--vacuum-size= 可用于限制歸檔文件的最大磁盤使用量 (可以使用 "K", "M", "G", "T"后綴); --vacuum-time= 可用于清除指定時間之前的歸檔 (可以使用 "s", "m", "h","days", "weeks", "months", "years" 后綴); --vacuum-files=可用于限制日志歸檔文件的最大數量。 注意,--vacuum-size= 對 --disk-usage的輸出僅有間接效果, 因為 --disk-usage 輸出的是歸檔日志與活動日志的總量。同樣,--vacuum-files= 也未必一定會減少日志文件的總數,因為它同樣僅作用于歸檔文件而不會刪除活動的日志文件。此三個選項可以同時使用,以同時從三個維度去限制歸檔文件。若將某選項設為零,則表示取消此選項的限制。
--list-catalog [128-bit-ID...]簡要列出日志分類信息, 其中包括對分類信息的簡要描述。如果明確指定了分類ID(128-bit-ID), 那么僅顯示指定的分類。
--dump-catalog [128-bit-ID...]詳細列出日志分類信息 (格式與 .catalog 文件相同)。如果明確指定了分類ID(128-bit-ID), 那么僅顯示指定的分類。
--update-catalog更新日志分類索引二進制文件。每當安裝、刪除、更新了分類文件,都需要執行一次此動作。
--setup-keys此選項并不用于顯示日志內容, 而是用于生成一個新的FSS(Forward SecureSealing)密鑰對。 此密鑰對包含一個"sealing key"與一個"verification key""sealing key"保存在本地日志目錄中, 而"verification key"則必須保存在其他地方。詳見 journald.conf(5) 中的 Seal= 選項。
--force與 --setup-keys 連用, 表示即使已經配置了FSS(Forward Secure Sealing)密鑰對,也要強制重新生成。
--interval=與 --setup-keys 連用,指定"sealing key"的變化間隔。較短的時間間隔會導致占用更多的CPU資源, 但是能夠減少未檢測的日志變化時間。默認值是 15min
--verify檢查日志文件的內在一致性。 如果日志文件在生成時開啟了FSS特性, 并且使用--verify-key= 指定了FSS的"verification key",那么,同時還將驗證日志文件的真實性。
--verify-key=--verify 選項連用, 指定FSS的"verification key"
--sync要求日志守護進程將所有未寫入磁盤的日志數據刷寫到磁盤上,并且一直阻塞到刷寫操作實際完成之后才返回。 因此該命令可以保證當它返回的時候,所有在調用此命令的時間點之前的日志, 已經全部安全的刷寫到了磁盤中。
--flush要求日志守護進程 將 /run/log/journal 中的日志數據 刷寫到 /var/log/journal 中(如果持久存儲設備當前可用的話)。 此操作會一直阻塞到操作完成之后才會返回,因此可以確保在該命令返回時, 數據轉移確實已經完成。注意,此命令僅執行一個單獨的、一次性的轉移動作, 若沒有數據需要轉移,則此命令什么也不做, 并且也會返回一個表示操作已正確完成的返回值。
--rotate要求日志守護進程滾動日志文件。 此命令會一直阻塞到滾動完成之后才會返回。
-h, --help顯示簡短的幫助信息并退出。
--version顯示簡短的版本信息并退出。
--no-pager不將程序的輸出內容管道(pipe)給分頁程序

2.5.2 journalctl 示例

# 查看所有日志(默認情況下 ,只保存本次啟動的日志)journalctl
# 查看內核日志(不顯示應用日志)journalctl -k
# 查看系統本次啟動的日志journalctl -bjournalctl -b -0
# 查看上一次啟動的日志(需更改設置)journalctl -b -1
# 查看指定時間的日志journalctl --since="2017-10-30 18:10:30"journalctl --since "20 min ago"journalctl --since yesterdayjournalctl --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.servicejournalctl -u nginx.service --since today
# 實時滾動顯示某個 Unit 的最新日志journalctl -u nginx.service -f
# 合并顯示多個 Unit 的日志journalctl -u nginx.service -u php-fpm.service --since today
# 查看指定優先級(及其以上級別)的日志,共有8級0: emerg1: alert2: crit3: err4: warning5: notice6: info7: debugjournalctl -p err -b
# 日志默認分頁輸出,--no-pager 改為正常的標準輸出journalctl --no-pager
# 日志管理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

三.實現使用 mysql 集中存儲日志數據

實驗環境:
centos7.7(172.20.1.193) — rsyslog 日志服務器
centos8(172.20.1.191)— mysql 數據服務器
  • centos7.7(172.20.1.193) — 日志服務器
[root@localhost ~]# yum install rsyslog-mysql
[root@localhost ~]# rpm -ql rsyslog-mysql
/usr/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
[root@localhost ~]# scp /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql 172.20.1.191:/data/
[root@localhost ~]# vim /etc/rsyslog.conf
#### MODULES ####
...
##########custom##########
$ModLoad ommysql
...
#### RULES ####...
#########custom rules##########
*.info         :ommysql:172.20.1.191,Syslog,rsyslog,stevenux[root@localhost ~]# systemctl restart rsyslog.service
  • centos8(172.20.1.191)— mysql 服務器
[root@localhost ~]# cat /data/mysql-createDB.sql
CREATE DATABASE Syslog;
USE Syslog;
CREATE TABLE SystemEvents
(ID int unsigned not null auto_increment primary key,CustomerID bigint,ReceivedAt datetime NULL,DeviceReportedTime datetime NULL,Facility smallint NULL,Priority smallint NULL,FromHost varchar(60) NULL,Message text,NTSeverity int NULL,Importance int NULL,EventSource varchar(60),EventUser varchar(60) NULL,EventCategory int NULL,EventID int NULL,EventBinaryData text NULL,MaxAvailable int NULL,CurrUsage int NULL,MinUsage int NULL,MaxUsage int NULL,InfoUnitID int NULL ,SysLogTag varchar(60),EventLogType varchar(60),GenericFileName VarChar(60),SystemID int NULL
);
CREATE TABLE SystemEventsProperties
(ID int unsigned not null auto_increment primary key,SystemEventID int NULL ,ParamName varchar(255) NULL ,ParamValue text NULL
);MariaDB [Syslog]> source /data/mysql-createDB.sql
MariaDB [Syslog]> GRANT ALL ON Syslog.* TO 'rsyslog'@'172.20.1.193' IDENTIFIED BY 'stevenux';
MariaDB [Syslog]> FLUSH privileges;
MariaDB [Syslog]> SHOW tables;
+------------------------+
| Tables_in_Syslog       |
+------------------------+
| SystemEvents           |
| SystemEventsProperties |
+------------------------+
  • centos7.7(172.20.1.193) — 日志服務器
[root@localhost ~]# logger "hello this is a test message"centos8(172.20.1.191)--- mysql 服務器
MariaDB [Syslog]> select * from SystemEvents\G
*************************** 4. row ***************************ID: 4CustomerID: NULLReceivedAt: 2019-12-16 21:22:49
DeviceReportedTime: 2019-12-16 21:22:49Facility: 1Priority: 5FromHost: localhostMessage: hello this is a test messageNTSeverity: NULLImportance: NULLEventSource: NULLEventUser: NULLEventCategory: NULLEventID: NULLEventBinaryData: NULLMaxAvailable: NULLCurrUsage: NULLMinUsage: NULLMaxUsage: NULLInfoUnitID: 1SysLogTag: root:EventLogType: NULLGenericFileName: NULLSystemID: NULL
4 rows in set (0.00 sec)

四.實現使用 mysql 集中存儲日志數據,loganalyzer 展示數據

  • loganalyzer 是用 php 語言實現的日志管理系統,可將 MySQL
    數據庫的日志用豐富的 WEB 界面方式進行展示
    官網
使用環境:
一臺日志服務器,利用上一個案例實現,IP: 172.20.1.193
一臺數據庫服務器,利用上一個案例實現,IP: 172.20.1.191
一臺當 httpd+php 服務器,并安裝 loganalyzer 展示
web 圖形,IP: 172.20.1.207
  1. 172.20.1.207 安裝 php 和依賴包
yum install httpd php-fpm php-mysqlnd  php-gd
# php-gd模塊是提供gd圖形庫的共享模塊
systemctl restart httpd php-fpm
  1. 172.20.1.207 安裝 LogAnalyzer
#從http://loganalyzer.adiscon.com/downloads/ 下載loganalyzer-4.1.8.tar.gz
yum install httpd php php-mysqlnd php-gd
tar xvf loganalyzer-4.1.8.tar.gz
mv loganalyzer-4.1.8/src/ /var/www/html/log
touch /var/www/html/log/config.php
chmod 666 /var/www/html/log/config.php
  1. 訪問http://172.20.1.207/log初始化

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35534.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35534.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35534.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis_Geospatial(基于位置信息的應用)

12.Geospatial 12.1 簡介 基于位置信息服務(Location-Based Service,LBS)的應用。Redis3.2版本后增加了對GEO類型的支持。主要來維護元素的經緯度。redis基于這種類型,提供了經緯度設置、查詢、范圍查詢、距離查詢、經緯度hash等一些相關操作 12.2 GEO底層結構 …

war和war exploded

war和war exploded的區別 war模式&#xff1a;將WEB工程以包的形式上傳到服務器 &#xff1b; war exploded模式&#xff1a;將WEB工程以當前文件夾的位置關系上傳到服務器&#xff1b;>> war包是自己打包生成的&#xff0c;如pom文件中<packaging>war</packag…

使用 Visual Studio Code 調試 CMake 腳本

之前被引入到 Visual Studio 中的 CMake 調試器&#xff0c;現已在 Visual Studio Code 中可用。 也就是說&#xff0c;現在你可以通過在 VS Code 中安裝 CMake 工具擴展&#xff0c;來調試你的 CMakeLists.txt 腳本了。是不是很棒? 背景知識 Visual C 開發團隊和 CMake 的維…

Flutter源碼分析筆記:Widget類源碼分析

Flutter源碼分析筆記 Widget類源碼分析 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/article/details/132259681 【介紹】&#x…

TestNG和Junit5測試框架梳理

一、testNG 1. testNG優勢 注解驅動&#xff1a; TestNG 使用注解來標識測試方法、測試類和配置方法&#xff0c;使得測試更具可讀性。 并行執行&#xff1a; TestNG 支持多線程并行執行測試&#xff0c;可以加速測試套件的執行。 豐富的配置&#xff1a; 可以通過 XML 配置文…

Qt下載安裝及配置教程

進入qt中文網站&#xff1a;https://www.qt.io/zh-cn/ 下載開源版 往下滑&#xff0c;下載Qt在線安裝程序 它已經檢測出我的是windows系統&#xff0c;直接點擊download就好。如果是其它的系統&#xff0c;需要找到對應自己系統的安裝包。 然后跟網速有關&#xff0c;等…

Gitlab CI/CD筆記-第三天-使用主機docker in docker 進行構建并push鏡像。

一、啥叫docker in docker 就是允許的鏡像里頭有一個docker,但這個docekr鏡像只有docker的cli和/var/lib/docker.sock的套接字&#xff0c;沒有允許build.然后里頭又運行了一個docker&#xff0c;這個docker有build的能力&#xff0c;此時構建時就是里頭的docker使用外部的dock…

登錄驗證碼實現

Hutool代碼改造 Hutool 有參考文檔&#xff1b;很多工具類&#xff1b;把一些功能都封裝好&#xff1b;都不用你自己去寫&#xff1b;直接調用它的工具類 它這里會詳細告訴你引入方式Hutool <dependency><groupId>cn.hutool</groupId><artifactId>hu…

STM32F429IGT6使用CubeMX配置SPI通信(W25Q256芯片)

1、硬件電路 需要系統性的看一下W25Q256芯片手冊 2、設置RCC&#xff0c;選擇高速外部時鐘HSE,時鐘設置為180MHz 3、配置SPI 4、生成工程配置 5、相關代碼 #define sFLASH_ID 0XEF4019 // W25Q256#define SPI_FLASH_PageSize 256 #define SPI_FLASH_PerWritePageSize 256#def…

《雷達像智能識別對抗研究進展》閱讀記錄

&#xff08;1&#xff09;引言 ? 神經網絡通常存在魯棒性缺陷&#xff0c;易受到對抗攻擊的威脅。攻擊者可以隱蔽的誘導雷達智能目標識別做出錯誤預測&#xff0c;如&#xff1a; ? a圖是自行車&#xff0c;加上對抗擾動后神經網絡就會將其識別為挖掘機。 &#xff08;2&a…

【Quarkus技術系列】打造基于Quarkus的云原生微服務框架實踐(1)

前提介紹 本系列文章主要講解如何基于Quarkus技術搭建和開發"專為Kubernetes而優化的Java微服務框架"的入門和實踐&#xff0c;你將會學習到如何搭建Quarkus微服務腳環境及腳手架&#xff0c;開發Quarkus的端點服務&#xff0c;系統和應用層級的配置介紹與Quarkus的…

單芯片3路CC管理的VR轉接器解決方案

VR眼鏡即VR頭顯&#xff0c;也稱虛擬現實頭戴式顯示設備&#xff0c;隨著元宇宙概念的傳播&#xff0c;VR眼鏡的熱度一直只增不減&#xff0c;但是頭戴設備的續航一直被人詬病&#xff0c;如果增大電池就會讓頭顯變得笨重影響體驗&#xff0c;所以目前最佳的解決方案還是使用VR…

C# BeginInvoke 加 EndInvoke實現異步操作

1、定義一個委托 delegate long MyDel(int first, int second); 2、 需異步操作的函數 static int sum(int x,int y) {Console.WriteLine("InSide Sum1");Thread.Sleep(1000);Console.WriteLine("InSide Sum2");return x y;} 3、回調方法…

[HDLBits] Exams/m2014 q3

Consider the function f shown in the Karnaugh map below. Implement this function. d is dont-care, which means you may choose to output whatever value is convenient. //empty

gitui 解決 git error:Bad credentials.

問題描述 cat .git/config """ [remote "origin"]url gitgitcode.net:xxx.gitfetch refs/heads/*:refs/remotes/origin/* """ls -lh ~/.ssh/ """ -rw------- 1 z z 2.6K 8月 12 15:04 id_rsa -rw-r--r-- 1 z z 56…

學習左耳聽風欄目90天——第六天 6/90(學習左耳朵耗子的工匠精神,對技術的熱愛)【如何擁有技術領導力】

學習左耳聽風欄目90天——第六天 6/90&#xff08;學習左耳朵耗子的工匠精神&#xff0c;對技術的熱愛&#xff09;【如何擁有技術領導力】

【第358場周賽】限制條件下元素之間的最小絕對差,Java解密。

LeetCode 第358場周賽 恒生專場。 文章目錄 劍指Offer:限制條件下元素之間的最小絕對差示例:限制:解題思路:劍指Offer:限制條件下元素之間的最小絕對差 【題目描述】 給你一個下標從 0 開始的整數數組 nums 和一個整數 x 。 請你找到數組中下標距離至少為 x 的兩個元素的…

虛擬機內搭建CTFd平臺搭建及CTF題庫部署,局域網內機器可以訪問

一、虛擬機環境搭建 1、安裝docker、git、docker-compose ubuntu&#xff1a; sudo apt-get update #更新系統 sudo apt-get -y install docker.io #安裝docker sudo apt-get -y install git #安裝git sudo apt-get -y install python3-pip #安裝pip3 sudo pip install dock…

SQL筆記

最近的工作對SQL的應用程度較高&#xff0c;而且寫的sql類型基本沒怎么涉及過&#xff0c;把用到的幾個關鍵字記錄下。 使用環境&#xff1a;達夢數據庫 達夢數據庫有個特點&#xff0c;他有一個叫模式的說法&#xff0c;在圖形化工具里直接點擊創建查詢窗口&#xff0c;不用像…

Kubeadm安裝K8s集群

一、硬件環境 準備3臺Linux服務器&#xff0c;此處用Vmware虛擬機。 主機名CPU內存k8smaster2核4Gk8snode12核4Gk8snode22核4G 二、系統前置準備 配置三臺主機的hosts文件 cat << EOF > /etc/hosts 192.168.240.130 k8smaster 192.168.240.132 k8snode1 192.168.…