日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Logstash完成ELK集群

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

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

logstash搭建

1)logstash介紹

什么是logstash

-是一個數據采集、加工處理以及傳輸的工具

特點

-所有類型的數據集中處理

-不同模式和格式數據的正?;?/p>

-自定義日志格式的迅速擴展

-為自定義數據源輕松添加插件

Logstash工作結構(與流水線類似)

{數據源} ==> input{} ==> filter{ } ==> output {} ==>{輸出結果}

- input 負責收集數據

-filter負責處理數據

-output負責輸出數據

logstash 里面的類型

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

-字節類型: bytes =>1MiB"

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

-數值類型: port => 22

-數組: match => [" datetime", "UNIX"]

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

-注釋: #

logstash 里面的判斷語法

-等于: ==

-不等于: !=

-小于: <

-大于: >

-小于等于: <=

-大于等于: >=

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

logstash 里面的邏輯判斷

-包含: in

-不包含: notin

-與: and

-或: or

-非與: nand

-非或: xor

其他

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

2)logstash安裝

logstash安裝概述

-ogstash依賴Java環境,需要安裝java-openjdk

-logstash沒有默認的配置文件,需要手動配置

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

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

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

logstash安裝準備

主機配置

主機IP地址配置
logstash192.168.1.47最低配置2核2G

logstash基礎配置安裝

# 注需于前面的配置elasticsearch對應 ~]# 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 # 默認安裝在/usr/share/logstash/bin/logstash ~]# cd /usr/share/logstash/bin/ && ls

注: /usr/share/logstash/bin/logstash直接執行會報錯沒找到配置文件

# 服務配置文件默認一般在/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

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

?注:啟動后進入交互視,輸入任意測試,回應json格式

?

ctrl + c退出

3)插件的使用

logstash 配置文件路徑

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

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

●啟動命令logstash

/usr/share/ logstash/bin/logstash

插件的管理

  • 使用插件

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

logstash-output- -stdout兩個插件,logstash對數據的處理依賴插件

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

-安裝插件install

-刪除插件uninstall

-查看插件list

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

?

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

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

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

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

插件與調試格式

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

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

# 注:當沒有輸入格式之前所有的輸入都會打印成普通字符串 ~]# vim /etc/logstash/conf.d/my.conf input { stdin { codec => "json" } ?# 以json格式打印 } ? filter{ } ? output{ stdout{ codec => "rubydebug" } #調試格式 } ~]# /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" }

服務啟動報錯(由于上一個服務關閉進程沒有關閉則需要關閉上一個進程)

此時普通的查進程以經不能解決

~]# ps -exf | grep logstash # 因為logstash是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這一行點array有案例

案例可以直接使用

查看使用規則

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

~]# vim /etc/logstash/conf.d/my.conf input { stdin { codec => "json" }file {path => ["/tmp/b.log","/tmp/c.log"] ? ? ? ?# 指定監控的文件當有多條的時候加[]type => "test" ? # 指定標簽,如果是apache的日志可以打上apachestart_position => "beginning" # 開始,如果不寫的話在啟動服務之前的數據不會打印 ? ? ?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

寫入數據測試

~]# 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"

官網查看解析

?

?

?

6)web頁面展示

# 瀏覽器訪問apache服務的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,發現不是本機ip訪問的

默認在云上訪問使用的是LB負載ip

?設置監聽服務器時打開獲取真實ip

?

測試,把apache的日志拷貝到/tmp/b.log中,啟動查看

此時發現只要再次啟動就不會打印輸出了,因為有標簽,

?修改標簽指定文件或刪除標簽文件

?

?

7)filter(過濾) grok插件

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

grok插件

-解析各種非結構化的日志數據插件

-grok使用正則表達式把非結構化的數據結構化在分組匹配-正則表達式需要根據具體數據結構編寫

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

-幾乎可以應用于各類數據

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

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

  • 正則表達式分組匹配格式:

調用格式:(?<名字>正則表達式)

## 以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" } }

  • 正則表達式宏調用格式

調用格式: %{宏名稱:名字}

~]# 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" ? ? #把日志位置指針指向空可以反復讀取} } filter{grok {match => { "message" => "%{HTTPD_COMBINEDLOG}" } # 調用httpd的宏把匹配出日志的各個字段含義轉化成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"] ?# 把數據寫入集群(注,為了防止單點故障,head(es-0001),kibana(es-002,es-003),所以這里就用4和5)index => "weblog-%{+YYYY.MM.dd}"} ? # 索引的名字用來存放日志 } ~]# /usr/share/logstash/bin/logstash ? # 瀏覽器打開 head 插件,通過 web 頁面瀏覽驗證http://公網IP:9200/_plugin/head/

?

查看內容

8.遠程獲取WEB日志

1)beats插件

如何收集日志?

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

-我們可以使用更輕量的filebeat 收集日志,通過網絡給logstash發送數據

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

logstash接收日志

-如果想接收數據,必須監聽網絡服務。logstash 可以通過beats插件接收filebeats 發送過來的數據

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服務安裝filebeat

下載軟件包

或者

~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.8.8-x86_64.rpm # 在web服務器上操作 ~]# 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 ?# 監控日志文件名 45: ? fields: ? ? ? ?# 定義標簽 46: ? ? ? my_type: apache # 改成自己的標簽 148, 150 注釋掉 ? ? ? ? ? ?# 因為日志不是json格式不能直接寫 161: output.logstash: 163: ? hosts: ["(logstash的ip):5044"] 180, 181, 182 注釋掉 ?# 收集系統性息 ? # 查看修改 ~]# grep -Pv "^\s*(#|$)" /etc/filebeat/filebeat.yml # 啟動filebeat服務(最好重啟一下apache服務,為了更好的識別filebeat) ~]# systemctl enable --now filebeat

4.驗證

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

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

訪問web服務器查看

?

?kibana配置

?

?

?

排錯思路

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

訪問測試

~]# ab -c 20 -n 200 http://172.17.0.51/info.php-c # 并發-n # 次數

直接選擇查看ip

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。