华夏之羲 发表于 2024-1-20 19:55:56

使用 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单机部署,处理千万级日志无压力
[*]使用 Kibana 做了面板,根据面板监控系统情况
[*]使用 Docker 部署,方便快捷
[*]上手用还算简单,但是弄懂这一套,就不是那么容易了
[*]提炼出 docker compose 配置,分分钟部署好
实践

准备


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


[*]本篇文件目录结构,完整文件在Github MeDevOps 仓库

安装

本篇 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

version: '3.1'
services:
elk_elasticsearch:
    image: elasticsearch:7.8.1
    container_name: elk_elasticsearch
    restart: always
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms4096m -Xmx4096m
    ports:
      - 9200:9200
      - 9300:9300
    volumes:
      # 授权 chmod 777 ./config/ && chmod 777 ./data/
      - ./data:/usr/share/elasticsearch/data
      - ./config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    networks:
      - devopsnetwork

networks:
devopsnetwork:
    external: true

[*]config/elasticsearch.yml
network.host: 0.0.0.0
xpack:
ml.enabled: false
monitoring.enabled: false
security.enabled: false
watcher.enabled: false将其拷贝到服务器执行启动即可
#cd /app/elasticsearch
mkdir ./config
mkdir ./data
chmod 777 ./config/ && chmod 777 ./data/
docker compose up -d验证访问

Logstash 使用 docker compose 安装


[*]官方使用 Docker 安装 文档
[*]compose.yml

[*]暴露端口5044:用于接收来自其他主机的日志数据、
[*]挂载的 ./pipeline和./config目录可以运行容器复制出来
[*]需要将./config/logstash.yml 和 ./pipeline/logstash.conf 改成es地址,参考

version: '3.1'
services:
elk_logstash:
    image: logstash:7.17.16
    container_name: elk_logstash
    restart: always
    ports:
      - 5044:5044
    volumes:
   # 授权 chmod 777 ./logs/ && chmod 777 ./data/ && chmod 777 ./pipeline/ && chmod 777 ./config/
      - /etc/timezone:/etc/timezone
      - /etc/localtime:/etc/localtime:ro
      - ./logs:/usr/share/logstash/logs
      - ./data:/usr/share/logstash/data
      - ./pipeline:/usr/share/logstash/pipeline
      - ./config:/usr/share/logstash/config
    networks:
      - devopsnetwork

networks:
devopsnetwork:
    external: true

[*]pipeline/logstash.conf

[*]根据需要修改 output ,这里将推送到es地址中
[*]输出插件文档

input {
    beats {
      port => 5044
      codec => json {
            charset => "UTF-8"
      }
    }

}

filter {

}

output {
    elasticsearch {
      hosts => ["http://192.168.123.102:9200"]
      index => "%{}-%{+YYYY.MM.dd}"
}   
stdout {
    codec => rubydebug
}
}将其拷贝到服务器执行启动即可
mkdir ./data
mkdir ./logs
chmod 777 ./logs/ && chmod 777 ./data/ && chmod 777 ./pipeline/ && chmod 777 ./config/
docker compose up -dKibana 使用 docker compose 安装


[*]官方使用 Docker 安装文档
[*]compose.yml

[*]指定es节点是单节点,多节点使用zen
[*]挂载配置文件 ./config/kibana.yml
[*]暴露端口 5601:面板访问端口

version: '3.1'
services:
elk_kibana:
    image: kibana:7.8.1
    container_name: elk_kibana
    restart: always
    environment:
      - discovery.type=single-node
    ports:
      - 5601:5601
    volumes:
      - ./config/kibana.yml:/usr/share/kibana/config/kibana.yml
    networks:
      - devopsnetwork

networks:
devopsnetwork:
    external: true

[*]config/kibana.yml
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://192.168.123.102:9200/"]
i18n.locale: "zh-CN"
xpack:
apm.ui.enabled: false
graph.enabled: false
ml.enabled: false
monitoring.enabled: false
reporting.enabled: false
security.enabled: false
grokdebugger.enabled: false
searchprofiler.enabled: false将其拷贝到服务器执行启动即可
docker compose up -d
Filebeat 使用 docker compose 安装


[*]compose.yml

[*]挂载filebeat的配置文件,数据目录及日志目录,需要设置权限
[*]挂载容器外的日志到容器内的日志采集目录

version: '3.1'
services:
elk_filebeat:
    image: elastic/filebeat:7.8.1
    container_name: elk_filebeat
    restart: always
    volumes:
      # 授权 chmod 777 ./config/ && chmod 777 ./data/ && chmod 777 ./logs/ && chmod 777 /app/logs
      - ./config/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
      - ./data:/usr/share/filebeat/data
      - ./logs:/usr/share/filebeat/logs
      - /app/logs:/app/logs
    networks:
      - devopsnetwork

networks:
devopsnetwork:
    external: true

[*]config/filebeat.yml

[*]hosts 节点需要配置 logstash 地址
[*]paths 指定日志目录

output.logstash:
#logstash hosts
hosts: ["192.168.123.102:5044"]
fields_under_root: true   
filebeat.inputs:
- type: log
   enabled: true
   paths:
       - /app/logs/*/*.log   
   close_older: 24h
   ignore_older: 24h   
   json.keys_under_root: true
   json.overwrite_keys: true
   encoding: utf-8
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 3
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
- drop_fields:   
      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 域名转发

server {

    listen 80;
    listen       443 ssl;
    server_name kibana.devops.test.com;# 自行修改成你的域名

    ssl_certificate      /certs/kibana.devops.test.com/server.crt;
    ssl_certificate_key/certs/kibana.devops.test.com/server.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout5m;
    ssl_ciphersHIGH:!aNULL:!MD5;
    ssl_prefer_server_cipherson;

    location / {
            proxy_pass http://192.168.123.102:5601;
            proxy_http_version 1.1;
            proxy_buffering off;
            proxy_request_buffering off;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
    }
}配置完成,即可使用域名访问

配置 nginx 基本认证

在Nginx配置文件中添加以下内容
location / {
    auth_basic "Restricted Content";
    auth_basic_user_file /certs/kibana.devops.test.com/passwd;
    ...
}添加对应的passwd文件,使用 htpasswd 生成,如账号密码是 root devops666 的配置文件
root:WvesKBTr22.wY可以使用我 metools 工具的 密码生成器 生成

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

配置 nginx IP白名单

location / {
    allow 192.168.123.201;   # 允许的IP地址
    deny all;            # 拒绝所有其他IP地址
}后语

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

来源:https://www.cnblogs.com/morang/p/17976704/devops-docker-elk-install-nginx-config
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 使用 Docker Compose V2 快速搭建日志分析平台 ELK (Elasticsearch、Logsta