利用ELK搭建Docker容器化應用日誌中心

技術小能手發表於2018-07-30

概述

應用一旦容器化以後,需要考慮的就是如何採集位於 Docker 容器中的應用程式的列印日誌供運維分析。典型的比如SpringBoot應用的日誌收集。

本文即將闡述如何利用ELK日誌中心來收集容器化應用程式所產生的日誌,並且可以用視覺化的方式對日誌進行查詢與分析,其架構如下圖所示:

image

架構圖

映象準備

image

  • ElasticSearch映象
  • Logstash映象
  • Kibana映象
  • Nginx映象(作為容器化應用來生產日誌)

開啟Linux系統Rsyslog服務

修改Rsyslog服務配置檔案:

vim /etc/rsyslog.conf

開啟下面三個引數:

$ModLoad imtcp
$InputTCPServerRun 514

@@localhost:4560

image

開啟3個引數

意圖很簡單:讓Rsyslog載入imtcp模組並監聽514埠,然後將Rsyslog中收集的資料轉發到本地4560埠!

然後重啟Rsyslog服務:

systemctl restart rsyslog

檢視rsyslog啟動狀態:

netstat -tnl

image

部署ElasticSearch服務

*docker run -d -p 9200:9200
-v ~/elasticsearch/data:/usr/share/elasticsearch/data
–name elasticsearch elasticsearch*

image

部署Logstash服務

新增 ~/logstash/logstash.conf 配置檔案如下:

input {
  syslog {
    type => "rsyslog"
    port => 4560
  }
}

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

配置中我們讓Logstash從本地的Rsyslog服務中取出應用日誌資料,然後轉發到ElasticSearch資料庫中!

配置完成以後,可以通過如下命令來啟動Logstash容器:

docker run -d -p 4560:4560 
-v ~/logstash/logstash.conf:/etc/logstash.conf 
--link elasticsearch:elasticsearch 
--name logstash logstash 
logstash -f /etc/logstash.conf

部署Kibana服務

*docker run -d -p 5601:5601
–link elasticsearch:elasticsearch
-e ELASTICSEARCH_URL=http://elasticsearch:9200
–name kibana kibana*

image

啟動nginx容器來生產日誌

*docker run -d -p 90:80 –log-driver syslog –log-opt
syslog-address=tcp://localhost:514
–log-opt tag=”nginx” –name nginx nginx*

很明顯Docker容器中的Nginx應用日誌轉發到本地syslog服務中,然後由syslog服務將資料轉給Logstash進行收集。

至此,日誌中心搭建完畢,目前一共四個容器在工作:

image

實驗驗證

  • 瀏覽器開啟 localhost:90 來開啟Nginx介面,並重新整理幾次,讓後臺產生GET請求的日誌
  • 開啟 Kibana 視覺化介面:localhost:5601

image

  • 收集 Nginx 應用日誌

image

  • 查詢應用日誌

在查詢框中輸入program=nginx可查詢出特定日誌

image

查詢應用日誌

原文釋出時間為:2018-07-30
本文作者:王帥
本文來自雲棲社群合作伙伴“高效運維”,瞭解相關資訊可以關注“高效運維


相關文章