遊戲平臺天天產生上千萬條牌局結算日誌(包括跑得快PDK、鬥地主DDZ等各類遊戲),這些日誌未非結構化數據。不少時候,咱們須要依據這些日誌制定各類業務服務,如道具、禮包等。html
不一樣的業務服務(如只針對PDK遊戲提供優惠禮包服務),須要的日誌多是不一樣的,若是將全部的日誌所有塞給業務服務,交由業務服務區篩選,那麼業務服務須要承擔太多沒必要要的壓力(一千萬條日誌中,須要的可能只有一千條)。mysql
所以,想要一個實現遊戲日誌處理系統,實現以下功能:nginx
雖然logstash也能夠收集日誌,且有不少豐富的輸入、處理、輸出插件,可是logstash相對於filebeat來講會消耗更多的服務器資源,這些logstash若是部署在應用服務其中,可能對應用服務帶來影響(搶資源)。正則表達式
filebeat則是及其輕量級的,佔用資源少,適合分佈在各個應用服務上收集日誌,並將收集到的日誌發送到logstash服務。另外,filebeat具備調節發送速度的功能,當logstash處理不過來時,filebeat會下降發送速度,所以不須要相似於中間緩衝隊列等機制。sql
基於此,本系統中選用filebeat
而不是logstash來收集日誌。apache
官方說明服務器
以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
官方配置說明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),可快速地對諸如nginx,mysql的日誌進行收集。
注意:只能配置一個output
。
以mac OS爲例:
./filebeat -e -c filebeat.yml -d "publish"
filebeat收集到的事件要想推送到logstash,除了要在filebeat.yml的output中配置以外,還須要在logstash的input
模塊中配置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
過來的數據。