UBUNTU系統版本升級後,每日報告的logwatch無法正常解析clamav的LOG。

我目前自己找到的相關軟體版本:
# lsb_release -rd
Ubuntu 24.04.2 LTS

# apt-cache policy clamav-freshclam
*** 1.4.3+dfsg-0ubuntu0.24.04.1 500
1.0.5+dfsg-1.1ubuntu3 500
500 https://free.nchc.org.tw/ubuntu noble/main amd64 Packages

# apt-cache policy logwatch
*** 7.7-1ubuntu1 500

然後設定檔明明正確的指定它這個位置的LOG,檔案實際也是有正常的產出。
$ tail /var/log/clamav/freshclam.log
Fri Aug 1 09:03:31 2025 -> ————————————–
Fri Aug 1 09:03:31 2025 -> daily.cld database is up-to-date (version: 27718, sigs: 2076325, f-level: 90, builder: raynman)
Fri Aug 1 09:03:31 2025 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
Fri Aug 1 09:03:31 2025 -> bytecode.cld database is up-to-date (version: 336, sigs: 83, f-level: 90, builder: nrandolp)

但是這版的LOGWATCH就是一直無法抓到正確的資料出來。
$ logwatch –detail high –range yesterday –service clam-update
$ logwatch –detail high –range today –service clam-update
$ logwatch –detail high –service clam-update

跟AI交流研究和試誤的結果,應該是目前UBUNTU選擇使用的LOGWATCH套件版本關係,解析目前CLAMAV版本的LOG無法判斷格式,造成無法正常產生每日報表。
由於perl語法我已經太久太久沒去摸了,也沒有太多時間去研究怎麼撰寫程式的。
還好它這個有提供方式可以跑自訂的程式來產出檔案。
趁有記憶,紀錄一下。

新增兩行到自定義的檔案,設定預計要掃描那些紀錄檔案放哪邊。
$ sudo nano /etc/logwatch/conf/logfiles/clam-update.conf
LogFile = /var/log/clamav/freshclam.log
Archive = /var/log/clamav/freshclam.log.*

然後,新增一個客製的.sh執行檔,目的很簡單,就是把LOG檔案撈出24小時內的資訊,分警告、錯誤、和更新三個項目。
$ sudo nano /etc/logwatch/scripts/services/clam-update
#!/bin/sh

# 這個腳本只會處理從 logwatch 傳入的日誌內容
# 並篩選出最近 24 小時內的記錄

# 計算 24 小時前 Unix 時間戳
TIME_24_HOURS_AGO=$(date -d "24 hours ago" +%s)

echo "ClamAV Report (Last 24 Hours):"
echo "======================"

# 讀取 logwatch 傳入的所有日誌內容
LOG_INPUT=$(cat)

# 使用 awk 篩選出 24 小時內的日誌行
FILTERED_LOGS=$(echo "$LOG_INPUT" | awk -v time_ago="$TIME_24_HOURS_AGO" '{
# 檢查日誌行的格式是否正確
if (match($0, /^[A-Z][a-z]{2} +[A-Z][a-z]{2} +[ 0-9]+ [0-9]{2}:[0-9]{2}:[0-9]{2}/)) {
# 將日誌時間轉換為 Unix 時間戳
log_date = substr($0, RSTART, RLENGTH) " " strftime("%Y", systime())
cmd = "date -d \"" log_date "\" +%s 2>/dev/null"
cmd | getline log_timestamp
close(cmd)

# 如果日誌時間晚於 24 小時前,則印出
if (log_timestamp > time_ago) {
print $0
}
} else {
# 如果不是標準日誌行,可能是一行被截斷的日誌,也一併印出
print $0
}
}')

echo ""
echo "--- Warnings ---"
echo "$FILTERED_LOGS" | grep "WARNING:" | sed 's/^.*freshclam\[[0-9]*\]: //g'

echo ""
echo "--- Errors ---"
echo "$FILTERED_LOGS" | grep "ERROR:" | sed 's/^.*freshclam\[[0-9]*\]: //g'

echo ""
echo "--- Updates ---"
echo "$FILTERED_LOGS" | grep "ClamAV update process started" | sed 's/^.*freshclam\[[0-9]*\]: //g'
echo "$FILTERED_LOGS" | grep "database is up-to-date" | sed 's/^.*freshclam\[[0-9]*\]: //g'

存檔後,記得把它改成可以執行的檔案權限。
$ sudo chmod +x /etc/logwatch/scripts/services/clam-update
然後指令就這樣執行,應該就會從原來不顯示空白,變成有撈出需要的資料了。
$ logwatch –detail high –service clam-update
################### Logwatch 7.7 (07/22/22) ####################
Processing Initiated: Fri Aug 1 11:00:24 2025
Date Range Processed: yesterday
( 2025-Jul-31 )
Period is day.
Detail Level of Output: 10
Type of Output/Format: stdout / text
Logfiles for Host:
##################################################################

--------------------- clam-update Begin ------------------------

ClamAV Report (Last 24 Hours):
======================

--- Warnings ---

--- Errors ---

--- Updates ---
Thu Jul 31 11:30:13 2025 -> daily.cld database is up-to-date (version: 27717, sigs: 2078182, f-level: 90, builder: nrando>
Thu Jul 31 11:30:13 2025 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
Thu Jul 31 11:30:13 2025 -> bytecode.cld database is up-to-date (version: 336, sigs: 83, f-level: 90, builder: nrandolp)
...
Fri Aug 1 09:03:31 2025 -> daily.cld database is up-to-date (version: 27718, sigs: 2076325, f-level: 90, builder: raynma>
Fri Aug 1 09:03:31 2025 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
Fri Aug 1 09:03:31 2025 -> bytecode.cld database is up-to-date (version: 336, sigs: 83, f-level: 90, builder: nrandolp)

---------------------- clam-update End -------------------------

###################### Logwatch End #########################

不過這個方式,會把原來的指令,參數–range整個放棄掉,強制顯示24小時內的資料。
$ logwatch –detail high –range today –service clam-update
看有無神人能修改好原來的perl檔案,或者是這個跟AI交流後的.sh檔案再進化。
總之,我回報BUG過去UBUNTU開發團隊,後續看發展。
但是自己至少要能看到每天的更新訊息,比較重要~XD

**順便發到這裡分享反應:
https://bugs.launchpad.net/ubuntu/+source/clamav/+bug/2067608/comments/36

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

請輸入下列驗證碼計算後阿拉伯數字 (Translate it, if not Taiwanese to post reply) *