騰訊雲 Elasticsearch 實戰篇(十七) 構建日誌分析系統

  • 2020 年 2 月 24 日
  • 筆記

前言|

在前面的眾多章節中,我們從開源架構ELK講到騰訊雲Elasticsearch Service .最近的六篇中我們講了騰訊雲ES集群的選擇、安裝、運維監控告警系列。那麼圍繞這些知識點我們講了這麼多,我們要搞清楚ELK到底能做什麼,到底在那些場景下做哪些事?只有搞清楚了它的用途我們才能更有目的的去學習並使用它。<本節提到的Logstash插件後面再詳講>

一、騰訊雲Elasticsearch Service使用場景

1,當您運營一個提供客戶檢索商品的在線電子商城的時候,可以使用ES來存儲整個商品的目錄和庫存,並且為客戶提供檢索和自動推薦功能。——->站內搜索,比如百度、sohu、或者公司內部網站;

2,收集交易數據,存儲數據並做趨勢、統計、概要或異常分析。這種情況下,可以使用Logstash來收集、聚合和解析數據,並且存儲到Elasticsearch。一旦數據進入Elasticsearch,您可以通過檢索、聚合來掌握您感興趣的資訊。—》存儲分析可視化

3,價格預警平台,為價格敏感客戶提供匹配其需求(主要是價格方面)的商品。

4,在報表分析/BI領域,可以使用ES的聚合功能完成針對大數據量的複雜分析。

5,大數據日誌分析平台

總結:那麼ELK能做的方向總結為三個方向:站內搜索、數據探索分析、可視化管理。

今天我們來搭建一個日誌分析平台,然後對裡邊的日誌進行分析。從0到1構建日誌分析平台

二、構建日誌分析系統

ELK框架中只有Logstash這個軟體沒多講了,但是從前面的學習中我們知道它是一款數據收集、過濾、轉發的工具。它是非常強大的一款數據ETL工具。但是在實際的應用中我們如果要去抓取業務伺服器的日誌用得比較多的還是filebeat.主要是因為它輕量、不消耗記憶體、而Logstash在收集日誌這塊往往會導致業務伺服器負載過大。

所以,我將以最典型的日誌分析架構 Filebeat + Elasticsearch + Kibana 和 Logstash + Elasticsearch + Kibana 為例,介紹如何將用戶的日誌導入到 ES,並可以在瀏覽器訪問 Kibana 控制台進行查詢與分析。

<注意:數據源,當前只支援用戶自行接入騰訊雲ES 集群>

1, Logstash + Elasticsearch + Kibana + Nginx + Tomcat 構建日誌分析平台

首先,看一下數據拓撲圖如下:

業務日誌獲取框架圖

其次:環境準備

  • 需要創建和 ES 集群在同一 VPC 的 CVM,這裡部署一台CVM;
  • CVM 需要有2G以上記憶體,安裝Nginx、Tomcat、Logstash、JDK等服務。
  • logstash將Nginx獲取到數據傳入騰訊ES集群並實現後續分析工作

接下來,安裝部署過程如下:

第一步:CVM上安裝JDK、Logstash、Nginx,CVM要與ES集群同網段,如果不同網段,那就離線快照導入吧

CVM地址

Tomcat服務啟動正常,如下圖:

Tomcat服務

接下來,我們在Tomcat里跑一下我得網站,看能否正常訪問 發現網站沒問題。

Tomcat服務正常

Nginx安裝並配置反向代理,轉發到Tomcat上。作代理伺服器。截圖:

Nginx服務啟動正常

將Nginx與Tomcat實現整合。Nginx的配置如下:

Nginx配置
Nginx訪問

那怎麼表示我的這個訪問是通過Nginx反向的代理到Tomcat上的呢?我們可以查看Nginx的訪問日誌。tail -f /var/log/access.log

access日誌文件

那我們重新刷新一下網頁,讓它產生一下訪問日誌。截圖如下:

Access訪問日誌

因此,可以確定:我們的日誌是Nginx來產生的。我們就是要抓取它的日誌通過Logstash傳到ES上去。

接下來, 配置logstash 服務。我的Logstash 安裝目錄在/usr/local/目錄下:

Logstash安裝目錄

再來看看logstash的配置文件:輸入插件如下:

Inputc插件
output插件

好,啟動Logstash 服務 /usr/local/logstash/bin/logstash -f /user/local/config/*.conf文件,過程如下:

Logstash啟動成功

好,那我們訪問一下web伺服器,看logstash能否接受日誌,並輸出到螢幕 ,正常輸出

Logstash正常輸出

接下來,我們去騰訊雲ES上看看,數據有沒有傳到雲上去??我們看看~登錄騰訊雲控制端,打開Kibana介面,添加Index-pattern

Kinana添加索引

我們發現:在Kibana添加索引的時候能自動匹配出ES上的索引,表示我們的數據從CVM上傳到雲上是成功的。對吧。我們繼續操作,如下圖:

按時間序列建索引
索引創建成功

那我們接著打開Kibana的開發工具,search一下索引數據,看是否存在數據呢??

索引數據

發現是有數據的。那我們再刷新一下前端,製造點數據,看看,如下圖:

查詢索引數據

結果:

我們發現:數據全部上傳成功!!我們的日誌分析系統搭建完成。

三、數據可視化分析

前面,我們的數據已經通過Nginx–》Logstash–》騰訊雲ES—》Kibana,那我們就接著來作數據可視化分析,將前端頁面訪問動態圖形化展示到Kibana上來。

打開kibana,選擇可視化,選擇如下「Pie」

餅圖
選擇索引
定義餅圖 XY軸

最終的效果圖為:這樣我們就能區分到每個時間段的訪問量。對吧

餅圖分析

再來看看折線圖,如下設置,並且隨著訪問來那個的變化折線也會有變化

折線圖

我們把上面兩個分析圖都保存下來,然後放到我們的導航裡邊,便於參觀展示。示意圖如下:

導航圖

至此:一個完整的日誌搜集系統就已經搭建完成。簡單來說分為幾部分:伺服器搭建、Logstash配置、數據上傳、ES、kibana驗證、可視化分析並展出。

四、總結

本節從搭建Nginx 、Tomcat伺服器開始配置到Logstash搜集日誌上傳到ES集群並通過Kibana驗證展示。想必應該很清晰的讓大家感覺到基於Logstash+ES +Kibana的工作流程。那麼文章一開始我們講了兩個架構來實現此目的。還有個架構就是filebeat+ES+kibana,其實道理都一樣,只是將Logstash換成了filebeat.其它都一樣。這裡就不帶大夥操作了。有時間的化,大家可以自己測試一下。附上filebeat的配置文件把:

 filebeat.inputs:   - type: log         enabled: true         paths:           - /var/log/nginx/access.log   output.elasticsearch:         hosts: ["10.0.1.7:9200"]         protocol: "http"         username: "elastic"         password: "。。。。"

啟動服務即可

nohup ./filebeat -c filebeat.yml 2>&1 >/dev/null &

Fileabeat輕量、損耗節點記憶體可以忽略不計。收集日誌可以用它。而logstash主要是作數據過濾。所以,一般應用中常常用得架構是:filebeat + logstash + elasticsearch + Kibana架構,當然,如果日誌海量的化,我們就要用到Kafka中間件。後續,我們講這一經典架構來構建大數據日誌分析系統。