天天看點

Ubuntu部署ELK Stack(包含在Docker環境下的部署)

搭建ELK Stack

​ 使用logstash收集docker容器産生的日志,并對日志過濾、處理等,最後上傳到elasticsearch”存儲庫“中,kibana進行可視化管理,讓使用者在Elasticsearch中使用圖形和圖表對資料進行可視化。

​ 在安裝ELK之前,首先確定主機安裝java 1.8.0以上版本(java -version),如果沒有的話,通過apt install進行安裝。如果隻想在docker中運作Elk,跳過本地安裝elk的方法,請直接下拉至Run ElkStack on Docker。

Logstash

# download and install the public signing key
wget -qO - https://artifacts.elastic.co/GPE-KEY-elasticsearch | sudo apt-key add -
# install the apt-transport-https package on debian
sudo apt-get install apt-transport-https
# save the repository definition to /etc/apt/sources.list.d/elastic-7.x.list
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install logstash
           
#####     配置logstash.conf
           

​ 在/etc/logstash/conf.d/目錄下,添加配置檔案

​ 此處超連結為官方文檔用以參考

​ Configuring Logstash

​ 本文檔中的配置檔案僅供參考,請使用ctrl+F尋找logstash-simple.conf

​ 注:在filter中使用正則,注意需要雙引号時,将雙引号用單引号包起來( ‘ ” ’ )。

Elasticsearch

# download and install the public signing key:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch
           

Kibana

sudo apt-get update && sudo apt-get install kibana
           

Run ElkStack on Docker

​ 首先假設電腦上已經有docker,且已經安裝了docker-compose,如果沒有安裝docker-compose,參考一下指令。

# Linux 64直接下載下傳編譯好的二進制檔案
sudo curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 給二進制檔案可執行權限
sudo chmod +x /usr/local/bin/docker-compose
# 補全指令
curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
           

​ 我們使用docker-compose來代替指令行啟動鏡像的方式(docker run --…)。在這裡我們使用docker-compose分别啟動logstash、elasticsearch、kibana三個鏡像,并對其運作條件進行配置。

拉取鏡像
docker pull docker.elastic.co/logstash/logstash:7.4.2
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.4.2
docker pull docker.elastic.co/kibana/kibana:7.4.2
           

​ 這是一個漫長的過程,由于elastic鏡像源總是連接配接不穩定。我找到了網上推薦的鏡像庫,供參考(能供官方的還是使用官方提供的鏡像)

# vi /etc/docker/daemon.json 添加以下資訊
{
    ...
    "registry-mirrors": [
      "https://dockerhub.azk8s.cn", # Azure中國鏡像
      "https://reg-mirror.qiniu.com", # 七牛雲加速器
      "https://regisrty.docker-cn.com", # docker國内官方源
      "http://hub-mirror.c.162.com", # 網易鏡像
      "https://docker.mirrors.ustc.edu.cn", # 中科大
      "https://cr.console.aliyun.com/" # 阿裡鏡像
	]
    ...
}
           
配置docker-compose

​ 直接上文檔:

version: '3.5'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2
    container_name: es01
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
        #- certs: $CERTS_DIR
    ports:
      - 9200:9200
    networks:
      - elastic

  kib01:
    image: docker.elastic.co/kibana/kibana:7.4.2
    container_name: kib01
    ports:
      - 5601:5601
    environment:
      ELASTICSEARCH_URL: http://elasticsearch:9200
      ELASTICSEARCH_HOSTS: http://elasticsearch:9200
    depends_on:
      - elasticsearch
    networks:
      - elastic

  logstash:
    image: docker.elastic.co/logstash/logstash:7.4.2
    container_name: logt
    ports:
      - 127.0.0.1:12201:12201/udp
    environment:
      ES_URL_LOGSTASH: http://elasticsearch:9200
      # 映射logstash的配置檔案
    volumes:
      - ./elk_stack/logstash/conf/logstash.yml:/usr/share/logstash/config/logstash.yml
      - ./elk_stack/logstash/conf/logstash-simple.conf:/usr/share/logstash/pipeline/logstash.conf
    depends_on:
      - elasticsearch
    networks:
      - elastic

volumes:
  data01:
    driver: local

networks:
  elastic:
    name: elastic
    driver: bridge
           

​ 注:由于docker-compose高版本将不支援links,故使用networks将ELK設定為統一網段,但并不能代替links所有功能,有需要請參考官方文檔

logstash.yml

# 0.0.0.0為官網配置
# http.host: 0.0.0.0
http.host: 127.0.0.1
xpack.monitoring.elasticsearch.hosts:
- http://elasticsearch:9200
xpack.monitoring.enabled: true
           

logstash-simple.conf

input {
  gelf{
    use_udp => true
    port_udp => 12201
    id => "my_plugin_id"
  }
}
filter { } # 因事而異
output {
  stdout { codec => rubydebug }
  elasticsearch {
    hosts => "${ES_URL_LOGSTASH}" # 若logstash做單獨使用,而非docker-compose方式,請按該參數所對應的hosts修改
    index => "logstash-%{+yyyy.MM.dd}"
  }
}
           

​ 注:将logstash-simple.conf的input,docker networks,日志發送方發送時的hosts保持一緻。

使用

curl http://localhost:9200

檢測elasticsearch是否運作成功

[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-msoiFDpx-1576634623194)(C:\Users\liuhq\AppData\Roaming\Typora\typora-user-images\image-20191203181503394.png)]

運作docker應用發送日志

此時進入正在運作的容器logt可以看到stdout的輸出

docker attach logt
           
使用Kibana檢視

–log-driver gelf --log-opt gelf-address=udp://localhost:12201 --network=elastic --name=test001

此時進入正在運作的容器logt可以看到stdout的輸出

```bash
docker attach logt
           
使用Kibana檢視

打開Elk所在主機的浏覽器,輸入

localhost:5601

點選右下角Management按鈕,在Kibana下點選Index Patterns,Creat index pattern,如果Kibana檢測到已經存在Index會自動列出,此時輸入與之對應的Index-name-建立Index(在本文檔中使用為[email protected])。具體參考官方文檔 (建立索引) 和 另一個 官方文檔 (檢索)。

繼續閱讀