今天我們要談的是如何使用filebeat這個(gè)Logstash的shipper來過濾PHP日志。在PHP的生態(tài)圈里,有許多工具可以記錄日志,如:error_log
、syslog
、log4php
等,如果不使用適當(dāng)?shù)姆椒▉磉^濾PHP的日志,那么server logs里就會混點(diǎn)php的日志,于是我們需要過濾、統(tǒng)一整理PHP日志和其他日志。
首先我們需要明確filebeat是怎樣工作的。Filebeat是一款輕量、高效、實(shí)時(shí)的日志數(shù)據(jù)收集工具,可以streamline log data from various sources and forward them to Elasticsearch or Logstash.。Filebeat的工作原理是將指定的日志文件當(dāng)作一個(gè)stream,運(yùn)行在客戶端,開銷很小,具體是使用tail -f
命令來讀取目標(biāo)文件,確保可以一起處理多個(gè)文件的實(shí)時(shí)日志。需要注意的是,filebeat不對日志進(jìn)行記錄,而只是負(fù)責(zé)將日志傳輸?shù)街付ǖ牡胤健_@里我們傳輸?shù)哪康牡厥荓ogstash工具。
Logstash 是一個(gè)開源的數(shù)據(jù)收集引擎,可以從不同源匯集數(shù)據(jù),轉(zhuǎn)換數(shù)據(jù)形式,并將其發(fā)送到指定的地點(diǎn)。通過它的管道和插件,你可以清理、改變數(shù)據(jù)形式和信息建模。當(dāng)中轉(zhuǎn)的服務(wù)器前面放了Nginx的時(shí)候,Logstash主要的作用是將nginx的access和error日志傳輸?shù)紼lasticsearch。當(dāng)中轉(zhuǎn)服務(wù)器是直接接收PHP的log文件,那么我們需要使用Logstash 搭建PHP日志的可視化分析平臺。
具體操作步驟如下:
filebeat.inputs:
- type: log
enabled: true
paths:
- "/var/log/php5-fpm.log"
fields:
source: php
output.logstash:
hosts: ["127.0.0.1:5044"]
ssl:
enabled: false
processors:
- decode_json_fields:
fields: ["message"]
target: ""
overwrite_keys: true
add_error_key: true
max_depth: 1
- grok:
patterns:
- "%{PHP_LOG}"
ignore_missing: true
ignore_failure: true
- rename:
fields:
- from: "message"
to: "log_message"
ignore_missing: true
我們來解釋其中的關(guān)鍵部分,如processors
,它是用來處理日志的,包括解碼JSON數(shù)據(jù)、提取關(guān)鍵信息、重命名字段等。下面分別解釋這些內(nèi)容:
decode_json_fields
: 這個(gè)插件會檢查字段是否包含JSON格式的數(shù)據(jù),并將JSON映射到指定的目標(biāo)字段。在PHP的日志中,很容易會出現(xiàn)JSON的log message,這時(shí)候這個(gè)插件就非常有用。grok
: 用于提取日志中的關(guān)鍵信息,例如消息中的IP地址、路徑等,這個(gè)可以根據(jù)自己公司的需求來提取。rename
: 重新命名原始日志信息的字段名,它可以重命名需要保留的字段及字段中需要丟棄的內(nèi)容。
以上就是filebeat過濾PHP日志的一個(gè)簡單示例。如果你希望系統(tǒng)更加復(fù)雜,可以自定義filter和parser。不要忽視重現(xiàn)Bug和日志分析的地位。