搜尋
首頁運維linux運維如何使用Docker進行應用程式的監控與日誌管理

如何使用Docker進行應用程式的監控與日誌管理

Docker已經成為了現代化應用中的必備技術,但使用Docker進行應用程式監控和日誌管理卻是一項挑戰。隨著Docker網路功能,如Service Discovery和Load Balancing的不斷增強,我們越來越需要一個完整、穩定,以及高效的應用監控系統。

在本文中,我們將簡單地介紹使用Docker進行應用監控和日誌管理的同時給出具體的程式碼範例。

利用Prometheus進行應用程式監控

Prometheus是一款開源,基於Pull模型的服務監測和警告工具,由SoundCloud開發。它使用Go語言編寫,並廣泛應用於微服務方案和雲端環境。作為一款監控工具,它可以對Docker的CPU、記憶體、網路和磁碟等進行監控,並且還支援多維資料切換、靈活的查詢、警報以及視覺化等功能,讓你可以快速做出反應,並快速做出決策。

還有一點要注意的是,Prometheus需要透過Pull方式的取樣,也就是存取被監控應用中的/metrics介面取得監控資料。所以,在啟動被監控應用程式鏡像時,需要先將可以存取到Prometheus的IP和連接埠配置到/metrics介面中。下面是一個簡單的Node.js應用程式。

const express = require('express')
const app = express()

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.get('/metrics', (req, res) => {
  res.send(`
    # HELP api_calls_total Total API calls
    # TYPE api_calls_total counter
    api_calls_total 100
  `)
})

app.listen(3000, () => {
  console.log('Example app listening on port 3000!')
})

在該程式碼中,我們透過/metrics接口,返回了一個api_calls_total的監控指標。

接著,在官網上下載Prometheus的Docker映像,並建立一個docker-compose.yml文件,並且在該文件中,我們取得該Node.js應用的資料。

version: '3'
services:
  node:
    image: node:lts
    command: node index.js
    ports:
      - 3000:3000

  prometheus:
    image: prom/prometheus:v2.25.2
    volumes:
      - ./prometheus:/etc/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.retention.time=15d'
    ports:
      - 9090:9090

該docker-compose.yml檔案中,我們定義了兩個服務,一個是運行Node.js應用程式的Node服務,另一個是用於監控的Prometheus服務。其中,Node服務發布的端口為3000端口,透過端口映射,可以透過docker-compose.yml中的IP和3000端口存取到該Node應用的/metrics接口。而Prometheus則可以透過9090埠存取對應的監控指標資料。

最後,在prometheus.yml檔案中,我們需要定義要取得的資料來源。

global:
  scrape_interval:     15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'node-exporter'
    static_configs:
    - targets: ['node:9100']

  - job_name: 'node-js-app'
    static_configs:
    - targets: ['node:3000']

在該檔案中,我們定義了要擷取的所有的Node.js應用的指標,其中targets參數是Node.js應用的IP位址及其對應埠號。在這裡,我們使用的是node和3000連接埠。

最後,執行docker-compose up指令,即可啟動整個應用程式及其監控服務,並在Prometheus中查看該會員指標。

利用ElasticSearch和Logstash進行日誌管理

在Docker中,所應用的日誌資料分散在不同的Docker容器中。如果你要在集中的地方對這些日誌進行管理,那麼可以透過使用ELK中的ElasticSearch和Logstash,將日誌中心化管理,以便更輕鬆地實現電腦資源的監控和分析。

在開始之前,需要先下載Logstash和ElasticSearch的Docker映像,並建立一個docker-compose.yml檔案。

在該檔案中,我們定義了三個服務,其中bls是用來模擬業務日誌的API服務,其每次回應後,將記錄一條日誌到stdout和日誌檔案中。 logstash服務是由Logstash官方提供的Docker映像構建,用於收集、過濾和傳輸日誌。 ElasticSearch服務用於儲存和檢索日誌。

version: '3'
services:
  bls:
    image: nginx:alpine
    volumes:
      - ./log:/var/log/nginx
      - ./public:/usr/share/nginx/html:ro
    ports:
      - "8000:80"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "10"

  logstash:
    image: logstash:7.10.1
    volumes:
      - ./logstash/pipeline:/usr/share/logstash/pipeline
    environment:
      - "ES_HOST=elasticsearch"
    depends_on:
      - elasticsearch

  elasticsearch:
    image: elasticsearch:7.10.1
    environment:
      - "http.host=0.0.0.0"
      - "discovery.type=single-node"
    volumes:
      - ./elasticsearch:/usr/share/elasticsearch/data

在設定檔中,我們對應了容器內的路徑到宿主機的日誌檔案系統中。同時透過logging的option,則定義了日誌的磁碟區大小和數量,以限制日誌的佔用儲存。

在設定檔的logstash中,我們定義了一個新的pipeline,其名稱為nginx_pipeline.conf,該檔案用於處理nginx日誌的收集、過濾和傳輸。與ELK的工作原理相同,logstash將根據不同的條件,對接收到的日誌進行處理,並將其發送到已經建立的 Elasticsearch 叢集中。在這個設定檔中,我們定義瞭如下處理邏輯:

input {
  file {
    path => "/var/log/nginx/access.log"
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
}

output {
  elasticsearch {
    hosts => [ "${ES_HOST}:9200" ]
    index => "nginx_log_index"
  }
}

在該設定檔中,我們定義了一個name為file的輸入,表示要從本機Log檔案中讀取資料。接著,我們引進了使用grok函式庫來解析符合特定範本的日誌的filter。最後,我們定義了輸出,將資料傳輸到 Elasticsearch 叢集的位址,同時將檢索和報告透過環境變數ES_HOST傳遞到容器中。

在最後,如上完成整個ELK的配置後,我們會得到一個高效的日誌管理系統,每個日誌都將發送到集中的地方,並被整合在一起,可以實現簡單的搜索,過濾和可視化操作。

以上是如何使用Docker進行應用程式的監控與日誌管理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Linux的5支支柱:了解他們的角色Linux的5支支柱:了解他們的角色Apr 11, 2025 am 12:07 AM

Linux系統的五大支柱是:1.內核,2.系統庫,3.Shell,4.文件系統,5.系統工具。內核管理硬件資源並提供基本服務;系統庫為應用程序提供預編譯函數;Shell是用戶與系統交互的接口;文件系統組織和存儲數據;系統工具用於系統管理和維護。

Linux維護模式:工具和技術Linux維護模式:工具和技術Apr 10, 2025 am 09:42 AM

在Linux系統中,可以通過在啟動時按特定鍵或使用命令如“sudosystemctlrescue”進入維護模式。維護模式允許管理員在不受干擾的情況下進行系統維護和故障排除,如修復文件系統、重置密碼、修補安全漏洞等。

關鍵Linux操作:初學者指南關鍵Linux操作:初學者指南Apr 09, 2025 pm 04:09 PM

Linux初學者應掌握文件管理、用戶管理和網絡配置等基本操作。 1)文件管理:使用mkdir、touch、ls、rm、mv、cp命令。 2)用戶管理:使用useradd、passwd、userdel、usermod命令。 3)網絡配置:使用ifconfig、echo、ufw命令。這些操作是Linux系統管理的基礎,熟練掌握它們可以有效管理系統。

如何使用sudo向Linux的用戶授予高架特權?如何使用sudo向Linux的用戶授予高架特權?Mar 17, 2025 pm 05:32 PM

本文解釋瞭如何管理Linux中的Sudo特權,包括授予,撤銷和安全性最佳實踐。關鍵重點是安全和sudoers安全和限制訪問。Character數量:159

如何在Linux中實現SSH的兩因素身份驗證(2FA)?如何在Linux中實現SSH的兩因素身份驗證(2FA)?Mar 17, 2025 pm 05:31 PM

本文提供了有關使用Google Authenticator在Linux上設置兩因素身份驗證(2FA)的指南,詳細介紹了安裝,配置和故障排除步驟。它突出了2FA的安全益處,例如增強的SEC

如何使用TOP,HTOP和VMSTAT等工具來監視Linux中的系統性能?如何使用TOP,HTOP和VMSTAT等工具來監視Linux中的系統性能?Mar 17, 2025 pm 05:28 PM

本文討論了使用TOP,HTOP和VMSTAT監視Linux系統性能,並詳細介紹其獨特功能和自定義選項,以進行有效的系統管理。

如何使用軟件包管理器(APT,YUM,DNF)管理Linux中的軟件包?如何使用軟件包管理器(APT,YUM,DNF)管理Linux中的軟件包?Mar 17, 2025 pm 05:26 PM

文章討論了使用APT,YUM和DNF在Linux中管理軟件包,涵蓋安裝,更新和刪除。它比較了它們對不同分佈的功能和適用性。

如何在Linux中使用正則表達式(REGEX)進行模式匹配?如何在Linux中使用正則表達式(REGEX)進行模式匹配?Mar 17, 2025 pm 05:25 PM

本文介紹瞭如何在Linux中使用正則表達式(REGEX)進行模式匹配,文件搜索和文本操作,詳細列式,命令和工具,例如GREP,SED和AWK。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。