Logging

如何將 Docker 容器日誌轉發到 ELK?

  • August 12, 2016

我想知道將我的 docker 容器日誌轉發到 ELK 伺服器的最簡單方法是什麼,到目前為止,我在搜尋網際網路後嘗試的解決方案根本不起作用。

基本上我有一個使用 docker-compose 執行的 docker 映像,該容器不會在本地記錄任何內容(它由不同的服務組成,但它們都不是 logstash 或其他),但我看到通過docker logs -tf imageNamedocker-compose logs. 由於我使用 compose 啟動容器,因此我無法使用(或者至少我不知道如何使用)--logs-driverdocker 選項。

因此,我想知道是否有人可以啟發我一些關於如何將日誌轉發到例如 ELK 容器的資訊。

提前致謝,

問候

解決方案

感謝madeddie,我可以通過以下方式解決我的問題,提到我使用了madeddie在他的文章中建議的基本ELK-stack-in-containers。

首先,我更新docker-compose.yml容器的文件以添加日誌引用的條目,正如 madeddie 告訴我的那樣,我為每個服務添加了一個條目,我的 docker-compose 的片段看起來像這樣

  version: '2'
   services:
     mosquitto:
       image: ansi/mosquitto
       ports:
         - "1883:1883" # Public access to MQTT
         - "12202:12202"  #mapping logs
       logging: 
          driver: gelf
          options: 
            gelf-address: udp://localhost:12202
   redis:
    image: redis
    command: redis-server --appendonly yes
    ports:
      - "6379:6379" # No public access to Redis
      - "12203:12203" #mapping logs
    volumes:
      - /home/dockeruser/redis-data:/data
    logging: 
      driver: gelf
      options: 
        gelf-address: udp://localhost:12203 

其次,我必須為每個服務使用不同的埠號才能轉發日誌。

最後,我更新了我的 elk 容器docker-compose.yml文件,以將我發送日誌的每個 upd 埠映射到 logstash 偵聽的埠

logstash:
 build: logstash/
 command: logstash -f /etc/logstash/conf.d/logstash.conf
 volumes:
   - ./logstash/config:/etc/logstash/conf.d
 ports:
   - "5000:5000"
   - "12202:12201/udp" #mapping mosquitto logs
   - "12203:12201/udp" #mapping redis logs

gelf {}此配置和添加in的條目logstash.conf使其工作,正確設置 docker 服務的 IP 地址也很重要。

問候!

Docker compose 有 logging 關鍵字: source

logging: 
 driver: syslog
 options: 
   syslog-address: "tcp://192.168.0.42:123"

因此,如果您知道從那裡去哪裡,那就去吧。

如果沒有,我可以建議您查看 docker 的gelf日誌記錄驅動程序logstash gelf 輸入外掛

例如,如果您要使用基本的 ELK-stack-in-containers 設置,您將更新 docker-compose 文件並將埠添加- "12201:12201/udp"到 logstash。

logstash.conf將輸入部分編輯為:

input {
   tcp {
       port => 5000
   }
   gelf {
   }

}

然後將您的容器配置為使用日誌記錄驅動程序gelf(不是 syslog)和選項gelf-address=udp://ip_of_logstash:12201(而不是 syslog-address)。

唯一需要注意的是 Docker 如何找到 Logstash 容器的 IP 地址或主機名。您可以通過 docker-compose 命名、Docker 連結或手動解決這個問題。

Docker 和 ELK 功能強大、靈活,但同時也是龐大而復雜的野獸。準備投入一些認真的時間,閱讀和實驗。

在探索這一切時,不要害怕提出新的(最好是非常具體的)問題。

引用自:https://serverfault.com/questions/796318