本文主要是介绍docker-compose 搭建 单机版ELK,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
docker-compose 搭建 单机版ELK
前言
本次部署将使用ElasticSearch官方的镜像和Docker-Compose来创建单节点的ELK,用于学习ELK操作。在k8s集群内,如果每天的日志量超过20G以上,建议部署在k8s集群外部,以支持分布式集群的架构。在这种情况下,我们将采用有状态部署的方式,并且使用动态存储进行持久化。在运行该yaml文件之前,需要提前创建好存储类。本文档将仅使用常用的ElasticSearch + LogStash + Kibana组件。
准备
环境
- 操作系统:Centos 7(虚拟机)
- Docker:26.0.0
- Docker-Compose:2.25.0
- ELK Version:7.17.2
文件目录
/docker/
├── elk
│ ├── docker-compose.yml
│ ├── elasticsearch
│ ├── kibana
│ │ └── config
│ │ └── kibana.yml
│ └── logstash
│ ├── config
│ │ └── logstash.yml
│ └── pipeline
│ └── logstash.conf
部署流程
创建 Docker-Compose 的配置文件。
version: '3'services:elasticsearch:image: elasticsearch:7.17.2container_name: elasticsearchports:- "9200:9200"- "9300:9300"restart: alwaysenvironment:# 设置集群名称cluster.name: elasticsearch# 以单一节点模式启动discovery.type: single-nodeES_JAVA_OPTS: "-Xms512m -Xmx512m"volumes:- /docker/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins- /docker/elk/elasticsearch/data:/usr/share/elasticsearch/data- /docker/elk/elasticsearch/logs:/usr/share/elasticsearch/logsnetworks:- elklogstash:image: logstash:7.17.2container_name: logstashrestart: alwaysports:- "4560:4560"volumes:- /docker/elk/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf- /docker/elk/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.ymldepends_on:- elasticsearchlinks:#可以用es这个域名访问elasticsearch服务- elasticsearch:esnetworks:- elkkibana:image: kibana:7.17.2container_name: kibanarestart: alwaysports:- "5601:5601"depends_on:# kibana在elasticsearch启动之后再启动- elasticsearchenvironment:#设置系统语言文中文I18N_LOCALE: zh-CN# 访问域名# SERVER_PUBLICBASEURL: https://kibana.cloud.comvolumes:- /docker/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.ymllinks:#可以用es这个域名访问elasticsearch服务- elasticsearch:esnetworks:- elknetworks:elk:name: elkdriver: bridge
在 Services 中声明了三个服务:
- elasticsearch
- logstash
- kibana
ElasticSearch 服务的配置注意事项:
- environment 环境设置中 discovery.type 属性设置成 ‘single-node’ ,主要目的是将 ES 的集群发现模式配置为单节点模式。
- environment 环境设置中 ES_JAVA_OPTS 的 Xms 属性和 Xmx 属性建议设置成大于 ‘-Xms512m -Xmx512m’ ,主要是为了防止 ES 启动成功后,无法查询消息。
- volumes 持久卷设置中的 /etc/localtime:/etc/localtime 主要目的是将 Docker 容器中的时间与宿主机同步。
- volumes 持久卷设置中的 ./es/data:/usr/share/elasticsearch/data 主要目的是将 ES 的数据映射到对应的宿主机中,并做持久化设置。
LogStash 服务的配置注意事项:
- volumes 持久卷中的 ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf:将宿主机本地的 LogStash 配置映射至 Logstash 容器内部。
- volumes 持久卷设置中的 /etc/localtime:/etc/localtime 主要目的是将 Docker 容器中的时间与宿主机同步。
- environment 环境设置中 MONITORING_ENABLED 属性设置成 false ,主要目的是关闭 LogStash 监控功能,避免容器崩溃。
- environment 环境设置中 ES_JAVA_OPTS 的 Xms 属性和 Xmx 属性建议设置成 ‘-Xms1024m’ ‘-Xmx1024m’ ,主要是为了防止 Logstash 消费消息时突然崩溃。
- depends_on 设置,设置成 elasticsearch,表示 LogStash 容器的启动必须依赖于 ES 容器启动,如果 ES 启动失败,则 LogStash 启动也失败。
Kibana 服务的配置注意事项:
- volumes 持久卷设置中的 /etc/localtime:/etc/localtime 主要目的是将 Docker 容器中的时间与宿主机同步。
- volumes 持久卷中的./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml,主要目的是 Kibana 容器启动使用外部配置文。
- environment 环境设置中 ELASTICSEARCH_URL 属性设置成 ‘http://elasticsearch:9200’ ,主要目的是连接 ES 容器,监控 ES 服务。
- environment 环境设置中 I18N_LOCALE 属性设置成 zh-CN ,主要目的将 Kibana 的系统语言设置成中文,可视化页面同时也是中文语言。
- depends_on 设置,设置成 elasticsearch,表示 Kibana 容器的启动必须依赖于 ES 容器启动,如果 ES 启动失败,则 Kibana 启动也失败。
Kibana 配置
创建 kibana.yml 文件
server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
- server.host:设置成 0.0.0.0 表示 允许所有机器访问
- elasticsearch.hosts:设置成 ES 服务地址,可以是单机地址,也可以是服务地址
- monitoring.ui.container.elasticsearch.enabled:是否开启对 ES 进行容器监控
LogStash 配置
创建服务主体配置 logstash.yml 文件
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]
- http.host:设置成 0.0.0.0 表示Elasticsearch绑定的主机地址
- elasticsearch.hosts:指定了用于监控Elasticsearch实例的地址
传输管道配置 logstash.conf
input {tcp {mode => "server"host => "0.0.0.0"port => 4560codec => json_lines}
}
output {elasticsearch {hosts => "elasticsearch:9200"index => "%{[spring.application.name]}-%{+YYYY.MM.dd}"}
}
部署测试
docker-compose 启动
docker-compose up -d elasticsearch kibana logstash
访问 9200 端口查看 elasticsearch 是否启动成功
访问 5601 端口查看 Kibana 容器是否启动
整合SpringBoot
在项目中引入Maven依赖
<!-- logstash -->
<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>7.2</version>
</dependency>
修改项目内的 logback.xml
文件 增加 logstash
配置
<!-- logstash -->
<springProperty scope="context" name="appName" source="spring.application.name"/><!--输出到logstash的appender-->
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><!--可以访问的logstash日志收集端口--><destination>${logstash.host:logstash.port}</destination><encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"><customFields>{"spring.application.name":"${appName}"}</customFields></encoder>
</appender><root level="info"><appender-ref ref="logstash"/>
</root>
访问 Kibana 查看是否成功推送日志
配置索引模式
这里使用通配符 整合查看所有 *-*
开头的索引
查看使用日志索引
参考资料
- https://lionli.blog.csdn.net/article/details/125743132
- https://juejin.cn/post/7143974532766760990
- https://www.bilibili.com/video/BV1zm4y1i7WW/?share_source=copy_web&vd_source=bb5feb0740121cd1369c48b793f9c393
这篇关于docker-compose 搭建 单机版ELK的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!