ELK大數(shù)據(jù)分析課程

大數(shù)據(jù) 分析 課程| 2022-09-06 admin

一、概述:

ELK大數(shù)據(jù)分析課程_filebeats

 

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/

ELK大數(shù)據(jù)分析課程

* 新建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

ELK大數(shù)據(jù)分析課程_kibana_03

* elasticsearch.yml配置:

vi config/elasticsearch.yml

如需遠(yuǎn)程主機(jī)需訪問該elasticsearch服務(wù),需配置對(duì)外出口ip和端口:

ELK大數(shù)據(jù)分析課程_大數(shù)據(jù)_04

指定路徑:可以不指定,默認(rèn)當(dāng)前路徑的data和logs,指定路徑后要配置es組的權(quán)限

ELK大數(shù)據(jù)分析課程_ELK_05

配置下載:

* 啟動(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

ELK大數(shù)據(jù)分析課程_logstash_06

執(zhí)行命令:ulimit -Hn

ELK大數(shù)據(jù)分析課程

2. max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

ELK大數(shù)據(jù)分析課程

3.max number of threads [1024] for user [elasticsearch] is too low, increase to at least [2048]

ELK大數(shù)據(jù)分析課程

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

ELK大數(shù)據(jù)分析課程

bootstrap.system_call_filter: false

2.2.4 啟動(dòng)成功的訪問地址

curl 'http://localhost:9200/?pretty'

ELK大數(shù)據(jù)分析課程_logstash_11

 

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

 

訪問: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è)試正則捕獲是否正確:

ELK大數(shù)據(jù)分析課程_filebeats_12

 

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