【大數據實踐】遊戲事件處理系統(1)——事件收集-filebeat

背景及目標

遊戲平臺天天產生上千萬條牌局結算日誌(包括跑得快PDK、鬥地主DDZ等各類遊戲),這些日誌未非結構化數據。不少時候,咱們須要依據這些日誌制定各類業務服務,如道具、禮包等。html

不一樣的業務服務(如只針對PDK遊戲提供優惠禮包服務),須要的日誌多是不一樣的,若是將全部的日誌所有塞給業務服務,交由業務服務區篩選,那麼業務服務須要承擔太多沒必要要的壓力(一千萬條日誌中,須要的可能只有一千條)。mysql

所以,想要一個實現遊戲日誌處理系統,實現以下功能:nginx

  • 監控日誌文件,收集日誌。
  • 處理日誌:非結構化轉爲結構化數據(如JSON)。
  • 輸出結構化數據到消息中間件。
  • 業務服務能夠從消息中間件中獲取本身想要的消息。

技術方案

  • 遊戲事件(日誌)收集:filebeat(6.2.4版本)
  • 事件處理:logstash(6.2.3版本)
  • 消息中間件:kafka(1.1.0版本)

filebeat收集事件

雖然logstash也能夠收集日誌,且有不少豐富的輸入、處理、輸出插件,可是logstash相對於filebeat來講會消耗更多的服務器資源,這些logstash若是部署在應用服務其中,可能對應用服務帶來影響(搶資源)。正則表達式

filebeat則是及其輕量級的,佔用資源少,適合分佈在各個應用服務上收集日誌,並將收集到的日誌發送到logstash服務。另外,filebeat具備調節發送速度的功能,當logstash處理不過來時,filebeat會下降發送速度,所以不須要相似於中間緩衝隊列等機制。sql

基於此,本系統中選用filebeat而不是logstash來收集日誌。apache

filebeat安裝

官方說明服務器

以mac OS 系統爲例:curl

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-darwin-x86_64.tar.gz
tar xzvf filebeat-6.2.4-darwin-x86_64.tar.gz

filebeat配置

官方配置說明elasticsearch

filebeat的配置文件:filebeat.yml,其中主要內容爲:ide

#============= Filebeat prospectors ===============
# 探測器配置,即filebeat的輸入

## 配置一個探測器
filebeat.prospectors:
    ## 探測器類型:日誌
    - type: log
      ## 是否啓用該探測器
      enabled: true
      ## 日誌文件路徑,當前不支持遞歸監控某個目錄及其子目錄下的全部文件。
      ## 要監控子目錄,則能夠配:/var/log/*/*.log
      paths:
        - /var/log/*.log
      ## 去掉正則表達式列表中的行
      exclude_lines: ['^DBG', '^D2']
      ## 包含正則表達式列表中的行
      include_lines: ['^ERR', '^E2']
      ## 去掉正則表達式列表中匹配的文件
      exclude_files: ['.gz$']
      
#============================= 其餘配置(和本系統關係不大,略) ====================

#================================ Outputs =====================================
# 輸出配置,可輸出到諸如logstash,elasticsearch,kafka等服務或中間件。

## 輸出到logstash

output.logstash:
  # 目標logstash的服務地址及端口
  hosts: ["localhost:5044"]

本系統中,暫時沒有用到複雜、高階的filebeat配置,僅簡單地配置輸入(日誌文件)和輸出(logstash)。
更詳細的配置能夠參見官方說明。

另外,filebeat提供了一些預約義的模組(module),可快速地對諸如nginxmysql的日誌進行收集。

注意:只能配置一個output

filebeat啓動

官方文檔

以mac OS爲例:

./filebeat -e -c filebeat.yml -d "publish"

logstash接收事件

filebeat收集到的事件要想推送到logstash,除了要在filebeat.yml的output中配置以外,還須要在logstashinput模塊中配置beats

input {
    ## 來自於filebeat的事件做爲輸入
    beats {
        ## 端口與filebeat中filebeat.yml文件output中配置的端口一致。
        port => 5044
    }
}

啓動logstash服務、filebeat服務以後,往/var/log/目錄中的日誌文件中寫入日誌,如:

echo "test info ..." >> /var/log/test.log

就能在filebeat的運行日誌中,看到相關內容,也能夠在logstash的輸出中看到相應事件。

關於logstash的配置文件,將在後續的博客中詳細介紹。

小結

filebeat 還有不少高階特性(如一些方便的模組)可使用,這裏只是簡單地介紹了一種經常使用的用法。

在後續的文章中,將使用logstash來處理從filebeat過來的數據。

相關文章
相關標籤/搜索