天天看點

基于log-pilot收集Docker容器日志實戰前言下載下傳鏡像建立log-pilot容器建立測試容器建立index pattern總結

前言

通常在使用容器部署應用,特别是借助

Kubernetes

雲平台管理及部署應用時,需要收集各個應用的控制台标準輸出及日志檔案,統一輸出到

Elasticsearch

,并由

Kibana

進行可視化展示。

其中一個方案是使用

log-pilot

進行容器日志收集,并輸出到

Elasticsearch

log-pilot

是由阿裡雲提供,但是從其GitHub代碼倉庫的送出記錄可以看出,目前已經處于停止維護的狀态,其支援的

Elasticsearch

版本也隻到

6.x

,對于較新的版本

7.x

,從實驗結果看是不支援的。

是以本文将使用

Elasticsearch

6.8.18

版本進行安裝實驗,關于

Elasticsearch

的安裝步驟,請參考另一篇博文。

下載下傳鏡像

docker pull registry.cn-hangzhou.aliyuncs.com/acs/log-pilot:0.9.5-filebeat
           

建立log-pilot容器

docker run -it --name log-pilot \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /:/host \
    --privileged \
    -e PILOT_LOG_PREFIX=test \
    -e FLUENTD_OUTPUT=elasticsearch \
    -e LOGGING_OUTPUT=elasticsearch \
    -e ELASTICSEARCH_HOSTS=192.168.3.201:9200 \
    registry.cn-hangzhou.aliyuncs.com/acs/log-pilot:0.9.5-filebeat
           

我們注意到,這裡配置了三個環境變量,說明如下:

  • PILOT_LOG_PREFIX=test

    設定日志配置的字首,将在後面測試容器建立時使用
  • FLUENTD_OUTPUT=elasticsearch

    把日志發送到Elasticsearch
  • ELASTICSEARCH_HOSTS=192.168.3.201:9200

    Elasticsearch的位址及端口号

可以看到容器輸出日志:

enable pilot: filebeat
DEBU[0000] 05cc29a5c788593d72a28cb6ac9c28137014c5843888df1bac0fa49e4d0dae07 has not log config, skip 
INFO[0000] starting filebeat                            
INFO[0000] filebeat started: 21                         
INFO[0000] filebeat watcher start                       
INFO[0000] Reload gorouting is ready 
           

建立測試容器

我們分别建立

Tomcat

Nginx

容器,來測試

log-pilot

分别對标準輸出及日志檔案的收集。

Tomcat容器

docker run -it --name tomcat --rm -p 18080:8080 \
    -v /usr/local/tomcat/logs \
    --label test.logs.tomcat_catalina=stdout \
    --label test.logs.tomcat_access=/usr/local/tomcat/logs/localhost_access_log.*.txt \
    tomcat
           

注意這裡的

--label

參數分别配置了

test.logs.tomcat_catalina

test.logs.tomcat_access

,其中的test就是上文通過

PILOT_LOG_PREFIX

環境變量指定的值。

stdout

是特殊值,表示标準輸出,

test.logs.tomcat_catalina

這個配置表示将收集容器的标準輸出。另一個

test.logs.tomcat_access

配置将收集容器對應路徑下的日志檔案。

接下來通過浏覽器通路

http://192.168.3.201:18080/

位址,雖然我們會看到404錯誤,但是我們會看到容器裡的localhost_access_log.txt檔案将輸出響應的資訊。

log-pilot

将收集這個檔案的内容,并輸出到

Elasticsearch

建立index pattern

通路

Kibana

頁面,在

Management

-

Index Patterns

菜單中可以看到,已經看到了我們配置的Index。

基于log-pilot收集Docker容器日志實戰前言下載下傳鏡像建立log-pilot容器建立測試容器建立index pattern總結

在Index pattern中填寫

tomcat_access*

,并點選下一步。

基于log-pilot收集Docker容器日志實戰前言下載下傳鏡像建立log-pilot容器建立測試容器建立index pattern總結

選擇@timestamp域,完成index pattern的建立。

檢視

Discover

菜單,并選擇我們建立的

tomcat_access*

過濾器,可以看到Tomcat的通路日志。

基于log-pilot收集Docker容器日志實戰前言下載下傳鏡像建立log-pilot容器建立測試容器建立index pattern總結

Nginx容器

docker run --name nginx --rm -p 80:80 \
    -v /var/log/nginx \
    --label test.logs.nginx=stdout \
    docker.io/nginx:1.21.3
           

同樣的,這裡配置

--label test.logs.nginx=stdout

來收集nginx的控制台輸出。

通路

http://192.168.3.201/

,可以看到容器背景輸出了類似的日志内容:

基于log-pilot收集Docker容器日志實戰前言下載下傳鏡像建立log-pilot容器建立測試容器建立index pattern總結

log-pilot

的背景也輸出了收集到的日志:

基于log-pilot收集Docker容器日志實戰前言下載下傳鏡像建立log-pilot容器建立測試容器建立index pattern總結

接着我們在Kibana上建立nginx的

index pattern

,使用nginx*作為條件。

基于log-pilot收集Docker容器日志實戰前言下載下傳鏡像建立log-pilot容器建立測試容器建立index pattern總結

回到

Discover

菜單,将過濾條件切換為nginx*,将看到nginx的控制台日志輸出。

基于log-pilot收集Docker容器日志實戰前言下載下傳鏡像建立log-pilot容器建立測試容器建立index pattern總結

總結

至此,通過

log-pilot

進行容器控制台及日志檔案的内容收集,并輸出到

Elasticsearch

的實驗就結束了,特别需要說明的是,docker的版本在開始的階段使用的

1.13

版本,滿足官網的安裝條件,但是發現不能成功,将docker版本更換為

1.20

後,得到了我們想要的結果。

繼續閱讀