使用docker搭建elk

1、使用docker-compose文件构建elk。文件如下:

  1. version: '3'
  2. services:
  3. elk:
  4. image: sebp/elk:640
  5. ports:
  6. - "5601:5601"
  7. - "9200:9200"
  8. - "5044:5044"
  9. environment:
  10. - ES_JAVA_OPTS=-Xms512m -Xmx512m
  11. volumes:
  12. - ~dockerdata/elk:/var/lib/elasticsearch

2、执行docker-compose up -d 启动elk。可以使用docker logs 命令查看elk启动日志。启动成功后打开浏览器访问 http://127.0.0.1:5601

filebeat安装与配置

关于filebeat本文也不做过多介绍。只讲解安装与配置。

1、filebeat的docker-composep

  1. version: '3'
  2. services:
  3. filebeat:
  4. image: prima/filebeat:6
  5. #restart: always
  6. volumes:
  7. - ./config/filebeat.yml:/filebeat.yml
  8. - ~/dockerdata/filebeat:/data
  9. - /var/lib/docker/containers:/var/lib/docker/containers

挂载说明

  • filebeat.yml配置需要在本地有对应文件,稍后会说到
  • filebeat抓取日志进度数据,挂载到本地,防止filebeat容器重启,所有日志重新抓取
  • 因为要收集docker容器的日志,所以要挂在到docker日志存储目录,使它有读取权限

2、filebeat配置文件设置

  • 在docker-compose.yml同级目录新建config文件夹
  • 在config文件下新建filebeat.yml文件,文件内容如下:
  1. filebeat.prospectors:
  2. - type: log
  3. enabled: true
  4. paths:
  5. - /var/lib/docker/containers/*/*.log #需要读取日志的目录#
  6. json.keys_under_root: true # 因为docker使用的log driver是json-file,因此采集到的日志格式是json格式,设置为true之后,filebeat会将日志进行json_decode处理
  7. json.add_error_key: true #如果启用此设置,则在出现JSON解组错误或配置中定义了message_key但无法使用的情况下,Filebeat将添加“error.message”和“error.type:json”键。
  8. json.message_key: log #一个可选的配置设置,用于指定应用行筛选和多行设置的JSON密钥。 如果指定,键必须位于JSON对象的顶层,且与键关联的值必须是字符串,否则不会发生过滤或多行聚合。
  9. tail_files: true
  10. # 将error日志合并到一行
  11. multiline.pattern: '^([0-9]{4}|[0-9]{2})-[0-9]{2}'
  12. multiline.negate: true
  13. multiline.match: after
  14. multiline.timeout: 10s
  15. # registry_file: /opt/filebeat/registry
  16. #-------------------------- Elasticsearch output ------------------------------
  17. # 直接输出到elasticsearch,这里的hosts是elk地址,端口号是elasticsearch端口#
  18. output.elasticsearch:
  19. hosts: ["10.9.70.62:9200"]
  20. #==================== Elasticsearch template setting ==========================
  21. setup.template.name: "filebeat.template.json"
  22. setup.template.fields: "filebeat.template.json"
  23. setup.template.overwrite: true
  24. setup.template.enabled: false
  25. # 过滤掉一些不必要字段#
  26. processors:
  27. - drop_fields:
  28. fields: ["input_type", "offset", "stream", "beat"]
  • 在config文件下新建filebeat.template.json文件,文件内容如下:
  1. {
  2. "mappings": {
  3. "_default_": {
  4. "_all": {
  5. "norms": false
  6. },
  7. "_meta": {
  8. "version": "5.1.2"
  9. },
  10. "dynamic_templates": [
  11. {
  12. "strings_as_keyword": {
  13. "mapping": {
  14. "ignore_above": 1024,
  15. "type": "keyword"
  16. },
  17. "match_mapping_type": "string"
  18. }
  19. }
  20. ],
  21. "properties": {
  22. "@timestamp": {
  23. "type": "date"
  24. },
  25. "beat": {
  26. "properties": {
  27. "hostname": {
  28. "ignore_above": 1024,
  29. "type": "keyword"
  30. },
  31. "name": {
  32. "ignore_above": 1024,
  33. "type": "keyword"
  34. },
  35. "version": {
  36. "ignore_above": 1024,
  37. "type": "keyword"
  38. }
  39. }
  40. },
  41. "input_type": {
  42. "ignore_above": 1024,
  43. "type": "keyword"
  44. },
  45. "message": {
  46. "norms": false,
  47. "type": "text"
  48. },
  49. "meta": {
  50. "properties": {
  51. "cloud": {
  52. "properties": {
  53. "availability_zone": {
  54. "ignore_above": 1024,
  55. "type": "keyword"
  56. },
  57. "instance_id": {
  58. "ignore_above": 1024,
  59. "type": "keyword"
  60. },
  61. "machine_type": {
  62. "ignore_above": 1024,
  63. "type": "keyword"
  64. },
  65. "project_id": {
  66. "ignore_above": 1024,
  67. "type": "keyword"
  68. },
  69. "provider": {
  70. "ignore_above": 1024,
  71. "type": "keyword"
  72. },
  73. "region": {
  74. "ignore_above": 1024,
  75. "type": "keyword"
  76. }
  77. }
  78. }
  79. }
  80. },
  81. "offset": {
  82. "type": "long"
  83. },
  84. "source": {
  85. "ignore_above": 1024,
  86. "type": "keyword"
  87. },
  88. "tags": {
  89. "ignore_above": 1024,
  90. "type": "keyword"
  91. },
  92. "type": {
  93. "ignore_above": 1024,
  94. "type": "keyword"
  95. }
  96. }
  97. }
  98. },
  99. "order": 0,
  100. "settings": {
  101. "index.refresh_interval": "5s"
  102. },
  103. "template": "filebeat-*"
  104. }
  • 执行docker-compose up -d 启动filebeat。

在需要抓取docker日志的所有主机上按照以上步骤安装运行filebeat即可。到这一步其实就已经可以在elk里面建立索引查抓取到的日志。但是如果docker容器很多的话,没有办法区分日志具体是来自哪个容器,所以为了能够在elk里区分日志来源,需要在具体的docker容器上做一些配置,接着看下面的内容

docker容器设置

可以给具体的docker容器增加labels,并且设置logging。参考以下docker-compose.yml

  1. version: '3'
  2. services:
  3. db:
  4. image: mysql:5.7
  5. # 设置labels
  6. labels:
  7. service: db
  8. # logging设置增加labels.service
  9. logging:
  10. options:
  11. labels: "service"
  12. ports:
  13. - "3306:3306"

重新启动应用,然后访问http://127.0.0.1:5601 重新添加索引。查看日志,可以增加过滤条件 attrs.service:db,此时查看到的日志就全部来自db容器。结果如下图所示:

参考文章

采集docker-container日志

Beats详解(四)

首发地址

http://www.devzxd.top/2018/10/25/elk-filebeat-dockerlogs.html

elk-filebeat收集docker容器日志的更多相关文章

  1. ELK:收集Docker容器日志

    简介 之前写过一篇博客 ELK:日志收集分析平台,介绍了在Centos7系统上部署配置使用ELK的方法,随着容器化时代的到来,容器化部署成为一种很方便的部署方式,收集容器日志也成为刚需.本篇文档从 容 ...

  2. ELK:收集k8s容器日志最佳实践

    简介 关于日志收集这个主题,这已经是第三篇了,为什么一再研究这个课题,因为这个课题实在太重要,而当今优秀的开源解决方案还不是很明朗: 就docker微服务化而言,研发有需求标准输出,也有需求文件输出, ...

  3. EFK的安装和收集docker容器日志展示

    在用户根目录创建个filebeat.docker.yml文件,文件内容如下 filebeat.config: modules: path: ${path.config}/modules.d/*.yml ...

  4. docker 容器日志集中 ELK + filebeat

    docker 容器日志集中 ELK ELK 基于 ovr 网络下 docker-compose.yaml version: '2' networks: network-test: external: ...

  5. docker容器日志收集方案(方案一 filebeat+本地日志收集)

    filebeat不用多说就是扫描本地磁盘日志文件,读取文件内容然后远程传输. docker容器日志默认记录方式为 json-file 就是将日志以json格式记录在磁盘上 格式如下: { " ...

  6. ELK学习实验018:filebeat收集docker日志

    Filebeat收集Docker日志 1 安装docker [root@node4 ~]# yum install -y yum-utils device-mapper-persistent-data ...

  7. docker容器日志收集方案(方案二 filebeat+syslog本地日志收集)

    与方案一一样都是把日志输出到本地文件系统使用filebeat进行扫描采集 不同的是输出的位置是不一样的 我们对docker进行如下设置 sudo docker service update  --lo ...

  8. docker容器日志收集方案汇总评价总结

    docker日志收集方案有太多,下面截图罗列docker官方给的日志收集方案(详细请转docker官方文档).很多方案都不适合我们下面的系列文章没有说. 经过以下5篇博客的叙述简单说下docker容器 ...

  9. docker容器日志查看

    日志分两类,一类是 Docker 引擎日志:另一类是 容器日志. Docker 引擎日志 Docker 引擎日志 一般是交给了 Upstart(Ubuntu 14.04) 或者 systemd (Ce ...

随机推荐

  1. 1006: Hero In Maze

    1006: Hero In Maze 时间限制: 1000 Sec  内存限制: 64 MB提交: 417  解决: 80[提交][状态][讨论版][命题人:外部导入] 题目描述 500年前,Jess ...

  2. SWFUpload 参数详解

    属性   类型 默认值 描述 upload_url String 处理上传文件的服务器端页面的url地址,可以是绝对地址,也可以是相对地址,当为相对地址时相对的是当前代码所在的文档地址 preserv ...

  3. R 语言爬虫 之 cnblog博文爬取

    Cnbolg Crawl a). 加载用到的R包 ##library packages needed in this case library(proto) library(gsubfn) ## Wa ...

  4. hadoop中使用的Unsafe.java

    今天查看hadoop源代码, 发现有个Unsafe.java 稍微总结下 优势 1 减少线程调度开销, Unsafe.java 通过采用非堵塞原子方式来减少线程调度开销        2 传统线程通信 ...

  5. orderBy 过滤器

    orderBy 过滤器根据表达式排列数组: <!DOCTYPE html><html><head><meta http-equiv="Content ...

  6. jquery 表单事件

    .blur() 当元素失去焦点的时候触发事件. .blur(handler(eventObject)) handler(eventObject) 每当事件触发时候执行的函数. .blur([event ...

  7. Centos7下MySql5.7安装及配置

    安装MySql 软件包: mysql-community-libs-5.7.22-1.el7.x86_64.rpm mysql-community-common-5.7.22-1.el7.x86_64 ...

  8. 日期格式兼容iOS

    iOS不支持2016-02-11 12:21:12格式的日期 目前Safari可以支持的标准格式: MM-dd-yyyy yyyy/MM/dd MM/dd/yyyy MMMM dd, yyyy MMM ...

  9. 【转载】C#批量插入数据到Sqlserver中的三种方式

    引用:https://m.jb51.net/show/99543 这篇文章主要为大家详细介绍了C#批量插入数据到Sqlserver中的三种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本篇, ...

  10. 【Effective C++ 读书笔记】条款04:确定对象使用前已先被初始化

    永远在使用对象之前先将它初始化.对于无任何成员的内置类型,你必须手工完成此事. 至于内置类型以外的任何其他东西,初始化责任落在构造函数身上.规则很简单:确保每一个构造函数都将对象的每一个成员初始化. ...