Elastic Stack(ElasticSearch 、 Kibana 和 Logstash) 實現日誌的自動採集、搜尋和分析
Elastic Stack 包括 Elasticsearch、Kibana、Beats 和 Logstash(也稱為 ELK Stack)。能夠安全可靠地獲取任何來源、任何格式的資料,然後實時地對資料進行搜尋、分析和視覺化
Elasticsearch
是一個分散式、RESTful 風格的搜尋和資料分析引擎
Kibana
是一個免費且開放的使用者介面,能夠讓您對 Elasticsearch 資料進行視覺化管理和展示
Beats
是一個免費且開放的平臺,集合了多種單一用途資料採集器,將資料傳送給 Logstash 或 Elasticsearch
Logstash
是一個免費且開放的伺服器端資料處理管道,能夠從多個來源採集資料,轉換資料,然後將資料傳送到您最喜歡的“儲存庫”中
一、下載鐿像(image)
搜尋鐿像(image)
docker search elasticsearch
docker search kibana
docker search logstash
獲取鐿像(image)
docker pull elasticsearch:7.6.0 #映象名稱:Tag
docker pull kibana:7.6.0 #映象名稱:Tag
docker pull logstash:7.6.0 #映象名稱:Tag
注:版本要統一
二、建立 ELK.yml
ELK.yml
version: "3.5" services: elasticsearch: container_name: elasticsearch image: elasticsearch:7.6.0 #鐿像(image) restart: always #重啟方式 environment: discovery.type: single-node #環境變數:執行模式 單例 ports: - "9200:9200" #埠對映 - "9300:9300" kibana: container_name: kibana image: kibana:7.6.0 #鐿像(image) restart: always #重啟方式 environment: I18N_LOCALE: "zh-CN" #指定中文 ports: - "5601:5601" #埠對映 logstash: container_name: logstash image: logstash:7.6.0 restart: always volumes: #資料夾對映,本地:容器 - "/Users/iChochy/logs:/usr/share/logstash/logs" ports: - "5044:5044" - "9600:9600"
volumes
自定義監控的資料夾
注:注意YML檔案編寫,不要出現 Tab 製表符,否則導致檔案解析錯誤,啟動容器(container)失敗
# 錯誤資訊
yaml.scanner.ScannerError: mapping values are not allowed here
三、執行容器
宿主機hosts
中新增
127.0.0.1 elasticsearch
命令啟動
docker-compose -f ELK.yml up -d
docker-compose -f #指定構建檔案 up #建立並啟動容器 -d #後臺執行容器(container),列印容器(container)ID
四、檢查容器的執行狀態
elasticsearch 訪問:http://127.0.0.1:9200
logstash 訪問:http://127.0.0.1:9600
Kibana 訪問:http://127.0.0.1:5601,進入 Kibana
執行docker ps
查詢容器執行狀態,可以檢視到容器的ID
mleo$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1b8cb2effede logstash:7.6.0 "/usr/local/bin/dock…" 2 hours ago Up About an hour 0.0.0.0:5044->5044/tcp, 0.0.0.0:9600->9600/tcp logstash
69b8bc678e4e kibana:7.6.0 "/usr/local/bin/dumb…" 3 weeks ago Up 2 hours 0.0.0.0:5601->5601/tcp kibana
8c655f5b7493 elasticsearch:7.6.0 "/usr/local/bin/dock…" 3 weeks ago Up 2 hours 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch
執行docker logs id
檢視容器執行日誌
例:持續檢視logstash日誌
docker logs 1b8cb2effede -f
五、修改logstash配置,監控日誌檔案
- 執行
docker exec -it 1b8cb2effede bash
進入logstash - 執行
vi pipeline/logstash.conf
修改logstash預設配置
input {
beats {
port => 5044
}
file {
path => "/usr/share/logstash/logs/*" #監控的檔案路徑
}
}
output {
stdout {
codec => rubydebug
}
elasticsearch {
hosts => ["http://elasticsearch:9200"] #elasticsearch請求地址
index => "ichochy" #索引名稱
}
}
- 執行
docker restart 1b8cb2effede
重啟 logstash
六、採集日誌
在logstash的監控的檔案路徑下動態新增日誌檔案,日誌就可以自動採集到 elasticsearch
touch web.log #建立日誌檔案
echo "www.ichochy.com" > web.log #新增日誌資訊
檢視 logstash 日誌資訊可以看到列印的日誌
{
"@version" => "1",
"path" => "/usr/share/logstash/logs/web.log",
"host" => "1b8cb2effede",
"@timestamp" => 2020-07-10T14:07:16.633Z,
"message" => "www.ichochy.com"
}
七、搜尋、分析日誌
訪問:http://127.0.0.1:5601,進入 Kibana
在Discover
可以看到剛剛新增進來的日誌資料,開始表演…………
聯絡方式:
郵箱:[email protected]
網站:https://www.ichochy.com
源文:https://www.ichochy.com/blog/2020/07/10/ElasticStack實現日誌的自動採集搜尋和分析.html