您好,登錄后才能下訂單哦!
這篇文章給大家介紹使用docker怎么實現日志監控,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
日志處理機制
我們先來了解一下docker日志處理的機制,當啟動一個容器的時候,它其實是docker daemon的一個子進程,docker daemon可以拿到你容器里面進程的標準輸出,拿到標準輸出后,它會通過自身的一個LogDriver模塊來處理,LogDriver支持的方式很多,可以寫到本地的文件(默認方式),可以發送到syslog等。
docker會默認手機應用程序的標準輸出存儲到一個json.log的文件中,文件的格式類似下面這種:
{"log": "root@c835298de6dd:/# ls\r\n", "stream": "stdout", "time": "xxoo.155863426Z"} {"log":"bin boot dev\u0009etc home lib\u0009lib64 media mnt opt\u0009proc root run sbin selinux\u0009srv sys tmp usr var\r\n"}
以一行一個作為一條json數據存儲。docker的這種日志存儲方式是可以配置的,具體參數可以在運行run啟動容器的時候通過log-driver
進行配置,具體配置可以參考log-driver。
docker默認使用了json-file driver作為log driver,而gelf則是我們需要使用的log driver。當容器多了,或者是采用類似swarm集群部署docker的時候,各種日志分散存儲在各個json.log文件中,當查找問題或者進行相關統計的時候,分散的日志對我們來說非常不友好。我們需要一個能夠集中管理docker日志的工具,這就是graylog。
Graylog
docker原生支持graylog協議,直接將日志發送到graylog(通過gelf協議);
graylog官方提供了將本身部署在docker的支持。
graylog官方提供了dockerfile供我們快速的在docker上部署日志系統,在這個docker hub的地址中,也提供了docker-compose.yml來快速部署整個graylog棧,包含了MongoDB、elasticsearch,而不需要分別單獨進行部署。
https://hub.docker.com/r/graylog/graylog
graylog部署
創建一個目錄用來部署graylog,本文假設目錄為/root/graylog
,以下所有操作都是在/root/graylog
中進行的。
初始化目錄和配置文件
# 創建數據目錄 mkdir -p ./graylog/data # 創建配置文件目錄 mkdir -p ./graylog/config cd ./graylog/config # 直接下載官方推薦的配置文件 wget https://raw.githubusercontent.com/Graylog2/graylog-docker/2.5/config/graylog.conf # 日志配置文件 wget https://raw.githubusercontent.com/Graylog2/graylog-docker/2.5/config/log4j2.xml
修改下載完的graylog.conf中的root_timezone為GMT+0800中國時區
root_timezone=Etc/GMT-8
新建docker-compose.yml來供docker-compose快速啟動完成服務。需要注意的是,由于docker-compose內容較多,我們以附件的形式存放在了當前同級目錄;
啟動整個服務
docker-compose up
如果沒有問題的話,會看到graylog webserver started的終端輸出消息。訪問http://{server}:9000
會看到graylog的web界面,使用用戶名admin,密碼admin來登錄后臺,至此部署完成。
完整的docker-compose文件
version: '2' services: mongodb: image: mongo:3 volumes: - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime - mongo_data:/data/db elasticsearch: image: elasticsearch:6.6.2 volumes: - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime - es_data:/usr/share/elasticsearch/data # 這里需要在本地添加一個jvm.options文件,并且指定垃圾回收器為G1GC,否則無法啟動成功 - /Users/zhangxufeng/xufeng.zhang/docker/conf-compose/graylog/graylog/jvm.options:/usr/share/elasticsearch/config/jvm.options environment: - http.host=0.0.0.0 - transport.host=localhost - network.host=0.0.0.0 - xpack.security.enabled=false - xpack.watcher.enabled=false - xpack.monitoring.enabled=false - xpack.security.audit.enabled=false - xpack.ml.enabled=false - xpack.graph.enabled=false - ES_JAVA_OPTS=-Xms512m -Xmx512m -XX:+UseG1GC ulimits: memlock: soft: -1 hard: -1 mem_limit: 512M graylog: image: graylog/graylog:2.5 volumes: - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime - graylog_journal:/usr/share/graylog/data/journal - ./graylog/config:/usr/share/graylog/data/config environment: - GRAYLOG_PASSWORD_SECRET=admin_zxfwy1314_ - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 - GRAYLOG_WEB_ENDPOINT_URI=http://127.0.0.1:9000/api links: - mongodb:mongo - elasticsearch depends_on: - mongodb - elasticsearch ports: - 9000:9000 - 514:514 - 514:514/udp - 12201:12201 - 12201:12201/udp volumes: mongo_data: driver: local es_data: driver: local graylog_journal: driver: local
Graylog系統配置
如果docker通過命令行啟動,可以在run命令中加上如下參數:
docker run --log-driver=gelf --log-opt gelf-address=udp://{graylog服務器地址}:12201 --log-opt tag=<當前容器服務標簽,用來供graylog查詢的時候進行分類> <IMAGE> <運行命令>
示例:
docker run -d --log-driver=gelf --log-opt gelf-address=udp://localhost:12201 --log-opt tag="{{.ImageName}}/{{.Name}}/{{.ID}}" busybox sh -c 'while true; do echo "Hello, this is A"; sleep 10; done;'
如果通過docker-compose命令,則可以在docker-compose.yml中加入相關配置,一下用NGINX容器舉例:
version: '2' services: nginx: image: nginx:latest ports: - "80:80" logging: driver: "gelf" options: gelf-address: "udp://localhost:12201" tag: front-nginx
graylog的日志收集通過定義input對象來完成,在graylogweb管理界面中按照如下方式進入input對象配置,選擇GELF UDP協議來新建一個輸入器:
關于使用docker怎么實現日志監控就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。