经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Elasticsearch » 查看文章
使用 Docker Compose V2 快速搭建日志分析平台 ELK (Elasticsearch、Logstash 和 Kibana)
来源:cnblogs  作者:易墨  时间:2024/1/22 16:42:57  对本文有异议

前言

ELK 是指 Elasticsearch、Logstash 和 Kibana 这三个开源软件的组合。

Elasticsearch 是一个分布式的搜索和分析引擎,用于日志的存储,搜索,分析,查询。

Logstash 是一个数据收集、转换和传输工具,用于收集过滤和转换数据,然后将其发送到 Elasticsearch 或其他目标存储中。

Kibana 是一个数据可视化平台,通过与 Elasticsearch 的集成,提供了强大的数据分析和仪表盘功能。

Filebeat 是 Elastic Stack(ELK)中的一个组件,用于轻量级的日志文件收集和转发。它能够实时监控指定的日志文件,并将其发送到 Elasticsearch 或 Logstash 进行处理和分析。

ELK的架构有多种,本篇分享使用的架构如图所示: Beats(Filebeat) -> -> Elasticsearch -> Kibana,目前生产环境一天几千万的日志,内存占用大概 10G 左右

特点

  • 开源免费
  • 灵活性和可扩展性,高可用性,易扩展,支持集群
  • 高效的搜索和分析功能
  • 实时性
  • 易于使用

使用情况

  • 目前微服务项目使用,ELK单机部署,处理千万级日志无压力
  • 使用 Kibana 做了面板,根据面板监控系统情况
  • 使用 Docker 部署,方便快捷
  • 上手用还算简单,但是弄懂这一套,就不是那么容易了
  • 提炼出 docker compose 配置,分分钟部署好

实践

准备

  • 一台 linxu 服务器,内存 8G+
  • 安装 docker,docker compose
  • 新机器搭建后的运行情况,限制了Elasticsearch的jvm参数 4g

安装

本篇 ELK 的版本为 v7.8.1,本篇使用的容器网络为 devopsnetwork ,需创建 docker network create devopsnetwork

Elasticsearch 使用 docker compose 安装

  • 官方使用 Docker 安装文档

  • compose.yml

    • 指定了jvm参数:4g
    • 暴露端口 9200:该端口是Elasticsearch REST API的默认端口。
    • 暴露端口 9300:该端口是Elasticsearch节点之间的内部通信端口,默认用于节点之间的集群通信
    • 挂载数据目录 ./data及配置文件./config/elasticsearch.yml
    • 需要对两个目录进行授权,这里直接用了777,也可以根据官网使用对应es的用户id 1000
  1. version: '3.1'
  2. services:
  3. elk_elasticsearch:
  4. image: elasticsearch:7.8.1
  5. container_name: elk_elasticsearch
  6. restart: always
  7. environment:
  8. - discovery.type=single-node
  9. - ES_JAVA_OPTS=-Xms4096m -Xmx4096m
  10. ports:
  11. - 9200:9200
  12. - 9300:9300
  13. volumes:
  14. # 授权 chmod 777 ./config/ && chmod 777 ./data/
  15. - ./data:/usr/share/elasticsearch/data
  16. - ./config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
  17. networks:
  18. - devopsnetwork
  19. networks:
  20. devopsnetwork:
  21. external: true
  • config/elasticsearch.yml
  1. network.host: 0.0.0.0
  2. xpack:
  3. ml.enabled: false
  4. monitoring.enabled: false
  5. security.enabled: false
  6. watcher.enabled: false

将其拷贝到服务器执行启动即可

  1. #cd /app/elasticsearch
  2. mkdir ./config
  3. mkdir ./data
  4. chmod 777 ./config/ && chmod 777 ./data/
  5. docker compose up -d

验证访问

Logstash 使用 docker compose 安装

  • 官方使用 Docker 安装 文档

  • compose.yml

    • 暴露端口5044:用于接收来自其他主机的日志数据、
    • 挂载的 ./pipeline./config目录可以运行容器复制出来
    • 需要将./config/logstash.yml 和 ./pipeline/logstash.conf 改成es地址,参考
  1. version: '3.1'
  2. services:
  3. elk_logstash:
  4. image: logstash:7.17.16
  5. container_name: elk_logstash
  6. restart: always
  7. ports:
  8. - 5044:5044
  9. volumes:
  10. # 授权 chmod 777 ./logs/ && chmod 777 ./data/ && chmod 777 ./pipeline/ && chmod 777 ./config/
  11. - /etc/timezone:/etc/timezone
  12. - /etc/localtime:/etc/localtime:ro
  13. - ./logs:/usr/share/logstash/logs
  14. - ./data:/usr/share/logstash/data
  15. - ./pipeline:/usr/share/logstash/pipeline
  16. - ./config:/usr/share/logstash/config
  17. networks:
  18. - devopsnetwork
  19. networks:
  20. devopsnetwork:
  21. external: true
  • pipeline/logstash.conf

  1. input {
  2. beats {
  3. port => 5044
  4. codec => json {
  5. charset => "UTF-8"
  6. }
  7. }
  8. }
  9. filter {
  10. }
  11. output {
  12. elasticsearch {
  13. hosts => ["http://192.168.123.102:9200"]
  14. index => "%{[app]}-%{+YYYY.MM.dd}"
  15. }
  16. stdout {
  17. codec => rubydebug
  18. }
  19. }

将其拷贝到服务器执行启动即可

  1. mkdir ./data
  2. mkdir ./logs
  3. chmod 777 ./logs/ && chmod 777 ./data/ && chmod 777 ./pipeline/ && chmod 777 ./config/
  4. docker compose up -d

Kibana 使用 docker compose 安装

  • 官方使用 Docker 安装文档

  • compose.yml

    • 指定es节点是单节点,多节点使用zen
    • 挂载配置文件 ./config/kibana.yml
    • 暴露端口 5601:面板访问端口
  1. version: '3.1'
  2. services:
  3. elk_kibana:
  4. image: kibana:7.8.1
  5. container_name: elk_kibana
  6. restart: always
  7. environment:
  8. - discovery.type=single-node
  9. ports:
  10. - 5601:5601
  11. volumes:
  12. - ./config/kibana.yml:/usr/share/kibana/config/kibana.yml
  13. networks:
  14. - devopsnetwork
  15. networks:
  16. devopsnetwork:
  17. external: true
  • config/kibana.yml
  1. server.host: "0.0.0.0"
  2. elasticsearch.hosts: ["http://192.168.123.102:9200/"]
  3. i18n.locale: "zh-CN"
  4. xpack:
  5. apm.ui.enabled: false
  6. graph.enabled: false
  7. ml.enabled: false
  8. monitoring.enabled: false
  9. reporting.enabled: false
  10. security.enabled: false
  11. grokdebugger.enabled: false
  12. searchprofiler.enabled: false

将其拷贝到服务器执行启动即可

  1. docker compose up -d

Filebeat 使用 docker compose 安装

  • compose.yml

    • 挂载filebeat的配置文件,数据目录及日志目录,需要设置权限
    • 挂载容器外的日志到容器内的日志采集目录
  1. version: '3.1'
  2. services:
  3. elk_filebeat:
  4. image: elastic/filebeat:7.8.1
  5. container_name: elk_filebeat
  6. restart: always
  7. volumes:
  8. # 授权 chmod 777 ./config/ && chmod 777 ./data/ && chmod 777 ./logs/ && chmod 777 /app/logs
  9. - ./config/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
  10. - ./data:/usr/share/filebeat/data
  11. - ./logs:/usr/share/filebeat/logs
  12. - /app/logs:/app/logs
  13. networks:
  14. - devopsnetwork
  15. networks:
  16. devopsnetwork:
  17. external: true
  • config/filebeat.yml

    • hosts 节点需要配置 logstash 地址
    • paths 指定日志目录
  1. output.logstash:
  2. #logstash hosts
  3. hosts: ["192.168.123.102:5044"]
  4. fields_under_root: true
  5. filebeat.inputs:
  6. - type: log
  7. enabled: true
  8. paths:
  9. - /app/logs/*/*.log
  10. close_older: 24h
  11. ignore_older: 24h
  12. json.keys_under_root: true
  13. json.overwrite_keys: true
  14. encoding: utf-8
  15. filebeat.config.modules:
  16. path: ${path.config}/modules.d/*.yml
  17. reload.enabled: false
  18. setup.template.settings:
  19. index.number_of_shards: 3
  20. processors:
  21. - add_host_metadata: ~
  22. - add_cloud_metadata: ~
  23. - drop_fields:
  24. fields: ["log","@version","ecs","agent","beat","host","beat.hostname","beat.version","beat.name","prospector.type","input.type","host.id","host.name","host.os.build","host.os.family","host.os.name","host.os.platform","host.os.platform","log.file.path","tags","offset","host.architecture","host.os.version"]

安全使用

配置 nginx 域名转发

  1. server {
  2. listen 80;
  3. listen 443 ssl;
  4. server_name kibana.devops.test.com; # 自行修改成你的域名
  5. ssl_certificate /certs/kibana.devops.test.com/server.crt;
  6. ssl_certificate_key /certs/kibana.devops.test.com/server.key;
  7. ssl_session_cache shared:SSL:1m;
  8. ssl_session_timeout 5m;
  9. ssl_ciphers HIGH:!aNULL:!MD5;
  10. ssl_prefer_server_ciphers on;
  11. location / {
  12. proxy_pass http://192.168.123.102:5601;
  13. proxy_http_version 1.1;
  14. proxy_buffering off;
  15. proxy_request_buffering off;
  16. proxy_set_header Upgrade $http_upgrade;
  17. proxy_set_header Connection "upgrade";
  18. proxy_set_header Host $host;
  19. proxy_set_header X-Forwarded-For $remote_addr;
  20. }
  21. }

配置完成,即可使用域名访问

配置 nginx 基本认证

在Nginx配置文件中添加以下内容

  1. location / {
  2. auth_basic "Restricted Content";
  3. auth_basic_user_file /certs/kibana.devops.test.com/passwd;
  4. ...
  5. }

添加对应的passwd文件,使用 htpasswd 生成,如账号密码是 root devops666 的配置文件

  1. root:WvesKBTr22.wY

可以使用我 metools 工具的 密码生成器 生成

配置完成,重载配置后刷新页面就提示输入账号密码了

配置 nginx IP白名单

  1. location / {
  2. allow 192.168.123.201; # 允许的IP地址
  3. deny all; # 拒绝所有其他IP地址
  4. }

后语

本篇只针对 ELK 的安装进行了介绍及整理对应的 Docker Compose 配置文件,后续即可快速安装配置 ELK 环境,如何与项目结合使用后续再分享

原文链接:https://www.cnblogs.com/morang/p/17976704/devops-docker-elk-install-nginx-config

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号