探討elasticsearch tribe跨機房日誌收集的實現

這篇文章主要是閒扯跨機房日誌收集的一些事,後面會很疑惑的分析魅族跨機房\集羣的日誌是怎麼收集存儲的? 使用Elasticsearch Tribe Node做es集羣的代理? 但這也是個好問題.

對於全網的應用日誌收集,我想做過運維的朋友都瞭解的. 不外乎就那麼幾種方案,ELK, Flume, Scribe ,flutend, 自主開發的。 但不管怎麼說對於跨IDC的日誌收集還是個大事,單純從日誌收集來來上其實沒啥難度,但外網帶寬成本實在是不便宜, 不會讓你像內網日誌收集那樣,隨意收集,肯定是需要做日誌優化的.

我說下我上家公司的日誌是怎麼收集的,一般把各個應用會把日誌寫到本地,當然寫之前要對日誌進行修剪,在每個數據中心都會有一個日誌處理節點,名爲log proxy這類的玩意, proxy會把一些相關的日誌轉成metric記錄,然後傳送到總的日誌中心.

但什麼事都要看場景,這邊實時的數據會用flume進行定時傳輸,由flume server直接寫入到hadoop集羣裏,但這沒涉及到跨機房… 我這邊的建議是,對於有需求的重要日誌是可以實時跨機房傳輸的,每個機房,數據中心都配一組kafka, 每個機器都配一個agent,這個agent有兩大功能,一是開始TCP Server模式用來接收日誌,另一個是讀取本地日誌並記錄offset。這些開源的logstash、flume都實現了. 日誌要分實時日誌及離線日誌,上面說的是實時日誌,關於離線數據就沒那麼講究了.

廢話說這麼多,總的意思就是說跨idc傳輸日誌是個很蛋疼的事情. 受限方面於日誌的傳輸、帶寬成本.

前幾天看到魅族的分佈式日誌收集,他們用的elk解決方案,那麼他們是怎麼解決跨機房日誌收集存儲問題的?

魅族是使用Elasticserach Tribe來做各個idc elasticsearch集羣的代理層. kibana4 只需要把Elasticsearch地址改成tribe就可以了. 有些朋友覺得Nginx location也是可以實現的。 但是Nginx根據Location只能針對index層面進行負載均衡. 另外我發現論壇上不少老外對於Elasticsearch Tribe的性能及功能持否定態度的,貌似Elasticsearch tribe的bug傷了他們.

官方的Elasticsearch tribe node介紹頁面有這麼一句話,讓我很是心涼呀… 這直接否定了前面的Nginx vs Elasticsearch Tribe的看法…

However, there are a few exceptions:
The merged view cannot handle indices with the same name in multiple clusters. By default it will pick one of them, see later for on_conflict options.
Master level read operations (eg Cluster State, Cluster Health) will automatically execute with a local flag set to true since there is no master.
Master level write operations (eg Create Index) are not allowed. These should be performed on a single cluster.

其意思就是說,多個集羣下如果有相同索引index的話,他會在多集羣中選擇一個,貌似又提到 on_conflict這個選項可以解決這類衝突問題. 但問題是 on_conflict在文檔在哪裏? 在github中已經提交了issuse等待回覆.

雖然對Elasticsearch的tribe的種種不滿,但還是照例說下他的配置.. 這是我google出的一個Elasticsearch Tribe架構圖, 看到kibana4是跟Tribe Node相連的.

這裏寫圖片描述

#blog: xiaorui.cc

tribe:
  es1:
    cluster.name: cluster1
    discovery:
      zen:
        ping:
          multicast:
            enabled: false
          unicast:
            hosts:
              - 192.168.111.228:9300
  es2:
    cluster.name: cluster2
    discovery:
      zen:
        ping:
          multicast:
            enabled: false
          unicast:
            hosts:
              - 192.168.222.229:9300

總結,

第一 ,我個人認爲Elasticsearch更適合那種metric形式的日誌。

第二 ,對於tribe node我也是懷疑態度的… tribe 其本身只是做了個結果的merge,官方的文檔特別的少,就一個介紹頁… 還不如自己用nginx lua來實現數據的merge. 個人看法,勿噴…

END…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章