一、概述:
Beats:分布在每個(gè)應(yīng)用服務(wù)器的采集器
Beats平臺(tái)集合了多種單一用途數(shù)據(jù)采集器,這些采集器安裝后可用作輕量型代理,從成百上千或成千上萬(wàn)臺(tái)機(jī)器向 Logstash 或 Elasticsearch 發(fā)送數(shù)據(jù)。
Logstash:接收Beats傳過來的數(shù)據(jù),分析數(shù)據(jù),并發(fā)送到存儲(chǔ)日志的地方
Logstash是一款輕量級(jí)的日志搜集處理框架,可以方便的把分散的、多樣化的日志搜集起來,并進(jìn)行自定義的處理,然后傳輸?shù)街付ǖ奈恢?,比如某個(gè)服務(wù)器或者文件。
Elasticsearch:用來存儲(chǔ)格式化好的統(tǒng)計(jì)數(shù)據(jù)
Elasticsearch是一個(gè)基于Lucene的搜索和數(shù)據(jù)分析工具,它提供了一個(gè)分布式服務(wù)。Elasticsearch是遵從Apache開源條款的一款開源產(chǎn)品,是當(dāng)前主流的企業(yè)級(jí)搜索引擎。
Kibana:把統(tǒng)計(jì)數(shù)據(jù)通過圖表形式展現(xiàn)出來
Kibana 是一款開源的數(shù)據(jù)分析和可視化平臺(tái),它是 Elastic Stack 成員之一,設(shè)計(jì)用于和 Elasticsearch 協(xié)作。您可以使用 Kibana 對(duì) Elasticsearch 索引中的數(shù)據(jù)進(jìn)行搜索、查看、交互操作。您可以很方便的利用圖表、表格及地圖對(duì)數(shù)據(jù)進(jìn)行多元化的分析和呈現(xiàn)。
二、安裝:
2.1 準(zhǔn)備工作
* 系統(tǒng)環(huán)境:Centos7.4
* 安裝必備軟件:
yum install java-1.8.0-openjdk
* 新建目錄:
mkdir /tools
mkdir /tools/install/
mkdir /tools/download/
* 新建es用戶:
groupadd es #增加es組
useradd es -g es -p es #增加es用戶并附加到es組
chown -R es:es /usr/lib/jvm/ #java也需要分配給es用戶訪問權(quán)限
chown -R es:es /tools/ #安裝目錄分配權(quán)限
su es #切換到es用戶
2.2 安裝Elasticsearch
2.2.1 Elasticsearch下載:
cd /tools/download/
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz
2.2.2 解壓Elasticsearch程序包:
tar -xzf elasticsearch-6.4.3.tar.gz
mv /tools/download/elasticsearch-6.4.3 /tools/install/elasticsearch-6.4.3
chown -R es:es /tools/install/elasticsearch-6.4.3
2.2.3 Elasticsearch的配置
* 進(jìn)入elasticsearch-6.4.3目錄
cd /tools/install/elasticsearch-6.4.3
* 設(shè)置jvm虛擬內(nèi)存:
vi config/jvm.options
-Xms512m
-Xms512m
* elasticsearch.yml配置:
vi config/elasticsearch.yml
如需遠(yuǎn)程主機(jī)需訪問該elasticsearch服務(wù),需配置對(duì)外出口ip和端口:
指定路徑:可以不指定,默認(rèn)當(dāng)前路徑的data和logs,指定路徑后要配置es組的權(quán)限
配置下載:
* 啟動(dòng)elasticsearch
./bin/elasticsearch -d
* 停止elasticsearch
ps -ef |grep elasticsearch
kill -9 進(jìn)程id
* 啟動(dòng)配置服務(wù)可能會(huì)出現(xiàn)的幾個(gè)錯(cuò)誤
1. max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
vi /etc/security/limits.conf
加入:
es soft nofile 65536
es hard nofile 65536
執(zhí)行命令:ulimit -Hn
2. max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
3.max number of threads [1024] for user [elasticsearch] is too low, increase to at least [2048]
vi /etc/security/limits.d/90-nproc.conf
4. system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
bootstrap.system_call_filter: false
2.2.4 啟動(dòng)成功的訪問地址
curl 'http://localhost:9200/?pretty'
2.3 安裝Kibana
2.3.1 Kibana下載:
cd /tools/download/
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.4.3-linux-x86_64.tar.gz
2.3.2 解壓Kibana程序包:
tar -xzf kibana-6.4.3-linux-x86_64.tar.gz
mv /tools/download/kibana-6.4.3-linux-x86_64 /tools/install/kibana-6.4.3-linux-x86_64
chown -R es:es /tools/install/kibana-6.4.3-linux-x86_64
2.3.3 Kibana配置:
* 配置Kibana, 配置server.host地址,需遠(yuǎn)程連接,因此配置服務(wù)器內(nèi)網(wǎng)IP即可。
vi config/kibana.yml
配置如下:
server.port: 5601
server.host: "172.16.151.119"
elasticsearch.url: "http://localhost:9200"
配置下載:
* 啟動(dòng)kibana
nohup ./bin/kibana &
* 訪問kibana
訪問:http://172.16.151.119:5601
外網(wǎng):http://外網(wǎng)IP:5601
2.4 安裝Filebeat
2.4.1 Filebeat下載:
cd /tools/download/
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.4.3-linux-x86_64.tar.gz
2.4.2 解壓Filebeat程序包:
tar -xzf filebeat-6.4.3-linux-x86_64.tar.gz
mv /tools/download/filebeat-6.4.3-linux-x86_64 /tools/install/filebeat-6.4.3-linux-x86_64
chown -R es:es /tools/install/filebeat-6.4.3-linux-x86_64
2.4.3 配置filebeat.yml文件
#=========================== Filebeat inputs =============================
filebeat.inputs:
- type: log
enabled: true
paths:
- /data/logs/*.log
fields_under_root: true
fields:
alilogtype: applog
#============================= Filebeat modules ===============================
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
#==================== Elasticsearch template setting ==========================
setup.template.settings:
index.number_of_shards: 3
#----------------------------- Logstash output --------------------------------
output.logstash:
hosts: ["localhost:5044"]
配置下載:
2.4.4 啟動(dòng)filebeat
nohup ./filebeat -c ./filebeat.yml &
2.5 安裝logstash
2.5.1 logstash下載:
cd /tools/download/
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.4.3.tar.gz
2.5.2 解壓logstash程序包:
tar -xzf logstash-6.4.3.tar.gz
mv /tools/download/logstash-6.4.3 /tools/install/logstash-6.4.3
chown -R es:es /tools/install/logstash-6.4.3
2.5.3 配置logstash.conf文件
vi config/logstash.conf
配置如下:
input {
beats {
port => 5044
}
}
filter {
grok {
patterns_dir => ["/tools/install/logstash-6.4.3/patterns"]
match => {
"message" => "%{IPORHOST:forwordip}.*%{HTTPDATE:logtime}.*"
}
remove_field => ["message", "host", "tags", "input", "@timestamp", "offset", "host", "@version", "beat"]
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "beat-mylog"
#user => "elastic"
#password => "changeme"
}
stdout { codec => rubydebug }
}
配置下載:
正則配置:
2.5.4 配合jvm.options虛擬內(nèi)存
-Xms1g
-Xmx1g
2.5.5 配置logstash.yml文件
vi config/logstash.yml
node.name: test
pipeline.id: main
pipeline.workers: 2
pipeline.batch.size: 125
pipeline.batch.delay: 50
pipeline.unsafe_shutdown: false
path.config: /tools/install/logstash-6.4.3/config/logstash.conf
http.host: "127.0.0.1"
http.port: 9600-9700
配置下載:
設(shè)置 |
描述 |
默認(rèn)值 |
node.name |
節(jié)點(diǎn)的描述性名稱 |
機(jī)器的主機(jī)名 |
path.data |
Logstash及其插件用于任何持久需求的目錄 |
LOGSTASH_HOME/data |
pipeline.id |
管道的ID |
main |
pipeline.workers |
將并行執(zhí)行管道的過濾和輸出階段的工人數(shù)量,如果你發(fā)現(xiàn)事件正在備份,或者CPU沒有飽和,請(qǐng)考慮增加這個(gè)數(shù)字,以更好地利用機(jī)器處理能力 |
主機(jī)CPU核心的數(shù)量 |
pipeline.batch.size |
在嘗試執(zhí)行過濾器和輸出之前,單個(gè)工作線程將從輸入中收集的最大事件數(shù),更大的批處理大小通常更高效,但代價(jià)是增加內(nèi)存開銷,你可能需要增加jvm.options配置文件中的JVM堆空間,有關(guān)更多信息,請(qǐng)參閱Logstash配置文件 |
125 |
pipeline.batch.delay |
當(dāng)創(chuàng)建管道事件批處理時(shí),在向管道工作人員發(fā)送一個(gè)較小的批處理之前,等待每個(gè)事件的時(shí)間為多少毫秒 |
50 |
pipeline.unsafe_shutdown |
當(dāng)設(shè)置為true時(shí),即使內(nèi)存中仍然存在游離事件,也會(huì)在關(guān)閉期間強(qiáng)制Logstash退出,默認(rèn)情況下,Logstash將拒絕退出,直到所有接收到的事件都被推送到輸出,啟用此選項(xiàng)可能導(dǎo)致關(guān)閉期間的數(shù)據(jù)丟失 |
false |
path.config |
主管道的Logstash配置路徑,如果指定目錄或通配符,配置文件將按字母順序從目錄中讀取 |
特定于平臺(tái)的,請(qǐng)參閱Logstash目錄布局 |
config.string |
包含要用于主管道的管道配置的字符串,使用與配置文件相同的語(yǔ)法 |
None |
config.test_and_exit |
當(dāng)設(shè)置為true時(shí),檢查配置是否有效,然后退出,注意,在此設(shè)置中沒有檢查grok模式的正確性,Logstash可以從一個(gè)目錄中讀取多個(gè)配置文件,如果你把這個(gè)設(shè)置和log.level: debug結(jié)合起來,Logstash將對(duì)合并后的配置文件進(jìn)行日志記錄,并用它來自的源文件注解每個(gè)配置塊 |
false |
config.reload.automatic |
當(dāng)設(shè)置為true時(shí),定期檢查配置是否已更改,并在更改配置時(shí)重新加載配置,這也可以通過SIGHUP信號(hào)手動(dòng)觸發(fā) |
false |
config.reload.interval |
Logstash多久檢查一次配置文件以查看更改 |
3s |
config.debug |
當(dāng)設(shè)置為true時(shí),將完整編譯的配置顯示為debug日志消息,你還必須設(shè)置log.level: debug,警告:日志消息將包含傳遞給插件配置的任意密碼選項(xiàng),可能會(huì)導(dǎo)致明文密碼出現(xiàn)在日志中! |
false |
config.support_escapes |
當(dāng)設(shè)置為true時(shí),引號(hào)中的字符串將處理以下轉(zhuǎn)義序列:n變成文字換行符(ASCII 10),r變成文字回車(ASCII 13),t變成文字制表符(ASCII 9),\變成字面反斜杠,"變成一個(gè)文字雙引號(hào),'變成文字引號(hào) |
false |
modules |
當(dāng)配置時(shí),modules必須位于上表中描述的嵌套YAML結(jié)構(gòu)中 |
None |
queue.type |
用于事件緩沖的內(nèi)部隊(duì)列模型,為基于內(nèi)存中的遺留隊(duì)列指定memory,或者persisted基于磁盤的ACKed隊(duì)列(持久隊(duì)列) |
memory |
path.queue |
啟用持久隊(duì)列時(shí)存儲(chǔ)數(shù)據(jù)文件的目錄路徑(queue.type: persisted) |
path.data/queue |
queue.page_capacity |
啟用持久隊(duì)列時(shí)使用的頁(yè)面數(shù)據(jù)文件的大?。╭ueue.type: persisted),隊(duì)列數(shù)據(jù)由分隔成頁(yè)面的僅追加的數(shù)據(jù)文件組成 |
64mb |
queue.max_events |
啟用持久隊(duì)列時(shí)隊(duì)列中未讀事件的最大數(shù)量(queue.type: persisted) |
0(無限) |
queue.max_bytes |
隊(duì)列的總?cè)萘浚ㄗ止?jié)數(shù)),確保磁盤驅(qū)動(dòng)器的容量大于這里指定的值,如果queue.max_events和queue.max_bytes都指定,Logstash使用最先達(dá)到的任何標(biāo)準(zhǔn) |
1024mb(1g) |
queue.checkpoint.acks |
當(dāng)啟用持久隊(duì)列時(shí),在強(qiáng)制執(zhí)行檢查點(diǎn)之前的最大ACKed事件數(shù)(queue.type: persisted),指定queue.checkpoint.acks: 0設(shè)置此值為無限制 |
1024 |
queue.checkpoint.writes |
啟用持久隊(duì)列時(shí)強(qiáng)制執(zhí)行檢查點(diǎn)之前的最大寫入事件數(shù)(queue.type: persisted),指定queue.checkpoint.writes: 0設(shè)置此值為無限制 |
1024 |
queue.drain |
啟用時(shí),Logstash會(huì)一直等到持久隊(duì)列耗盡后才關(guān)閉 |
false |
dead_letter_queue.enable |
標(biāo)記指示Logstash以插件支持的DLQ特性 |
false |
dead_letter_queue.max_bytes |
每個(gè)dead letter隊(duì)列的最大大小,如果條目將增加dead letter隊(duì)列的大小,超過此設(shè)置,則刪除條目 |
1024mb |
path.dead_letter_queue |
存儲(chǔ)dead letter隊(duì)列數(shù)據(jù)文件的目錄路徑 |
path.data/dead_letter_queue |
http.host |
指標(biāo)REST端點(diǎn)的綁定地址 |
"127.0.0.1" |
http.port |
指標(biāo)REST端點(diǎn)的綁定端口 |
9600 |
log.level |
日志級(jí)別,有效的選項(xiàng)是:fatal、error、warn、info、debug、trace |
info |
log.format |
日志格式,設(shè)置為json日志以JSON格式,或plain使用Object#.inspect |
plain |
path.logs |
Logstash將其日志寫到的目錄 |
LOGSTASH_HOME/logs |
path.plugins |
哪里可以找到自定義插件,你可以多次指定此設(shè)置以包含多個(gè)路徑,插件應(yīng)該在特定的目錄層次結(jié)構(gòu)中:PATH/logstash/TYPE/NAME.rb,TYPE是inputs、filters、outputs或codecs,NAME是插件的名稱 |
特定于平臺(tái)的,請(qǐng)參閱Logstash目錄布局 |
2.5.6 logstash啟動(dòng)
nohup ./bin/logstash -f ./config/logstash.conf &
參數(shù) |
說明 |
舉例 |
-e |
立即執(zhí)行,使用命令行里的配置參數(shù)啟動(dòng)實(shí)例 |
./bin/logstash -e "input {stdin {}} output {stdout {}}" |
-f |
指定啟動(dòng)實(shí)例的配置文件 |
./bin/logstash -f config/test.conf |
-t |
測(cè)試配置文件的正確性 |
./bin/logstash -f config/test.conf -t |
-l |
指定日志文件名稱 |
./bin/logstash -f config/test.conf -l logs/test.log |
-w |
指定filter線程數(shù)量,默認(rèn)線程數(shù)是5 |
./bin/logstash -f config/test.conf -w 8 |
2.5.7 相關(guān)地址
input監(jiān)聽:0.0.0.0:5044
Logstash API endpoint:http://127.0.0.1:9600
{"host":"iZbp1f69c0ocoflj7y2nlxZ","version":"6.4.3","http_address":"127.0.0.1:9600","id":"de36d17d-ca9d-4123-a33b-c2b9af00dcd9","name":"test","build_date":"2018-10-31T00:19:35Z","build_sha":"17e7a50dfb0beb05f5338ee5a0e8338e68eb130b","build_snapshot":false}
三、格式化日志:
3.1 nginx日志參數(shù)配置:
nginx日志輸出參數(shù)配置:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent $request_body "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" $request_time';
nginx日志內(nèi)容:
* POST:
219.135.135.2 - - [29/Nov/2018:18:41:13 +0800] "POST /portal/users/cartList HTTP/1.1" 302 5 ?appName=luckwine-portal-web&channelCode=01&traceId=1712884f4c9e4d8ad9bdb843824dd197& "http://47.106.219.117:8010/home?a=1" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0" "-" 0.008
* GET:
219.135.135.2 - - [29/Nov/2018:18:16:32 +0800] "GET /portal/common/needLogin?dd=23 HTTP/1.1" 200 96 - "http://47.106.219.117:8010/home?a=1" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0" "-" 0.002
nginx日志參數(shù):
$args #請(qǐng)求中的參數(shù)值
$query_string #同 $args
$arg_NAME #GET請(qǐng)求中NAME的值
$is_args #如果請(qǐng)求中有參數(shù),值為"?",否則為空字符串
$uri #請(qǐng)求中的當(dāng)前URI(不帶請(qǐng)求參數(shù),參數(shù)位于$args),可以不同于瀏覽器傳遞的$request_uri的值,它可以通過內(nèi)部重定向,或者使用index指令進(jìn)行修改,$uri不包含主機(jī)名,如"/foo/bar.html"。
$document_uri #同 $uri
$document_root #當(dāng)前請(qǐng)求的文檔根目錄或別名
$host #優(yōu)先級(jí):HTTP請(qǐng)求行的主機(jī)名>"HOST"請(qǐng)求頭字段>符合請(qǐng)求的服務(wù)器名.請(qǐng)求中的主機(jī)頭字段,如果請(qǐng)求中的主機(jī)頭不可用,則為服務(wù)器處理請(qǐng)求的服務(wù)器名稱
$hostname #主機(jī)名
$https #如果開啟了SSL安全模式,值為"on",否則為空字符串。
$binary_remote_addr #客戶端地址的二進(jìn)制形式,固定長(zhǎng)度為4個(gè)字節(jié)
$body_bytes_sent #傳輸給客戶端的字節(jié)數(shù),響應(yīng)頭不計(jì)算在內(nèi);這個(gè)變量和Apache的mod_log_config模塊中的"%B"參數(shù)保持兼容
$bytes_sent #傳輸給客戶端的字節(jié)數(shù)
$connection #TCP連接的序列號(hào)
$connection_requests #TCP連接當(dāng)前的請(qǐng)求數(shù)量
$content_length #"Content-Length" 請(qǐng)求頭字段
$content_type #"Content-Type" 請(qǐng)求頭字段
$cookie_name #cookie名稱
$limit_rate #用于設(shè)置響應(yīng)的速度限制
$msec #當(dāng)前的Unix時(shí)間戳
$nginx_version #nginx版本
$pid #工作進(jìn)程的PID
$pipe #如果請(qǐng)求來自管道通信,值為"p",否則為"."
$proxy_protocol_addr #獲取代理訪問服務(wù)器的客戶端地址,如果是直接訪問,該值為空字符串
$realpath_root #當(dāng)前請(qǐng)求的文檔根目錄或別名的真實(shí)路徑,會(huì)將所有符號(hào)連接轉(zhuǎn)換為真實(shí)路徑
$remote_addr #客戶端地址
$remote_port #客戶端端口
$remote_user #用于HTTP基礎(chǔ)認(rèn)證服務(wù)的用戶名
$request #代表客戶端的請(qǐng)求地址
$request_body #客戶端的請(qǐng)求主體:此變量可在location中使用,將請(qǐng)求主體通過proxy_pass,fastcgi_pass,uwsgi_pass和scgi_pass傳遞給下一級(jí)的代理服務(wù)器
$request_body_file #將客戶端請(qǐng)求主體保存在臨時(shí)文件中。文件處理結(jié)束后,此文件需刪除。如果需要之一開啟此功能,需要設(shè)置client_body_in_file_only。如果將次文件傳 遞給后端的代理服務(wù)器,需要禁用request body,即設(shè)置proxy_pass_request_body off,fastcgi_pass_request_body off,uwsgi_pass_request_body off,or scgi_pass_request_body off
$request_completion #如果請(qǐng)求成功,值為"OK",如果請(qǐng)求未完成或者請(qǐng)求不是一個(gè)范圍請(qǐng)求的最后一部分,則為空
$request_filename #當(dāng)前連接請(qǐng)求的文件路徑,由root或alias指令與URI請(qǐng)求生成
$request_length #請(qǐng)求的長(zhǎng)度 (包括請(qǐng)求的地址,http請(qǐng)求頭和請(qǐng)求主體)
$request_method #HTTP請(qǐng)求方法,通常為"GET"或"POST"
$request_time #處理客戶端請(qǐng)求使用的時(shí)間,單位為秒,精度毫秒; 從讀入客戶端的第一個(gè)字節(jié)開始,直到把最后一個(gè)字符發(fā)送給客戶端后進(jìn)行日志寫入為止。
$request_uri #這個(gè)變量等于包含一些客戶端請(qǐng)求參數(shù)的原始URI,它無法修改,請(qǐng)查看$uri更改或重寫URI,不包含主機(jī)名,例如:"/cnphp/test.php?arg=freemouse"
$scheme #請(qǐng)求使用的Web協(xié)議,"http" 或 "https"
$server_addr #服務(wù)器端地址,需要注意的是:為了避免訪問linux系統(tǒng)內(nèi)核,應(yīng)將ip地址提前設(shè)置在配置文件中
$server_name #服務(wù)器名
$server_port #服務(wù)器端口
$server_protocol #服務(wù)器的HTTP版本,通常為 "HTTP/1.0" 或 "HTTP/1.1"
$status #HTTP響應(yīng)代碼
$time_iso8601 #服務(wù)器時(shí)間的ISO 8610格式
$time_local #服務(wù)器時(shí)間(LOG Format 格式)
$cookie_NAME #客戶端請(qǐng)求Header頭中的cookie變量,前綴"$cookie_"加上cookie名稱的變量,該變量的值即為cookie名稱的值
$http_NAME #匹配任意請(qǐng)求頭字段;變量名中的后半部分NAME可以替換成任意請(qǐng)求頭字段,如在配置文件中需要獲取http請(qǐng)求頭:"Accept-Language",$http_accept_language即可
$http_cookie
$http_host #請(qǐng)求地址,即瀏覽器中你輸入的地址(IP或域名)
$http_referer #url跳轉(zhuǎn)來源,用來記錄從那個(gè)頁(yè)面鏈接訪問過來的
$http_user_agent #用戶終端瀏覽器等信息
$http_x_forwarded_for #當(dāng)前端有代理服務(wù)器時(shí),設(shè)置web節(jié)點(diǎn)記錄客戶端地址的配置,此參數(shù)生效的前提是代理服務(wù)器也要進(jìn)行相關(guān)的http_x_forwarded_for設(shè)置
$sent_http_NAME #可以設(shè)置任意http響應(yīng)頭字段;變量名中的后半部分NAME可以替換成任意響應(yīng)頭字段,如需要設(shè)置響應(yīng)頭Content-length,$sent_http_content_length即可
3.2 Logstash捕獲字段:
3.2.1 input組件
input {
beats {
port => 5044
}
}
3.2.2 output組件
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "beat-mylog"
#user => "elastic"
#password => "changeme"
}
stdout { codec => rubydebug }
}
3.2.3 filter組件
官方文檔:https://www.elastic.co/guide/en/logstash/6.4/filter-plugins.html
完整規(guī)格:
filter {
#正則捕獲字段
grok {}
#字段類型轉(zhuǎn)換
mutate {}
#時(shí)間數(shù)據(jù)賦值到另外字段
date {}
#刪除數(shù)據(jù)
drop {}
}
3.2.3.1、Grok匹配日志字段:
a、新建分析nginx日志的配置logstash.conf
filter {
grok {
patterns_dir => ["/tools/install/logstash-6.4.3/patterns"]
match => {
"message" => "%{nginx_log}"
}
remove_field => ["message"]
}
date {
match => [ "logtime", "dd/MMM/yyyy:HH:mm:ss Z"]
target => "@timestamp"
}
}
b、捕獲方法名 正則表達(dá)式
* 規(guī)則如下:
nginx_log %{IPORHOST:clientip} - %{USER:user} [%{HTTPDATE:logtime}] "(?:%{WORD:method} %{URIPATH:requestURI}(%{URIPARAM:parms}|)(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:status} %{NUMBER:bytes} (%{URIPARAM:parms}|-) %{QS:referrer} %{QS:agent} "(%{IPORHOST:forwordip}|-)" %{NUMBER:reqtime}
grok正則捕獲:
https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
kinbana測(cè)試正則捕獲是否正確:
3.2.3.2、Mutate字段轉(zhuǎn)換
Mutate轉(zhuǎn)化器文檔:
https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html#plugins-filters-mutate-convert
https://blog.csdn.net/cromma/article/details/52919742
Mutate作用:用于每個(gè)輸出的字段作后續(xù)轉(zhuǎn)換操作
convert:
將字段的值轉(zhuǎn)換為另一種類型,如將字符串轉(zhuǎn)換為整數(shù)。如果字段值是數(shù)組,則將轉(zhuǎn)換所有成員。如果字段是散列,則不采取任何操作
mutate {
convert => {
"bytes" => "integer"
"reqtime" => "float"
}
}
lowercase & uppercase:
大小寫轉(zhuǎn)換,數(shù)組類型,字段名字作為數(shù)據(jù)元素。
mutate {
lowercase => [ "fieldname" ]
}
join:數(shù)組的分割字符串
使用固定連接符號(hào),連接數(shù)組內(nèi)的元素,如果給定的字段不是數(shù)組類型,什么也不做。
mutate {
split => ["message", "|"]
}
mutate {
join => ["message", ","]
}
#join處理前
"message" => “1|2|3|4”
#join處理后
"message" => “1,2,3,4”
merge:拼接字符串
字符串 + 字符串
數(shù)組 + 字符串
操作邏輯:把追加字段的字符拼接到目標(biāo)字段字符上
mutate {
merge => { "目標(biāo)字段" => "追加字段" }
}
split: 分割字符為數(shù)組
使用分隔符將字段拆分為數(shù)組。只對(duì)字符串字段有效。
mutate {
split => { "fieldname" => "," }
}
#split處理前
"message" => “1|2|3|4”
#split處理后
"message" => [
[0] "1",
[1] "2",
[2] "3",
[3] "4"
]
gsub:替換字符串
數(shù)組類型,沒有默認(rèn)設(shè)置。
該參數(shù)設(shè)置只針對(duì)string類型,如果不是string類型的,什么也不做。
mutate {
gsub => [
"agent", """, "",
"referrer", """, ""
]
}
strip:
從字段中刪除空白。注意:這只適用于開頭和結(jié)尾的空格。
mutate {
strip => ["field1", "field2"]
}
3.2.3.3、IP庫(kù):
geoip {
source => "clientip"
target => "geoip"
}
獲取到的IP數(shù)據(jù):
lat:維度 lon:經(jīng)度
"geoip" => {
"country_code3" => "CN",
"latitude" => 39.9289,
"region_name" => "Beijing",
"location" => {
"lat" => 39.9289,
"lon" => 116.3883
}
3.2.3.4、Drop刪除過濾器:
說明:把url中包含圖片、css樣式、js等文件不要錄入日志統(tǒng)計(jì)
if ([requestURI] =~ "jpg|png|gif|css|js|ico"){
drop {}
}
3.2.3.5、使用新的配置文件啟動(dòng):
nohup ./bin/logstash -f ./config/logstash.conf &
3.3 kibana界面配置:
界面配置:
https://www.elastic.co/guide/cn/kibana/current/tutorial-visualizing.html