Docker日志

当一个容器启动的时候,它其实是docker deamon的一个子进程,docker daemon可以拿到容器里面进程的标准输出,然后通过自身的LogDriver模块来处理,LogDriver支持的方式很多,默认写到本地文件,也可以发送到syslog等。

Docker会默认收集应用程序的标准输出到一个json.log文件中,以一行一条JSON存储数据,文件的格式如下:

{"log":"root@74205cdc7b53dd:/#ls\r\n","stream":"stdout","time":"xxx.155834526Z"}
{"log":"root@74205cdc7b53dd:/#ls\r\n","stream":"stdout","time":"xxx.255834528Z"}

Docker的这种日志存储方式可以在容器启动时通过指定log-driver进行配置,支持的log driver如下:

Graylog日志管理

Graylog是一个开源的完整的日志管理工具,功能和ELK类似。Docker原生支持graylog协议,Graylog官方也提供了对Docker的支持,二者可以无缝衔接。Graylog官方提供了Dockerfile可以在Docker上部署日志系统,同时也提供了docker-compose.yml文件来快速部署整个graylog栈。
详细内容可以通过http://docs.graylog.org/en/3.1/pages/installation/docker.html 来查看。

Graylog部署

1.在当前用户目录下创建graylog目录作为部署的工作目录:

$ mkdir graylog
$ cd graylog

2.初始化目录和配置文件

$ mkdir -p ./graylog/config
$ cd ./graylog/config
$ wget https://raw.githubusercontent.com/Graylog2/graylog-docker/3.1/config/graylog.conf
$ wget https://raw.githubusercontent.com/Graylog2/graylog-docker/3.1/config/log4j2.xml #另外由于Graylog以ID 1100 定义了用户和用户组,
#导致Graylog在启动的时候可能会报config目录权限不足的错误,可以通过以下命令来解决
chown -R 1100:1100 ./graylog/config

3.修改配置文件, 上一步获得的graylog.conf文件是官方提供的默认配置,用户可以根据需要进行配置,比如配置中时区默认为UTC时区,可以将其改为中国时区

root_timezone = Asia/Shanghai

4.准备docker-compose.yml文件

version: '3'
services:
# MongoDB: https://hub.docker.com/_/mongo/
mongo:
image: mongo:3
networks:
- graylog
volumes:
- mongo_data:/data/db
# Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/6.x/docker.html
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.5.0
volumes:
- es_data:/usr/share/elasticsearch/data
environment:
- http.host=0.0.0.0
- transport.host=localhost
- network.host=0.0.0.0
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
deploy:
resources:
limits:
memory: 1g
networks:
- graylog
# Graylog: https://hub.docker.com/r/graylog/graylog/
graylog:
image: graylog/graylog:3.1
volumes:
- graylog_journal:/usr/share/graylog/data/journal
- ./graylog/config:/usr/share/graylog/data/config
environment:
# CHANGE ME (must be at least 16 characters)!
- GRAYLOG_PASSWORD_SECRET=somepasswordpepper
# Password: admin
- GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
- GRAYLOG_HTTP_EXTERNAL_URI=http://192.168.0.103:9000/
networks:
- graylog
depends_on:
- mongo
- elasticsearch
ports:
# Graylog web interface and REST API
- 9000:9000
# Syslog TCP
- 1514:1514
# Syslog UDP
- 1514:1514/udp
# GELF TCP
- 12201:12201
# GELF UDP
- 12201:12201/udp
networks:
graylog:
driver: bridge
# Volumes for persisting data, see https://docs.docker.com/engine/admin/volumes/volumes/
volumes:
mongo_data:
driver: local
es_data:
driver: local
graylog_journal:
driver: local

5.运行 “docker-compose up”启动服务, 服务正常启动后就可以通过http://ip:9000 进行访问graylog的Web界面,默认用户admin/admin。

Graylog配置日志收集

Graylog的日志收集通过定义input来完成,在Graylog的Web管理页面的System tab下可以选择定义input来对日志进行收集

进入input页面后选择input的类型,比如定义GELF UDP的input:

选择完成后点击 “Lanch new input”,就会进入详细的input配置,配置完成后保存就可以了

保存后一切正常的话,input就会进入RUNNING状态,这时就可以往这个input里面发送数据了,点击“Stop input”,input就会停止,数据的接收也会停止,“Stop input”会变成“Start input”,需要接受数据的时点击启动就可以了。

配置Docker容器发送数据到Graylog

配置Docker容器发送数据到Graylog时可以在运行docker run命令启动容器的时候加上如下参数:

docker run --log-driver=gelf \
--log-opt gelf-address=udp://graylog服务器地址:12201 \
--log-opt tag=<当前容器服务标签,用来供graylog查询的时候进行分类> \
<IMAGE> <COMMAND>

具体示例:

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 "Graylog test message"; sleep 10; done;'

如果容器通过docker-compose命令启动可以在docker-compose.yml文件中加入以下配置:

logging:
driver:"gelf"
options:
gelf-address:"udp://graylog服务器地址:12201"
tag:"容器服务标签"

具体示例:

version: '2'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
logging:
driver: "gelf"
options:
gelf-address: "udp://localhost:12201"
tag: nginx-service

日志发送配置好之后就可以在的Search tab下搜索产看日志信息

基于Graylog的容器日志监控的更多相关文章

  1. 运维开发实践——基于Sentry搭建错误日志监控系统

    错误日志监控也可称为业务逻辑监控, 旨在对业务系统运行过程中产生的错误日志进行收集归纳和监控告警.似乎有那么点曾相识?没错... 就是提到的“APM应用性能监控”.但它又与APM不同,APM系统主要注 ...

  2. 你必须知道的容器日志 (2) 开源日志管理方案 ELK

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.上一篇<你必须知道的容器日志(1)>中介绍了Docker自带的log ...

  3. 用elk+filebeat监控容器日志

    elk  为 elasticsearch(查询搜索引擎),logstash(对日志进行分析和过滤,然后转发给elasticsearch),kibana(一个web图形界面用于可视化elasticsea ...

  4. 基于sentry的前端错误监控日志系统(部署sentry服务器/前端项目部署)-让前端最快的定位到生产问题

    背景 在这越来越发达的网络时代,web应用也是越来越复杂,尤其是前端的开发,也是越来越受重视. 所以在我们前端开发完成后,会有一些列的web应用的上线验证,如自测.QA测试.code review 等 ...

  5. kubernets基于容器日志的报警和服务自动恢复

    demo地址 https://github.com/cclient/kubernetes-filebeat-collector 高可用还谈不上,是对kubernete一种服务异常重启恢复的补充方案 之 ...

  6. 理解OpenShift(7):基于 Prometheus 的集群监控

    理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ...

  7. IBM基于Kubernetes的容器云全解析

    基于Kubernetes的容器云 容器云最主要的功能是以应用为中心,帮助用户把所有的应用以容器的形式在分布式里面跑起来,最后把应用以服务的形式呈现给用户.容器云里有两个关键点,一是容器编排,二是资源调 ...

  8. Docker容器日志管理最佳实践

    目录 一 .Docker 引擎日志 二.容器日志 2.1.常用查看日志命令--docker logs 2.2 .Docker 日志 驱动 三. 生产环境中该如何储存容器中的日志 一.当是完全是标准输出 ...

  9. Docker笔记(十三):容器日志采集实践

    日志是服务运行过程中的一个关键环节,借助日志,我们可以排查定位问题,也可以借助集中化的日志管理平台(如ELK)来做一些必要的数据统计分析.在Docker环境中,日志的采集比传统环境更为复杂,因此了解D ...

随机推荐

  1. JavaWeb_(Jar)使用fastjson解析json和序列化对象

    菜鸟教程 传送门 JSON官网 传送门 fastjson插件下载 传送门 序列化[百度百科]:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对 ...

  2. JavaWeb_(SSH论坛)_五、帖子模块

    基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 回复帖子 分析回 ...

  3. 一致性Hash 分析和实现

    一致性Hash 分析和实现 ---title: 1.一致性Hashdate: 2018-02-05 12:03:22categories:- 一致性Hash--- 一下分析来源于网络总结:算法参照自己 ...

  4. avue你繁琐的表格、表单、树等组件开发的解脱工具,了解一下?

    简介 Avue是基于Vue.js和element的快速开发框架 它的核心是数据驱动UI的思想,让我们从繁琐的crud开发中解脱出来,它的写法类似easyUI,但是写起来比easyui更容易,因为它是基 ...

  5. mysql 判断时间 语法

    今天  select * from 表名 where to_days(时间字段名) = to_days(now());  昨天  SELECT * FROM 表名 WHERE TO_DAYS( NOW ...

  6. jsvnadmin访问一直登陆 找不到用户

    报错:AH01618: user zhangsan not found: /svn/hangzhi 在svnadmin控制台上将用户分好组,不然即使有账户也登不上

  7. 2018092609-2 选题 Scrum立会报告+燃尽图 04

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8682 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 杨萍队名:胜 ...

  8. 【python】小型神经网络的搭建

    import numpy as np def sigmoid(x): # Sigmoid activation function: f(x) = 1 / (1 + e^(-x)) return 1 / ...

  9. Parcelable和Serializable

    本文主要介绍Parcelable和Serializable的作用.效率.区别及选择,关于Serializable的介绍见Java 序列化的高级认识. 1.作用 Serializable的作用是为了保存 ...

  10. 描述下什么是springcloud,springcloud中的组件有哪些?分别描述下它的原理?

    1.什么是springcloud,springcloud中的组件有哪些? Spring cloud是一个基于Spring Boot实现的服务治理工具包,在微服务架构中用于管理和协调服务的微服务:就是把 ...