服务器维护,服务器代维,安全设置,漏洞扫描,入侵检测服务

运维之家

 找回密码
 注册
搜索
查看: 5818|回复: 0

使用Graylog收集Docker日志

[复制链接]
dirtysea 发表于 2019-4-25 17:13:03 | 显示全部楼层 |阅读模式
日志收集比较流行的方案有
  • Elasticsearch+Graglog
  • Elasticsearch+Logstash+Kibana 也就是ELK
为什么要选择graylog来作为Docker的日志收集平台呢?
  • Docker原生支持graylog协议,直接将日志发送到graylog(通过gelf协议
  • graylog官方提供了将本身部署在Docker的支持
部署graylog官方提供了Dockerfile供我们快速的在Docker上部署日志系统,Dockerfile地址,在这个Docker Hub的地址中,也提供了docker-compose.yml来快速部署整个graylog栈,包含了mongodb、ElasticSearch,而不需要分别单独进行部署,我将完整的部署过程总结如下:
  • 创建一个目录用来部署graylog,本文假设目录为/data/graylog,以下所有操作都是在/data/graylog中进行的。
  • 初始化目录和配置文件
#创建数据目录mkdir -p ./graylog/data#创建配置文件目录mkdir -p ./graylog/configcd ./graylog/config#直接下载官方推荐配置文件wget https://raw.githubusercontent.co ... onfig/graylog.conf#日志配置文件wget https://raw.githubusercontent.co ... r/config/log4j2.xml修改下载完的graylog.conf中的root_timezone为: root_timezone = +08:00改为GMT+0800中国时区。
  • 新建docker-compose.yml来供docker-compose快速启动完整服务,文件内容如下:
version: '2'services: # MongoDB: https://hub.docker.com/_/mongo/ mongodb: image: mongo:3.6.10 volumes: - ./logs/mongo_data:/data/db # Elasticsearch: https://www.elastic.co/guide/en/ ... nce/6.6/docker.html elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.6.1 volumes: - ./logs/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 mem_limit: 1g # Graylog: https://hub.docker.com/r/graylog/graylog/ graylog: image: graylog/graylog:3.0 volumes: - ./logs/graylog_journal:/usr/share/graylog/data/journal 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://61.155.158.42:9000/ links: - mongodb:mongo - elasticsearch depends_on: - mongodb - 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 文件保存后通过 docker-compoes up启动整个服务,如果没有问题的话,会看到graylog webserver started的终端输出消息。 访问 http://{server}:9090/ 会看到graylog的web界面,使用用户名admin,密码:admin 来登录后台,至此部署完成。 系统配置
  • input配置 graylog的日志收集通过定义input对象来完成,在graylogweb管理界面按照如下图片进入input对象配置:
进入Input配置界面 选择GELF UDP协议来新建一个输入器(input) 选择正确的Input类型 填好相关属性,新建: Input详细配置 至此graylog就可以开始收集日志了
  • Docker配置 如果docker通过命令行启动,可以在run命令中加上如下参数:
docker run --log-driver=gelf --log-opt gelf-address=udp://{graylog服务器地址}:12201 --log-opt tag=<当前容器服务标签,用来供graylog查询的时候进行分类> <运行命令>如果通过docker-compose命令,则可以在docker-compose.yml中加入相关配置,以下用tomcat容器举例: version: '2'services: tomcat: image: tomcat:7 volumes: - /etc/localtime:/etc/localtime - /etc/timezone:/etc/timezone - /data/tomcat-adtp/logs:/usr/local/tomcat/logs - /data/tomcat-adtp/webroot:/usr/local/tomcat/webapps/ROOT environment: - JAVA_OPTS=-Xmx1g - JAVA_OPTS=-Xms3g ports: - "80:8080" logging: driver: "gelf" options: gelf-address: "udp://graylogserver:12201" tag: front-tomcat容器启动的时候可能会有下面这个提示: tomcat_1 | WARNING: no logs are available with the 'gelf' log driver可以无视这个警告,日志还是会继续发送过去的。到这里为止我们可以在graylog的web后台中看到tomcat所产生日志了。 后续虽然日志已经可以集中收集了,但是有些日志还是不会以我们理想的方式收集的,比如Java程序的异常堆栈、Hibernate的格式化sql等等,因为这种日志并不是一行一个的,而是多行一个整体,但是Docker不会知道这个,而是一行一个把日志发送到了graylog,导致一个完整的堆栈分散的存储到了graylog中,这样显然不是我们想要看到的结果,在这里我们可以使用一种比较折衷的方法,让Java程序自己将这种多行日志发送到graylog,剩下的日志继续由Docker处理,具体做法如下: 由于本人在目前系统中使用的logback,可以使用特定的appender把日志发送到graylog,我相信log4j或者是其他相关的日志框架也都有类似的配置。修改logback的配置文件,添加指定的log appender: 192.168.31.8 12201 %ex{short}%.100m %d{MM-dd HH:mm:ss.SSS} [%thread] %-5level \(%F:%L\) - %msg %n true true true true requestId:long tag business-server 这样logback会自动把日志发送到graylog,异常堆栈信息也不会分散了,这个功能需要一个第三方的logback扩展支持,github地址在这里 结束至此,搭建一个graylog并且收集Docker日志集中管理的方案就完成了,希望能够帮到看这篇文章的你。 作者:JeryZen 链接:https://www.jianshu.com/p/25e310596559 来源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|运维之家

GMT+8, 2024-3-28 22:28 , Processed in 0.136351 second(s), 14 queries .

Powered by Dirtysea

© 2008-2020 Dirtysea.com.

快速回复 返回顶部 返回列表