一.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 管理日志涉及的俗語
-
auth
-
authpriv
-
cron
-
daemon
-
ftp
-
kern
-
lpr
-
mail
-
news
-
security(auth)
-
user
-
uucp
-
local0-local7
-
syslog
facility
:設施,從功能或程序上對日志進行歸類 local0-local7
: 可以用戶自定義的日志類型
-
debug-->info-->notice-->warn(warning)-->err(error)-->crit(critical)-->alert--> emerg(panic)
Priority
優先級別,下面的優先級別從左到右從低到高排序 - 參看幫助: 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
- 172.20.1.207 安裝 php 和依賴包
yum install httpd php-fpm php-mysqlnd php-gd
# php-gd模塊是提供gd圖形庫的共享模塊
systemctl restart httpd php-fpm
- 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
- 訪問
http://172.20.1.207/log
初始化