1. 程式人生 > 實用技巧 >Elastic Stack(ElasticSearch 、 Kibana 和 Logstash) 實現日誌的自動採集、搜尋和分析

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