如何使用Docker在Centos7上构建ELK日志系统?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1593个文字,预计阅读时间需要7分钟。
ELK 是 Elasticsearch、Logstash 和 Kibana 的简称,常用于部署分布式系统日志服务。Elasticsearch:提供全文搜索和数据分析功能,支持数据收集、分析和存储。
ELK 基本概述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页面中以表格/图表的形式展示。
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[注意事项]:
搭建部署Kibana服务
1.本教程采用7.3.x版本,目前最新版本7.4.x[主要用7.3.x版本在阿里云搭建过,避免入坑问题]
2.拉取的过程中可能会出现[net/remote-ip:9100/
1.拉取Kibana 镜像:
搭建部署Logstash服务
docker pull docker.elastic.co/kibana/kibana:7.3.1
2.修改Kibana镜像名称:
docker tag docker.elastic.co/kibana/kibana:7.3.1kibana:latest
3.部署Kibana镜像容器:
docker run -itd -p 5601:5601 --restart=always --privileged=true --link
elasticsearch-server:elasticsearch --name kibana-server -e ELASTICSEARCH_URL=elasticsearch:9200 kibana:latest1.拉取Logstash 镜像:
docker pull docker.elastic.co/logstash/logstash:7.3.1
2.修改Kibana镜像名称:
docker tag docker.elastic.co/logstash/logstash:7.3.1logstash:latest
3.部署Kibana镜像容器:
docker run -itd --restart=always --privileged=true -p 5043:5043 --name logstash-server--link elasticsearch-server:elasticsearchlogstash:latest
4.进入容器-修改配置logstash.yml:
host-ip:9200 xpack.monitoring.elasticsearch.username: elastic xpack.monitoring.elasticsearch.password: changmeps[注意事项]:
1.host-ip是本机ip地址
5.进入容器-修改pipeline下的logstash.conf文件:
#默认配置 #======================================== #input { # beats { # port => 5044 # } #} #output { # stdout { # codec => rubydebug # } #} #======================================== #添加配置 input { file { codec=> json path => "/usr/local/*.json" } } filter { #定义数据的格式 grok { match => { "message" => "%{DATA:timestamp}\|%{IP:serverIp}\|%{IP:clientIp}\|%{DATA:logSource}\|%{DATA:userId}\|%{DATA:reqUrl}\|%{DATA:reqUri}\|%{DATA:refer}\|%{DATA:device}\|%{DATA:textDuring}\|%{DATA:duringTime:int}\|\|"} } } output { elasticsearch{ hosts=> "host-ip:9200" } }6.退出容器在宿主机重启elk相关的容器:docker restart elk相关容器服务
ps[注意事项]:如果Docker安装了可视化界面Portainer,可以在界面操作:
7.访问地址:remote-ip:5601/,然后可就额操作kibana面板
搭建部署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.1filebeat:latest
docker tag docker.elastic.co/apm/apm-server:7.3.1apm-server:latest部署容器:
docker run -itd --restart=always --privileged=true-p 5044:5044 --name filebeat-server --link logstash-server:logstashfilebeat:latestdocker 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[注意事项]: 可以参考官方文档:
开发SpringBoot+Elasticsearch集成实战 [1] 集成Maven配置方式:
elasticsearch:www.elastic.co/guide/en/elasticsearch/reference/7.4/docker.html
kibana:www.elastic.co/guide/en/kibana/7.3/docker.html
logstash:www.elastic.co/guide/en/logstash/7.3/docker.html
filebeat:www.elastic.co/guide/en/beats/filebeat/7.3/running-on-docker.html
apm-server:www.elastic.co/guide/en/apm/server/7.3/running-on-docker.htmlJava与ElasticSearch连接的两种方式:
(1)使用Transport与ElasticSearch建立连接
<!-- mvnrepository.com/artifact/org.elasticsearch/elasticsearch --> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>6.4.2</version> </dependency> <!-- mvnrepository.com/artifact/org.elasticsearch.client/transport --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>6.4.2</version> <exclusions> <exclusion> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> </exclusion> </exclusions> </dependency>(2)使用SpringDataElasticSearch建立连接
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>或者:
dependencies { compile('org.springframework.boot:spring-boot-starter') // 使用SpringDataElasticSearch只需要添加一处依赖即用 compile('org.springframework.boot:spring-boot-starter-data-elasticsearch') }两种方式的优缺点:
(1)优点:脱离框架,集成过程中不需要考虑与Spring的版本兼容问题,容易集成
缺点:使用原生API操作ES,代码量大,撰写困难(2)优点:将原生API进行封装,提供了ElasticsearchRepository,操作ES非常简单,与JPA同理
[2] 参数连接配置方式:
缺点:出生于Spring家族,与SpringBoot,SpringData版本容易冲突
# Elasticsearch# 9200端口是用来让HTTP REST API来访问ElasticSearch,而9300端口是传输层监听的默认端口 elasticsearch.ip=192.168.30.128 elasticsearch.port=9300 elasticsearch.pool=5 elasticsearch.cluster.name=my-applicationnode.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版权声明:本文为博主原创文章,遵循相关版权协议,如若转载或者分享请附上原文出处链接和链接来源。
本文共计1593个文字,预计阅读时间需要7分钟。
ELK 是 Elasticsearch、Logstash 和 Kibana 的简称,常用于部署分布式系统日志服务。Elasticsearch:提供全文搜索和数据分析功能,支持数据收集、分析和存储。
ELK 基本概述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页面中以表格/图表的形式展示。
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[注意事项]:
搭建部署Kibana服务
1.本教程采用7.3.x版本,目前最新版本7.4.x[主要用7.3.x版本在阿里云搭建过,避免入坑问题]
2.拉取的过程中可能会出现[net/remote-ip:9100/
1.拉取Kibana 镜像:
搭建部署Logstash服务
docker pull docker.elastic.co/kibana/kibana:7.3.1
2.修改Kibana镜像名称:
docker tag docker.elastic.co/kibana/kibana:7.3.1kibana:latest
3.部署Kibana镜像容器:
docker run -itd -p 5601:5601 --restart=always --privileged=true --link
elasticsearch-server:elasticsearch --name kibana-server -e ELASTICSEARCH_URL=elasticsearch:9200 kibana:latest1.拉取Logstash 镜像:
docker pull docker.elastic.co/logstash/logstash:7.3.1
2.修改Kibana镜像名称:
docker tag docker.elastic.co/logstash/logstash:7.3.1logstash:latest
3.部署Kibana镜像容器:
docker run -itd --restart=always --privileged=true -p 5043:5043 --name logstash-server--link elasticsearch-server:elasticsearchlogstash:latest
4.进入容器-修改配置logstash.yml:
host-ip:9200 xpack.monitoring.elasticsearch.username: elastic xpack.monitoring.elasticsearch.password: changmeps[注意事项]:
1.host-ip是本机ip地址
5.进入容器-修改pipeline下的logstash.conf文件:
#默认配置 #======================================== #input { # beats { # port => 5044 # } #} #output { # stdout { # codec => rubydebug # } #} #======================================== #添加配置 input { file { codec=> json path => "/usr/local/*.json" } } filter { #定义数据的格式 grok { match => { "message" => "%{DATA:timestamp}\|%{IP:serverIp}\|%{IP:clientIp}\|%{DATA:logSource}\|%{DATA:userId}\|%{DATA:reqUrl}\|%{DATA:reqUri}\|%{DATA:refer}\|%{DATA:device}\|%{DATA:textDuring}\|%{DATA:duringTime:int}\|\|"} } } output { elasticsearch{ hosts=> "host-ip:9200" } }6.退出容器在宿主机重启elk相关的容器:docker restart elk相关容器服务
ps[注意事项]:如果Docker安装了可视化界面Portainer,可以在界面操作:
7.访问地址:remote-ip:5601/,然后可就额操作kibana面板
搭建部署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.1filebeat:latest
docker tag docker.elastic.co/apm/apm-server:7.3.1apm-server:latest部署容器:
docker run -itd --restart=always --privileged=true-p 5044:5044 --name filebeat-server --link logstash-server:logstashfilebeat:latestdocker 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[注意事项]: 可以参考官方文档:
开发SpringBoot+Elasticsearch集成实战 [1] 集成Maven配置方式:
elasticsearch:www.elastic.co/guide/en/elasticsearch/reference/7.4/docker.html
kibana:www.elastic.co/guide/en/kibana/7.3/docker.html
logstash:www.elastic.co/guide/en/logstash/7.3/docker.html
filebeat:www.elastic.co/guide/en/beats/filebeat/7.3/running-on-docker.html
apm-server:www.elastic.co/guide/en/apm/server/7.3/running-on-docker.htmlJava与ElasticSearch连接的两种方式:
(1)使用Transport与ElasticSearch建立连接
<!-- mvnrepository.com/artifact/org.elasticsearch/elasticsearch --> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>6.4.2</version> </dependency> <!-- mvnrepository.com/artifact/org.elasticsearch.client/transport --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>6.4.2</version> <exclusions> <exclusion> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> </exclusion> </exclusions> </dependency>(2)使用SpringDataElasticSearch建立连接
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>或者:
dependencies { compile('org.springframework.boot:spring-boot-starter') // 使用SpringDataElasticSearch只需要添加一处依赖即用 compile('org.springframework.boot:spring-boot-starter-data-elasticsearch') }两种方式的优缺点:
(1)优点:脱离框架,集成过程中不需要考虑与Spring的版本兼容问题,容易集成
缺点:使用原生API操作ES,代码量大,撰写困难(2)优点:将原生API进行封装,提供了ElasticsearchRepository,操作ES非常简单,与JPA同理
[2] 参数连接配置方式:
缺点:出生于Spring家族,与SpringBoot,SpringData版本容易冲突
# Elasticsearch# 9200端口是用来让HTTP REST API来访问ElasticSearch,而9300端口是传输层监听的默认端口 elasticsearch.ip=192.168.30.128 elasticsearch.port=9300 elasticsearch.pool=5 elasticsearch.cluster.name=my-applicationnode.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版权声明:本文为博主原创文章,遵循相关版权协议,如若转载或者分享请附上原文出处链接和链接来源。

