最近在使用阿里云日志進(jìn)行“上下文瀏覽”和“LiveTail”的時候突然發(fā)現(xiàn)無法正常過濾。
比如:我要實(shí)時查看eureka服務(wù)的日志,通過“Pod名稱”或者“容器名稱”過濾以后,LiveTail還是會顯示其他服務(wù)的日志內(nèi)容,如下圖:
然后提交工單反饋,過了幾個小時,技術(shù)說處理好了,我去測了下發(fā)現(xiàn)還是一樣的問題,最后售后技術(shù)只好拉了一個釘釘群,把問題交給后端的技術(shù)來處理。
經(jīng)過反復(fù)溝通,最后確認(rèn)是我采集配置文件的問題。
因?yàn)槲宜腥萜鞑杉褂玫囊粋€配置,導(dǎo)致所有容器日志在一個上下文中,無法過濾。
要解決這個問題,有兩種解決方案:
1、在業(yè)務(wù)pod yaml 中去增加一些環(huán)境變量,這樣logtail會根據(jù)環(huán)境變量自動創(chuàng)建相應(yīng)配置,可以把每個pod的數(shù)據(jù)采集到不同的logstore,簡化配置代價。
具體文檔:https://help.aliyun.com/document_detail/87540.html
也就是一個pod或者一個業(yè)務(wù)服務(wù)一個Logstore,這樣會有什么問題呢?
一是日志project下面會有大量的Logstore,我們項(xiàng)目就四十個服務(wù)左右,我都覺得非常不方便,如果服務(wù)更多呢。
二是無法全局關(guān)鍵詞搜索,這樣和我遠(yuǎn)程到服務(wù)器或者通過kubernetes控制臺直接查看沒啥區(qū)別了。
也可以通過環(huán)境變量 aliyun_logs_{key}_logstore 把所有pod設(shè)置為一個Logstore,但是只支持極簡模式,也就是按行采集,多行日志就不能使用這種方式了。
因?yàn)槲覀兌际莏ava日志,所以只能放棄這個方案。
2、在Logstore里面為每個pod或者業(yè)務(wù)服務(wù)配置一個采集配置,如果有10個服務(wù)就10個配置,有100個就配置100個,有N個就配置N個,可以想象有多繁瑣,這不是花錢找虐嗎。
這個問題在以前未遷移kubernetes集群時未出現(xiàn)過,也是一個project下面一個Logstore,然后一個通用配置采集所有服務(wù)的日志,“上下文瀏覽”和“LiveTail”也正常。
我一度以為這是一個bug,但是我又去看了日志服務(wù)采集kubernetes日志的文檔,使用限制的確寫了。
上下文限制:默認(rèn)一個采集配置在同一上下文中,若需要每個容器的日志在不同上下文中,請單獨(dú)為每個容器創(chuàng)建采集配置。
也不知道這個產(chǎn)品在設(shè)計(jì)這個邏輯的時候,是怎么考慮的,把一個本身繁瑣的事情,更加繁瑣化了,不知道有沒有考慮過操作便利和查詢實(shí)用。
感覺設(shè)計(jì)出來沒有親自用過,就發(fā)布出來斂錢了。
我相信阿里的技術(shù),不可能實(shí)現(xiàn)不了一個配置采集所有容器日志,然后進(jìn)行“上下文瀏覽”和“LiveTail”。
我也咨詢了幾個以前的同事,他們項(xiàng)目也是采用的一個服務(wù)一個Logstore,放棄全局搜索。
沒辦法最終只能采用第三種方案:暫時放棄“上下文瀏覽”和“LiveTail”功能。