日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Logstash完成ELK集群

發(fā)布時間:2025/3/21 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Logstash完成ELK集群 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

注:本文與同步(9條消息) 搭建Elasticsearch和kibana完成初步ELK日志分析平臺搭建_kali_yao的博客-CSDN博客

logstash搭建

1)logstash介紹

什么是logstash

-是一個數(shù)據(jù)采集、加工處理以及傳輸?shù)墓ぞ?/p>

特點(diǎn)

-所有類型的數(shù)據(jù)集中處理

-不同模式和格式數(shù)據(jù)的正常化

-自定義日志格式的迅速擴(kuò)展

-為自定義數(shù)據(jù)源輕松添加插件

Logstash工作結(jié)構(gòu)(與流水線類似)

{數(shù)據(jù)源} ==> input{} ==> filter{ } ==> output {} ==>{輸出結(jié)果}

- input 負(fù)責(zé)收集數(shù)據(jù)

-filter負(fù)責(zé)處理數(shù)據(jù)

-output負(fù)責(zé)輸出數(shù)據(jù)

logstash 里面的類型

-布爾值類型: ssI_ enable => true

-字節(jié)類型: bytes =>1MiB"

-字符串類型: name => " xkops'

-數(shù)值類型: port => 22

-數(shù)組: match => [" datetime", "UNIX"]

-哈希(鍵值對) : options => {k => "v",k2 => "v2"}

-注釋: #

logstash 里面的判斷語法

-等于: ==

-不等于: !=

-小于: <

-大于: >

-小于等于: <=

-大于等于: >=

-匹配正則:-不匹配正則: !

logstash 里面的邏輯判斷

-包含: in

-不包含: notin

-與: and

-或: or

-非與: nand

-非或: xor

其他

-編碼類型: codec => "json'

2)logstash安裝

logstash安裝概述

-ogstash依賴Java環(huán)境,需要安裝java-openjdk

-logstash沒有默認(rèn)的配置文件,需要手動配置

-logstash安裝在/usr/share/logstash 目錄下

配置好yum源以后直接使用yum進(jìn)行安裝或手動下載logstash

~]# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.8.8.rpm ~]# yum install -y java-1.8.0-openjdk logstash

logstash安裝準(zhǔn)備

主機(jī)配置

主機(jī)IP地址配置
logstash192.168.1.47最低配置2核2G

logstash基礎(chǔ)配置安裝

# 注需于前面的配置elasticsearch對應(yīng) ~]# vim /etc/hosts 192.168.1.41 ? es-0001 192.168.1.42 ? es-0002 192.168.1.43 ? es-0003 192.168.1.44 ? es-0004 192.168.1.45 ? es-0005 192.168.1.47 ? logstash ~]# yum install -y java-1.8.0-openjdk logstash # 默認(rèn)安裝在/usr/share/logstash/bin/logstash ~]# cd /usr/share/logstash/bin/ && ls

注: /usr/share/logstash/bin/logstash直接執(zhí)行會報(bào)錯沒找到配置文件

# 服務(wù)配置文件默認(rèn)一般在/etc下 ~]# ln -s /etc/logstash /usr/share/logstash/config ~]# vim /etc/logstash/conf.d/my.conf input {stdin {} } ? filter{ } ? output{stdout{} } ~]# /usr/share/logstash/bin/logstash

?做完軟連接之后直接啟動會告訴我沒沒用配置文件,(配置文件需要自己書寫,如上)

?注:啟動后進(jìn)入交互視,輸入任意測試,回應(yīng)json格式

?

ctrl + c退出

3)插件的使用

logstash 配置文件路徑

-logstash安裝路徑/usr/share/ logstash (默認(rèn)路徑)

-配置文件安裝路徑/etc/logstash

●啟動命令logstash

/usr/share/ logstash/bin/logstash

插件的管理

  • 使用插件

-面的配置文件使用了logstash-input-stdin 和

logstash-output- -stdout兩個插件,logstash對數(shù)據(jù)的處理依賴插件

  • 管理命令/usr/share/ logstash/bin/ logstash-plugin

-安裝插件install

-刪除插件uninstall

-查看插件list

~]# cd /usr/share/logstash/bin ~]# ./logstash-plugin list # 注:同一種插件只能工作在同一個工作區(qū)里

?

  • 只能用于input段的插件: Iogstash-input- -xxx

  • 只能用于output段的插件: logstash-output- -xxx

  • 只能用于filter段的插件: logstash-filter-xxx,

  • 編碼格式插件: logstash-codec-xxx

插件與調(diào)試格式

/usr/share/logstash/bin/logstash-plugin list #查看所有

使用json格式字符串測試 {"a":"1", "b":"2", "c":"3"}

# 注:當(dāng)沒有輸入格式之前所有的輸入都會打印成普通字符串 ~]# vim /etc/logstash/conf.d/my.conf input { stdin { codec => "json" } ?# 以json格式打印 } ? filter{ } ? output{ stdout{ codec => "rubydebug" } #調(diào)試格式 } ~]# /usr/share/logstash/bin/logstash [2021-09-09T10:28:49,544][INFO ][logstash.agent ? ? ? ? ? ] Successfully started Logstash API endpoint {:port=>9600}{"a":"1", "b":"2", "c":"3"} # 輸入 /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/awesome_print-1.7.0/lib/awesome_print/formatters/base_formatter.rb:31: warning: constant ::Fixnum is deprecated {"@version" => "1","c" => "3","host" => "logstash","@timestamp" => 2021-09-09T02:28:52.117Z,"b" => "2","a" => "1" }

服務(wù)啟動報(bào)錯(由于上一個服務(wù)關(guān)閉進(jìn)程沒有關(guān)閉則需要關(guān)閉上一個進(jìn)程)

此時普通的查進(jìn)程以經(jīng)不能解決

~]# ps -exf | grep logstash # 因?yàn)閘ogstash是java啟動的,這邊安裝一個java的命令工具查找并殺死 ~]# yum install java-1.8.0-openjdk-devel ~]# jps 629 WrapperSimpleApp 2078 Jps ~]# kill 2078

4)插件官方手策使用

官方手冊地址

Logstash Reference [8.0] | Elastic

注:這里我用的是6.8

下面三個模式任選一個我這里演示input

這里演示file文件

找到path這一行點(diǎn)array有案例

案例可以直接使用

查看使用規(guī)則

5)input file插件(文件插件)

~]# vim /etc/logstash/conf.d/my.conf input { stdin { codec => "json" }file {path => ["/tmp/b.log","/tmp/c.log"] ? ? ? ?# 指定監(jiān)控的文件當(dāng)有多條的時候加[]type => "test" ? # 指定標(biāo)簽,如果是apache的日志可以打上apachestart_position => "beginning" # 開始,如果不寫的話在啟動服務(wù)之前的數(shù)據(jù)不會打印 ? ? ?sincedb_path => "/var/lib/logstash/sincedb" ?# 書簽文件}file { ? ? ? ? ? ? ?# 或者可以支持多個file書寫path => "/tmp/d.log"type => "mysql"} } ? } filter{ } output{ stdout{ codec => "rubydebug" } } ~]# rm -rf /var/lib/logstash/plugins/inputs/file/.sincedb_* # 刪除原有書簽文件,這樣就可以重頭開始輸出了 ~]# /usr/share/logstash/bin/logstash

寫入數(shù)據(jù)測試

~]# cd /tmp ~]# echo aaa >>a.log ~]# echo bbb >>a.log ~]# /usr/share/logstash/bin/logstash .... /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/awesome_print-1.7.0/lib/awesome_print/formatters/base_formatter.rb:31: warning: constant ::Fixnum is deprecated {"message" => "aaa","@version" => "1","@timestamp" => 2021-09-09T03:57:10.178Z,"host" => "logstash","type" => "test","path" => "/tmp/c.log" } {"message" => "bbb","@version" => "1","@timestamp" => 2021-09-09T03:57:10.200Z,"host" => "logstash","type" => "test","path" => "/tmp/c.log"

官網(wǎng)查看解析

?

?

?

6)web頁面展示

# 瀏覽器訪問apache服務(wù)的ip(之前有寫) ~]# http://172.17.0.51/info.php

查看日志

~]# tail -f /etc/httpd/logs/access_log 172.17.0.126 - - [07/Mar/2022:11:42:03 +0800] "GET /info.php HTTP/1.1" 200 279 "-" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36" ? # 第一個字段是ip,發(fā)現(xiàn)不是本機(jī)ip訪問的

默認(rèn)在云上訪問使用的是LB負(fù)載ip

?設(shè)置監(jiān)聽服務(wù)器時打開獲取真實(shí)ip

?

測試,把a(bǔ)pache的日志拷貝到/tmp/b.log中,啟動查看

此時發(fā)現(xiàn)只要再次啟動就不會打印輸出了,因?yàn)橛袠?biāo)簽,

?修改標(biāo)簽指定文件或刪除標(biāo)簽文件

?

?

7)filter(過濾) grok插件

1)filter插件配置管理的概述

grok插件

-解析各種非結(jié)構(gòu)化的日志數(shù)據(jù)插件

-grok使用正則表達(dá)式把非結(jié)構(gòu)化的數(shù)據(jù)結(jié)構(gòu)化在分組匹配-正則表達(dá)式需要根據(jù)具體數(shù)據(jù)結(jié)構(gòu)編寫

-雖然編寫困難,但適用性極廣

-幾乎可以應(yīng)用于各類數(shù)據(jù)

filter{ grok {match => { "message" => "" }} }

2)filter插件配置的正則概述

  • 正則表達(dá)式分組匹配格式:

調(diào)用格式:(?<名字>正則表達(dá)式)

## 以apache日志為例寫一個正則 ~]# vim /etc/logstash/conf.d/my.conf ? input {stdin { codec => "json" }file {path => ["/tmp/b.log","/tmp/c.log"]type => "test"start_position => "beginning"sincedb_path => "/dev/null"} } ? filter{grok {match => { "message" => "(?<client_IP>(25[0-5]|2[0-4]\d|1?\d?\d\.){3}(25[0-5]|2[0-4]\d|1?\d?\d)) (?<vber>\S+) (?<auth>\S+) \[(?<time>.+)\] \"(?<method>[A-Z]+) (?<url>\S+) (?<proto>[A-Z]+\/\d\.\d)\" (?<rc>\d+) (?<size>\d+) \"(?<ref>\S+)\" \"(?<agent>[^\"]+)\"" }} } ? output{stdout{ codec => "rubydebug" } }

  • 正則表達(dá)式宏調(diào)用格式

調(diào)用格式: %{宏名稱:名字}

~]# vim /etc/logstash/conf.d/my.conf input {stdin { codec => "json" }file {path => ["/tmp/b.log","/tmp/c.log"]type => "test"start_position => "beginning"sincedb_path => "/dev/null"} } ? filter{grok {match => { "message" => "%{IP:client_IP}" } ? # 用宏} } ? output{stdout{ codec => "rubydebug" } ?

宏文件路徑

/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns

]# cd /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns ~]# ls aws ? ? exim ? ? ? ? ? httpd ? ? ? ? maven ? ? ? ? ? ? ? ? nagios ? ? ruby bacula firewalls ? ? java ? ? ? ? mcollective ? ? ? ? ? postgresql squid bind ? grok-patterns junos ? ? ? ? mcollective-patterns rails bro ? ? haproxy ? ? ? linux-syslog mongodb ? ? ? ? ? ? ? redis

查看IP的宏

## 用httpd宏示例 ~]# echo '192.168.1.252 - - [29/Jul/2020:14:06:57 +0800] "GET /info.html HTTP/1.1" 200 119 "-" "curl/7.29.0"' >/tmp/c.log ~]# vim /etc/logstash/conf.d/my.conf input {file {path => ["/tmp/c.log"]type => "test"start_position => "beginning"sincedb_path => "/dev/null" ? ? #把日志位置指針指向空可以反復(fù)讀取} } filter{grok {match => { "message" => "%{HTTPD_COMBINEDLOG}" } # 調(diào)用httpd的宏把匹配出日志的各個字段含義轉(zhuǎn)化成json格式} } output{stdout{ codec => "rubydebug" } } ~]# /usr/share/logstash/bin/logstash

?

?8)output elasticsearch插件

~]# vim /etc/logstash/conf.d/my.conf input {file {path => ["/tmp/c.log"]type => "test"start_position => "beginning"sincedb_path => "/dev/null"} } filter{grok {match => { "message" => "%{HTTPD_COMBINEDLOG}" }} } output{stdout{ codec => "rubydebug" }elasticsearch {hosts => ["es-0004:9200", "es-0005:9200"] ?# 把數(shù)據(jù)寫入集群(注,為了防止單點(diǎn)故障,head(es-0001),kibana(es-002,es-003),所以這里就用4和5)index => "weblog-%{+YYYY.MM.dd}"} ? # 索引的名字用來存放日志 } ~]# /usr/share/logstash/bin/logstash ? # 瀏覽器打開 head 插件,通過 web 頁面瀏覽驗(yàn)證http://公網(wǎng)IP:9200/_plugin/head/

?

查看內(nèi)容

8.遠(yuǎn)程獲取WEB日志

1)beats插件

如何收集日志?

-由于logstash 依賴JAVA環(huán)境,而且占用資源非常大,因此在每一臺web 服務(wù)器上部署logstash 非常不合適

-我們可以使用更輕量的filebeat 收集日志,通過網(wǎng)絡(luò)給logstash發(fā)送數(shù)據(jù)

- logstash 使用beats 接收日志,完成分析

logstash接收日志

-如果想接收數(shù)據(jù),必須監(jiān)聽網(wǎng)絡(luò)服務(wù)。logstash 可以通過beats插件接收filebeats 發(fā)送過來的數(shù)據(jù)

2)logstash beats插件配置

~]# vim /etc/logstash/conf.d/my.conf input { stdin { codec => "json" }file{path => ["/tmp/c.log"]type => "test"start_position => "beginning"sincedb_path => "/var/lib/logstash/sincedb"}beats { ? ? ? ? ?# 配置beatsport => 5044} } ? filter{ grok {match => { "message" => "%{HTTPD_COMBINEDLOG}" }} } ? output{ stdout{ codec => "rubydebug" }elasticsearch {hosts => ["es-0004:9200", "es-0005:9200"]index => "weblog-%{+YYYY.MM.dd}"} } ~]# /usr/share/logstash/bin/logstash ? # 測試,開啟另一個終端查看 ~]# ss -nulpt | grep 5044

3)web服務(wù)安裝filebeat

下載軟件包

或者

~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.8.8-x86_64.rpm # 在web服務(wù)器上操作 ~]# yum install -y filebeat.x86_64 0:6.8.8-1 ~]# vim /etc/filebeat/filebeat.yml 24: enabled: true ? ?# 打開模塊 28: ?- /var/log/httpd/access_log ?# 監(jiān)控日志文件名 45: ? fields: ? ? ? ?# 定義標(biāo)簽 46: ? ? ? my_type: apache # 改成自己的標(biāo)簽 148, 150 注釋掉 ? ? ? ? ? ?# 因?yàn)槿罩静皇莏son格式不能直接寫 161: output.logstash: 163: ? hosts: ["(logstash的ip):5044"] 180, 181, 182 注釋掉 ?# 收集系統(tǒng)性息 ? # 查看修改 ~]# grep -Pv "^\s*(#|$)" /etc/filebeat/filebeat.yml # 啟動filebeat服務(wù)(最好重啟一下apache服務(wù),為了更好的識別filebeat) ~]# systemctl enable --now filebeat

4.驗(yàn)證

配置完成以后可以 使用grep查看

~]# grep -Pv "^\s*(#|$)" /etc/filebeat/filebeat.yml # 啟動服務(wù) ~]# /usr/share/logstash/bin/logstash

訪問web服務(wù)器查看

?

?kibana配置

?

?

?

排錯思路

# 1.查看端口是否啟動(5044) ~]# ss -nulpt | grep 5044 # 2.查看配置文件是否有問題 ~]# cat /etc/logstash/conf.d/my.conf # ping一下指定的elasticsearch集群的ip # 3.查看elasticsearch數(shù)據(jù)庫集群的狀態(tài)(red為錯誤狀態(tài)) ~]# curl http://node-2:9200/_cat/indices # 4.查看集群(如果沒有啟動則需要到所有服務(wù)上啟動elasticsearch) ~]# curl http://node-2:9200/_cat/nodes # 查看是否恢復(fù) ~]# curl http://node-2:9200/_cluster/health?pretty

訪問測試

~]# ab -c 20 -n 200 http://172.17.0.51/info.php-c # 并發(fā)-n # 次數(shù)

直接選擇查看ip

再次拆分(可以看到是apache的ab壓力測試)

總結(jié)

以上是生活随笔為你收集整理的Logstash完成ELK集群的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。