antony@notes:~/suse$ cat "Administration-and-Monitoring.md"
Administration and Monitoring
Administration and Monitoring
Preface
本文主要了解 chrony 的時間同步、如何設定系統記錄,以及了解 Supportconfig
可以透過點擊展開以下目錄,選擇想看的內容,跳轉至特定章節
:::warning
:::spoiler 文章目錄
[TOC]
:::
Understand Time Sync with chrony
Time Synchronization Basics
時間同步基礎知識
許多網絡服務,如 directory services (目錄服務),以及需要關聯不同機器上的紀錄條目的取證調查,都依賴於網絡中所有計算機的統一時間設置。
為了在網絡中的所有計算機上實現統一的時間設置,所有的計算機必須能夠訪問至少一個時間服務器,這樣時鐘才能同步。
在 SUSE Linux Enterprise 服務器上有兩種同步時間的方法同步時間的方法 :
- netdate
- Disadvantage: Time jumps
- 與當前的系統時間相比,它會導致系統時間跳到過去或未來。
- NTP (Network Time Protocol)
- UDP on port 123
- 一個時間客戶端也可以作為時間伺服器
- 將時鐘與 UTC 標準同步
- 修正時間
- 追蹤一致的時間變化
- 自動調整客戶端的系統 time drift (時間飄移)
- 提供避免 time jumps (時間跳躍)的方法
NTP
一種行業標準協定,使用 port 號 123 上的 UDP 進行時間伺服器和時間客戶端之間的通訊。
NTP 不僅校正時間,而且還追踪一致的時間變化並自動調整客戶端的系統時間漂移,這就減少了網絡流量,它使客戶端的時鐘更加穩定,即使是在網絡中斷的情況下。
NTP 提供了一種方法來避免這種跳躍,它略微加快或減慢系統時間,從而(在一定範圍內)在調整系統時間的同時保持時間的連續性。隨著網絡環境的不斷擴大,包括混合操作系統環境,時間同步也越來越依賴於 NTP。
NTP 伺服器
使用 NTP 通訊協定為網路上的其他伺服器或工作站提供時間信息。
NTP 客戶端
是一台能夠理解網路時間協定並從 NTP 伺服器獲取時間信息的電腦,一個時間客戶端也可以反過來作為網路上其他伺服器和客戶端工作站的時間伺服器。
網路上任何有互聯網接入權限的電腦都可以從互聯網上的 NTP 伺服器獲取時間,NTP 將時鐘與國際時間標準 UTC 同步。
NTP Stratum

NTP 引入了層級的概念
層級 1 是層級中的第一個(最高)層級。它表示透過一些外部參考時間源,如 :
- GPS (全球定位系統)
- 原子鐘
- 無線電
來調整其時間的伺服器。
將其時間與層級 1 伺服器同步的伺服器被稱為層級 2,而使用層級 2 伺服器同步其時間的伺服器被稱為層級 3,以此類推,直到達到層級 16(允許的最大值)。
層級 2 和層級 1 伺服器之間的差異通常非常小,對大多數用戶而言,是無法察覺的。
通常,僅有一個伺服器與 external time provider (外部時間提供者) 通信。這降低了地理位置間的網絡流量,並最大限度地減少了路由器和 WANs (廣域網絡) 之間的流量。
chrony
在 SLE 15 中,傳統的 ntpd 背景程序被 chrony 取代了。
chrony 由兩個部分組成:
chronyd- 背景程序,可以在機器開機時啟動chronyc- 命令行介面,用於監控chronyd的性能並在運行時更改各種操作參數
Basesystem Module
- 這個模塊在安裝程序的基礎上增加了一個基礎系統,它是所有其他模塊和擴展的要求。僅包含基礎系統的安裝範圍,與之前 SUSE Linux Enterprise Server 版本的安裝模式最小系統相當
- 依賴關係:無
Containers Module
- 這個模組包含容器的支持和工具。
- 依賴關係:Basesystem
Desktop Applications Module
- 這個模組為系統添加了圖形用戶界面和基本桌面應用程序。此模組還是服務器應用程序和開發工具模組的先決條件。
- 依賴關係:Basesystem
Development Tools Module
- 這個模組包含編譯器(包括 GCC)和編譯和調試應用程序所需的庫。
- 依賴關係:Basesystem、Desktop Applications
Legacy Module
- 這個模組包含以前版本的 SUSE Linux Enterprise Server 中可用的套件,但在 SLES 15 中已停用。此模組在從以前的 SLES 版本遷移時建議使用。
- 依賴關係:Basesystem、Server Applications
Public Cloud Module
- 這個模組包含創建用於在雲環境中部署 SUSE Linux Enterprise Server 的映像所需的所有工具,例如 Amazon Web Services(AWS)、Microsoft Azure、Google Compute Platform 或 SUSE OpenStack Cloud。
- 依賴關係:Basesystem、Server Applications
chronyd Configuration – YaST
::: spoiler {state=“open”} The YaST NTP Configuration module can be used to configure chrony:

:::
:::spoiler {state=“open”} New servers can be added by clicking on Add:


:::
chronyd Configuration
- chrony 從
/etc/chrony.conf檔案讀取設定值 - 可以加入指定的伺服器名稱或 IP 位址 :
server 0.europe.pool.nyp.org server 1.europe.pool.nyp.org server 2.europe.pool.nyp.org - 也可以指定一個 pool 名稱,該名稱會解析成多個 IP 位址
pool pool.ntop.org - chrony 可以從 root shell 啟動 :
systemctl start chronyd.service - chrony 可以從 root shell 設置在機器啟動時啟動:
systemctl enable chronyd.service
chronyc
透過執行 chronyc 可以改變 chronyd 運行時的行為或生成狀態報告,並且 chronyc 可以在交互模式或非交互模式下運行。
~> chronyc螢幕輸出 :
chrony version 4.1
Copyright (C) 1997-2003, 2007, 2009-2021 Richard P. Curnow and others
chrony comes with ABSOLUTELY NO WARRANTY. This is free software, and
you are welcome to redistribute it under certain conditions. See the
GNU General Public License version 2 for details.執行 activity 生成狀態報告
chronyc> activity螢幕輸出 :
200 OK
12 sources online
0 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
0 sources with unknown address注意:chronyc 更改是暫時的,不會寫入 /etc/chrony.conf,它們在下次重新啟動 chronyd 時將被清除。
Configure System Logging
rsyslog
SLES 12 上使用的系統紀錄背景程序:rsyslogd
rsyslogd 被許多 Linux 服務用來記錄系統事件
- 使用單一服務進行記錄
- 允許從一個檔案中管理所有設定
- syslog 背景程序接受來自 Linux 服務的消息,並根據其配置文件中的設置對其進行記錄。
rsyslog 的配置分佈在:
- 設定檔案:
/etc/rsyslog.conf - 配置目錄:
/etc/rsyslog.d/ - Deamon 參數:
/etc/sysconfig/syslog
rsyslog 支持 Internet 和 Unix Domain Sockets,因此支持本地和遠程的紀錄。
舊的 syslog(不是syslog-ng)的配置檔案 syslog.conf也可用於 rsyslog,反之不成立,因為 rsyslog 具有比 syslog 更多的功能,因此包含了這些功能的完整 rsyslog.conf 在 syslog 中不起作用。 syslog-ng.conf 文件具有完全不同的格式,因此不能用於 rsyslog。
最簡單的配置形式包含一個設施、一個優先級和一個目的地:
mail.info /var/log/mail.log- rsyslog 可以通過模塊(在單獨的軟件包中)進行擴展,以支持
- TLS
- 對資料庫進行日誌記錄,如 MySQL、PostgreSQL
- GSS_API
- 額外的文檔包含在
rsyslog-doc包中
rsyslog Configuration
rsyslog 的配置由不同的元素組成,它們分別用於記錄哪些資訊以及記錄到哪裡:
- Global directives
- Filters
- Selector
- Facilities
- Priorities
- Action
- Selector
- Rules, Rulesets, Output channels, Templates…
Global Directives
Global Directives (全域指令)是一系列設置,這些設置會影響 rsyslog 的整體行為,它們通常放置在配置檔案的頂部,以設置全局性質的參數。
例如
- Loading external modules,載入外部模組,通常用來用於擴展 rsyslog 的功能
Example:
$ModLoad imuxsoc.so~> sudo cat /etc/rsyslog.conf | grep -B1 '$ModLoad imuxsock.so'螢幕輸出 :
# provides support for local system logging (e.g. via logger command) $ModLoad imuxsock.so
- Size of main message queue,緩存接收的日誌消息的大小,如果主消息佇列太小,可能會丟失某些消息
- Example:
$MainMessageQueueSize
- Example:
Selector
- 選擇欄位由兩部分組成,分別是 facility (設施)和 priority (優先順序),中間以英文的句點 (
.) 分隔,例如: mail.warn- 這將記錄郵件系統優先順序為警告或更高或更緊急的消息
設施.優先順序可以用 filter (過濾器) 替代。
Facilities
- Facilities 指的是提供相應訊息的子系統。
- 一種標準的 syslog 記錄分類,用來表示訊息來源的類型,例如系統程序或應用程式。
- 每個使用 syslog 進行記錄的程式都被分配了一個 facility,通常由開發人員指定。
- rsyslog 使用與傳統 syslog 相同的 facility。
Facilities 包括以下項目
- authpriv,安全/驗證系統的私有訊息 (security/authorization messages private to the system)
- cron,任務計劃程式 (clock daemon)
- daemon,系統背景程式 (system daemons)
- kern,核心設備 (kernel messages)
- lpr,列印系統 (line printer subsystem)
- mail,郵件系統 (mail system)
- news,新聞系統 (network news subsystem)
- syslog ,syslog 程序本身 (messages generated internally by syslogd)
- user,一般使用者程式
- uucp,Unix to Unix Copy (UUCP) 系統
- local0-local7,應用程式自定義的訊息
Priorities
- 優先順序一詞指的是訊息的重要性。
- rsyslog 使用與傳統 syslog daemon 相同的優先順序,由高到低依次是:
- emerg(與 panic 相同): 緊急情況,系統已經無法使用
- alert : 需要立即採取行動,例如無法使用的檔案系統
- crit : 致命錯誤,例如硬體故障
- error(與 err 相同) : 錯誤,例如無法打開檔案
- warn(與 warning 相同) : 警告,例如磁碟空間不足
- notice : 需要注意的事件,例如系統 image 更新
- info : 一般信息
- debug : 除錯信息
在 filter rules (篩選規則)中,也可以使用數字在 rsyslog.conf 中表示優先順序,從 0(表示 emerg)到 7(表示 debug),數字越小代表優先級越高,也就是說越緊急或嚴重。
但不要在 selector statements (選擇語句),如 : mail.warn 中使用這些數字。
Filter
- 篩選規則由“
if ... then”語句組成。 - 條件包括
- Facility (設施)
- Priority (優先順序)
- Hostname (主機名稱)
- Strings in the message (訊息中的字串)
- …等
- 如果篩選器匹配,則會執行一個操作(例如寫入文件)。
下面是 /etc/rsyslog.conf 中的一個例子:
if ( \
/* kernel up to warning except of firewall */ \
($syslogfacility-text == 'kern') and \
($syslogseverity <= 4 /* warning */ ) and not \
($msg contains 'IN=' and $msg contains 'OUT=') \
) or ( \
/* up to errors except of facility authpriv */ \
($syslogseverity <= 3 /* errors */ ) and not \
($syslogfacility-text == 'authpriv') \
) \
then /dev/tty10
& |/dev/xconsole反斜線用於掩蔽行尾,
/…/則為註釋。 if 括號內的語句可以用and或or連接。
上述語句定義
- 來自
kern子系統- 優先級為
warning或更高優先級- 不包含字符串
IN=和OUT=的信息- 優先級為
err的信息,並且除了來自authpriv子系統的信息將被寫入
/dev/tty10和通往/dev/console的管道中。
在上面的例子中,消息的處理會繼續進行
rsyslog.conf的其餘項目,防火牆消息將根據配置中的其他項目被寫入另一個文件。
如果最後一行寫成
& stop,後續規則將不會被執行。
Actions
Actions (動作)定義了紀錄訊息會到達的位置,包括:
- Regular file (普通檔案)
- Named pipe (命名管道)
- Terminal and console (終端機和控制台)
- Remote machine (遠端機器)
- List of users (使用者列表)
- Everyone logged in (所有登入者)
- Database table (資料庫表格)
- Discard (捨棄)
- Output channel (輸出通道)
- Executable (可執行程式[不確定是不是這樣翻])
Regular file:
- 使用絕對路徑的檔名。
- 檔名前面加上減號表示這些資訊可能不會立即同步到磁碟,這意味著如果系統崩潰,一些資訊可能會遺失。
- 如果沒有加減號,新的條目會直接同步到磁碟,這意味著在崩潰後可以使用更多的資訊,但系統性能可能會受到影響。
Templates
- 模板語句可用於配置日誌記錄的格式
- rsyslogd 的每個輸出都使用模板
- 在使用者未定義模板時,rsyslogd 中硬編碼的模板會被使用
模板陳述式的基本結構:
template(parameters)
($template 仍然被支援)。
每個模板都有一個參數名稱,指定模板的名稱,以及參數類型,指定模板的類型。
類型可以是列表、子樹、字串或外掛程式。類型在配置語法上有所不同,但不影響您使用的方式。
使用列表時,模板是由一系列常量和變量陳述式生成的。這些陳述式以花括號表示,符合模板規範。
列表模板包含模板標頭(type=”list”),後面是常量和屬性陳述式,以花括號給出,表示它們所屬的模板陳述式。常量陳述式描述常量文本,而屬性則描述屬性訪問。在 rsyslog 的文件中詳細描述了許多屬性選項。其中大部分選項用於提取部分屬性內容或修改獲取的文本(例如只更改其大寫或小寫)。
template(name="tpl1" type="list") {
constant(value="Syslog MSG is: '")
property(name="msg")
constant(value="', ")
property(name="timereported" dateFormat="rfc3339" caseConversion="lower")
constant(value="\n")
}Output Channels
當特定檔案大小被達到時,Output Channels (輸出通道) 可以用來定義一個動作(要被發送到的地方)
- 語法:
$outchannel name,file-name,max-size,action-on-max-size
- 範例,定義輸出通道:
$outchannel mychannel,/var/log/mylog,1000000,gzip /var/log/mylog
- 在後面的設定中使用它:
*.* :omfile:$mychannel
Rulesets
Rulesets (規則集) 用於根據各種條件記錄到各種目標
Viewing Log Files
- 在 SLES 上,大部分的訊息都會寫入到
/var/log/messages的日誌檔案中- 這個檔案對於疑難排解非常有用
- 你也應該檢查
/var/log/audit/audit.log檔案
- 防火牆的訊息會被記錄在
/var/log/firewall檔案中 - 要查看日誌檔案,可以使用
tail指令- 顯示檔案的最後 10 行
tail -n X,指定要顯示的行數tail -f,立即顯示新的訊息
Important Log Files
- 存放重要紀錄檔的目錄在
/var/log/: /var/log/audit//var/log/cups//var/log/news//var/log/YaST2//var/log/boot.log/var/log/mail/var/log/mail.err/var/log/mail.info/var/log/mail.warn/var/log/wtmp/var/log/lastlog
Archive Log Files with logrotate
- 在 Linux 上,您需要注意日誌檔案的大小,以確保它們不會變得太大。
logrotate的功能如下:- 每天監控日誌檔案的大小和年齡
- 由 cron daemon 管理 (
/etc/cron.daily/logrotate)
- 由 cron daemon 管理 (
- 檢查在設定檔案中列出的所有日誌檔案
- 根據設定進行必要的動作
Configure Log File Rotation
在 /etc/logrotate.conf 中的設定包含一般配置參數
- 指示文件應在以下情況下壓縮或刪除:
- 定期間隔
- 指定的大小
- 指示應保留多少壓縮版本
logrotate 的設定檔案為 /etc/logrotate.conf,包含了一般的設定。
可以設定是否在固定的時間間隔或檔案達到特定大小時,壓縮或刪除日誌檔案。
也可以設定保留日誌檔案在指定時間內的壓縮版本數量。 日誌檔案也可以透過電子郵件轉發。
Sample logrotate.conf File
/etc/logrotate.conf包含了一般的設定設定可以被
/etc/logrotate.d/目錄中的檔案所覆寫:::spoiler 設定檔內容
# # Please note, that changing of log file permissions in this # file is not sufficient if syslog-ng is used as log daemon. # # It is required to specify the permissions in the syslog-ng # configuration file /etc/syslog-ng/syslog-ng.conf as well. # # the firewall,acpid,NetworkManager log files # are used by syslog-ng and rsyslog only, the # other by all syslog daemons. # the mail log files are used by all syslog daemons # the news log files are used by all syslog daemons /var/log/warn /var/log/messages /var/log/allmessages /var/log/localmessages /var/log/firewall /var/log/acpid /var/log/NetworkManager /var/log/mail /var/log/mail.info /var/log/mail.warn /var/log/mail.err /var/log/news/news.crit /var/log/news/news.err /var/log/news/news.notice { compress dateext maxage 365 rotate 99 missingok notifempty size +4096k sharedscripts postrotate /usr/bin/systemctl reload syslog.service > /dev/null endscript }:::
logrotate Options
- 在
logrotate.conf中可用的選項:weekly,每週建立或替換一次日誌檔案rotate 4,保留四週的日誌檔案。create,舊檔案以新名稱保存,並創建一個新的空日誌檔案。compress,備份以壓縮形式存儲
RPM logrotate Files
許多 RPM 套件包含預先配置的檔案,供 logrotate 評估使用。
- 這些文件存儲在
/etc/logrotate.d/中。 - 它們由
logrotate通過/etc/logrotate.conf中的包含/etc/logrotate.d條目讀取 logrotate.d文件中的設置取代了logrotate.conf中的一般設置。
必須在 /etc/logrotate.conf 文件或單獨的配置文件中列出你希望由 logrotate 監控的文件。
/etc/logrotate.d/ File Example
以 /etc/logrotate.d/syslog 為例 :
...以上省略
{
compress
dateext
maxage 365
rotate 99
missingok
notifempty
size +4096k
sharedscripts
postrotate
/usr/bin/systemctl reload syslog.service > /dev/null
endscript
}在
/etc/logrotate.d/syslog檔案中包含設定,如何處理 syslog 寫入的日誌檔。
size +4096k:當文件大小達到 4096 KB 時才進行日誌輪換。rotate 99:每個檔保留 99 個版本。compress:舊日誌檔以壓縮形式儲存。maxage 365:壓縮檔超過 365 天時,立即刪除。notifempty:如果日誌檔是空的,則不進行輪替。create 640 root root:輪替後創建新的日誌檔,指定新文件的擁有者、群組和權限。postrotate … endscript:輪替後可以調用腳本。 例如,某些服務在更改日誌檔後必須重新啟動。 在此示例中,syslog 背景程序在輪替後重新讀取其配置文件(/etc/init.d/syslog reload),因為此腳本適用於syslogd和syslog-ng,所以使用哪個都沒問題。大多數需要監控其日誌檔的服務都提供預先配置的檔案。通常只需要進行輕微的調整即可。
Understand Supportconfig
supportconfig Basics
- 收集所需資訊的95%
- 將所有檔案儲存在一個目錄中
- 檔案名稱以
*.txt結尾,以方便跨平台使用預設編輯器 - 對檔案進行
tar和bzip2壓縮 - 預設的檔案命名規則是
nts_<hostname><date><time>.tbz - 使用
-B選項來控制檔案命名規則
supportconfig 是屬於 supportutils 套件的 bash script,可以收集系統資訊。
由於主要目標是加快解決問題,因此某些資訊可能會在多個主題檔案中重複。盡可能收集最多的資訊,以最小化重複請求資訊的次數。
每個檔案以 *.txt 擴展名結尾,這是大多數預設文字編輯器在各個操作系統上都能識別的擴展名。
所有檔案都被打包成一個檔案,然後使用 bzip2 壓縮,以最大化的減少上傳資訊到支援工程師和中央 supportconfig 儲存庫所需的時間。
使用 -B 啟動選項更改預設的 tar ball 檔案命名規則。
其他重要的選項有:
-F,列出 supportconfig 的功能-o,基於當前設置,打開或關閉 supportconfig 功能-i,執行最小的 supportconfig,但包括列出的功能-u,將 tarball 上傳到 Novell 的 ftp 伺服器-r <srnum>,在檔名中包含一個 11 位數的服務請求號碼