將日志輸出到Docker容器外

1.1 使用 Docker 容器日志

我們可以利用 docker logs 命令查看 Docker 容器內(nèi)部應(yīng)用程序運行時所產(chǎn)生的日志,可以免除首先進(jìn)入 Docker 容器,再打開應(yīng)用程序的日志文件的過程螟深。docker logs 會監(jiān)控容器中操作系統(tǒng)的標(biāo)準(zhǔn)輸出設(shè)備(STDOUT),一旦 STDOUT 有數(shù)據(jù)產(chǎn)生辐马,就會將這些數(shù)據(jù)傳輸?shù)搅硪粋€“設(shè)備”中,該 Docker 的被稱為“日志驅(qū)動(Logging Driver)”

1.2 Docker 日志驅(qū)動

例如舞虱,我們有一個容器實例 ID 為 “da6743d61e1a” ,隨后我們使用 docker logs 命令母市,查看 da6743d61e1a 容器的日志

docker logs -f da6743d61e1a

此時矾兜,Docker 日志也在同步輸出,輸出的日志類似下面這樣患久。

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.5.3.RELEASE)

2018-08-31 14:39:34.608  INFO 8 --- [           main] com.ctego.inventory.server.Server        : Starting Server on ctego-inventory-srv-55798d4965-lfdxn with PID 8 (/var/ctego/server.jar started by root in /)
2018-08-31 14:39:34.696 DEBUG 8 --- [           main] com.ctego.inventory.server.Server        : Running with Spring Boot v1.5.3.RELEASE, Spring v4.3.8.RELEASE
2018-08-31 14:39:34.697  INFO 8 --- [           main] com.ctego.inventory.server.Server        : No active profile set, falling back to default profiles: default
2018-08-31 14:39:46.125  INFO 8 --- [           main] c.l.s.valid.DefaultValidConfig           : 開啟參數(shù)校驗
2018-08-31 14:39:48.102  INFO 8 --- [           main] org.xnio                                 : XNIO version 3.3.6.Final
2018-08-31 14:39:48.208  INFO 8 --- [           main] org.xnio.nio                             : XNIO NIO Implementation Version 3.3.6.Final
2018-08-31 14:39:48.602  WARN 8 --- [           main] io.undertow.websockets.jsr               : UT026009: XNIO worker was not set on WebSocketDeploymentInfo, the default worker will be used
2018-08-31 14:39:48.602  WARN 8 --- [           main] io.undertow.websockets.jsr               : UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used
2018-08-31 14:39:48.701  INFO 8 --- [           main] io.undertow.servlet                      : Initializing Spring embedded WebApplicationContext

Docker 是怎樣做到的呢椅寺?或者說北苟,所謂的 Docker 日志驅(qū)動占调,到底做了些什么事情?
我們使用 docker info 命令迟螺,可以看到 Docker 容器的相關(guān)信息篙挽,其中有一項 Logging Driver 的字段荆萤。

docker info | grep 'Logging Driver'

通過輸入以上命令,將得到Docker 當(dāng)前所設(shè)置的日志驅(qū)動類型:journald

Logging Driver: journald

其實铣卡,Docker 已為我們提供了大量的日志驅(qū)動類型链韭。

  • none:容器不輸出任何日志;
  • json-file:容器輸出的日志以 JSON 格式寫入文件中(默認(rèn))算行;
  • syslog:容器輸出的日志寫入宿主機的 Syslog 中梧油;
  • journald:容器輸出的日志寫入宿主機的 Journald 中苫耸;
  • gelf:容器輸出到日志以 GELF(Graylog Extended Log Format)格式寫入 Graylog中州邢;
  • fluentd:容器輸出的日志寫入宿主機的 Fluented 中;
  • awslogs:容器輸出的日志寫入 Amazon CloudWatch Logs 中褪子;
  • splunk:容器輸出的日志寫入 splunk 中量淌;
  • etwlogs:容器輸出的日志寫入 ETW (Event Tracing for Windows);
  • mats:容器輸出的日志寫入 NATS 服務(wù)中嫌褪;
    我們可以在 docker run 命令中通過 --log-driver 參數(shù)來設(shè)置具體的 Docker 日志驅(qū)動呀枢,也可以通過 --log-opt 參數(shù)來指定對應(yīng)日志驅(qū)動的相關(guān)選項。就拿 json-file 來說笼痛,其實可以這樣啟動 Docker 容器:
docker run \
-d \
-p 80:80 \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
--name nginx \
nginx

通過 --log-opt 參數(shù)為 json-file 日志驅(qū)動添加了兩個選項裙秋,max-size=10m 表示 JSON 文件最大為 10MB(超過 10MB 就會自動生成新文件),max-file=3 表示 JSON 文件最多為3個(超過3個就會自動刪除多余的舊文件)
除了在啟動 Docker 容器時缨伊,可指定日志驅(qū)動以外摘刑,還可以通過修改 Docker 配置文件來指定日志驅(qū)動。
打開配置文件 /etc/sysconfig/docker刻坊,找到以下配置片段:

OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'
if [ -z "${DOCKER_CERT_PATH}" ]; then
    DOCKER_CERT_PATH=/etc/docker
fi

可以看出枷恕,默認(rèn)的日志驅(qū)動為 journald,把它修改為 syslog

--log-driver=syslog

然后重啟 docker

systemctl restart docker

本文中所使用的 docker 版本為 1.13.1
新版本的docker中谭胚,已廢棄/etc/sysconfig/docker這種配置方式徐块,轉(zhuǎn)而采用/etc/docker/daemon.json來配置
詳情請閱讀 官方文檔

以上眾多日志驅(qū)動類型中未玻,較為常用 的是 Syslog,因為 Syslog 是 Linux 的日志系統(tǒng)胡控,很多日志分析工具都可以從 Syslog 中獲取日志扳剿,比如流行的 ELK(Elasticsearch、Logstash昼激、Kibana)日志中心舞终。Logstash 用于收集日志,Syslog 中寫入的日志可轉(zhuǎn)發(fā)到 Logstash 中癣猾,隨后將日志存入 Elasticsearch 中敛劝,最后可通過 Kibana 來查詢?nèi)罩尽?br> 接下來咱們的目標(biāo)是將 Docker 容器中輸出的日志寫入 Syslog,那么后面需要做的就是將 Syslog 接入 ELK 了纷宇。

1.3 Linux 日志系統(tǒng):Syslog

默認(rèn)夸盟,Linux 操作系統(tǒng)已經(jīng)安裝了 Syslog 軟件包,但它叫 Rsyslog像捶。實際上上陕,Rsyslog 是 Syslog 標(biāo)準(zhǔn)的一種實現(xiàn),還有一種叫 Syslog-ng 的第三方實現(xiàn)拓春。雖然 Syslog-ng 的功能較為強大释簿,但我們還是選擇使用 Rsyslog,因為操作系統(tǒng)已經(jīng)預(yù)裝了硼莽,我們無須單獨安裝庶溶,可以通過以下命令查看 Rsyslog 是否已安裝。

[root@uat-k8s-master1 ~]# rsyslogd -v
rsyslogd 8.24.0, compiled with:
    PLATFORM:               x86_64-redhat-linux-gnu
    PLATFORM (lsb_release -d):      
    FEATURE_REGEXP:             Yes
    GSSAPI Kerberos 5 support:      Yes
    FEATURE_DEBUG (debug build, slow code): No
    32bit Atomic operations supported:  Yes
    64bit Atomic operations supported:  Yes
    memory allocator:           system default
    Runtime Instrumentation (slow code):    No
    uuid support:               Yes
    Number of Bits in RainerScript integers: 64

如果要開啟 Rsyslog 服務(wù)懂鸵,我們必須對 Rsyslog 進(jìn)行配置偏螺,打開文件 vi /etc/rsyslog.conf
在 rsyslog.conf 文件中有一段配置,我們需要手工去開啟

$ModLoad imtcp
$InputTcpServerRun 514

重啟 Rsyslog 服務(wù)匆光,否則配置無法生效

systemctl restart rsyslog

此時套像,我們可以查看本地是否對外開啟了 514 端口

[root@uat-k8s-master1 ~]# netstat -anpt | grep 514
tcp        0      0 0.0.0.0:514             0.0.0.0:*               LISTEN      20681/rsyslogd      
tcp6       0      0 :::514  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市终息,隨后出現(xiàn)的幾起案子夺巩,更是在濱河造成了極大的恐慌,老刑警劉巖周崭,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柳譬,死亡現(xiàn)場離奇詭異,居然都是意外死亡休傍,警方通過查閱死者的電腦和手機征绎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人人柿,你說我怎么就攤上這事柴墩。” “怎么了凫岖?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵江咳,是天一觀的道長。 經(jīng)常有香客問我哥放,道長歼指,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任甥雕,我火速辦了婚禮踩身,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘社露。我一直安慰自己挟阻,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布峭弟。 她就那樣靜靜地躺著附鸽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瞒瘸。 梳的紋絲不亂的頭發(fā)上坷备,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機與錄音情臭,去河邊找鬼省撑。 笑死,一個胖子當(dāng)著我的面吹牛谎柄,可吹牛的內(nèi)容都是我干的丁侄。 我是一名探鬼主播惯雳,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼朝巫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了石景?” 一聲冷哼從身側(cè)響起劈猿,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎潮孽,沒想到半個月后揪荣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡往史,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年仗颈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡挨决,死狀恐怖请祖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脖祈,我是刑警寧澤肆捕,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站盖高,受9級特大地震影響慎陵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喻奥,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一席纽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧撞蚕,春花似錦胆筒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至矫渔,卻和暖如春彤蔽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背庙洼。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工顿痪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人油够。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓蚁袭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親石咬。 傳聞我的和親對象是個殘疾皇子揩悄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容