使用Docker搭建ELK日誌管理平臺

爲何要使用ELK呢?公司產品、項目賊多,部署到不一樣的服務器上,當系統出現故障時,工程師須要登陸到各個服務器上,使用 grep / sed / awk 等 Linux 腳本工具去日誌裏查找故障緣由。在沒有日誌系統的狀況下,首先須要定位處理請求的服務器,若是這臺服務器部署了多個實例,則須要去每一個應用實例的日誌目錄下去找日誌文件。每一個應用實例還會設置日誌滾動策略(如:天天生成一個文件),還有日誌壓縮歸檔策略等。這樣一系列流程下來,對於咱們排查故障以及及時找到故障緣由,形成了比較大的麻煩。所以,若是咱們能把這些日誌集中管理,並提供集中檢索功能,不只能夠提升診斷的效率,同時對系統狀況有個全面的理解,避免過後救火的被動。


準備工做

  • centos7.x
  • 內存要夠大(試水的能夠忽略,自定義啓動分配好內存就OJBK)~
  • 安裝docker(安裝教程:juejin.im/post/5b3a25…)

ELK鏡像下載與安裝

一、拉取ELK鏡像(阿里雲服務器仍是挺快的~)

docker pull sebp/elk
# 查看elk版本信息以下
docker inspect sebp/elk
複製代碼


二、啓動ELK容器

notes: 啓動前要保證內存足夠

默認啓動(內存佔用將會接近2G)nginx

docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk複製代碼

自定義啓動web

# 參數解釋:docker

TZ:默認Etc/UTC
ES_HEAP_SIZE:默認elaticsearch堆的最大值1G,最小值256M 
LS_HEAP_SIZE:默認Logstash的堆大小是500M
ELASTICSEARCH_START: 是否啓動elasticsearch, 0-不啓動 1-啓動
LOGSTASH_START:是否啓動Logstash, 0-不啓動 1-啓動
KIBANA_START:是否啓動Kibana, 0-不啓動 1-啓動複製代碼

# 端口:shell

5601:訪問Kibana的web端口
9200:elasticsearch API查詢接口
5044:Logstash Beats接口,接收來自Beats(如Filebeat)的日誌複製代碼

docker run 
-p 5601:5601 
-p 9200:9200 
-p 5044:5044 
-it 
-e TZ="Asia/Shanghai" 
-e ES_HEAP_SIZE="256m" 
-e LS_HEAP_SIZE="256m" 
--name elk sebp/elk複製代碼

啓動可能遇到的問題: centos

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] bash

解決辦法:服務器

 在/etc/sysctl.conf文件末尾添加配置vm.max_map_count=262144
網絡

移除ELK容器後重啓可能會出現以下問題: 
elasticsearch

service endpoint with name xxx already exists. 
解決辦法: 清理ELK容器的網絡佔用 
docker network disconnect --force bridge elk

三、訪問Kibana

tips: 服務器有防火牆firewall,請先開放端口5601再進行訪問。

firewall-cmd --zone=pubic --add-port=5601/tcp --permanent複製代碼

# 訪問以下端口:tcp

http://192.168.184.134:5601


# 至此則搭建完成~

Logstash模擬日誌輸出

# 進入ELK容器shell終端

docker exec -it elk /bin/bash複製代碼

# 打開Logstash日誌輸入控制檯

/opt/logstash/bin/logstash --path.data /tmp/logstash/data -e 'input{ stdin{} } output{ elasticsearch{hosts=>["localhost"]} }'複製代碼

Filebeat收集日誌


一、拉取Filebeat鏡像

docker pull docker.elastic.co/beats/filebeat:7.0.1複製代碼

二、創建初始環境:該setup命令加載用於寫入Elasticsearch的推薦索引模板,並部署示例儀表板以在Kibana中可視化數據。這是一次性設置步驟

docker run docker.elastic.co/beats/filebeat:7.0.1 setup -E setup.kibana.host=192.168.184.134:5601 -E output.elasticsearch.hosts=["192.168.184.134:9200"]複製代碼


三、Logstash配置

# 進入ELK容器shell終端

docker exec -it elk /bin/bash複製代碼

# 修改配置文件(/etc/logstash/conf.d/02-beats-input.conf)以下

input {
  beats {
    port => 5044
  }
}複製代碼

這裏刪除的ssl證書配置,由於此處不須要證書。

四、配置Filebeat收集Nginx日誌

#  建立配置文件以下: /opt/filebeat/filebeat.docker.yml 

filebeat:
  # 日誌輸入源
  inputs:
  - type: log
    enabled: true
    paths:
    - /var/log/nginx/*.log
# 日誌輸出源Logstash
output:
  logstash:    
    hosts: ["192.168.184.134:5044"] 複製代碼

# 啓動容器

docker run -d 
--name=filebeat 
--user=root 
# 配置文件(輸入、輸出、模塊nginx?)
--volume="/opt/filebeat/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" 
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" 
--volume="/var/run/docker.sock:/var/run/docker.sock:ro"
# 映射本地nginx日誌文件到docker容器 
--volume="/var/log/nginx:/var/log/nginx"
docker.elastic.co/beats/filebeat:7.0.1 
filebeat 
-e -strict.perms=false 複製代碼

docker run -d --name=filebeat --user=root --volume="/opt/filebeat/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" --volume="/var/run/docker.sock:/var/run/docker.sock:ro" --volume="/var/log/nginx:/var/log/nginx" docker.elastic.co/beats/filebeat:7.0.1 filebeat -e -strict.perms=false複製代碼

# 打開Kibana -> Logs查詢nginx日誌

五、配置Filebeat收集Docker應用日誌

# 建立配置文件以下: /opt/filebeat/filebeat.docker.yml (收集鏡像名爲gold的全部容器的日誌)

filebeat.autodiscover:  
 providers:  
 - type: docker    
    hints.enabled: true    
 templates:    
 - condition:        
 contains:          
        docker.container.image: gold
output:  
 logstash:    
 hosts: ["192.168.184.134:5044"]複製代碼

# 啓動Filebeat容器

docker run -d 
--name=filebeat-gold
--user=root 
# 掛載本地配置文件(輸入、輸出、模塊nginx?)
--volume="/opt/gold/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" 
# 掛載容器
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" 
--volume="/var/run/docker.sock:/var/run/docker.sock:ro"
docker.elastic.co/beats/filebeat:7.0.1 
filebeat 
-e -strict.perms=false 複製代碼

docker run -d --name=filebeat-gold --user=root --volume="/opt/gold/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" --volume="/var/run/docker.sock:/var/run/docker.sock:ro" docker.elastic.co/beats/filebeat:7.0.1 filebeat -e -strict.perms=false  複製代碼

# 打開Kibana查看gold日誌



                                    

相關文章
相關標籤/搜索