filebeat+elasticsearch+logstash+kibana收集系統(tǒng)日志(docker)

1.使用的軟件

我們這里用到的是filebeat+elk(elasticsearch+logstash+kibana)來進(jìn)行系統(tǒng)日志的收集。filebeat安裝在各個(gè)服務(wù)器中,Logstash+ElasticSearch+Kibana安裝在一臺(tái)專門用于基礎(chǔ)服務(wù)的服務(wù)器上。

其架構(gòu)如下
filebeat+ELK.png

2.各軟件說明

2.1 filebeat

Filebeat是一個(gè)輕量級(jí)的托運(yùn)人,用于轉(zhuǎn)發(fā)和集中日志數(shù)據(jù). Filebeat作為代理安裝在服務(wù)器上,監(jiān)視您指定的日志文件或位置,收集日志事件,并將它們轉(zhuǎn)發(fā)到ElasticSearchLogstash進(jìn)行索引.

官方中文文檔:https://s0www0elastic0co.icopy.site/guide/en/beats/filebeat/current/index.html

2.2 Logstash

Logstash是一個(gè)開源的服務(wù)器端數(shù)據(jù)處理管道,可以同時(shí)從多個(gè)數(shù)據(jù)源獲取數(shù)據(jù),并對(duì)其進(jìn)行轉(zhuǎn)換,然后將其發(fā)送到你最喜歡的“存儲(chǔ)”。

官方中文文檔:https://s0www0elastic0co.icopy.site/guide/en/logstash/current/index.html

2.3 ElasticSearch

Elasticsearch 是一個(gè)開源的搜索引擎,建立在一個(gè)全文搜索引擎庫 Apache Lucene? 基礎(chǔ)之上。Lucene 可以說是當(dāng)下最先進(jìn)、高性能、全功能的搜索引擎庫--無論是開源還是私有。

官方中文文檔:https://s0www0elastic0co.icopy.site/guide/en/elasticsearch/reference/current/index.html

《Elasticsearch:權(quán)威指南》:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

2.4 Kibana

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)。

官方中文文檔:https://www.elastic.co/guide/cn/kibana/current/index.html

3.配置文件說明

3.1 nginx配置文件

nginx.conf中設(shè)置日志文件格式:

 log_format  main  $time_iso8601 | $remote_addr | $http_host | $request_method | $request_uri | $server_protocol | $status | $body_bytes_sent | $http_referer | $http_user_agent | $request_time |;
?
access_log /var/log/nginx/access.log main;

各字段解釋:訪問時(shí)間和時(shí)區(qū) | 客戶端ip | 請(qǐng)求地址(瀏覽器輸入的ip或域名) | http請(qǐng)求方法(get或post等) | 客戶端請(qǐng)求的原始uri | 服務(wù)器的HTTP版本,通常為 "HTTP/1.0" 或 "HTTP/1.1 | http狀態(tài)碼 | 傳給客戶端的字節(jié) | url跳轉(zhuǎn)來源,用來記錄從那個(gè)頁面鏈接訪問過來的 | 用戶瀏覽器信息 | 客戶端請(qǐng)求時(shí)間 |

修改完成后,通過sudo nginx -t來檢查配置文件是否正確,然后sudo nginx -s reload來重啟

3.2 filebeat配置文件

filebeat各系統(tǒng)安裝教程詳見官方文檔。

我這里安裝的deb包(rpm包也同樣),配置文件在/etc/filebeat/filebeat.yml,

filebeat.inputs: #filebeat的輸入部分
?
- type: log #輸入的類型
?
 enabled: true #filebeat6.0之后需要設(shè)置為true
?
 #收集的日志路徑
 paths: 
 - /var/log/nginx/access.log
 #
 fields: #額外添加的字段 添加字段用來logstash輸出時(shí)判斷傳入哪個(gè)索引
 log_source: yg_access
 log_type: accesslog
?
 tags: ["yg-accesslog"] #分組標(biāo)志 該信息用于logstash對(duì)該組數(shù)據(jù)進(jìn)行處理
?
 #scan_frequency: 1s
 close_inactive: 1m
?
- type: log
?
 enabled: true
?
 paths:
 - /var/log/nginx/error.log
?
 fields:
 log_source: yg_error
 log_type: errorlog
?
 tags: ["yg-errorlog"]

 output.logstash:
 # The Logstash hosts 輸入到logstash
 hosts: ["172.16.1.1:5044"]

filebeat命令:

systemctl start filebeat              #啟動(dòng)filebeat服務(wù)
systemctl enable filebeat             #設(shè)置開機(jī)自啟動(dòng)
systemctl disable filebeat            #停止開機(jī)自啟動(dòng)
systemctl status filebeat             #查看服務(wù)當(dāng)前狀態(tài)
systemctl restart filebeat           #重新啟動(dòng)服務(wù)
3.3 logstash配置
docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -d --restart=always -v /usr/local/logstash:/etc/logstash -v /etc/localtime:/etc/localtime --name elk sebp/elk:624

參數(shù)介紹:

-p  指定容器和宿主機(jī)映射端口
 5601:  kibana服務(wù)端口 HTTP  (web訪問)
 9200: Elasticsearch 開發(fā)端口 HTTP,保存數(shù)據(jù)到Elasticsearch中使用
 5044: logstash  收集日志端口 TCP
-d 后臺(tái)運(yùn)行
--restart=always docker重啟是總是運(yùn)行
-v  掛載目錄 可以將logstash 的配置文件掛載在宿主機(jī)的目錄上,方便隨時(shí)修改,修改后的配置文件會(huì)同步到容器中。
 掛載 /etc/localtime 該目錄是為了保證容器和宿主機(jī)的時(shí)區(qū)相同。
 通過-v參數(shù),冒號(hào)前為宿主機(jī)目錄,必須為絕對(duì)路徑,冒號(hào)后為鏡像內(nèi)掛載的路徑。
 現(xiàn)在鏡像內(nèi)就可以共享宿主機(jī)里的文件了。

在/usr/local/文件夾下依次創(chuàng)建logstash/conf.d/logstash.conf

input {
    beats {
        port => 5044
    }
}

filter {
        if "yg-accesslog" in [tags] {
                 grok {
                        match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}\|%{IP:remote_addr}\|%{DATA:http_host}\|%{DATA:request_method}\|%{DATA:request_uri}\|%{DATA:server_protocol}\|%{NUMBER:status}\|(?:%{NUMBER:body_bytes_sent}|-)\|(?:%{DATA:http_referer}|-)\|%{DATA:http_user_agent}\|(?:%{DATA:request_time}|-)\|"}
                }
                mutate {
                        convert => ["status","integer"]
                        convert => ["body_bytes_sent","integer"]
                        convert => ["request_time","float"]
                }
                geoip {
                        source=>"remote_addr"
                }
                useragent {
                        source=>"http_user_agent"
                }
        }
        #如果需要可以一些errorlog的處理語句
}

output {
   if [fields][log_type] == "accesslog" {
        elasticsearch {
                hosts => ["127.0.0.1:9200"]
                index => "yg-nginx-accesslog" ##根據(jù)不同的日志存入不同的索引中
        }
   }
   if [fields][log_type] == "errorlog" {
        elasticsearch {
                hosts => ["127.0.0.1:9200"]
                index => "yg-nginx-errorlog" ##對(duì)應(yīng)es索引名
        }
   }
}

?。?!注意:grok中的正則如果不符合日志的格式,需要及時(shí)修改正則

grok正則在線驗(yàn)證地址:http://grokdebug.herokuapp.com

正則代表的含義:https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns

配置成功后,執(zhí)行如下命令重啟docker中的logstash (有時(shí)會(huì)重啟失敗,多試幾次吧)

docker exec elk /etc/init.d/logstash restart
3.4 kibana設(shè)置

在瀏覽器中輸入 http://ip:5601 進(jìn)入kibana

然后如下設(shè)置

kibana設(shè)置1.png

然后創(chuàng)建 index pattern

kibana設(shè)置2.png

然后選擇@timestamp


kibana設(shè)置3.png

最后在Discover標(biāo)簽頁就可以看到了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容