
作為日志產品的PM,跟進國內外日志產品動向是個長期工作。這幾天翻新一些歷史記錄,發現logscape自2017年開源以來,突然2019年10月又更新了一會。于是順著翻翻logscape的github賬號,起了興致來寫點文字。
https://github.com/logscape/Logscape?github.com
先聊logscape這個產品吧,從源碼里可以大致看出:這是一個不基于elasticsearch的日志分析產品,而是基于linkedin老早之前開源的一個叫krati的KV存儲上做的。
從logscape自己的文檔來看,性能部分表現不算很好:

但是在資源控制上做的還蠻細:

此外,幾乎各種功能都有:
- 告警插件:groovy和js支持
- 日志分組:基于日志源的組合和額外的host過濾
- 多租戶支持:不過是知識級別,不是數據級別
- 字段字段發現:主要是kv和grok兩種,kv和splunk一樣其實也包括json,按照文檔所說,自動kv的每個模式20MB/s,grok的每個模式14MB/s。但是注意:logscape其實還是事先提取,自動發現的字段是會做flatfile存儲的。
- 數據概要:可以創建新字段,包括stats和eval,并且設置為summary。也可以直接通過summary.index(write)指令手動或定期生成。
但是,logscape這個莫名其妙的SPL設計簡直反人類啊:
首先,它模仿了一段lucene的querystring全文搜索,然后對字段值又要單獨采用Obj.<method>方法過濾,最后,聚合函數和后估值、后統計都是只用空格連接的。最后的最后,還可以把多個查詢直接放在一起,成為多Y軸畫圖的數據查詢(overlay search)。下面是幾行示例:
cpu | cpu.max(_host,1h) _host.equals(LAB-UK-XS-UB1) offset(1h) chart(line)
([A-Za-z.]+)Exception | 1.count() _host.equals(LAB-UK-XS-UB1)
* | _type.contains(UNX) _type.equals(unx-ps) usedMB.avg(server,UsedKB) RSZ_MB.avg(server,rszKB) eval(EACH * 1024) chart(table) buckets(1)
* | _type.equals(UNX-cpu) CpuUtilPct.avg(server,AvgCpu) +AvgCpu.eval(CpuUtilPct > 10) chart(cluster) buckets(6)
Agent and cpu | cpu.max(_host,POST) +POST.max(,Max) +POST.min(,Min) +POST.avg(,Avg) chart (c3.area)
* | _type.equals(log4j) package+level.count(,PackageLevel) level.not(INFO) chart(line)
誰能單從語法上看懂這是要干嘛……
總結一下:logscape最大的問題:底層引擎性能不給力,頂層DSL設計亂糟糟。白瞎了中間層細致的管理功能。
然后順著logscape的github賬號,發現難怪他們開源以后就沒咋更新呢,原來后來又做了一版NG(liquidlabsio/logscape-ng,叫serverless and opensource log aggregation),并很快又放棄掉改成了一個更加serverless的項目,這次名字叫fluidity:
https://github.com/liquidlabsio/fluidity?github.com這次,這個項目的設計目標,是單純利用amazon S3和lambda來實現長期存儲和即時計算!
由于項目還很初期,所以就不看他們源碼實現了。但是這個讓我想到前幾天,同樣在CNCF landscape上看到的另一個產品:logiq。
LOGIQ Observability for monitoring, logs, and predictable pricing?logiq.ai
這個產品,直接提供helm-chart和amazon cloudFormation template文件供運行啟動。如果是本地helm-chart,日志存儲在開源對象存儲minio里;如果是cloudFormation template,日志存儲在amazon的S3對象存儲里。
然后,logiq產品本身,除了日志查看頁面,也就還提供一個命令行的logiqctl,進行日志的query和tail。
可以說,二者非常相像,都是放棄自己對數據存儲引擎的構建,徹底交給云平臺,交給S3——因為,S3太便宜啦!