使用logstash做爲docker日誌驅動收集日誌

前言

logstash是一個開源的日誌統一處理數據收集器,屬於ELK中的L,在日誌收集領域應用普遍. html

docker默認的日誌驅動是json-file,每個容器都會在本地生成一個/var/lib/docker/containers/containerID/containerID-json.log,而日誌驅動是支持擴展的,本章主要講解的是使用logstash收集docker日誌. node

docker是沒有logstash這個驅動的,可是能夠經過logstash的gelf input插件收集gelf驅動的日誌.git

前提

  1. docker
  2. 瞭解logstash配置
  3. docker-compose

準備配置文件

docker-compose.ymlgithub

version: '3.7'

x-logging:
  &default-logging
  driver: gelf
  options:
    gelf-address: "udp://localhost:12201"
    mode: non-blocking
    max-buffer-size: 4m
    tag: "kafeidou.{{.Name}}"  #配置容器的tag,以kafeidou.爲前綴,容器名稱爲後綴,docker-compose會給容器添加副本後綴,>如 logstash_1

services:

  logstash:
    ports:
      - 12201:12201/udp
    image: docker.elastic.co/logstash/logstash:7.5.1
    volumes:
      - ./logstash.yml:/usr/share/logstash/config/logstash.yml
      - /var/log/logstash:/var/log/logstash
      - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf

  logstash-worker:
    image: docker.elastic.co/logstash/logstash:7.5.1
    depends_on:
      - logstash
    logging:
      driver: "gelf"
      options:
        gelf-address: "udp://localhost:12201"

logstash.ymldocker

http.host: "0.0.0.0"

logstash.confjson

input {
 gelf{
  use_udp => true
  port_tcp => 12202
 }
}

 output {
   file {
        path => "/var/log/logstash/%{+yyyy-MM-dd-HH}/%{container_name}.log"
   }
 }

因爲logstash須要在配置的目錄中有寫入的權限,因此須要先準備好存放log的目錄以及給予權限.
建立目錄segmentfault

mkdir /var/log/logstash

給予權限,這裏用於實驗演示,直接受權777app

chmod -R 777 /var/log/logstash

在docker-compose.yml,logstash.conf和logstash.yml文件的目錄中執行命令:
``
docker-compose up -d
``tcp

[root@master logstash]# docker-compose up -d
WARNING: The Docker Engine you're using is running in swarm mode.

Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.

To deploy your application across the swarm, use `docker stack deploy`.

Starting logstash_logstash_1 ... done
Starting logstash_logstash-worker_1 ... done

logstash啓動較慢,我實驗的效果是90秒左右,因此更推薦使用fluentd收集日誌ide

查看一下日誌目錄下,應該就有對應的容器日誌文件了:

[root@master logstash]# ls /var/log/logstash/
2020-02-16
[root@master logstash]# ls /var/log/logstash/2020-02-16/
logstash_logstash-worker_1.log

也能夠直接下載個人文件:

  1. docker-compose.yml
  2. logstash.conf
  3. logstash.yml

總結

技術選型更推薦fluentd,爲何?

fluentd更加輕量級而且更靈活,而且目前屬於CNCF,活躍度和可靠性都更上一層樓.

爲何還要介紹logstash收集docker日誌?

在一個公司或者業務中若是已經在使用ELK技術棧,也許就沒有必要再引入一個fluentd,而是繼續用logstash打通docker日誌這塊.這裏主要作一個分享,讓遇到這種狀況的同窗可以有多一個選擇.

推薦閱讀:

使用fluentd做爲docker日誌驅動收集日誌

始發於 四顆咖啡豆 ,轉載請聲明出處.
關注公衆號->[四顆咖啡豆] 獲取最新內容
四顆咖啡豆
相關文章
相關標籤/搜索