使用 Docker Compose V2 快速搭建日志分析平台 ELK (Elasticsearch、Logstash 和 Kibana)
前言
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 安装
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 安装
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 => "%{[app]}-%{+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 -d
Kibana 使用 docker compose 安装
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_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
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
配置完成,重载配置后刷新页面就提示输入账号密码了
配置 nginx IP白名单
location / {
allow 192.168.123.201; # 允许的IP地址
deny all; # 拒绝所有其他IP地址
}
后语
本篇只针对 ELK 的安装进行了介绍及整理对应的 Docker Compose 配置文件,后续即可快速安装配置 ELK 环境,如何与项目结合使用后续再分享
使用 Docker Compose V2 快速搭建日志分析平台 ELK (Elasticsearch、Logstash 和 Kibana)的更多相关文章
- ELK搭建实时日志分析平台之二Logstash和Kibana搭建
本文书接前回<ELK搭建实时日志分析平台之一ElasticSearch> 文:铁乐与猫 四.安装Logstash logstash是一个数据分析软件,主要目的是分析log日志. 1)下载和 ...
- 日志分析平台ELK之前端展示kibana
之前的博客一直在聊ELK集群中的存储.日志收集相关的组件的配置,但通常我们给用户使用不应该是一个黑黑的shell界面,通过接口去查询搜索:今天我们来了ELK中的前端可视化组件kibana:kibana ...
- ELK搭建实时日志分析平台之一ElasticSearch搭建
文:铁乐与猫 系统:CentOS Linux release 7.3.1611 (Core) 注:我这里为测试和实验方便,ELK整套都装在同一台服务器环境中了,生产环境的话,可以分开搭建在不同的服务器 ...
- ELK_elk+redis 搭建日志分析平台
这个是最新的elk+redis搭建日志分析平台,今年时间是2015年9月11日. Elk分别为 elasticsearch,logstash, kibana 官网为:https://www.elast ...
- linux下利用elk+redis 搭建日志分析平台教程
linux下利用elk+redis 搭建日志分析平台教程 http://www.alliedjeep.com/18084.htm elk 日志分析+redis数据库可以创建一个不错的日志分析平台了 ...
- 集中式日志分析平台 - ELK Stack - 安全解决方案 X-Pack
大数据之心 关注 0.6 2017.02.22 15:36* 字数 2158 阅读 16457评论 7喜欢 9 简介 X-Pack 已经作为 Elastic 公司单独的产品线,前身是 Shield, ...
- centos7搭建ELK Cluster集群日志分析平台(三):Kibana
续 centos7搭建ELK Cluster集群日志分析平台(一) 续 centos7搭建ELK Cluster集群日志分析平台(二) 已经安装好elasticsearch 5.4集群和logst ...
- 日志分析平台ELK之搜索引擎Elasticsearch集群
一.简介 什么是ELK?ELK是Elasticsearch.Logstash.Kibana这三个软件的首字母缩写:其中elasticsearch是用来做数据的存储和搜索的搜索引擎:logstash是数 ...
- 日志分析平台ELK之日志收集器logstash常用插件配置
前文我们了解了logstash的工作流程以及基本的收集日志相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13761906.html:今天我们来了解下l ...
- 日志分析平台ELK之日志收集器filebeat
前面我们了解了elk集群中的logstash的用法,使用logstash处理日志挺好的,但是有一个缺陷,就是太慢了:当然logstash慢的原因是它依赖jruby虚拟机,jruby虚拟机就是用java ...
随机推荐
- Selenium-无头模式headless
无头模式适合的场景: 部署到没有gui界面的服务器,比如linux 开发环境测试完全没问题后可以使用无头模式,提高selenium速度. # 使用headless无界面浏览器模式 chrome_opt ...
- NetSuite 开发日记:创建 Transfer(转账单)
经测试,截止到 2022.12.26,Transfer 只能使用 Client 脚本创建,使用服务端脚本创建报错:ReferenceError: "document" is not ...
- python tkinter 使用(六)
python tkinter 使用(六) 本文主要讲述tkinter中进度条的使用. 1:确定的进度条 progressbar = tkinter.ttk.Progressbar(root, mode ...
- SpringCloud Gateway 网关
SpringCloud Gateway 网关 spring: cloud: gateway: routes: - id: after_route uri: https://example.org pr ...
- 从零玩转第三方登录之WeChat公众号扫码关注登陆 -wechatgzh
title: 从零玩转第三方登录之WeChat公众号扫码关注登陆 date: 2022-09-27 22:46:53.362 updated: 2023-03-30 13:28:41.359 url: ...
- C realloc(): invalid next size错误
C realloc(): invalid next size 问题代码 #include <stdio.h> #include <stdlib.h> int *getNumbe ...
- table中td超出内容隐藏,鼠标悬停全部显示(完整版,含js代码)
一.CSS语法: text-overflow:clip | ellipsis 默认值:clip 适用于:所有元素 clip: 当对象内文本溢出时不显示省略标记(...),而是将溢出的部分裁切掉. el ...
- LeetCode 947. 移除最多的同行或同列石头 并查集
传送门 思路 干货太干就不太好理解了,以下会有点话痨( ̄▽ ̄)" 首先题目给了一个二维stones数组,存储每个石子的坐标,因为在同行或者同列的石子最终可以被取到只剩下一个,那么我们将同行同 ...
- Spring Cloud 学习推荐
学习 Spring Boot Spring tutorials | Java Web Development, Spring Cloud Programming tutorials Spring Bo ...
- 【API 进阶之路】做 OCR 文字识别,谁说必须要有 AI 工程师?
摘要:有些功能还真不能光凭自己的直觉和认识,来自一线的声音才是最真实的用户需求.比方说名片录入的需求. 在公司技术委员会副主席这个位置上干了有几个月了,期间,我一方面给研发团队整理各种文档资料,做技术 ...