开始动手前的说明

我搭建这一套环境的时候是基于docker搭建的,用到了docker-compose,所以开始前要先安装好dockerdocker-compose,并简单的了解dockerdocker-compose的用法。

前言

Q: ELK 是什么?

A: ELK 指:ElasticSearch + Logstash + Kibana

Q: ELK 用来干什么?

A: ELK 可以用来收集日志并进行日志分析,实现日志的统一管理,帮助开发人员和运维人员快速分析日志,快速发现问题。

当然它还有很多非常多实用功能,需要您去自行挖掘。

这里使用Filebeat进行日志收集并将收集上来的日志发送给ELK

es:

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎。

kibana:

Kibana 是通向 Elastic 产品集的窗口。 它可以在 Elasticsearch 中对数据进行视觉探索和实时分析。

logstash:

Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中

filebeat:

轻量级收集日志的服务,并且可以将收集的日志发送给 es、logstash、kafka、redis

filebeat 概览图

ELK日志数据收集时序图

接下来开始动手操作。

准备工作

  1. $ mkdir ELK_pro
  2. $ cd ELK_pro
  3. $ touch docker-compose.yml
  4. $ touch Dockerfile
  5. $ touch filebeat.yml
  6. $ touch kibana.yml
  7. $ touch logstash-pipeline.conf
  8. $ touch logstash.yml

1. ElasticSearch 环境搭建

我是参考官网的例子直接写的docker-compose.yml,然后做了小的改动。下面是我改动之后的配置:

  1. version: "3"
  2. services:
  3. es01:
  4. image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
  5. container_name: es01
  6. environment:
  7. - node.name=es01
  8. - cluster.name=es-docker-cluster
  9. - discovery.seed_hosts=es02,es03
  10. - cluster.initial_master_nodes=es01,es02,es03
  11. - bootstrap.memory_lock=true
  12. - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  13. - xpack.security.enabled=true
  14. - xpack.security.authc.accept_default_password=true
  15. - xpack.security.transport.ssl.enabled=true
  16. - xpack.security.transport.ssl.verification_mode=certificate
  17. - xpack.security.transport.ssl.keystore.path=/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  18. - xpack.security.transport.ssl.truststore.path=/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  19. ulimits:
  20. memlock:
  21. soft: -1
  22. hard: -1
  23. volumes:
  24. - data01:/usr/share/elasticsearch/data
  25. - ./elastic-certificates.p12:/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  26. ports:
  27. - 9200:9200
  28. networks:
  29. - falling_wind
  30. es02:
  31. image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
  32. container_name: es02
  33. environment:
  34. - node.name=es02
  35. - cluster.name=es-docker-cluster
  36. - discovery.seed_hosts=es01,es03
  37. - cluster.initial_master_nodes=es01,es02,es03
  38. - bootstrap.memory_lock=true
  39. - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  40. - xpack.security.enabled=true
  41. - xpack.security.authc.accept_default_password=true
  42. - xpack.security.transport.ssl.enabled=true
  43. - xpack.security.transport.ssl.verification_mode=certificate
  44. - xpack.security.transport.ssl.keystore.path=/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  45. - xpack.security.transport.ssl.truststore.path=/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  46. ulimits:
  47. memlock:
  48. soft: -1
  49. hard: -1
  50. volumes:
  51. - data02:/usr/share/elasticsearch/data
  52. - ./elastic-certificates.p12:/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  53. networks:
  54. - falling_wind
  55. es03:
  56. image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
  57. container_name: es03
  58. environment:
  59. - node.name=es03
  60. - cluster.name=es-docker-cluster
  61. - discovery.seed_hosts=es01,es02
  62. - cluster.initial_master_nodes=es01,es02,es03
  63. - bootstrap.memory_lock=true
  64. - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  65. - xpack.security.enabled=true
  66. - xpack.security.authc.accept_default_password=true
  67. - xpack.security.transport.ssl.enabled=true
  68. - xpack.security.transport.ssl.verification_mode=certificate
  69. - xpack.security.transport.ssl.keystore.path=/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  70. - xpack.security.transport.ssl.truststore.path=/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  71. ulimits:
  72. memlock:
  73. soft: -1
  74. hard: -1
  75. volumes:
  76. - data03:/usr/share/elasticsearch/data
  77. - ./elastic-certificates.p12:/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  78. networks:
  79. - falling_wind
  80. volumes:
  81. data01:
  82. driver: local
  83. data02:
  84. driver: local
  85. data03:
  86. driver: local
  87. networks:
  88. falling_wind:
  89. driver: bridge

这个配置我是加了证书认证的。

下面请看证书生成方法:

  1. 进入docker (es01):
  1. $ docker ps
  2. $ docker exec -it 容器ID或名称 /bin/sh
  1. 生成证书并copy
  1. $ cd bin
  2. $ elasticsearch-certutil ca
  3. $ elasticsearch-certutil cert --ca elastic-stack-ca.p12
  4. $ exit
  5. $ docker cp 容器ID:/usr/share/elasticsearch/elastic-certificates.p12 .
  6. # 注意:最后的点不要忘记了。
  1. 设置es01的密码:
  1. $ docker ps
  2. $ docker exec -it 容器ID或名称 /bin/sh
  3. $ cd bin
  4. $ elasticsearch-setup-passwords interactive
  5. # 按照提示设置密码即可

2. kibana 环境搭建

配置 kibana

docker-compose.yml

  1. kibana:
  2. image: docker.elastic.co/kibana/kibana:7.6.1
  3. container_name: kibana_7_61
  4. ports:
  5. - "5601:5601"
  6. volumes:
  7. - ./kibana.yml:/usr/share/kibana/config/kibana.yml
  8. networks:
  9. - falling_wind
  10. depends_on:
  11. - es01

kibana.yml

  1. server.name: kibana
  2. server.host: "0"
  3. elasticsearch.hosts: ["http://172.18.114.219:9200"]
  4. xpack.monitoring.ui.container.elasticsearch.enabled: true
  5. elasticsearch.username: your username
  6. elasticsearch.password: your password

3. logsstash 环境搭建

配置logsstash

docker-compose.yml

  1. logstash:
  2. image: docker.elastic.co/logstash/logstash:7.6.1
  3. container_name: logstash_7_61
  4. ports:
  5. - "5044:5044"
  6. volumes:
  7. - ./logstash.yml:/usr/share/logstash/config/logstash.yml
  8. - ./logstash-pipeline.conf:/usr/share/logstash/conf.d/logstash-pipeline.conf
  9. networks:
  10. - falling_wind

logstash.yml

  1. path.config: /usr/share/logstash/conf.d/*.conf
  2. path.logs: /var/log/logstash

logstash-pipeline.conf

  1. input {
  2. beats {
  3. port => 5044
  4. codec => json
  5. }
  6. tcp {
  7. port => 8000
  8. codec => json
  9. }
  10. }
  11. output {
  12. elasticsearch {
  13. hosts => ["172.18.114.219:9200"]
  14. index => "falling-wind"
  15. user => "your username"
  16. password => "your password"
  17. }
  18. stdout {
  19. codec => rubydebug
  20. }
  21. }

4. filebeat 环境搭建

配置 filebeat

docker-compose.yml

  1. filebeat:
  2. container_name: filebeat_7_61
  3. build:
  4. context: .
  5. dockerfile: Dockerfile
  6. volumes:
  7. - /var/logs:/usr/share/filebeat/logs
  8. networks:
  9. - falling_wind

Dockerfile

  1. FROM docker.elastic.co/beats/filebeat:7.6.1
  2. COPY filebeat.yml /usr/share/filebeat/filebeat.yml
  3. USER root
  4. RUN chown root:filebeat /usr/share/filebeat/filebeat.yml
  5. RUN chown root:filebeat /usr/share/filebeat/data/meta.json

说明:官网上的Dockerfile最后还加了 USER filebeat,按理说应该不会出现什么问题,但是启动总是会报权限不足:/usr/share/filebeat/data/meta.json,所以我暂时将这一句去掉就好了。

filebeat.yml

  1. filebeat.inputs:
  2. - type: log
  3. paths:
  4. - /usr/share/filebeat/logs/falling-wind/*.log
  5. multiline.pattern: '^[[:space:]]'
  6. multiline.negate: false
  7. multiline.match: after
  8. tags: ["falling-wind"]
  9. - type: log
  10. paths:
  11. - /usr/share/filebeat/logs/celery/*.log
  12. multiline.pattern: '^[[:space:]]'
  13. multiline.negate: false
  14. multiline.match: after
  15. tags: ["celery"]
  16. - type: log
  17. paths:
  18. - /usr/share/filebeat/logs/gunicorn/*.log
  19. multiline.pattern: '^[[:space:]]'
  20. multiline.negate: false
  21. multiline.match: after
  22. tags: ["gunicorn"]
  23. - type: log
  24. paths:
  25. - /usr/share/filebeat/logs/supervisor/*.log
  26. tags: ["supervisor"]
  27. #============================= Filebeat modules ===============================
  28. filebeat.config.modules:
  29. # Glob pattern for configuration loading
  30. path: ${path.config}/modules.d/*.yml
  31. # Set to true to enable config reloading
  32. reload.enabled: true
  33. output.logstash:
  34. hosts: ["172.18.114.219:5044"]

注意合并多行信息的配置

将堆栈信息合并:

  1. multiline.pattern: '^[[:space:]]'
  2. multiline.negate: false
  3. multiline.match: after

总结

一共需要的配置文件:

  • docker-compose.yml
  • Dockerfile: 构建filebeat镜像
  • elastic-certificates.p12:证书文件
  • filebeat.yml
  • kibana.yml
  • logstash-pipeline.conf
  • logstash.yml

docker-compose.yml 完整版:

  1. version: "3"
  2. services:
  3. es01:
  4. image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
  5. container_name: es01
  6. environment:
  7. - node.name=es01
  8. - cluster.name=es-docker-cluster
  9. - discovery.seed_hosts=es02,es03
  10. - cluster.initial_master_nodes=es01,es02,es03
  11. - bootstrap.memory_lock=true
  12. - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  13. - xpack.security.enabled=true
  14. - xpack.security.authc.accept_default_password=true
  15. - xpack.security.transport.ssl.enabled=true
  16. - xpack.security.transport.ssl.verification_mode=certificate
  17. - xpack.security.transport.ssl.keystore.path=/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  18. - xpack.security.transport.ssl.truststore.path=/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  19. ulimits:
  20. memlock:
  21. soft: -1
  22. hard: -1
  23. volumes:
  24. - data01:/usr/share/elasticsearch/data
  25. - ./elastic-certificates.p12:/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  26. ports:
  27. - 9200:9200
  28. networks:
  29. - falling_wind
  30. es02:
  31. image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
  32. container_name: es02
  33. environment:
  34. - node.name=es02
  35. - cluster.name=es-docker-cluster
  36. - discovery.seed_hosts=es01,es03
  37. - cluster.initial_master_nodes=es01,es02,es03
  38. - bootstrap.memory_lock=true
  39. - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  40. - xpack.security.enabled=true
  41. - xpack.security.authc.accept_default_password=true
  42. - xpack.security.transport.ssl.enabled=true
  43. - xpack.security.transport.ssl.verification_mode=certificate
  44. - xpack.security.transport.ssl.keystore.path=/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  45. - xpack.security.transport.ssl.truststore.path=/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  46. ulimits:
  47. memlock:
  48. soft: -1
  49. hard: -1
  50. volumes:
  51. - data02:/usr/share/elasticsearch/data
  52. - ./elastic-certificates.p12:/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  53. networks:
  54. - falling_wind
  55. es03:
  56. image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
  57. container_name: es03
  58. environment:
  59. - node.name=es03
  60. - cluster.name=es-docker-cluster
  61. - discovery.seed_hosts=es01,es02
  62. - cluster.initial_master_nodes=es01,es02,es03
  63. - bootstrap.memory_lock=true
  64. - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  65. - xpack.security.enabled=true
  66. - xpack.security.authc.accept_default_password=true
  67. - xpack.security.transport.ssl.enabled=true
  68. - xpack.security.transport.ssl.verification_mode=certificate
  69. - xpack.security.transport.ssl.keystore.path=/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  70. - xpack.security.transport.ssl.truststore.path=/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  71. ulimits:
  72. memlock:
  73. soft: -1
  74. hard: -1
  75. volumes:
  76. - data03:/usr/share/elasticsearch/data
  77. - ./elastic-certificates.p12:/usr/share/elasticsearch/config/certificates/elastic-certificates.p12
  78. networks:
  79. - falling_wind
  80. kibana:
  81. image: docker.elastic.co/kibana/kibana:7.6.1
  82. container_name: kibana_7_61
  83. ports:
  84. - "5601:5601"
  85. volumes:
  86. - ./kibana.yml:/usr/share/kibana/config/kibana.yml
  87. networks:
  88. - falling_wind
  89. depends_on:
  90. - es01
  91. logstash:
  92. image: docker.elastic.co/logstash/logstash:7.6.1
  93. container_name: logstash_7_61
  94. ports:
  95. - "5044:5044"
  96. volumes:
  97. - ./logstash.yml:/usr/share/logstash/config/logstash.yml
  98. - ./logstash-pipeline.conf:/usr/share/logstash/conf.d/logstash-pipeline.conf
  99. networks:
  100. - falling_wind
  101. filebeat:
  102. container_name: filebeat_7_61
  103. build:
  104. context: .
  105. dockerfile: Dockerfile
  106. volumes:
  107. - /var/logs:/usr/share/filebeat/logs
  108. networks:
  109. - falling_wind
  110. volumes:
  111. data01:
  112. driver: local
  113. data02:
  114. driver: local
  115. data03:
  116. driver: local
  117. networks:
  118. falling_wind:
  119. driver: bridge

Enjoy your code!

ELK 环境搭建总结的更多相关文章

  1. ELK 环境搭建4-Kafka + zookeeper

    一.安装前准备 1.节点 192.168.30.41 192.168.30.42 192.168.30.43 2.操作系统: Centos7.5 3.安装包 a.java8: jdk-8u181-li ...

  2. ELK 环境搭建3-Logstash

    一.Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的.多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件或者中间件. 二.搭建 1.因为要涉及到收 ...

  3. ELK 环境搭建2-Kibana

    一.安装前准备 1.节点 192.168.30.41 2.操作系统: Centos7.5 3.安装包 a.java8: jdk-8u181-linux-x64.tar.gz b.Kibana kiba ...

  4. ELK环境搭建完整说明

    ELK环境搭建完整说明 ELK:ElasticSerach.Logstash.Kibana三款产品名称的首字母集合,用于日志的搜集和搜索.简单地理解为我们可以把服务端的日志(nginx.tomcat等 ...

  5. ELK环境搭建

    ELK环境搭建 1. Virtualbox/Vagrant安装 41.1. Virtualbox安装 41.2. Vagrant安装 41.2.1. 简述 41.2.2. Vagrant box 41 ...

  6. 2017.7.18 linux下ELK环境搭建

    参考来自:Linux日志分析ELK环境搭建  另一篇博文:2017.7.18 windows下ELK环境搭建   0 版本说明 因为ELK从5.0开始只支持jdk 1.8,但是项目中使用的是JDK 1 ...

  7. 2017.7.18 windows下ELK环境搭建

    参考来自:Windows环境下ELK平台的搭建 另一篇博文:2017.7.18 linux下ELK环境搭建 0 版本说明 因为ELK从5.0开始只支持jdk 1.8,但是项目中使用的是JDK 1.7, ...

  8. Linux日志分析ELK环境搭建

    场景:ELK作为一个日志收集和检索系统,感觉功能还是相当的强大的. ELK是啥, 其实是是三个组件的缩写, 分别是elasticsearch, logstash, kibana. ELK平台可以用于实 ...

  9. Windows下ELK环境搭建(单机多节点集群部署)

    1.背景 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时 ...

随机推荐

  1. 【转载】Oracle Spatial中SDO_Geometry详细说明

    转载只供个人学习参考,查看请前往原出处:http://www.cnblogs.com/upDOoGIS/archive/2009/05/20/1469871.html 相关微博:oracle 创建SD ...

  2. hadoop地址配置、内存配置、守护进程设置、环境设置

    1.1  hadoop配置 hadoop配置文件在安装包的etc/hadoop目录下,但是为了方便升级,配置不被覆盖一般放在其他地方,并用环境变量HADOOP_CONF_DIR指定目录. 1.1.1  ...

  3. python爬虫-纠正MD5错误认知

    m = md5(".encode()) print(m.hexdigest()) # 25d55ad283aa400af464c76d713c07ad m = md5(".enco ...

  4. LeetCode 32,并不Hard的难题,解法超级经典,带你领略动态规划的精彩

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天给大家分享的是LeetCode当中的32题,这是一道Hard难度的题.也是一道经典的字符串处理问题,在接下来的文章当中,我们会详细地解读 ...

  5. Python 将两个绝对路径拼接

    import os def two_abs_join(abs1, abs2): """ 将 绝对路径将两个绝对路径拼接, 就是将第二个的开路径(windows 的 C, ...

  6. 在ASP.NET Core Mvc 集成MarkDown

    这几天在做文章编辑,首先就想到了markdown,它比其它的都要新,而且很好用,相对于其它的html编辑器,好久不更新,要好得多,哦~对了我现在已经用上新版的Edge了,经过很多朋友测试,性能比谷歌浏 ...

  7. fsLayuiPlugin配置说明

    fsLayuiPlugin 是一个基于layui的快速开发插件,支持数据表格增删改查操作,提供通用的组件,通过配置html实现数据请求,减少前端js重复开发的工作. GitHub下载 码云下载 测试环 ...

  8. yuchuan_Linux_C 编程之七系统IO函数

    一.整体大纲 二. 系统IO函数 1. 一些概念    文件描述符     PCB     C库函的IO缓冲区 1) 文件描述符            int 类型            一个进程最多 ...

  9. 7种你应该知道的JavaScript常见的错误

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://blog.bitsrc.io/types-of-native-errors-in- ...

  10. python之二分法求平方根

    前几天学完python的程序分支结构后,老师课后留了一个问题,用两种方法计算一个大于或等于 1 的实数 n 数的平方根. 描述设计一个用二分法计算一个大于或等于 1 的实数 n 的平方根的函数sqrt ...