日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
一文帶你搭建一套ELKStack日志平臺(tái)

前言

專(zhuān)門(mén)實(shí)操了一波,這玩意看起來(lái)簡(jiǎn)單,但是里面的流程步驟還是很多的,而且遇到了很多坑。在此記錄和總結(jié)下。

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的南康網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

本文亮點(diǎn):一步一圖、帶有實(shí)操案例、踩坑記錄、與開(kāi)發(fā)環(huán)境的日志結(jié)合,反映真實(shí)的日志場(chǎng)景。

日志收集平臺(tái)有多種組合方式:

  • ELK Stack 方式:Elasticsearch + Logstash + Filebeat + Kibana,業(yè)界最常見(jiàn)的架構(gòu)。
  • Elasticsearch + Logstash + Kafka + Kibana,用上了消息中間件,但里面也有很多坑,放到下一講。

這次先講解 ELK Stack 的方式,這種方式對(duì)我們的代碼無(wú)侵入,核心思想就是收集磁盤(pán)的日志文件,然后導(dǎo)入到 Elasticsearch。

比如我們的應(yīng)用系統(tǒng)通過(guò) logback 把日志寫(xiě)入到磁盤(pán)文件,然后通過(guò)這一套組合的中間件就能把日志采集起來(lái)供我們查詢使用了。

整體的架構(gòu)圖如下所示:

流程如下:

  • 先使用 Filebeat 把日志收集起來(lái),然后把數(shù)據(jù)再傳給 Logstash。
  • 通過(guò) Logstash 強(qiáng)大的數(shù)據(jù)清洗功能。
  • 最終把數(shù)據(jù)寫(xiě)入到 Elasticsearch 中。
  • 并由 Kibana 進(jìn)行可視化。

溫馨提示:以下案例都在一臺(tái) ubuntu 虛擬機(jī)上完成,內(nèi)存分配了 6G。

一、部署 Elasticsearch

數(shù)據(jù)庫(kù)獲取 elasticsearch 鏡像:

docker pull elasticsearch:7.7.1

創(chuàng)建掛載目錄:

mkdir -p /data/elk/es/{config,data,logs}

賦予權(quán)限:

chown -R 1000:1000 /data/elk/es

創(chuàng)建配置文件:

cd /data/elk/es/config
touch elasticsearch.yml
-----------------------配置內(nèi)容----------------------------------
cluster.name: "my-es"
network.host: 0.0.0.0
http.port: 9200

啟動(dòng) elasticsearch 容器:

docker run -it  -d -p 9200:9200 -p 9300:9300 --name es -e ES_JAVA_OPTS="-Xms1g -Xmx1g" -e "discovery.type=single-node" --restart=always -v /data/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/elk/es/data:/usr/share/elasticsearch/data -v /data/elk/es/logs:/usr/share/elasticsearch/logs elasticsearch:7.7.1

驗(yàn)證 elasticsearch 是否啟動(dòng)成功:

curl http://localhost:9200

二、部署 Kibana 可視化工具

2.1 安裝 Kibana

獲取 kibana 鏡像:

docker pull kibana:7.7.1

獲取elasticsearch容器 ip:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' es

結(jié)果:172.17.0.2;

創(chuàng)建 kibana 配置文件:

mkdir -p /data/elk/kibana/
vim /data/elk/kibana/kibana.yml

配置內(nèi)容:

#Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
elasticsearch.hosts: ["http://172.17.0.2:9200"]
xpack.monitoring.ui.container.elasticsearch.enabled: true

2.2 運(yùn)行 kibana

docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name kibana -p 5601:5601 -v /data/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.7.1

訪問(wèn) http://192.168.56.10:5601。這個(gè) IP 是服務(wù)器的 IP。Kibana 控制臺(tái)的界面如下所示,打開(kāi) kibana 時(shí),首頁(yè)會(huì)提示讓你選擇加入一些測(cè)試數(shù)據(jù),點(diǎn)擊 try our sample data 按鈕就可以了。

Kibana 界面上會(huì)提示你是否導(dǎo)入樣例數(shù)據(jù),選一個(gè)后,Kibana 會(huì)幫你自動(dòng)導(dǎo)入,然后就可以進(jìn)入到 Discover 窗口搜索日志了。

image-20220427161645270

三、部署 logstash 日志過(guò)濾、轉(zhuǎn)換工具

3.1 安裝 Java JDK

$ sudo apt install openjdk-8-jdk

修改 /etc/profile 文件:

sudo vim /etc/profile

添加如下的內(nèi)容到你的 .profile 文件中:

# JAVA
JAVA_HOME="/usr/lib/jdk/jdk-12"
PATH="$PATH:$JAVA_HOME/bin"

再在命令行中打入如下的命令:

source /etc/profile

查看 java 是否配置成功:

java -version

3.2 安裝 logstash

下載 logstash 安裝包:

curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-7.7.1.tar.gz

解壓安裝:

tar -xzvf logstash-7.7.1.tar.gz

要測(cè)試 Logstash 安裝,請(qǐng)運(yùn)行最基本的 Logstash 管道。例如:

cd logstash-7.7.1
bin/logstash -e 'input { stdin { } } output { stdout {} }'

等 Logstash 完成啟動(dòng)后,我們?cè)?stdin 里輸入以下文字,我們可以看到如下的輸出:

當(dāng)我們打入一行字符然后回車(chē),那么我們馬上可以在 stdout 上看到輸出的信息。如果我們能看到這個(gè)輸出,說(shuō)明我們的 Logstash 的安裝是成功的。

我們進(jìn)入到 Logstash 安裝目錄,并修改 config/logstash.yml 文件。我們把 config.reload.automatic 設(shè)置為 true。

另外一種運(yùn)行 Logstash 的方式,也是一種最為常見(jiàn)的運(yùn)行方式,運(yùn)行時(shí)指定 logstash 配置文件。

3.3 配置 logstash

Logstash 配置文件有兩個(gè)必需元素,輸入(inputs)和輸出(ouputs),以及一個(gè)可選元素 filters。輸入插件配置來(lái)源數(shù)據(jù),過(guò)濾器插件在你指定時(shí)修改數(shù)據(jù),輸出插件將數(shù)據(jù)寫(xiě)入目標(biāo)。

我們首先需要?jiǎng)?chuàng)建一個(gè)配置文件,配置內(nèi)容如下圖所示:

創(chuàng)建 kibana 配置文件 weblog.conf:

mkdir -p /logstash-7.7.1/streamconf
vim /logstash-7.7.1/streamconf/weblog.conf

配置內(nèi)容如下:

input {
tcp {
port => 9900
}
}

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

mutate {
convert => {
"bytes" => "integer"
}
}

geoip {
source => "clientip"
}

useragent {
source => "agent"
target => "useragent"
}

date {
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
}
}

output {
stdout { }

elasticsearch {
hosts => ["localhost:9200"]
}
}

在上面,我們同時(shí)保留兩個(gè)輸出:stdout 及 elasticsearch。事實(shí)上,我們可以定義很多個(gè)的輸出。stdout 輸出對(duì)于我們初期的調(diào)試是非常有幫助的。等我們完善了所有的調(diào)試,我們可以把上面的 stdout 輸出關(guān)掉。

等更新完這個(gè)配置文件后,我們?cè)诹硗庖粋€(gè) console 中發(fā)送第一個(gè) log:

head -n 1 weblog-sample.log | nc localhost 9900

這個(gè)命令的意思:我們使用 nc 應(yīng)用讀取第一行數(shù)據(jù),然后發(fā)送到 TCP 端口號(hào) 9900,并查看 console 的輸出。

這里的 weblog-sample.log 為樣例數(shù)據(jù),內(nèi)容如下,把它放到本地作為日志文件。

14.49.42.25 - - [12/May/2019:01:24:44 +0000] "GET /articles/ppp-over-ssh/ 
HTTP/1.1" 200 18586 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US;
rv:1.9.2b1) Gecko/20091014 Firefox/3.6b1 GTB5"

logstash 控制臺(tái)打印出了 weblog-samle.log 中的內(nèi)容:

這一次,我們打開(kāi) Kibana,執(zhí)行命令,成功看到 es 中的這條記錄。

GET logstash/_search

四、部署 Filebeat 日志收集工具

4.1 安裝 Filebeat

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.7.1-linux-x86_64.tar.gz
tar xzvf filebeat-7.7.1-linux-x86_64.tar.gz

請(qǐng)注意:由于 ELK 迭代比較快,我們可以把上面的版本 7.7.1 替換成我們需要的版本即可。我們先不要運(yùn)行 Filebeat。

4.2 配置 Filebeat

我們?cè)?Filebeat 的安裝目錄下,可以創(chuàng)建一個(gè)這樣的 filebeat_apache.yml 文件,它的內(nèi)容如下,首先先讓 filebeat 直接將日志文件導(dǎo)入到 elasticsearch,來(lái)確認(rèn) filebeat 是否正常工作。

filebeat.inputs:
- type: log
enabled: true
paths:
- /home/vagrant/logs/*.log

output.elasticsearch:
hosts: ["192.168.56.10:9200"]

paths 對(duì)應(yīng)你的日志文件夾路徑,我配置的是這個(gè):/home/vagrant/logs/*.log,之前配置成 /home/vagrant/logs 不能正常收集。另外這里可以放入多個(gè)日志路徑。

4.3 測(cè)試 Filebeat

在使用時(shí),你先要啟動(dòng) Logstash,然后再啟動(dòng) Filebeat。

bin/logstash -f weblog.conf

然后,再運(yùn)行 Filebeat, -c 表示運(yùn)行指定的配置文件,這里是 filebeat_apache.yml。

./filebeat -e -c filebeat_apache.yml

運(yùn)行結(jié)果如下所示,一定要確認(rèn)下控制臺(tái)中是否打印了加載和監(jiān)控了我們指定的日志。如下圖所示,有三個(gè)日志文件被監(jiān)控到了:error.log、info.log、debug.log

我們可以通過(guò)這個(gè)命令查看 filebeat 的日志是否導(dǎo)入成功了:

curl http://localhost:9200/_cat/indices?v

這個(gè)命令會(huì)查詢 Elasticsearch 中所有的索引,如下圖所示,filebeat-7.7.1-* 索引創(chuàng)建成功了。因?yàn)槲覜](méi)有配置索引的名字,所以這個(gè)索引的名字是默認(rèn)的。

在 kibana 中搜索日志,可以看到導(dǎo)入的 error 的日志了。不過(guò)我們先得在 kibana 中創(chuàng)建 filebeat 的索引(點(diǎn)擊 create index pattern 按鈕,然后輸入 filebeat 關(guān)鍵字,添加這個(gè)索引),然后才能在 kibana 的 Discover 控制臺(tái)查詢?nèi)罩尽?/p>

創(chuàng)建查詢的索引

搜索日志

4.4 Filebeat + Logstash

接下來(lái)我們配置 filebeat 收集日志后,輸出到 logstash,然后由 logstash 轉(zhuǎn)換數(shù)據(jù)后輸出到 elasticsearch。

filebeat.inputs:

- type: log
enabled: true
paths:
- /home/vagrant/logs/*.log

output.logstash:
hosts: ["localhost:9900"]

修改 logstash 配置文件:

vim /logstash-7.7.1/streamconf/weblog.conf

配置了 input 為 beats,修改了 useragent:

input {  
beats {
port => "9900"
}
}

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

mutate {
convert => {
"bytes" => "integer"
}
}

geoip {
source => "clientip"
}

useragent {
source => "user_agent"
target => "useragent"
}

date {
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
}
}

output {
stdout {
codec => dots {}
}

elasticsearch {
hosts=>["192.168.56.10:9200"]
index => "apache_elastic_example"
}
}

然后重新啟動(dòng) logstash 和 filebeat。有個(gè)問(wèn)題,這次啟動(dòng) filebeat 的時(shí)候,只監(jiān)測(cè)到了一個(gè) info.log 文件,而 error.log 和 debug.log 沒(méi)有監(jiān)測(cè)到,導(dǎo)致只有 info.log 導(dǎo)入到了 Elasticsearch 中。

filebeat 只監(jiān)測(cè)到了 info.log 文件

logstash 輸出結(jié)果如下,會(huì)有格式化后的日志:

我們?cè)?Kibana dev tools 中可以看到索引 apache_elastic_example,說(shuō)明索引創(chuàng)建成功,日志也導(dǎo)入到了 elasticsearch 中。

另外注意下 logstash 中的 grok 過(guò)濾器,指定的 message 的格式需要和自己的日志的格式相匹配,這樣才能將我們的日志內(nèi)容正確映射到 message 字段上。

例如我的 logback 的配置信息如下:

logback 配置

而我的 logstash 配置如下,和 logback 的 pettern 是一致的。

grok {
match => { "message" => "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n" }
}

然后我們?cè)?es 中就能看到日志文件中的信息了。如下圖所示:

至此,Elasticsearch + Logstash + Kibana + Filebeat 部署成功,可以愉快地查詢?nèi)罩玖藒

后續(xù)升級(jí)方案:

  • 加上 Kafka。
  • 加上 Grafana 監(jiān)控。
  • 鏈路追蹤。

五、遇到的問(wèn)題和解決方案

5.1 拉取 kibana 鏡像失敗

failed to register layer: Error processing tar file(exit status 2): fatal error: runtime: out of memory

原因是 inodes 資源耗盡 , 清理一下即可:

df -i
sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
curl -s https://raw.githubusercontent.com/ZZROTDesign/docker-clean/v2.0.4/docker-clean |
sudo tee /usr/local/bin/docker-clean > /dev/null && \
sudo chmod +x /usr/local/bin/docker-clean
docker-clean

5.2 拉取 kibana 鏡像失敗

docker pull runtime: out of memory

增加虛擬機(jī)內(nèi)存大小。

5.3 Kibana 無(wú)法啟動(dòng)

"License information could not be obtained from Elasticsearch due to Error: No Living connections error"}

看下配置的 IP 地址是不是容器的 IP。


標(biāo)題名稱(chēng):一文帶你搭建一套ELKStack日志平臺(tái)
網(wǎng)站鏈接:http://www.5511xx.com/article/coidoge.html