首頁 >運維 >Docker >docker查看日誌檔在哪

docker查看日誌檔在哪

PHPz
PHPz原創
2023-05-13 14:12:3711181瀏覽

Docker是一款非常火熱的開源容器化平台,它為應用程式的部署與管理提供了更有效率、可靠和安全的解決方案。但是,在使用Docker進行部署和維運過程中,我們常常需要查詢容器運行過程中的日誌文件,以便更了解系統運作狀態、故障排查及維運調試等面向。那麼,Docker中的日誌檔案都存放在哪裡呢?本文將為大家詳細介紹Docker查看日誌檔案的方法及相關注意點。

一、Docker的日誌檔案預設存放位置

在Docker中,每個容器都會產生對應的日誌檔案。這些日誌檔案預設存放在容器的檔案系統中。具體來說,Docker預設將容器的標準輸出(stdout)和標準錯誤(stderr)重定向到容器的標準輸出檔案和標準錯誤檔案。這些日誌檔案通常會位於以下目錄下:

/var/lib/docker/containers/$CONTAINER_ID/$CONTAINER_ID-json.log

其中,$CONTAINER_ID代表容器的唯一識別符。

對於Docker日誌的存儲,有以下幾個重要的點:

  1. 日誌檔案預設存放在容器內,而不是主機上,這是由於Docker預設採用容器虛擬化的方式運行應用程序,容器是一個隔離的環境,其包括自己的檔案系統和進程空間。
  2. 日誌檔案通常都是以JSON格式進行存儲,這些檔案包括每個日誌行的時間戳記、日誌等級、容器ID、日誌內容等資訊。
  3. 日誌檔案預設不會進行自動清除,因此如果我們不主動刪除這些檔案的話,它們將會持續佔用容器磁碟空間,導致容器運行過程中的磁碟空間逐漸減少。

二、利用Docker CLI查看容器日誌檔案

在使用Docker進行容器管理的過程中,我們可以透過Docker CLI命令列工具來實現對容器日誌檔案的查看。下面,我們將介紹幾個基本的Docker CLI指令來實作查看容器日誌的功能。

  1. docker logs [OPTIONS] CONTAINER

#這個指令的作用是列印指定容器的所有日誌資訊。其中,OPTIONS選項可以是:

-a, --all:顯示所有容器的日誌資訊

-t, --timestamps:顯示時間戳

-f , --follow:例如tailf的方式輸出日誌,即持續刷新展示日誌

--tail=:從日誌檔案末尾開始輸出指定行數的日誌,預設為所有日誌($ docker logs -tail all)

--since=:輸出指定時間之後記錄的日誌,如"2019-01-01",或時間戳記

--until=:輸出指定時間之前記錄的日誌

具體使用方法如下:

$ docker logs CONTAINER_ID

以此命令將會顯示指定容器的所有日誌訊息,其中CONTAINER_ID為容器的唯一識別碼。如果要顯示容器最後N行日誌訊息,可以使用以下命令:

$ docker logs --tail N CONTAINER_ID

如果我們需要隨時監控某個容器的即時日誌輸出,可以加上-f選項:

$ docker logs -f CONTAINER_ID

  1. #docker inspect [OPTIONS] CONTAINER

#這個指令的作用是取得指定容器的詳細信息,其中包括容器的日誌檔案路徑、運行狀態、IP位址、連接埠映射等相關資訊。透過該命令,我們可以獲得容器的日誌檔案預設存放路徑,如下所示:

$ docker inspect --format='{{.LogPath}}' CONTAINER_ID

##除了查看容器日誌檔案路徑外,該命令還可以查看其他相關信息,具體使用方法如下:

$ docker inspect CONTAINER_ID

三、利用第三方工具查看Docker日誌

#除了Docker CLI工具外,還可以利用第三方工具更方便地查看Docker日誌。這裡我們介紹兩個比較流行的Docker日誌檢視工具:

    Docker Compose
#Docker Compose是Docker官方提供的容器編排工具,提供了一個可設定的檔案docker-compose.yml來定義多容器應用程式的組成與運作方式。使用Docker Compose進行部署,可以方便地一次啟動多個容器,同時進行日誌收集和管理。

在使用Docker Compose部署應用程式時,可以透過docker-compose logs指令來查看容器日誌。具體使用方法如下所示:

$ docker-compose logs [SERVICES...]

其中,SERVICES為指定的服務名稱,缺省時會顯示所有服務的日誌。

    ELK Stack
ELK是指Elasticsearch Logstash Kibana三個開源軟體的組合,它們可以協作實現日誌的收集、分析和視覺化。 Docker中的日誌資料可以透過Logstash收集,再將日誌資料轉存到Elasticsearch中進行索引和檢索,最後透過Kibana介面進行資料視覺化展示。

使用ELK Stack進行Docker日誌收集和視覺化需要進行以下幾個步驟:

(1)安裝Docker

(2)安裝Docker Compose

#(3)下載ELK Stack映像檔:docker pull sebp/elk

(4)使用docker-compose.yml檔案啟動ELK Stack服務:

version: '3.7'
services:
elasticsearch:

image: sebp/elk
ports:
  - "9200:9200"
volumes:
  - ./elasticsearch.yml:/etc/elasticsearch/elasticsearch.yml

kibana:

image: sebp/elk
ports:
  - "5601:5601"
links:
  - elasticsearch

logstash:

image: sebp/elk
volumes:
  - ./logstash:/etc/logstash/conf.d
links:
  - elasticsearch

(5)在Logstash設定檔中指定Docker日誌路徑:

input {
file {

path => ["/var/lib/docker/containers/*/*.log"]
type => "docker"
codec => "json"

}
}

filter {
if [type] == "docker" {

}
}

output {
elasticsearch {

hosts => "elasticsearch:9200"
manage_template => false
index => "docker-%{+YYYY.MM.dd}"

}
}

(6)重新啟動Logstash服務,然後透過Kibana介面搜尋並展示Docker日誌檔案。

綜上所述,本文詳細介紹了在Docker中查看日誌檔案的方法,包括Docker CLI命令、Docker Compose和ELK Stack等第三方工具。透過這些工具的幫助,我們可以更方便地對Docker容器的日誌資訊進行監控和調試,確保應用程式正常運作。

以上是docker查看日誌檔在哪的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn