ELK+Kafka 企業日志收集平台(一)


背景:

最近線上上了ELK,但是只用了一台Redis在中間作為消息隊列,以減輕前端es集群的壓力,Redis的集群解決方案暫時沒有接觸過,並且Redis作為消息隊列並不是它的強項;所以最近將Redis換成了專業的消息信息發布訂閱系統Kafka, Kafka的更多介紹大家可以看這里:傳送門  ,關於ELK的知識網上有很多的哦, 此篇博客主要是總結一下目前線上這個平台的實施步驟,ELK是怎么跟Kafka結合起來的。好吧,動手!

ELK架構拓撲:

然而我這里的整個日志收集平台就是這樣的拓撲:
1

1,使用一台Nginx代理訪問kibana的請求;
2,兩台es組成es集群,並且在兩台es上面都安裝kibana;(以下對elasticsearch簡稱es)
3,中間三台服務器就是我的kafka(zookeeper)集群啦; 上面寫的消費者/生產者這是kafka(zookeeper)中的概念;
4,最后面的就是一大堆的生產服務器啦,上面使用的是logstash,當然除了logstash也可以使用其他的工具來收集你的應用程序的日志,例如:Flume,Scribe,Rsyslog,Scripts……

角色:

11111

軟件選用:

部署步驟:

1.ES集群安裝配置;

2.Logstash客戶端配置(直接寫入數據到ES集群,寫入系統messages日志);

3.Kafka(zookeeper)集群配置;(Logstash寫入數據到Kafka消息系統);

4.Kibana部署;

5.Nginx負載均衡Kibana請求;

6.案例:nginx日志收集以及MySQL慢日志收集;

7.Kibana報表基本使用;

ES集群安裝配置;

es1.example.com:

1.安裝java-1.8.0以及依賴包

2.獲取es軟件包

3.修改配置文件

4.創建相關目錄

5.獲取es服務管理腳本

6.啟動es ,並檢查其服務是否正常

訪問http://192.168.2.18:9200/ 如果出現以下提示信息說明安裝配置完成啦,

2

7.es1節點好啦,我們直接把目錄復制到es2

8.安裝es的管理插件

es官方提供一個用於管理es的插件,可清晰直觀看到es集群的狀態,以及對集群的操作管理,安裝方法如下:

安裝好之后,訪問方式為: http://192.168.2.18:9200/_plugin/head,由於集群中現在暫時沒有數據,所以顯示為空,

3

      此時,es集群的部署完成。

Logstash客戶端安裝配置;

在webserve1上面安裝Logstassh

1.downloads  軟件包 ,這里注意,Logstash是需要依賴java環境的,所以這里還是需要yum install -y java-1.8.0.

2.提供logstash管理腳本,其中里面的配置路徑可根據實際情況修改

3.Logstash 向es集群寫數據

(1)編寫一個logstash配置文件

(2)檢查配置文件是否有語法錯

(3)既然配置ok我們手動啟動它,然后寫點東西看能否寫到es

4.png

ok.上圖已經看到logstash已經可以正常的工作啦.

4.下面演示一下如何收集系統日志

將之前的配置文件修改如下所示內容,然后啟動logstash服務就可以在web頁面中看到messages的日志寫入es,並且創建了一條索引

啟動logstash后,我們來看head這個插件的web頁面

5

ok,系統日志我們已經成功的收集,並且已經寫入到es集群中,那上面的演示是logstash直接將日志寫入到es集群中的,這種場合我覺得如果量不是很大的話直接像上面已將將輸出output定義到es集群即可,如果量大的話需要加上消息隊列來緩解es集群的壓力。前面已經提到了我這邊之前使用的是單台redis作為消息隊列,但是redis不能作為list類型的集群,也就是redis單點的問題沒法解決,所以這里我選用了kafka ;下面就在三台server上面安裝kafka集群

Kafka集群安裝配置;

在搭建kafka集群時,需要提前安裝zookeeper集群,當然kafka已經自帶zookeeper程序只需要解壓並且安裝配置就行了

kafka1上面的配置:

1.獲取軟件包.官網:http://kafka.apache.org

2.配置zookeeper集群,修改配置文件

3.創建zookeeper所需要的目錄

4.在/data/zookeeper目錄下創建myid文件,里面的內容為數字,用於標識主機,如果這個文件沒有的話,zookeeper是沒法啟動的哦

以上就是zookeeper集群的配置,下面等我配置好kafka之后直接復制到其他兩個節點即可

5.kafka配置

6.將kafka(zookeeper)的程序目錄全部拷貝至其他兩個節點

7.修改兩個借點的配置,注意這里除了以下兩點不同外,都是相同的配置

8.修改完畢配置之后我們就可以啟動了,這里先要啟動zookeeper集群,才能啟動kafka

我們按照順序來,kafka1 –> kafka2 –>kafka3

注意,如果zookeeper有問題 nohup的日志文件會非常大,把磁盤占滿,這個zookeeper服務可以通過自己些服務腳本來管理服務的啟動與關閉。

后面兩台執行相同操作,在啟動過程當中會出現以下報錯信息

由於zookeeper集群在啟動的時候,每個結點都試圖去連接集群中的其它結點,先啟動的肯定連不上后面還沒啟動的,所以上面日志前面部分的異常是可以忽略的。通過后面部分可以看到,集群在選出一個Leader后,最后穩定了。

其他節點也可能會出現類似的情況,屬於正常。

9.zookeeper服務檢查

ok.  這時候zookeeper集群已經啟動起來了,下面啟動kafka,也是依次按照順序啟動

注意,跟zookeeper服務一樣,如果kafka有問題 nohup的日志文件會非常大,把磁盤占滿,這個kafka服務同樣可以通過自己些服務腳本來管理服務的啟動與關閉。

此時三台上面的zookeeper及kafka都已經啟動完畢,來檢測以下吧

(1)建立一個主題

(2)查看有哪些主題已經創建

(3)查看summer這個主題的詳情

(4)發送消息,這里使用的是生產者角色

(5)接收消息,這里使用的是消費者角色

如果能夠像上面一樣能夠接收到生產者發過來的消息,那說明基於kafka的zookeeper集群就成功啦。

10,下面我們將webserver1上面的logstash的輸出改到kafka上面,將數據寫入到kafka中

(1)修改webserver1上面的logstash配置,如下所示:各個參數可以到官網查詢.

(2)配置檢測

(2)啟動Logstash,這里我直接在命令行執行即可

(3)驗證數據是否寫入到kafka,這里我們檢查是否生成了一個叫system-messages的主題

可以看出,這個主題生成了16個分區,每個分區都有對應自己的Leader,但是我想要有10個分區,3個副本如何辦?還是跟我們上面一樣命令行來創建主題就行,當然對於logstash輸出的我們也可以提前先定義主題,然后啟動logstash 直接往定義好的主題寫數據就行啦,命令如下:

好了,我們將logstash收集到的數據寫入到了kafka中了,在實驗過程中我使用while腳本測試了如果不斷的往kafka寫數據的同時停掉兩個節點,數據寫入沒有任何問題。

那如何將數據從kafka中讀取然后給我們的es集群呢?那下面我們在kafka集群上安裝Logstash,安裝步驟不再贅述;三台上面的logstash 的配置如下,作用是將kafka集群的數據讀取然后轉交給es集群,這里為了測試我讓他新建一個索引文件,注意這里的輸入日志還是messages,主題名稱還是“system-messages”

在三台kafka上面啟動Logstash,注意我這里是在命令行啟動的;

在webserver1上寫入測試內容,即webserver1上面利用message這個文件來測試,我先將其清空,然后啟動

下圖為我在客戶端寫入到kafka集群的同時也將其輸入到終端,這里寫入了三條內容

6

而下面三張圖側可以看出,三台Logstash 很平均的從kafka集群當中讀取出來了日志內容

7

9

8

再來看看我們的es管理界面

10

ok ,看到了吧,

流程差不多就是下面 醬紫咯

111

由於篇幅較長,我將

4.Kibana部署;

5.Nginx負載均衡Kibana請求;

6.案例:nginx日志收集以及MySQL慢日志收集;

7.Kibana報表基本使用;

放到下一篇博客。

 
    分享到:
 
 碼字很辛苦,轉載請注明來自Daemon's blog《ELK+Kafka 企業日志收集平台(一)》

評論

  1. Tiantiandas#1

     

    [root@es1 ~]#
    set.default.ES_HOME=/usr/local/elasticsearch #安裝路徑
    set.default.ES_HEAP_SIZE=1024 #jvm內存大小,根據實際環境調整即可

    您好,請問這個設置是在哪個文件里面? 謝謝!

     

    回復
    2016-06-17
  2. 表弟#2

     

    表哥大神,已進入膜拜狀態,

     

    回復
    2016-12-14


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM