ELK學習記錄

從這篇文章瞭解到ELK的基本信息:https://www.cnblogs.com/kevingrace/p/5919021.html

 

自己做的一些事:

1、使用docker搭建ELK,https://github.com/deviantony/docker-elk#how-can-i-persist-elasticsearch-data

從github上clone該倉庫,在倉庫目錄下使用docker-compose命令即可一鍵搭建ELK三個軟件

docker-compose up

ELK的docker-compose文件:

version: '2'

services:

  elasticsearch:
    build:
      context: elasticsearch/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
      - /home/elk/elk-storage:/usr/share/elasticsearch/data  #新增的一行,用於掛載數據文件
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      ES_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk

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

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

networks:

  elk:
    driver: bridge

可以通過文件看出,將多個端口從容器中映射了出來,所以你需要保證這些端口沒有被其他服務所佔用:9200、9300、5000、9600、5601,至於8888端口那是我認爲添加的多暴露出來的一個端口,詳情請見第二節。

2、logstash使用syslog協議作爲input

通過上面的docker-compose文件可以看出,將logstash的yml配置文件掛載到了宿主機,所以可以通過該文件來修改針對logstash的配置:

input {
        tcp {
                port => 5000
        }
}

input{
        syslog{
       port => 8888
    }

}

## Add your filters / logstash plugins configuration here

output {
        elasticsearch {
                hosts => "elasticsearch:9200"
        }
}

第一個INPUT爲監聽tcp 5000端口作爲日誌輸入,第二個INPUT爲使用syslog協議監聽8888端口作爲日誌輸入,OUTPUT爲將日誌輸出到elasticsearch。

3、將elasticsearch數據持久化存儲

根據github文檔描述及我自己測試結果發現,elasticsearch的docker-compose配置默認沒有將數據持久化存儲,如果容器elasticsearch的容器關閉未刪除,那麼數據仍然存在,但如果刪除了容器,數據就沒了,所以需要將數據持久化存儲:

- /home/elk/elk-storage:/usr/share/elasticsearch/data  #新增的一行,用於掛載數據文件

也就是這一行,將容器內的/usr/share/elasticsearch/data掛載到宿主機的/home/elk/elk-storage

存在的問題:由於elasticsearch容器內使用的用戶uid爲1000,而宿主機大概率都是用的root用戶把!?而你剛纔手動創建的用於掛載數據的文件夾也會屬於root用戶,這將導致elasticsearch沒有權限對文件進行寫入。

解決方法:

groupadd -g 1001 elk  # 創建一個用戶組,名字爲elk,用戶組ID爲1001,這個ID隨意
useradd -g 1001 -u 1000 elaticsearch # 創建一個用戶,屬於elk組,用戶ID爲1000,這個ID必須爲1000,與elasticsearch容器內的uid保持一致
chgrp elk elk-storage/ # 將目錄所屬權劃爲elk組
chown elaticsearch elk-storage # 將目錄所屬權劃給elaticsearch用戶

創建完畢後,使用docker-compose down命令銷燬容器,再使用docker-compose up命令重新創建即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章