之前阿里的 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ì)信息槽袄,請參閱 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_renamed
和 close_removed
選項(xiàng)在 Windows 上可用于解決與 log rotate 相關(guān)的問題颖杏。請參閱 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ì)信息,請參閱 Filebeat Prospectors Configuration咙轩。
在使用任何配置選項(xià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_removed
和 clean_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
尤溜。請注意倔叼,每當(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 中可用显设。 要刷新索引,請使用刷新API辛辨。 例如:
curl -XPOST 'http://localhost:9200/filebeat-2016.08.09/_refresh'
Filebeat 總是不發(fā)送文件的最后一行
Filebeat 使用換行符來檢測事件的結(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 有效。要解決此問題室埋,請嘗試以下解決方案:
- 為主機(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ī)上的流量。