Linux系统Centos7 基于Docker搭建ELK分布式日志系统
1|0ELK 基本概述
ELK是Elasticsearch、Logstash、Kibana的简称,常常用于部署分布式系统日志服务。
- Elasticsearch:全球实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
- Logstash:用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
- Kibana:基于Web的图形可视化界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。
基本架构图elk-architecture]:
应用程序将日志按照约定的Key写入Redis,Logstash从Redis中读取日志信息写入ElasticSearch集群。Kibana读取ElasticSearch中的日志,并在Web页面中以表格/图表的形式展示。
2|0搭建部署ElasticSearch服务
Docker 部署应用服务的基本步骤:Search[查询镜像]->Pull[拉取镜像]->Run[部署镜像]
1.查询Elasticsearch 镜像: docker search elasticsearch
ps[注意事项]:
- 一般拉取镜像资源都是从Docker官方仓库[docker-hub]拉取,或者自己构建的Docker云仓库aliyun-docker 等
- 本教程选取的ELK镜像均是基于ELK官方Docker仓库elastic-io
2.拉取Elasticsearch 镜像:docker pull docker.elastic.co/elasticsearch/elasticsearch:7.3.1
ps[注意事项]:
1.本教程采用7.3.x版本,目前最新版本7.4.x[主要用7.3.x版本在阿里云搭建过,避免入坑问题]
2.拉取的过程中可能会出现[net/http: TLS handshake timeout]问题,多尝试几次,主要是网络带宽限制问题
3.修改镜像名称:docker tag docker.elastic.co/elasticsearch/elasticsearch:7.3.1 elasticsearch:latest
ps[注意事项]:
1.名称过长导致查看些许不便,通过docker tag source-image[来源镜像] target-image[目标镜像],推荐统一采用[target-image:target-version]格式定义,且不占用空间,相当于重命名镜像
2.对于拉取kibana[docker.elastic.co/kibana/kibana:7.3.1]和logstash[docker.elastic.co/logstash/logstash:7.3.1] 都建议修改。
4.部署镜像服务:
部署命令:
docker run -itd -p 9200:9200 -p 9300:9300 --restart=always --privileged=true --name elasticsearch-server -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms=512m -Xms=512m" elasticsearch:latest
/usr/share/elasticsearch/config
/usr/share/elasticsearch/logs
查看容器列表:docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"
ps[注意事项]:
1.需要开放端口[9200和9300]->9200作为Http协议,主要用于外部通讯,9300作为Tcp协议,jar之间就是通过tcp协议通讯,通常部署集群就是通过9300通信。推荐[宿主机自定义端口:9200]
2.--restart=always :配置容器重启策略,当宿主机重启由于配置了开机自启动,不用手动启动
3.--privileged:配置容器操作权限[true-root操作权限,false-当前容器用户操作权限]
4.对于部署网络模式推荐默认桥接模式,也自定义可以host模式等
5.修改配置:
进入容器:docker exec -it container-id[容器id] or container-name[容器名称] /bin/bash
例如:docker exec -it f2d2e97da375 /bin/bash #f2d2e97da375-> container-id
修改配置文件:
添加跨域配置:http.cors.enabled: true && http.cors.allow-origin: "*"
然后退出exit容器,在宿主机重启容器:docker restart container-id[容器id] or container-name[容器名称]
docker restart f2d2e97da375
ps[注意事项]:
1.进入容器方式:包括使用 docker attach 命令或 docker exec 命令,
推荐使用 docker exec 命令。原因:
- docker attach: 使用exit退出容器,会导致容器的停止
- docker exec:使用exit退出容器,不会导致容器的停止
- 参考docker进入容器的几种方法博客-docker进入容器的几种方法
2.如果Docker安装了可视化界面 Portainer,推荐采用这种方式进入容器:
3|0搭建部署ElasticSearch-Head服务
ElasticSearch-Head:弹性搜索集群的Web前端界面,是使用Nodjs构建的,主要用于查看ElasticSearch相关信息
1.拉取Elasticsearch-Head 镜像:docker pull mobz/elasticsearch-head:5
2.修改Elasticsearch-Head 镜像名称:docker tag mobz/elasticsearch-head:5 elasticsearch-head:latest
3.部署Elasticsearch-Head 容器:docker run -itd --restart=always --privileged=true -p 9100:9100 --name elasticsearch-head-server elasticsearch-head:latest
查看容器服务:docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"
4.浏览器访问:http://remote-ip:9100/
4|0搭建部署Kibana服务
1.拉取Kibana 镜像:
docker pull docker.elastic.co/kibana/kibana:7.3.1
2.修改Kibana镜像名称:
docker tag docker.elastic.co/kibana/kibana:7.3.1 kibana:latest
3.部署Kibana镜像容器:
docker run -itd -p 5601:5601 --restart=always --privileged=true --link
elasticsearch-server:elasticsearch --name kibana-server -e ELASTICSEARCH_URL=http://elasticsearch:9200 kibana:latest
5|0搭建部署Logstash服务
1.拉取Logstash 镜像:
docker pull docker.elastic.co/logstash/logstash:7.3.1
2.修改Kibana镜像名称:
docker tag docker.elastic.co/logstash/logstash:7.3.1 logstash:latest
3.部署Kibana镜像容器:
docker run -itd --restart=always --privileged=true -p 5043:5043 --name logstash-server --link elasticsearch-server:elasticsearch logstash:latest
4.进入容器-修改配置logstash.yml:
ps[注意事项]:
1.host-ip是本机ip地址
5.进入容器-修改pipeline下的logstash.conf文件:
6.退出容器在宿主机重启elk相关的容器:docker restart elk相关容器服务
7.访问地址:http://remote-ip:5601/,然后可就额操作kibana面板
6|0搭建部署Apm-server服务和Filebeat服务
步骤基本和上述操作差不多,只是配置文件和端口可能不一致:
拉取镜像:
docker pull docker.elastic.co/beats/filebeat:7.3.1
docker pull docker.elastic.co/apm/apm-server:7.3.1
修改镜像名称:
docker tag docker.elastic.co/beats/filebeat:7.3.1 filebeat:latest
docker tag docker.elastic.co/apm/apm-server:7.3.1 apm-server:latest
部署容器:
docker run -itd --restart=always --privileged=true -p 5044:5044 --name filebeat-server --link logstash-server:logstash filebeat:latest
docker run -itd --restart=always --privileged=true -p 8200:8200 --name apm-server --link elasticsearch-server:elasticsearch apm-server:latest --strict.perms=false -e -E output.elasticsearch.hosts=["elasticsearch:9200"]
最后修改配置文件整合相关资源,重启容器服务
ps[注意事项]: 可以参考官方文档:
elasticsearch:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/docker.html
kibana:https://www.elastic.co/guide/en/kibana/7.3/docker.html
logstash:https://www.elastic.co/guide/en/logstash/7.3/docker.html
filebeat:https://www.elastic.co/guide/en/beats/filebeat/7.3/running-on-docker.html
apm-server:https://www.elastic.co/guide/en/apm/server/7.3/running-on-docker.html
7|0开发SpringBoot+Elasticsearch集成实战
7|1[1] 集成Maven配置方式:
Java与ElasticSearch连接的两种方式:
(1)使用Transport与ElasticSearch建立连接
(2)使用SpringDataElasticSearch建立连接
或者:
两种方式的优缺点:
(1)优点:脱离框架,集成过程中不需要考虑与Spring的版本兼容问题,容易集成
缺点:使用原生API操作ES,代码量大,撰写困难
(2)优点:将原生API进行封装,提供了ElasticsearchRepository,操作ES非常简单,与JPA同理
缺点:出生于Spring家族,与SpringBoot,SpringData版本容易冲突
7|2[2] 参数连接配置方式:
node.name: "elasticsearch-server"
network.host: 0.0.0.0
network.bind_host: 0.0.0.0
network.publish_host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
bootstrap.memory_lock: true
transport.tcp.port: 9300
transport.tcp.compress: true
http.max_content_length: 128mb
版权声明:本文为博主原创文章,遵循相关版权协议,如若转载或者分享请附上原文出处链接和链接来源。
__EOF__

本文链接:https://www.cnblogs.com/mazhilin/p/12096381.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:Copyright © 2018-2021 PivotalCloud Technology Systems Incorporated. All rights reserved.
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示