集中式日志分析平臺(tái) - ELK Stack - Filebeat 的注意事項(xiàng)

之前阿里的 tailfile 有許多坑,包括對(duì)軟連接支持度不夠,可能會(huì)有意想不到的后果,不保證采集數(shù)據(jù)完整性。比如有某些 情況下(Checkpoint 文件損毀) 重啟采集進(jìn)程后會(huì)重復(fù)讀取歷史已采集數(shù)據(jù)打爆服務(wù)器 Load。所以,要更好地使用 Filebeat,我們需要了解 Filebeat 哪些事兒我搞不定哪些事兒我無法承諾。官方文檔是一個(gè)非常好的參考:Frequently Asked Questions

無法從網(wǎng)絡(luò) Volumes 讀取 Log

不建議使用 Filebeat 從網(wǎng)絡(luò) Volumes 讀取日志文件。 盡可能在主機(jī)上安裝 Filebeat 并從那里直接發(fā)送日志文件。 從網(wǎng)絡(luò)Volumes 讀取文件(尤其是在Windows上)可能會(huì)產(chǎn)生意外的副作用。 例如,更改的文件標(biāo)識(shí)符可能導(dǎo)致 Filebeat 再次從頭讀取日志文件。

Filebeat 無法采集數(shù)據(jù)

這可能是因?yàn)?Filebeat 配置不正確或無法將事件發(fā)送到 output,解決方案:

  • 確保配置文件指定正在收集的文件的正確路徑。 有關(guān)詳細(xì)信息,請(qǐng)參閱 Step 2: Configuring Filebeat
  • 驗(yàn)證文件是否早于 ignore_older 指定的值。 ignore_older 默認(rèn)是禁用的,這取決于設(shè)置的值。 我們可以通過為 ignore_older 指定不同的值來更改此行為。
  • 確保 Filebeat 能夠?qū)⑹录l(fā)送到已配置的 output。 在調(diào)試模式下運(yùn)行 Filebeat 以確定它是否成功發(fā)布事件:

./filebeat -c config.yml -e -d "*"

下面說說 ignore_older 這個(gè)配置:

如果啟用此選項(xiàng),F(xiàn)ilebeat 將忽略在指定時(shí)間跨度之前修改的任何文件。 如果我們將日志文件保留很長時(shí)間,那么配置ignore_older 尤其有用。 例如,如果要啟動(dòng) Filebeat,但只想發(fā)送最新文件和自上周以來的文件,則可以配置此選項(xiàng)。我們可以使用時(shí)間字符串,如 2h(2小時(shí))和 5m(5分鐘)。 默認(rèn)值為0,禁用該設(shè)置。 注釋掉配置與將其設(shè)置為0具有相同的效果。

注意:我們必須設(shè)置 ignore_older > close_inactive。

配置項(xiàng) close_inactive 表示在 harvester 讀取某文件最后一行日志之后,持續(xù)時(shí)間內(nèi)某文件沒有再寫入日志,F(xiàn)ilebeat 將關(guān)閉文件句柄,默認(rèn)是 5m。

發(fā)生 Too many open files

Filebeat 會(huì)持續(xù)保持著句柄,以便以便它可以近乎實(shí)時(shí)地讀取新的日志行。如果 Filebeat 正在收集大量文件,則打開的文件數(shù)可能會(huì)成為問題。在大多數(shù)環(huán)境中,活動(dòng)更新的文件數(shù)較少。應(yīng)相應(yīng)設(shè)置 close_inactive 配置選項(xiàng)以關(guān)閉不再活動(dòng)的文件。

還有其他配置選項(xiàng)可以用來關(guān)閉文件處理程序,但是所有這些配置選項(xiàng)都應(yīng)該仔細(xì)使用,因?yàn)樗鼈兛赡苡懈弊饔谩_x項(xiàng)是:

close_renamed
close_removed
close_eof
close_timeout
harvester_limit
close_renamedclose_removed 選項(xiàng)在 Windows 上可用于解決與 log rotate 相關(guān)的問題。請(qǐng)參閱 the section called “Open file handlers cause issues with Windows file rotation?close_eof 選項(xiàng)在包含大量文件且只有很少 entries 的環(huán)境中很有用。close_timeout 選項(xiàng)在允許數(shù)據(jù)丟失且必須對(duì)文件句柄關(guān)閉非常重視的情況下非常有用。有關(guān)更多詳細(xì)信息,請(qǐng)參閱 Filebeat Prospectors Configuration

在使用任何配置選項(xiàng)之前,請(qǐng)確保閱讀了這些配置選項(xiàng)的文檔。

Registry file 過大

Filebeat保持每個(gè)文件的狀態(tài),并將狀態(tài)保持在 registry_file 中。 Filebeat 重新啟動(dòng)時(shí),文件狀態(tài)用于繼續(xù)在先前位置讀取文件。 如果每天生成大量的新文件,則 文registry_file 件可能會(huì)增長得太大。 要減小 registry_file 的大小,有兩個(gè)可用的配置選項(xiàng):clean_removedclean_inactive

對(duì)于不再 touch 并需要 ignore 的舊文件,建議使用 clean_inactive。 對(duì)于已經(jīng)從磁盤刪除的舊文件,則使用 clean_removed 選項(xiàng)。

Inode 復(fù)用造成數(shù)據(jù)采集缺失

在 Linux 文件系統(tǒng)上,F(xiàn)ilebeat 使用 inode 和 device 來標(biāo)識(shí)文件。當(dāng)文件從磁盤中刪除時(shí),可以將 inode 分配給一個(gè)新文件。在涉及文件輪換的用例中,如果舊文件被刪除,并且之后立即創(chuàng)建新文件,則新文件可以具有與被移除的文件完全相同的 inode。在這種情況下,F(xiàn)ilebeat 假定新文件與舊文件相同,并嘗試在舊 offset 繼續(xù)讀取,這是不正確的。

默認(rèn)情況下,永遠(yuǎn)不會(huì)從 registry_file 中刪除。要解決 inode 復(fù)用問題,建議使用 clean_ * 選項(xiàng),特別是 clean_inactive,以刪除非活動(dòng)文件的狀態(tài)。例如,如果文件每 24 小時(shí)輪換一次,并且輪轉(zhuǎn)的文件不再更新,可以將ignore_older 設(shè)置為48小時(shí),將 clean_inactive 設(shè)置為72小時(shí)。

對(duì)于從磁盤中刪除的文件,可以使用 clean_removed 。請(qǐng)注意,每當(dāng)在掃描期間找不到文件時(shí),clean_removed 會(huì)從 registry_file 清除文件狀態(tài)。如果文件稍后再次顯示,則將從頭重新發(fā)送。

Filebeat 使用了過多 CPU

Filebeat 可能被配置為太頻繁地掃描文件。 檢查 filebeat.yml 配置文件中 scan_frequency 的設(shè)置。 將scan_frequency 設(shè)置為小于1秒可能導(dǎo)致 Filebeat 掃描磁盤過于頻繁。

字段在 Kibana 可視化中不可被索引

如果最近執(zhí)行了 loads 或解析自定義結(jié)構(gòu)化日志的操作,則可能需要刷新索引以使字段在 Kibana 中可用。 要刷新索引,請(qǐng)使用刷新API。 例如:

curl -XPOST 'http://localhost:9200/filebeat-2016.08.09/_refresh'

Filebeat 總是不發(fā)送文件的最后一行

Filebeat 使用換行符來檢測(cè)事件的結(jié)束。 如果行被遞增地添加到正在收集的文件,則最后一行之后需要換行符,否則Filebeat 將不會(huì)讀取文件的最后一行。

如何對(duì) Filebeat 限帶寬

如果需要限制帶寬使用,建議在操作系統(tǒng)上配置網(wǎng)絡(luò)堆棧以執(zhí)行帶寬限制。

例如,以下 Linux 命令通過在端口 5044 上對(duì) TCP 連接設(shè)置 50 kbps 的限制來限制 Filebeat 和 Logstash 之間的連接:

tc qdisc add dev $DEV root handle 1: htb
tc class add dev $DEV parent 1:1 classid 1:10 htb rate 50kbps ceil 50kbps
tc filter add dev $DEV parent 1:0 prio 1 protocol ip handle 10 fw flowid 1:10
iptables -A OUTPUT -t mangle -p tcp --dport 5044 -j MARK --set-mark 10

使用OS工具執(zhí)行帶寬限制可以更好地控制策略。 例如,可以使用操作系統(tǒng)工具在白天限制帶寬,但不能在夜間限制。 或者,可以保留帶寬未封頂,但為流量分配低優(yōu)先級(jí)。

常見的 SSL 相關(guān)錯(cuò)誤和解決方案

以下是一些常見的錯(cuò)誤和解決方法:

x509: cannot validate certificate for <IP address> because it doesn’t contain any IP SANs

這是因?yàn)樽C書僅對(duì) Subject filed 中顯示的 hostname 有效。要解決此問題,請(qǐng)嘗試以下解決方案:

  • 為主機(jī)名創(chuàng)建一個(gè)DNS條目,將其映射到服務(wù)器的IP。
  • /etc/hosts中為主機(jī)名創(chuàng)建一個(gè)條目。或在 Windows 上添加一個(gè)條目到C:\Windows\System32\drivers\etc\hosts
  • 重新創(chuàng)建服務(wù)器證書,并為服務(wù)器的IP地址添加 SubjectAltName(SAN)。這使服務(wù)器的證書對(duì)主機(jī)名和IP地址都有效。

getsockopt: no route to host
這不是SSL問題。這是一個(gè)網(wǎng)絡(luò)問題。確保兩個(gè)主機(jī)可以通信。

getsockopt:connection refused
這不是SSL問題。確保 Logstash 正在運(yùn)行,并且沒有防火墻阻止流量。

No connection could be made because the target machine actively refused it
防火墻拒絕連接。檢查防火墻是否阻止客戶端,網(wǎng)絡(luò)或目標(biāo)主機(jī)上的流量。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容