Captain's Geek-Island Captain's Geek-Island
首页
生活如斯乎
架构师的路
  • 分类
  • 标签
  • 归档
沉洋官网 (opens new window)

SleepyOcean

走,找新大陆去
首页
生活如斯乎
架构师的路
  • 分类
  • 标签
  • 归档
沉洋官网 (opens new window)
  • 计算机基础

  • 并发专题

  • 性能调优专题

  • 工具专题

  • 源码框架专题

  • 设计模式

  • 分布式专题

  • 实战专题

    • QA展板
    • ES高可用集群搭建
    • Mysql主备复制架构
    • docker搭建基础中间件
    • docker部署微服务
    • k8s集群搭建
    • dockerhub私有容器仓库搭建
    • docker搭建sonarQube
    • docker搭建Confluence
    • docker搭建GitLab
    • Electron开发跨平台应用指南
    • Docker搭建ElasticSearch开发环境
    • Docker搭建Jenkins
    • Docker搭建ELK
      • 搭建流程:Dev环境
        • 1. 拉取docker-elk项目
        • 2. 启动项目
        • 3. 重置内建用户密码
        • 4. 自定义配置
        • 5. Spring Boot 集成 ELK
    • Docker搭建nocas-server
    • Docker搭建各类Paas服务
  • 技术杂文

  • 云原生专题

  • 大数据分析专题

  • 前端专题

  • 运维专题

  • 经验专题

  • 面试专题

  • 软实力专题

  • 架构师的路
  • 实战专题
SleepyOcean
2021-08-04

Docker搭建ELK

本文将介绍如何使用 Docker 搭建 ELK (Elasticsearch、Logstash、Kibana)。

因为借助于方便的 Docker,完整操作时间不超过 15 分钟。

为了方便搭建,我们使用 https://github.com/deviantony/docker-elk 这个开源项目,这个项目维护了 ELK 技术栈最近的三个版本,也就是 7.x、6.x、5.x ,本文将使用最新版本。

用于开发测试的基础环境使用一台1c2g的虚拟机即可,当然机器资源越多我们的服务运行效率也会越高、相同时间内数据处理能力也就越大。而用于一般生产环境建议根据自己具体情况给予更多资源。

# 搭建流程:Dev环境

# 1. 拉取docker-elk项目

# 创建ELK目录
$ mkdir ELK
$ cd ELK

# 拉取docker-elk项目
$ git clone https://github.com/SleepyOcean/docker-elk.git

# 进入项目目录
$ cd docker-el
1
2
3
4
5
6
7
8
9

# 2. 启动项目

# 通过docker-compose启动容器。如果没有docker-compose,请先安装docker-compose。
$ docker-compose up
1
2

启动成功后,需要手动将任务切到后台。

# 3. 重置内建用户密码

$ docker-compose exec -T elasticsearch bin/elasticsearch-setup-passwords auto --batch

# 以下是命令输出
Changed password for user apm_system
PASSWORD apm_system = YkELBJGOT6AxqsPqsi7I

Changed password for user kibana
PASSWORD kibana = FxRwjm5KRYvHhGEnYTM9

Changed password for user logstash_system
PASSWORD logstash_system = A4f5VOfjVWSdi0KAZWGu

Changed password for user beats_system
PASSWORD beats_system = QnW8xxhnn7LMlA7vuI7B

Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = OvjEGR13wjkOkIbWqaEM

Changed password for user elastic
PASSWORD elastic = PGevNMuv7PhVnaYg7vJw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 4. 自定义配置

将密码妥善保存后,我们需要将 docker-compose.yml 配置文件中的 elasticsearch 服务的 ELASTIC_PASSWORD 去掉,这样可以确保服务启动只使用我们刚刚重置后的密码(keystore)。以及需要对 kibana 、 logstash 配置文件中的信息进行替换,将文件中的 elastic 用户的密码进行更新,暂时先修改下面三个文件就可以了:

  • kibana/config/kibana.yml
  • logstash/config/logstash.yml
  • logstash/pipeline/logstash.conf

需要注意的是, logstash pipeline 需要一个高权限账号,当前测试开发过程中,可以使用上面重置后的 elastic 账号和密码,如果是生产使用可以参考官方文档 Configuring Security in Logstash (opens new window)进行操作,分配一个新的专用账号。

配置logstash

此处我的logstash配置如下

input {
    beats {
        port => 5044
    }

    tcp {
    	## 该端口是稍后输出日志的端口定义
        port => 5000
    }
}
## Add your filters / logstash plugins configuration here
output {
    elasticsearch {
        hosts => "elasticsearch:9200"
        index => "so-server-%{+YYYY.MM.dd}"
        user => "elastic"
        password => "PGevNMuv7PhVnaYg7vJw"
        ecs_compatibility => disabled
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

在配置修改完毕后,我们执行 docker-compose restart 重启相关服务。如果日志中没有出现任何 401 或者访问拒绝的内容,说明服务一切正常。

# 5. Spring Boot 集成 ELK

1)在pom.xml中添加logstash-logback-encoder依赖

<!--集成logstash-->	
<dependency>	
    <groupId>net.logstash.logback</groupId>	
    <artifactId>logstash-logback-encoder</artifactId>	
    <version>5.3</version>	
</dependency>
1
2
3
4
5
6

2)在项目的resource目录下添加logback-spring.xml,让logback日志输出到logstash

<?xml version="1.0" encoding="UTF-8"?>	
<!DOCTYPE configuration>	
<configuration>	
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>	
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>	
    <!--应用名称-->	
    <property name="APP_NAME" value="so-blog-server"/>	
    <!--日志文件保存路径-->	
    <property name="LOG_FILE_PATH" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/logs}"/>	
    <contextName>${APP_NAME}</contextName>	
    <!--每天记录日志到文件appender-->	
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">	
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">	
            <fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>	
            <maxHistory>30</maxHistory>	
        </rollingPolicy>	
        <encoder>	
            <pattern>${FILE_LOG_PATTERN}</pattern>	
        </encoder>	
    </appender>	
    <!--输出到logstash的appender-->	
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">	
        <!--可以访问的logstash日志收集端口-->	
        <destination>192.168.3.101:5000</destination>	
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>	
    </appender>	
    <root level="INFO">	
        <appender-ref ref="CONSOLE"/>	
        <appender-ref ref="FILE"/>	
        <appender-ref ref="LOGSTASH"/>	
    </root>	
</configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

3)在项目配置文件(application.yml)中配置logback-spring.xml路径

...
logging:
  config: classpath:logback-spring.xml
...
1
2
3
4

4)启动项目测试日志

5)在kibana中查看日志

首先新建一个Index pattern,我们设置的index名是springboot-logstatsh-%{+YYYY.MM.dd},所以我们创建一个Index pattern名为springboot-logstatsh-*,然后Time Filter field name选择@timestamp

#ELK
上次更新: 2021/08/11, 14:08:00

← Docker搭建Jenkins Docker搭建nocas-server →

新鲜出炉
01
记录 - 快速搭建自动化部署平台
04-13
02
Docker搭建各类Paas服务
03-01
03
系统配置 - Android TV配置
02-12
更多文章>
Copyright © 2019-2022 SleepyOcean | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式