ELK

January 1, 0001

ELK

ELK 是指 ElasticSearch 、 Logstash 和 Kibana 三個 open-source 的集合套件,這三個軟體可以組成一套日誌(log)分析架構。

如今資料量動輒 “T” 或幾個 “P” 等級的數據,正常的文字編輯器或數據處理軟體等工具往往都難以應對,但對原始的大數據進行分析,能提高對數據的洞察力。ELK 可以對大量Log 的數據處理,如索引、分析,當對這大量進行良好的控管,將可以依照這些數據得到一些有用的資訊。

Log

我是應用在 Log 的蒐集上因此小提一下 Log。

Log 就是系統或設備在連線和運作時所產生的記錄,藉由 Log 的蒐集和分析,讓 IT 人員能夠監控系統的運作狀態,判斷可能發生的事件,以及分析資料存取行為和使用者的活動。

網路是否遭到惡意的嘗試入侵? 系統和網路運作是否有異常情況發生? IT 人員只要對 Log 進行監控,就可以判斷可能的問題,或著狀況不清楚時,透過 Log 的查詢分析,可在較短時間內找出原因。

架構

核心架構介紹

Elasticsearch

Logstash

資料進入 logstash 流程

其中 Data Source 可以是 beat 或讀檔等方式傳入 Logstash,在 filter 部分可以處裡傳入的數據,最橫在把資訊傳至 Elasticsearch。

Kibana

GUI

實作

環境

安裝環境

Docker
$ sudo apt-get update
$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
Docker-compose
$ sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

定義 ELK Docker-compose

version: '3'

services:

  elasticsearch:
    build:
      context: elasticsearch/
      args:
        ELK_VERSION: $ELK_VERSION
    container_name: elasticsearch
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      ES_JAVA_OPTS: "-Xmx1024m -Xms1024m"
    networks:
      - elk

  logstash:
    build:
      context: logstash/
      args:
        ELK_VERSION: $ELK_VERSION
    container_name: logstash
    volumes:
      - ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro
      - ./logstash/config/pipelines.yml:/usr/share/logstash/config/pipelines.yml:ro
      - ./logstash/pipeline:/usr/share/logstash/pipeline:ro
      - ./logstash/DataSet:/usr/share/logstash/DataSet:ro
    ports:
      - "5001:5001"
      - "9600:9600"
    environment:
      LS_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk
    depends_on:
      - elasticsearch

  kibana:
    build:
      context: kibana/
      args:
        ELK_VERSION: $ELK_VERSION
    container_name: kibana
    volumes:
      - ./kibana/config/:/usr/share/kibana/config:ro
    ports:
      - "5601:5601"
    networks:
      - elk
    depends_on:
      - elasticsearch

networks:
  elk:
    driver: bridge

關於 docker-compose 可參考 本人 Docker-elk,會更上述的 docker-compose 不一樣,本人有新增其它服務。

$ELK_VERSION 是從 .env 定義。可參考environment-variables

Run

進入 docker-compose.yml 檔案該層目錄執行以下。否則需要使用 -f 來指定 docker-compose.yml 位置。

$ sudo docker-compose up -d --build

ELK Port

Kibana 瀏覽

http://localhost:5601

測試 logstash TCP input

$ nc localhost 5001 < a.txt

檢查 kibana 上是否有索引出現

接著建立索引,按下 “Next step”

選擇時間戳,按下 “Create index pattern”

點選 Discover 即可看見,藉由 logstash 傳到 elasticsearch,kibana 再從 elastcsearch 抓出資料顯示。

結論

以上建立好基本上資料傳遞都會成功,之後會介紹 logstahs 讀檔以及一些 beat 的應用。目前還會研究 Elasticsearch 的叢集和 logstash 結合 redis 軟體這些叫細節的規劃。

其實 ELK 這開源的軟體,我是透過電算老師介紹,當初我是利用 rsyslog 來進行 log 蒐集,後來發現覺得好不人性化。 因此,就像恩人請求辦法,最後也認識了 ELK 三個開源的軟體。