ToB企服应用市场:ToB评测及商务社交产业平台

标题: 使用 Docker Compose V2 快速搭建日志分析平台 ELK (Elasticsearch、Logsta [打印本页]

作者: 麻花痒    时间: 2024-4-11 23:28
标题: 使用 Docker Compose V2 快速搭建日志分析平台 ELK (Elasticsearch、Logsta
前言

ELK 是指 Elasticsearch、Logstash 和 Kibana 这三个开源软件的组合。
Elasticsearch 是一个分布式的搜索和分析引擎,用于日志的存储,搜索,分析,查询。
Logstash 是一个数据收集、转换和传输工具,用于收集过滤和转换数据,然后将其发送到 Elasticsearch 或其他目标存储中。
Kibana 是一个数据可视化平台,通过与 Elasticsearch 的集成,提供了强大的数据分析和仪表盘功能。
Filebeat 是 Elastic Stack(ELK)中的一个组件,用于轻量级的日志文件收集和转发。它能够实时监控指定的日志文件,并将其发送到 Elasticsearch 或 Logstash 进行处理和分析。
ELK的架构有多种,本篇分享使用的架构如图所示: Beats(Filebeat) -> -> Elasticsearch -> Kibana,目前生产环境一天几千万的日志,内存占用大概 10G 左右

特点

使用情况

实践

准备



安装

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

  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
复制代码
  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 安装

  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
复制代码
  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 安装

  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
复制代码
  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 安装

  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
复制代码
  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 环境,如何与项目结合使用后续再分享

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4