【ELK入門】Elastic中文社群運維監控實戰之架構篇

工程師甲發表於2018-02-06

專案背景

本文為系列文章第一篇,主要介紹如何把 Elastic 中文社群的網站伺服器監控起來,對有同樣想了解如何使用 Elastic Stack 來做運維監控的同學,可以作為一個很好的參考和入門資料,學習門檻定義為入門級。

首先,我們要監控的網站,也就是大家現在正在訪問的 Elastic 官方中文社群,網址:elasticsearch.cn,這個網站基於開源的 WeCenter 搭建,開發語言是 PHP,後端資料庫是 MySQL,目前只有一臺伺服器,由 ConvertLab 友情無償贊助,大寫的贊!再次感謝!

伺服器部署環境是 Ubuntu 16.04.2,部署了以下服務及軟體:

  • Nginx – Http 反向代理,不要介紹了吧
  • PHP-FPM – 一個常用的 PHP FastCGI 管理
  • Elasticsearch – Elasticsearch 服務,用於社群的垂直搜尋服務 Elastic情報局服務
  • GOPA – 可以說是為社群而寫的,一個輕量級的爬蟲,用於爬取 Elatic 周邊相關相關資料,建立索引存放到 Elasticsearch 裡面,提供垂直搜尋服務。程式碼地址
  • Grok Debugger – 一個 Java 的 Grok pattern 除錯服務,方便大家除錯 Grok 日誌解析規則。訪問地址

伺服器上所有的財產就這些了,一個平淡無奇的網站,基本上所有的東西都能公開訪問到,這個網站的目的就是為所有 Elastic 愛好者服務的,供大家交流和溝通的專屬平臺,所以請各位黑客大俠不要再掃描和攻擊啦,畫一個簡單的拓撲圖如下所示:

basics_v3

作為一個合格的網管,除了重啟伺服器之外,還必須要保證網站的正常執行,所以瞭解網站的執行情況就變成了一個需要解決的首要問題,我們可以先把任務具體列一下:

  • 網站是否正常訪問,各項服務有沒有掛
  • 網站訪問情況如何,使用者訪問速度如何
  • 網站訪客統計分析,訪客相關資料分析
  • 伺服器的各項指標,詳細指標監控分析
  • 伺服器的各項服務,日誌集中分析處理
  • 伺服器是否很安全,有沒有黑客來造訪
  • 資料是否安全備份,有沒有定期測試過

實在編不下去了,話說對的還蠻齊。說人話就是監控起伺服器的各項指標和收集服務的日誌,然後出幾個分析的 Dashboard,監控報警整起來。

技術選型

結合社群監控場景,需要的工具主要是如下幾個:

監控資料儲存:Elasticsearch

Elasticsearch 是一個分散式的 RESTful 風格的搜尋和資料分析引擎。簡單易用,使用者眾多,效能優良,久經考驗,支援單節點部署到虛擬機器,並可隨著業務增長無縫伸縮擴容至上千個節點規模的叢集,PB 級別資料也不在話下。

日誌資料和指標監控資料都能放,通過集中式儲存所有的這些時序型資料,可以快速方便的對這些資料進行分析和關聯,實在是排障運維和效能調優的不二選擇,你如果還不知道 Elasticsearch,那我只能說你真的是 out 了。

日誌資料收集:Filebeat

Elastic Beats 家族的一員,Go 語言編寫,輕量級,無依賴,這樣就可以很方便的完成收集端的部署,所以如果你的場景和我一樣, 可以優先使用 Filebeat 代替 Logstash 來收集日誌,當然如果有日誌的進一步加工,可以讓 Filebeat 把資料傳送給 Logstash,然後 Logstash 處理完之後再傳送給 Elasticsearch。

Filebeat 使用很靈活,可以指定你的日誌路徑來進行收集,還可以對資料進行預過濾,對於一些常見的監控需求,Filebeat 以模組的方式替你打包好了一切,如:日誌路徑配置、解析規則、機器學習的任務,甚至還自帶 Dashboard,簡單幾個操作,就可以完成從資料收集到最終視覺化分析的所有工作。

指標資料收集:Metricbeat

我們這次需要監控的伺服器都是一些常規的指標,而 Metricbeat 剛好都支援這些指標的收集。Metricbeat 同樣也是 Elastic Beats 家族的一員,同樣也是開源的。定位是一個輕量級的監控指標採集器,採用 Go 語言編寫,同樣提供的是一個很小的無依賴的二進位制檔案包,能夠收集伺服器(Linux、Windows、Mac)本身的執行指標,如: CPU 使用率、記憶體、檔案系統、磁碟 IO 和網路 IO 統計資料等,還能獲取伺服器上面的各項服務的執行指標,常見的如: Apache、NGINX、MongoDB、MySQL、PostgreSQL、Prometheus、Redis 等都有直接支援,並且內建了 Elasticsearch 索引和 mapping 設定,以及 Ingest pipeline 設定,還提前預置了不少 Kibana 的 Dashboard,開箱即用、即分析。

資料分析展現:Kibana

和 Elasticsearch 工作的最佳拍檔,結合 Elasticsearch 的實時分析能力,可以非常方便的對各種資料進行搜尋和分析,你可以靈活的自定義的各種圖形展現和 Dashboard,不用編寫一行程式碼,即可進行資料分析,除了分析,還整合了 Elastic Stack 的各個產品的管理功能,作為 Elastic Stack 的圖形互動終端。

除了上面這些工具,後續我們還可以考慮使用 Auditbeat 來收集伺服器的安全行為日誌,使用 Heartbeat 來監控各個服務的埠是否正常,我們先完成基本的監控之後,再慢慢將這些加上。

可以看到,我們沒有用到 Logstash。是的,這個規模的監控,可以不考慮 Logstash,這樣我們可以做到架構簡單和足夠的輕量級。

上面列的這些軟體都是 Elastic 家族的產品,並且都是開源的,所有的原始碼都在:https://github.com/elastic/

部署方案

在收集資料之前,我們需要明確我們資料放在哪裡,毫無疑問,所有的資料都將放在 Elasticsearch 裡面,不過 Elasticsearch 不能部署在 Elastic 中文社群的這臺伺服器上面,一個是資源的限制,另外一個是基於安全的考慮,如果 Elastic 社群的伺服器掛了,資料不光收不到,連什麼時候掛的都不知道。所以我們需要把 Elasticsearch 服務搭建在別的地方,有多種選擇:

  • 使用 Elastic Cloud,很方便就能開通,缺點國內訪問速度慢,暫時還沒開放機器學習的功能。
  • 使用阿里雲的 Elasticsearch,Elastic 官方合作伙伴,國內唯一包含 X-Pack 的完整功能的 Elasticsearch 雲服務,國內訪問速度快。
  • 自己搭建的 Elasticsearch 叢集。

使用阿里雲的 Elasticsearch 無疑很方便,不過我家裡剛好有一臺伺服器,型號 HP Gen8,16GB 記憶體,上面執行了 SmartOS,跑幾個 zone 很輕鬆,每天用來備份社群的資料庫,再來起一個 Elasticsearch 服務也很方便,通過路由器將內網 IP 對映出去,讓社群伺服器將監控資料傳送到這臺伺服器上面來,安全上面,需要保證這臺伺服器不被黑客攻擊,需要做一些必要的訪問控制,可以使用 X-Pack 的身份驗證,結合 IP 白名單功能,只允許內網和 Elastic 中文社群伺服器的 IP 訪問。我們將之命名為:Ops Center,方便後面招呼。

可以看到,Elastic 社群伺服器除了啟動 Filebeat 和 Metricbeat 之外,不需要額外做什麼伺服器本身的設定。

這裡畫一個簡單的部署拓撲圖,方便理解:

basics_v3

本篇就寫到這裡,未完待續。

作者介紹

曾勇(Medcl)
Elastic開發工程師、Elasticsearch中文社群管理者、阿里雲MVP

在分散式搜尋、高效能、高可用架構、自動化運維等方面積累了超過七年的經驗。曾勇是Elasticsearch國內首批使用者,自2010年起就開始接觸Elasticsearch並投入到生產環境中使用,並編寫過一系列的中文處理相關的外掛。

加入釘釘技術討論群

dingQR

阿里雲Elasticsearch已正式釋出啦,Elastic開源官方聯合開發,整合5.5商業版本XPack功能,歡迎開通使用。
點選瞭解更多產品資訊


相關文章