Chao's Blog Chao's Blog
首页
  • vue

    • vue路由
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • java
  • spring
  • springboot
  • springcloud
  • git
  • maven
  • nginx
  • tomcat
  • springmvc
  • jvm
  • 图数据库
  • mysql数据库
  • redis数据库
  • windows下docker安装nginx并挂载目录
  • linux命令
  • linux安装软件
  • linux脚本
  • idea
  • vscode
  • 归档
  • 综合项目

    • 若依项目
    • mall项目
  • java
  • mybatis
  • xxl-job
  • mybatis
GitHub (opens new window)

~chao

永远菜鸟,不断努力~
首页
  • vue

    • vue路由
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • java
  • spring
  • springboot
  • springcloud
  • git
  • maven
  • nginx
  • tomcat
  • springmvc
  • jvm
  • 图数据库
  • mysql数据库
  • redis数据库
  • windows下docker安装nginx并挂载目录
  • linux命令
  • linux安装软件
  • linux脚本
  • idea
  • vscode
  • 归档
  • 综合项目

    • 若依项目
    • mall项目
  • java
  • mybatis
  • xxl-job
  • mybatis
GitHub (opens new window)
  • linux命令

  • linux安装软件

    • linux安装docker-在线下载
    • Linux安装java-离线安装
    • linux安装maven-离线安装
    • linux安装nginx-离线安装
    • Linux安装node-离线安装
    • linux安装tomcat并设置开机自启-离线
    • linux安装nacos-离线安装
    • linux在线安装minio
    • 基于Linux安装ES
    • docker安装elk
      • docker安装elk
      • springboot整合elk
      • 配置kibana
      • kibana汉化
  • linux脚本

  • Linux
  • linux安装软件
~chao
2022-12-07
目录

docker安装elk

./文章转载自: SpringBoot进阶教程(七十四)整合ELK - 请叫我头头哥 - 博客园 (cnblogs.com) (opens new window)

1.什么是ELK?

ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是ElasticSearch、Logstash 和 Kibana。

ElasticSearch:ElasticSearch简称ES,它是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎Apache Lucene基础上的搜索引擎,使用Java语言编写。关于ES的更多介绍,可以看看《SpringBoot进阶教程(七十三)整合elasticsearch 》 (opens new window)

Logstash:Logstash是一个具有实时传输能力的数据收集引擎,用来进行数据收集(如:读取文本文件)、解析,并将数据发送给ES。

Kibana:Kibana为Elasticsearch提供了分析和可视化的Web平台。它可以在Elasticsearch的索引中查找,交互数据,并生成各种维度表格、图形。

2.ELK的用途

2.1问题排查:我们常说,运维和开发这一辈子无非就是和问题在战斗,所以这个说起来很朴实的四个字,其实是沉甸甸的。很多公司其实不缺钱,就要稳定,而要稳定,就要运维和开发能够快速的定位问题,甚至防微杜渐,把问题杀死在摇篮里。日志分析技术显然问题排查的基石。基于日志做问题排查,还有一个很帅的技术,叫全链路追踪,比如阿里的eagleeye 或者Google的dapper,也算是日志分析技术里的一种。

2.2监控和预警:日志,监控,预警是相辅相成的。基于日志的监控,预警使得运维有自己的机械战队,大大节省人力以及延长运维的寿命。

2.3关联事件:多个数据源产生的日志进行联动分析,通过某种分析算法,就能够解决生活中各个问题。比如金融里的风险欺诈等。这个可以可以应用到无数领域了,取决于你的想象力。

2.4数据分析:这个对于数据分析师,还有算法工程师都是有所裨益的。

# docker安装elk

1. 拉取镜像

docker pull elasticsearch:7.5.1 docker pull logstash:7.5.1 docker pull kibana:7.5.1

注意各个版本尽量保持一致,否则可能会报错。

2. 创建docker-compose.yml

因为elk涉及到多个镜像,所以使用docker-compose的方式,会比较方便。如果还没有安装docker-compose的,可以看看这篇文章 (opens new window)。

创建目录: mkdir /usr/local/docker/elk

在elk目录下创建docker-compose.yml文件 vi docker-compose.yml

version: '3'
services:
  elasticsearch:
    image: elasticsearch:7.5.1
    container_name: elasticsearch
    environment:
      - "cluster.name=elasticsearch" #设置集群名称为elasticsearch
      - "discovery.type=single-node" #以单一节点模式启动
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #设置使用jvm内存大小
    volumes:
      - /usr/local/docker/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
      - /usr/local/docker/elk/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载
    ports:
      - 9200:9200
  kibana:
    image: kibana:7.5.1
    container_name: kibana
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    environment:
      - ELASTICSEARCH_URL=http://elasticsearch:9200 #设置访问elasticsearch的地址
    ports:
      - 5601:5601
  logstash:
    image: logstash:7.5.1
    container_name: logstash
    volumes:
      - /usr/local/docker/elk/logstash/logstash-springboot.conf:/usr/share/logstash/pipeline/logstash.conf #挂载logstash的配置文件
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    links:
      - elasticsearch:es #可以用es这个域名访问elasticsearch服务
    ports:
      - 4560:4560
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
33
34

!wd保存。

3. 创建logstash-springboot.conf

创建 logstash目录 mkdir /usr/local/docker/elk/logstash

cd logstash 进入logstash 目录

创建logstash-springboot.conf配置文件 vi logstash-springboot.conf

input {
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4560
    codec => json_lines
  }
}
output {
  elasticsearch {
    hosts => "es:9200"
    index => "springboot-logstash-%{+YYYY.MM.dd}"
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

cd .. 返回上一级目录,即回到docker-compose所在的目录( /usr/local/docker/elk )。

4. 启动ELK

docker-compose up -d

访问Kibana(访问地址:http://ip:5601),会看到异常信息 Cannot connect to the Elasticsearch cluster currently configured for Kibana. 再通过 docker ps -a 发现elasticsearch实例挂了。

通过 docker logs -f elasticsearch 可以看到,es容器里的/usr/share/elasticsearch/data/nodes文件夹目录没有读写权限,实际上是没有宿主机/usr/local/es/data的读写权限。

chmod 777 /usr/local/docker/elk/elasticsearch/data

然后重启一下 docker-compose restart

请求url http://toutou.com:5601 ,搞定。

注意:如果启动ELK之后马上请求url,会提示 Kibana server is not ready yet ,等一会就好了。因为ELK三个应用之间创建连接也需要一点时间。

# springboot整合elk

1. 添加引用

    <dependency\>
        <groupId\>net.logstash.logback</groupId\>
        <artifactId\>logstash-logback-encoder</artifactId\>
        <version\>5.2</version\>
    </dependency\>
1
2
3
4
5

2. 添加logback.xml 放到resources路径下,application.yml中什么也不需要配置

<?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="myshop-demo-elk"/>
    <!--日志文件保存路径-->
    <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>toutou.com:4560</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

注意:appender节点下的destination需要改成自己的logstash服务地址,比如我的是:toutou.com:4560

如果logback.xml不知道怎么配的话,可以看看这篇文章:SpringBoot入门教程(八)配置logback日志 (opens new window)

3. 添加测试Controller

@Slf4j
@RestController
public class ELKController {
    @GetMapping("/elk")
    public String index() {
        String message = "logback ELK成功接入了,时间:" + new Date();
        log.info(message);
        return "it is wonderful";
    }
}

1
2
3
4
5
6
7
8
9
10
11

关于springboot的整合就可以了,然后启动SpringBoot应用就行。

# 配置kibana

请求url http://ip:5601 ,点击Explore on my own。

1. 创建索引

SpringBoot进阶教程(七十四)整合ELK

SpringBoot进阶教程(七十四)整合ELK

SpringBoot进阶教程(七十四)整合ELK

依次按上图中的步骤创建索引。

2. 查看收集日志

SpringBoot进阶教程(七十四)整合ELK

SpringBoot进阶教程(七十四)整合ELK

3. 添加过滤条件,查找符合条件的日志

SpringBoot进阶教程(七十四)整合ELK

4. 添加过滤条件

通过日志查询,我们会发现有很多debug的无效日志,这种日志可能不是太需要,而且会影响我们查询真正有用的日志。这样我们就可以在收集日志的时候,修改logstash-springboot.conf配置,通过logstash-springboot.conf来移除debug级别的日志。更新后的配置如下:

input {
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4560
    codec => json_lines
  }
}
output {
    if [level] != "ERROR"  {
        elasticsearch {
            hosts => "es:9200"
            index => "springboot-logstash-%{+YYYY.MM.dd}"
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# kibana汉化

1. 进入kibana容器

docker exec -it kibana /bin/bash

2. 编辑文件

vi /opt/kibana/config/kibana.yml

修改该文件 在文件最后加上一行配置

i18n.locale: zh-CN

注意:zhe-CN和:号之间必须有个空格,否则kibana无法启动

此处有一个坑点,我是通过docker-compose重启了三个docker 容器,但是重启后还是没有汉化,再去查看配置文件,我配置的汉化内容已经丢失,我试过几次,确认配置文件已经修改并保存,还是汉化失败,后来我单独停止了kibana容器,修改配置文件,重启kibana成功汉化

重启,即可看到访问的 kibana已汉化。

SpringBoot进阶教程(七十四)整合ELK

编辑 (opens new window)
上次更新: 2024/01/26, 05:03:22
基于Linux安装ES
启动、停止jar包命令

← 基于Linux安装ES 启动、停止jar包命令→

最近更新
01
python使用生成器读取大文件-500g
09-24
02
Windows环境下 Docker Desktop 安装 Nginx
04-10
03
使用nginx部署多个前端项目(三种方式)
04-10
更多文章>
Theme by Vdoing | Copyright © 2022-2024 chaos | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式