运维实操——日志分析系统ELK(中)之logstash采集数据、伪装rsyslog、多行过滤、grok切片
日志分析系統(tǒng)ELK(中)之logstash
- 1、什么是logstash?
 - 2、Logstash安裝
 - 3、logstash簡單命令行測試
 - 4、logstash文件測試
 - (1)命令行輸入,輸出到文件
 - (2)命令行輸入,輸出到elasticsearch
 - (3)文件輸入,輸出到elasticsearch
 
- 5、logstash可以偽裝成日志服務(wù)器,直接接受遠(yuǎn)程日志
 - 6、多行過濾插件
 - (1)命令行多行輸入,文件輸出
 - (2)文件多行輸入,輸出到elasticsearch
 
- 7、grok切片過濾插件
 - (1)命令行輸入,過濾,命令行輸出
 - (2)apache日志輸入,切片,es輸出
 
接上篇,server3、server4、server5,是Elasticsearch集群。本文介紹logstash
1、什么是logstash?
Logstash是一個(gè)開源的服務(wù)器端數(shù)據(jù)處理管道,聚合器。logstash擁有200多個(gè)插件,能夠同時(shí)從多個(gè)來源采集數(shù)據(jù),轉(zhuǎn)換數(shù)據(jù),過濾數(shù)據(jù),然后將數(shù)據(jù)發(fā)送到您最喜歡的 “存儲(chǔ)庫” 中。(大多都是 Elasticsearch。)
Logstash管道有兩個(gè)必需的元素,輸入和輸出,以及一個(gè)可選元素過濾器。如下圖
 
 (1)輸入:采集各種樣式、大小和來源的數(shù)據(jù)
 Logstash 支持各種輸入選擇 ,同時(shí)從眾多常用來源捕捉事件。
 能夠以連續(xù)的流式傳輸方式,輕松地從您的日志、指標(biāo)、Web 應(yīng)用、數(shù)據(jù)存儲(chǔ)以及各種 AWS 服務(wù)采集數(shù)據(jù)。
 
 (2)過濾器:實(shí)時(shí)解析和轉(zhuǎn)換數(shù)據(jù)
 數(shù)據(jù)從源傳輸?shù)酱鎯?chǔ)庫的過程中,Logstash 過濾器能夠解析各個(gè)事件,識(shí)別已命名的字段以構(gòu)建結(jié)構(gòu),并將它們轉(zhuǎn)換成通用格式,以便更輕松、更快速地分析和實(shí)現(xiàn)商業(yè)價(jià)值。
- 利用 Grok 從非結(jié)構(gòu)化數(shù)據(jù)中派生出結(jié)構(gòu)
 - 從 IP 地址破譯出地理坐標(biāo)
 - 將 PII 數(shù)據(jù)匿名化,完全排除敏感字段
 - 簡化整體處理,不受數(shù)據(jù)源、格式或架構(gòu)的影響
 
(3)輸出:選擇您的存儲(chǔ)庫,導(dǎo)出您的數(shù)據(jù)
 盡管 Elasticsearch 是我們的首選輸出方向,能夠?yàn)槲覀兊乃阉骱头治鰩頍o限可能,但它并非唯一選擇。Logstash 提供眾多輸出選擇,您可以將數(shù)據(jù)發(fā)送到您要指定的地方,并且能夠靈活地解鎖眾多下游用例。
 
2、Logstash安裝
官網(wǎng)https://elasticsearch.cn/download/下載Logstash軟件包,并準(zhǔn)備java的jdk包
 準(zhǔn)備新的虛擬機(jī)serever6(172.25.77.6),分配內(nèi)存1G
server6安裝jdk和logstash
 
3、logstash簡單命令行測試
找到logstash命令的路徑執(zhí)行,標(biāo)準(zhǔn)輸入到標(biāo)準(zhǔn)輸出,即命令行輸入,命令行輸出
 
 輸入hello word,標(biāo)準(zhǔn)輸出hello word;輸入test,標(biāo)準(zhǔn)輸出test
 
4、logstash文件測試
(1)命令行輸入,輸出到文件
在/etc/logstash/conf.d/目錄下.conf結(jié)尾的文件都可以讀到,
 
 編輯test.conf文件如下
 執(zhí)行test.conf文件
 
 命令行輸入heiheihei,輸出到了/tmp/testfile文件中
 
 上面的方法無法直接看到結(jié)果,不太舒服,修改test.conf文件
 執(zhí)行test.conf文件
 
 輸入linux,可以看到標(biāo)準(zhǔn)輸出,也輸出一份到/tmp/testfile文件中
 
(2)命令行輸入,輸出到elasticsearch
編輯es.conf 文件
[root@server6 conf.d]# cat es.conf input {stdin {} }output {stdout {} %標(biāo)準(zhǔn)輸出一份elasticsearch { %給elasticsearch輸出一份hosts => ["172.25.77.3:9200"] %目標(biāo)elasticsearch主機(jī)ipindex => "logstash-%{+yyyy.MM.dd}" %索引格式為logstash-年月日} }
 執(zhí)行es.conf 文件
 
 輸入linux haha,標(biāo)準(zhǔn)輸出一份
 
 數(shù)據(jù)瀏覽->指定索引logstash-2021.08.14,可以看到elasticsearch輸出一份
 
(3)文件輸入,輸出到elasticsearch
現(xiàn)在我們想把日志文件作為輸入,首先要把權(quán)限改為644,因?yàn)閘ogstash讀取時(shí)是logstash身份,所以必須開放讀的權(quán)力。
 
 修改es.conf 文件
 執(zhí)行es.conf 文件
 
 可以看到輸入了很多/var/log/messages
 
 elasticsearch也可以看到很多數(shù)據(jù)
 
 假如我們把剛才創(chuàng)建的索引刪除了,再次創(chuàng)建可以恢復(fù)嗎?
 
 刪除索引
 
 再次執(zhí)行es.conf 文件,會(huì)發(fā)現(xiàn)沒有數(shù)據(jù)輸入
 
 由于終端被占用了,再開啟一個(gè)窗口,輸入一條日志
 
 現(xiàn)在再返回去看,有輸入了,一個(gè)是遠(yuǎn)程登錄,一個(gè)是剛創(chuàng)建的日志,都是新的日志,那舊的日志呢?我寫的從頭開始輸入阿
 
 數(shù)據(jù)輸入到elasticsearch了
 
 再次刪除索引
 
 在/usr/share/logstash/data/plugins/inputs/file/目錄下,有一個(gè).sincedb的文件,它負(fù)責(zé)記錄數(shù)據(jù)偏移量,之前看到那個(gè)位置了,不會(huì)重復(fù)輸入,所以刪除他,就可以重新全部輸入了
 
 這里補(bǔ)充一下,sincedb文件一共6個(gè)字段,分別表示inode編號(hào)、文件系統(tǒng)的主要設(shè)備號(hào)、文件系統(tǒng)的次要設(shè)備號(hào)、文件中的當(dāng)前字節(jié)偏移量、最后一個(gè)活動(dòng)時(shí)間戳(浮點(diǎn)數(shù))、與此記錄匹配的最后一個(gè)已知路徑
 
 再次執(zhí)行es.conf 文件
 
 /var/log/messages的數(shù)據(jù)又全部輸入了一遍
 
 數(shù)據(jù)輸入到elasticsearch了
 
5、logstash可以偽裝成日志服務(wù)器,直接接受遠(yuǎn)程日志
如果按照前面的方法收集日志信息,需要每臺(tái)服務(wù)器上都部署logstash,這樣太累了,那能不能讓logstash偽裝成日志服務(wù)器,每個(gè)節(jié)點(diǎn)服務(wù)器遠(yuǎn)程發(fā)送日志給logstash呢?
編輯es.conf 文件
[root@server6 conf.d]# cat es.conf input {#file {# path => "/var/log/messages"# start_position => "beginning"#}syslog { %偽裝syslog,開放端口514port => 514} }output {stdout {}elasticsearch {hosts => ["172.25.77.3:9200"]index => "syslog-%{+yyyy.MM.dd}" %索引為syslog-年月日} }
 執(zhí)行es.conf 文件
 
 新開一個(gè)窗口查看端口514已開放
 
 遠(yuǎn)程主機(jī)server3編輯/etc/rsyslog.conf文件
 打開514端口
 
 所有的日志發(fā)送給172.25.77.6:514一份
 
 server3重啟rsyslog服務(wù)
 
 server6的窗口有輸入了
 
現(xiàn)在elasticsearch就可以看到server3的日志了
 
 同理,修改遠(yuǎn)程主機(jī)server4的/etc/rsyslog.conf文件
 
 
 server4重啟rsyslog服務(wù)
 
 server6的窗口又有輸入了
 
 elasticsearch可以看到server4的日志了
 
 這時(shí)server6查看514端口有三個(gè),第一個(gè)是自己的接受端口,第二個(gè)是server3的發(fā)送端口,第三個(gè)是server4的發(fā)送端口
 
6、多行過濾插件
錯(cuò)誤日志一般都有很多行,如果按照前面的做法會(huì)分成很多條,分開讀,單獨(dú)看根本不知道什么意思,多行過濾可以把多行日志記錄合并為一行輸出。
(1)命令行多行輸入,文件輸出
編輯test.conf文件
[root@server6 conf.d]# cat test.conf input {stdin {codec => multiline { %多行輸入pattern => "EOF" %結(jié)束標(biāo)志詞為EOFnegate => "true"what => "previous"}} }output {stdout {}file { path => "/tmp/testfile" %輸出到文件/tmp/testfilecodec => line { format => "custom format: %{message}"} %格式為custom format:{數(shù)據(jù)}} }
 執(zhí)行test.conf文件
 
 測試:多行輸入,以EOF結(jié)束輸入,可以看到標(biāo)準(zhǔn)輸出是一條
 
 /tmp/testfile文件中也是一條
 
(2)文件多行輸入,輸出到elasticsearch
接下來用文件輸入來測試,使用es集群的server3的日志(之前有一些報(bào)錯(cuò)日志),把my-es.log發(fā)給server6的/var/log
 
 先看一下正確的日志都是以時(shí)間開頭的,并且被中括號(hào)[ ]括起來的一行,而錯(cuò)誤日志有很多行,比如下圖的at org開頭的這些,他們合起來應(yīng)該是一條錯(cuò)誤日志。
 
 修改test.conf文件,先不加多行輸入模塊,看效果
 執(zhí)行test.conf文件
 
 顯示輸入了很多數(shù)據(jù)
 
 在es中查看eslog索引,搜索at org,可以看到他們分成了一條一條的單獨(dú)的數(shù)據(jù)
 
 現(xiàn)在刪除該索引
 
 并刪除相關(guān)的sincedb
 
 修改test.conf文件
 再次執(zhí)行test.conf文件
 
 看到這個(gè)是一條數(shù)據(jù)
 
 當(dāng)然也可以在es中查看,是一條數(shù)據(jù)
 
7、grok切片過濾插件
我們平時(shí)查看日志,比如查看apache的日志,可以發(fā)現(xiàn)很有規(guī)律,如下圖,先是訪問的ip,時(shí)間等等,那么能不能只看其中一組數(shù)據(jù),比如只想要ip這一列?,F(xiàn)在就需要logstash的切片這個(gè)功能了
 
 我們可以根據(jù)日志的特征自定義grok的書寫,得到想要的切片
(1)命令行輸入,過濾,命令行輸出
編輯grok.conf文件
[root@server6 conf.d]# cat grok.conf input {stdin {} }filter {grok { %把輸入切片成五塊,分別對應(yīng)match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }} }output {stdout {} }
 執(zhí)行g(shù)rok.conf文件
 
 輸入一串?dāng)?shù)據(jù),根據(jù)設(shè)定的切片方法,一一對應(yīng)
 
(2)apache日志輸入,切片,es輸出
server6安裝apache
 
 開啟apache,寫入默認(rèn)發(fā)布目錄
 
 真機(jī)訪問172.25.77.6
 
 server6查看apache的日志
 
 在/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns目錄下,有很多軟件的日志的輸出形式
 
 看httpd的規(guī)定,如何寫日志已經(jīng)提前用變量的方法定義了,所以我們只需要按照這個(gè)規(guī)定切片就好了
 
 把a(bǔ)pache的日志作為grok的輸入,日志文件需要給讀的權(quán)限,日志文件的目錄需要給讀和執(zhí)行的權(quán)限,讀的時(shí)候是logstash的身份
 
 修改grok.conf文件
 執(zhí)行g(shù)rok.conf文件
 
 按照默認(rèn)定義好的模式切片
 
 es查看,成功切片
 
總結(jié)
以上是生活随笔為你收集整理的运维实操——日志分析系统ELK(中)之logstash采集数据、伪装rsyslog、多行过滤、grok切片的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: linux给文本繁简转换,linux -
 - 下一篇: Antd多文件上传后台接收为null问题