徒手从零搭建一套ELK日志平台

徒手从零搭建一套ELK日志平台

  • 日志分析的概述
  • 日志分析的作用
  • 主要收集工具
  • 集中式日志系统主要特点
  • 采集日志分类
  • ELK概述
    • 初级版ELK
    • 终极版ELK
    • 高级版ELK
    • ELK收集日志的两种形式
  • 搭建ELK平台
    • Logstash工作原理
    • Logstash核心概念
    • 环境准备
    • 安装部署docker
    • 添加镜像加速器
    • 安装部署Elasticsearch
    • 安装ElasticSearch-head(可选)
      • 拉取镜像
      • 运行容器
      • 页面无数据问题
      • 测试
    • 安装Kibana
      • 测试
    • Docker 安装 LogStash
    • 启动容器并挂载
    • 创建springboot应用
    • 查看 es-head
    • 查看Kibana

日志分析的概述

  • 日志分析是运维工程师解决系统故障,发现问题的主要手段
  • 日志主要包括系统日志、应用程序日志和安全日志
  • 系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因
  • 经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误

日志分析的作用

  • 分析日志时刻监控系统运行的状态
  • 分析日志来定位程序的bug
  • 分析日志监控网站的访问流量
  • 分析日志可以知道哪些sql语句需要优化

主要收集工具

  • 日志易: 国内一款监控、审计、权限管理,收费软件
  • splunk: 按流量收费,国外软件,主要三个部件组成(Indexer、Search Head、Forwarder)
    • Indexder提供数据的存储,索引,类似于elasticsearch的作用
    • Search Head负责搜索,客户接入,从功能上看,一部分是kibana的UI是运行,在Search Head上的,提供所有的客户端可视化功能,还有一部分,是提供分布式的搜索功能,具有Elasticsearch部分功能
    • Forwarder负责数据接入,类似Logstash或者filebeat
  • ELK: 海量日志分析平台(Elasticsearch、logstash、kibana),开源且在国内被广泛应用

集中式日志系统主要特点

动作功能
收集能够采集多种来源的日志数据
传输能够稳定的把日志传数据传输到中央系统
存储安全的存储日志数据
分析可以支持UI分析
警告能够提供错误报告

采集日志分类

维度举例
代理层Nginx、HAproxy…
web层Nginx、httpd、tomcat、Java…
数据库层MySQL、Redis、Elasticsearch、openGauss…
系统层message、secure

ELK概述

ELK是一个开源的数据分析平台,由三个开源项目Elasticsearch、Logstash和Kibana组成,因此被称为ELK
ELK主要用于处理和分析大量的日志数据,支持实时搜索、数据可视化和分析

  • Elasticsearch是一个 分布式搜索引擎 和分析引擎,能够实现实时搜索和分析大规模的数据集
  • Logstash是一个数据收集、处理和转换工具,能够从不同来源收集、处理和传输数据
  • Kibana是一个数据可视化工具,能够通过仪表盘、图形和地图等方式展示数据
  • ELK 三个组件相互配合,能够构建一个强大的、可扩展的日志分析平台,支持数据的快速检索、可视化和分析。

初级版ELK

在这里插入图片描述

终极版ELK

在这里插入图片描述

高级版ELK

在这里插入图片描述

ELK收集日志的两种形式

不修改源日志的格式 而是通过logstash的grok方式进行过滤清洗,将原始无规则的日志转换为规则的日志

  • 优点 不用修改原始日志输出格式,直接通过logstash的grok方式进行过滤分析,好处是对线上业务系统无任何影响
  • 缺点 logstash的grok方式在高压力情况下会成为性能瓶颈如果要分析的日志量超大时,日志过滤分析可能阻塞正常的日志输出;因此,在使用logstash时,能不用grok尽量不使用grok过滤功能。

修改源日志输出格式 按照需要的日志格式输出规则日志,logstash只负责日志的收集和传输,不对日志做任何的过滤清洗。

  • 优点 因为已经定义好了需要的日志输出格式, logstash只负责日志的收集和传输,这样就大大减轻了logstash的负担,可以更高效的收集和传输日志。
  • 缺点 需要事先定义好日志的输出格式,这可能有一定工作量,但目前常见的web服务器例如httpd、Nginx等都支持自定义日志输出格式。

搭建ELK平台

Elasticsearch 官网:
https://www.elastic.co/cn/elasticsearch

Elasticsearch是一个基于Lucene库的分布式搜索引擎和数据分析引擎,能够实现实时搜索和分析大规模的数据集,支持文本、数字、地理位置等多种类型的数据检索和分析。Elasticsearch是一个开源的、高度可扩展的平台,能够处理海量的数据,并支持分布式的数据存储和处理。Elasticsearch的主要特点包括:

  • 分布式搜索引擎 Elasticsearch能够对海量的数据进行快速的搜索和查询,并支持实时搜索。
  • 分布式数据存储 Elasticsearch能够将数据分散存储在多个节点上,以提高数据的可用性和可靠性。
  • 多数据类型支持 Elasticsearch支持多种数据类型,包括文本、数字、日期、地理位置等。
  • 实时数据分析 Elasticsearch能够对数据进行实时的聚合、过滤和分析,并支持数据可视化。
  • 可扩展性 Elasticsearch能够扩展到数百个节点,处理PB级别的数据。
  • 开源 Elasticsearch是一个开源的软件,源代码可以公开获取和修改。Elasticsearch广泛应用于企业搜索、日志分析、安全分析和商业智能等领域。它提供了丰富的API和工具,包括RESTful API、Java API和Python API等,方便开发人员集成和使用。

Logstash 文档地址:
https://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html

Logstash 是一个开源的数据收集、处理和转换工具,能够从不同来源收集、处理和传输数据。,主要用于处理和分析大量的日志数据,支持多种数据源和格式,包括文本文件、数据库、日志文件、消息队列等。Logstash能够实现以下功能:

  • 数据收集 Logstash能够从不同的数据源收集数据,并支持多种数据格式,包括JSON、CSV、XML等。
  • 数据处理 Logstash能够对收集到的数据进行处理和转换,例如过滤、分析、标准化等。
  • 数据传输 Logstash能够将处理后的数据传输到目标位置,例如Elasticsearch、Kafka、Redis等。
  • 插件扩展 Logstash提供了丰富的插件,方便用户扩展和定制功能。
  • 实时数据处理 Logstash能够实现实时数据处理,支持流式数据处理。Logstash是一个高度可扩展的工具,能够处理大量的数据,并支持分布式部署。它能够与Elasticsearch、Kibana、Beats等工具集成,构建一个强大的、可扩展的数据分析平台。Logstash提供了丰富的文档和社区支持,方便用户学习和使用。

Logstash工作原理

在这里插入图片描述
如上图,Logstash的数据处理过程主要包括:Inputs, Filters, Outputs 三部分, 另外在Inputs和Outputs中可以使用Codecs对数据格式进行处理。这四个部分均以插件形式存在,用户通过定义pipeline配置文件,设置需要使用的input,filter,output, codec插件,以实现特定的数据采集,数据处理,数据输出等功能

  • Inputs: 用于从数据源获取数据,常见的插件如file, syslog, redis, beats 等

  • Filters: 用于处理数据如格式转换,数据派生等,常见的插件如grok, mutate, drop, clone, geoip等

  • Outputs: 用于数据输出,常见的插件如elastcisearch,file, graphite, statsd等

  • Codecs: Codecs不是一个单独的流程,而是在输入和输出等插件中用于数据转换的模块,用于对数据进行编码处理,常见的插件如json,multiline

Logstash核心概念

  • Pipeline: 包含了input—filter-output三个阶段的处理流程、插件生命周期管理、队列管理
  • Logstash Event: 数据在内部流转时的具体表现形式
    • 数据在input 阶段被转换为Event,在 output被转化成目标格式数据
    • Event 其实是一个Java Object,在配置文件中,对Event 的属性进行增删改查
  • Codec (Code / Decode): 将原始数据decode成Event,将Event encode成目标数据

在这里插入图片描述

Kibana 文档地址:
https://www.elastic.co/guide/cn/kibana/current/install.html

Kibana是一个数据可视化工具,能够通过仪表盘、图形和地图等方式展示数据。主要用于展示和分析从Elasticsearch中获取的数据。Kibana能够实现以下功能:

  • 数据可视化: Kibana能够通过仪表盘、图形和地图等方式展示数据,支持多种数据类型和格式。
  • 数据查询: Kibana能够实现对Elasticsearch中存储的数据进行查询和搜索。
  • 仪表盘管理: Kibana能够创建、管理和共享仪表盘,方便用户展示和分享数据。
  • 可视化插件: Kibana提供了丰富的可视化插件,方便用户扩展和定制功能。
  • 数据分析: Kibana能够实现对数据进行聚合、过滤和分析,支持实时数据处理。Kibana的主要优点包括易用性、可- 扩展性和丰富的功能。它能够与Elasticsearch、Logstash、Beats等工具集成,构建一个强大的、可扩展的数据分析平台。Kibana提供了丰富的文档和社区支持,方便用户学习和使用。

环境准备

使用模板机克隆elk并配置如下参数

主机IP地址网关DNS配额
elk192.168.8.111/24192.168.8.254192.168.8.2541CPU2G内存
[root@template ~]# hostnamectl set-hostname elk      #配置主机名
[root@elk ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.8.111/24 ipv4.gateway 192.168.8.254 ipv4.dns 192.168.8.254 connection.autoconnect yes             #配置入网参数
[root@elk ~]# nmcli connection up ens160        #激活网卡

安装部署docker

开启路由转发,docker是通过虚拟交换机来进行通讯的,需要开启路由转发的功能

[root@elk ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 
[root@elk ~]# sysctl -p                #sysctl -p 让配置立刻生效(否则需要重启虚拟机)

docker上传至虚拟机elk的/root

[root@docker-0001 ~]# dnf remove podman     #卸载冲突的软件包
[root@docker-0001 ~]# dnf remove runc
[root@docker-0001 ~]# cd /root/docker
[root@docker-0001 docker]# dnf -y localinstall *.rpm #安装docker

添加镜像加速器

使用华为云的镜像加速器,每个人的都不一样

[root@elk ~]# vim /etc/docker/daemon.json
[root@elk ~]# vim /etc/docker/daemon.json
{
    "registry-mirrors": ["这里配置镜像仓库加速器地址"],
    "insecure-registries":[]
}
[root@elk ~]# systemctl restart docker 
[root@elk ~]# docker info

安装部署Elasticsearch

[root@elk ~]# docker network create -d bridge elk  #创建网络
[root@elk ~]# docker network ls       #查看网络
[root@elk ~]# docker search elasticsearch    #搜索镜像
[root@elk ~]# docker pull elasticsearch:7.12.1   #下载镜像elasticsearch:7.12.1
[root@elk ~]# docker images        #查看镜像
# 运行 elasticsearch
[root@elk ~]# docker run -d --name es --net elk -P -e "discovery.type=single-node" elasticsearch:7.12.1

# 进入容器查看配置文件路径
[root@elk ~]# docker exec -it es /bin/bash
[root@f84bda6f8389 elasticsearch] cd config

[root@f84bda6f8389 config]# ls
elasticsearch.keystore  jvm.options.d           role_mapping.yml  users_roles
elasticsearch.yml       log4j2.file.properties  roles.yml
jvm.options             log4j2.properties       users

[root@f84bda6f8389 config]# pwd
/usr/share/elasticsearch/config
# 在 config 中可看到 elasticsearch.yml 配置文件,
# 再执行 pwd 可以看到当前目录为: /usr/share/elasticsearch/config,所以退出容器,执行文件的拷贝
[root@f84bda6f8389 config]# exit
# 将容器内的配置文件拷贝到 /usr/local/elk/elasticsearch/ 中
[root@elk ~]#  mkdir -p /usr/local/elk/elasticsearch
[root@elk ~]#  docker cp es:/usr/share/elasticsearch/config/elasticsearch.yml /usr/local/elk/elasticsearch

[root@elk ~]# vim /usr/local/elk/elasticsearch/elasticsearch.yml
#此处省略1万字...在最后一行下方添加
http.cors.enabled: true
http.cors.allow-origin: "*"

# 注意:这里要修改文件的权限为可写,否则进行挂载后,在外部修改配置文件,容器内部的配置文件不会更改
# 同时,创建 data 目录进行挂载。
# 修改文件权限
[root@elk ~]# chmod 666 /usr/local/elk/elasticsearch/elasticsearch.yml
[root@elk ~]# mkdir -p /usr/local/elk/elasticsearch/data
[root@elk ~]# chmod -R 777 /usr/local/elk/elasticsearch/data
#重新运行容器并挂载
[root@elk ~]# docker rm -f es      #删除测试容器es
# 运行新的容器
[root@elk ~]# docker run -d --name es \
--net elk \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
--privileged=true \
-v /usr/local/elk/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /usr/local/elk/elasticsearch/data:/usr/share/elasticsearch/data \
elasticsearch:7.12.1

[root@elk ~]# docker ps

浏览器访问地址:http://192.168.8.111:9200/

在这里插入图片描述

安装ElasticSearch-head(可选)

说明:ElasticSearch-head是 ES的可视化界面,是为了方便后面调试时看日志有没成功输入到 ES 用的,非必须安装的项目,也可跳过此步。

拉取镜像

[root@elk ~]# docker pull mobz/elasticsearch-head:5

运行容器

[root@elk ~]# docker run -d --name es_admin --net elk -p 9100:9100 mobz/elasticsearch-head:5
[root@elk ~]# docker ps

页面无数据问题

如果打开页面之后节点、索引等显示完全,但是数据浏览中无数据显示,那么我们还需要改一个配置文件,这是因为 ES 6 之后增加了请求头严格校验的原因(我们装的是 7.12.1 版本)

[root@elk ~]#  docker cp es_admin:/usr/src/app/_site/vendor.js ./
[root@elk ~]#  vim vendor.js
#6886行:contentType: "application/json;charset=UTF-8"
#7573行: contentType === "application/json;charset=UTF-8"
# 改完后再将配置文件 copy 回容器,不需重启,直接刷新页面即可。

[root@elk ~]# docker cp vendor.js es_admin:/usr/src/app/_site/

测试

浏览器访问地址:http://192.168.8.111:9100/
在这里插入图片描述

安装Kibana

root@localhost ~]# docker search kibana
[root@elk ~]# docker pull kibana:7.12.1

# 注意: -e “ELASTICSEARCH_HOSTS=http://es:9200” 表示连接刚才启动的 elasticsearch 容器,
# 因为在同一网络(elk)中,地址可直接填 容器名+端口,即 es:9200, 也可以填 http://192.168.138.174:9200,即 http://ip:端口。
[root@elk ~]# docker run -d --name kibana --net elk -P -e "ELASTICSEARCH_HOSTS=http://es:9200" -e "I18N_LOCALE=zh-CN" kibana:7.12.1 #运行容器
#将容器内kibana的配置文件拷贝出来
[root@elk ~]# mkdir -p /usr/local/elk/kibana/
[root@elk ~]# docker cp kibana:/usr/share/kibana/config/kibana.yml /usr/local/elk/kibana/
[root@elk ~]# chmod 666 /usr/local/elk/kibana/kibana.yml

# 拷贝完成后,修改该配置文件,主要修改 elastissearch.hosts 并新增 i18n.locale 配置:
# 1. es 地址改为刚才安装的 es 地址,因容器的隔离性,这里最好填写 http://ip:9200
# 2. kibana 界面默认是英文的,可以在配置文件中加上 i18n.locale: zh-CN(注意冒号后面有个空格)
# 这样有了配置文件,在启动容器时就不用通过 -e 指定环境变量了
# 注意:
# 如果使用挂载配置文件的方式启动的话,elasticsearch.hosts 这需填写 http://ip:9200,而不能使用容器名了,否则后面 kibana 连接 es 会失败。
[root@elk ~]# vim /usr/local/elk/kibana/kibana.yml
# 注意这个ip是docker容器内部的IP,不是虚拟机的,可以使用 docker inspect es来查看
elasticsearch.hosts: [ "http://172.18.0.2:9200" ]
i18n.locale: zh-CN
#删除原来未挂载的容器
[root@elk ~]# docker rm -f kibana

#启动容器并挂载
[root@elk ~]# docker run -d --name kibana -p 5601:5601 -v /usr/local/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml --net elk kibana:7.12.1

浏览器访问地址:http://192.168.8.111:9100/
在这里插入图片描述

测试

开始使用 Kibana 前,需要告诉 Kibana 您想要探索的 Elasticsearch 索引。第一次访问 Kibana 时,会提示您定义一个 index pattern(索引模式) 匹配一个或多个索引。这就是初次使用 Kibana 时所有需要配置的。任何时候都可以在 Management 页面增加索引模式。

默认情况下,Kibana 会连接运行在 localhost 上的 Elasticsearch 实例。如果需要连接不同的 Elasticsearch实例,可以修改 kibana.yml 配置文件中的 Elasticsearch URL 配置项并重启 Kibana。如果在生产环境节点上使用 Kibana

设置您想通过 Kibana 访问的 Elasticsearch 索引:

浏览器中指定端口号5601来访问 Kibana UI 页面。例如, localhost:5601 或者 http://YOURDOMAIN.com:5601
在这里插入图片描述
指定一个索引模式来匹配一个或多个 Elasticsearch 索引名称。默认情况下,Kibana 会认为数据是通过 Logstash 解析送进 Elasticsearch 的。这种情况可以使用默认的 logstash-* 作为索引模式。星号 (*) 匹配0或多个索引名称中的字符。如果 Elasticsearch 索引遵循其他命名约定,请输入一个恰当的模式。该模式也可以直接用单个索引的名称。

如果您想做一些基于时间序列的数据比较,可以选择索引中包含时间戳的字段。Kibana 会读取索引映射,列出包含时间戳的所有字段。如果索引中没有基于时间序列的数据,则禁用 Index contains time-based events 选项。

点击 Create 增加索引模式。默认情况下,第一个模式被自动配置为默认的。当索引模式不止一个时,可以通过点击 Management > Index Patterns 索引模式题目上的星星图标来指定默认的索引模式。

全部设置完毕!Kibana 连接了 Elasticsearch 的数据。展示了一个匹配到的索引的字段只读列表。

浏览器访问地址:http://192.168.8.111:5601/
在这里插入图片描述

Docker 安装 LogStash

拉取镜像并拷贝配置

[root@elk ~]# docker pull logstash:7.12.1
[root@elk ~]# docker run -d -P --name logstash --net elk logstash:7.12.1

# 拷贝数据
[root@elk ~]# mkdir -p /usr/local/elk/logstash/
[root@elk ~]# docker cp logstash:/usr/share/logstash/config /usr/local/elk/logstash/
[root@elk ~]# docker cp logstash:/usr/share/logstash/data /usr/local/elk/logstash/
[root@elk ~]# docker cp logstash:/usr/share/logstash/pipeline /usr/local/elk/logstash/

#文件夹赋权
[root@elk ~]# chmod -R 777 /usr/local/elk/logstash/

修改相应配置文件
修改 logstash/config 下的 logstash.yml 文件,主要修改 es 的地址(可通过 docker inspect es查看地址):

[root@elk ~]# vim /usr/local/elk/logstash/config/logstash.yml
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://172.18.0.2:9200" ]

修改 logstash/pipeline 下的logstash.conf文件:

[root@elk ~]# vim /usr/local/elk/logstash/pipeline/logstash.conf

input {
  tcp {
    mode => "server"
    host => "0.0.0.0"  # 允许任意主机发送日志
    port => 5044
    codec => json_lines    # 数据格式
  }
}

output {
  elasticsearch {
      hosts  => ["http://172.18.0.2:9200"]   # ElasticSearch 的地址和端口
      index  => "elk"         # 指定索引名
      codec  => "json"
  }
  stdout {
    codec => rubydebug
  }
}

启动容器并挂载

#注意先删除之前的容器
[root@elk ~]# docker rm -f logstash

# 启动容器并挂载
[root@elk ~]# docker run -d --name logstash --net elk \
--privileged=true \
-p 5044:5044 -p 9600:9600 \
-v /usr/local/elk/logstash/data/:/usr/share/logstash/data \
-v /usr/local/elk/logstash/config/:/usr/share/logstash/config \
-v /usr/local/elk/logstash/pipeline/:/usr/share/logstash/pipeline \
logstash:7.12.1

项目地址:
https://gitee.com/houyworking/elk.git

注意:该项目已经搭建好,只需要把对应 resource 下的 log/logback-springxml文件中的 <destination></destination>标签中 logstash 的地址换成对应自己的即可

创建springboot应用

这个比较简单,主要就是几个配置文件:
pom文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.tedu</groupId>
    <artifactId>elk</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>elk</name>
    <description>elk</description>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>6.6</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.tedu.elk.ElkApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

创建一个TestController,每次调用接口,都会打印日志

package com.tedu.elk.controller;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.UUID;

@RestController
public class TestController {
    private final static Logger logger = LoggerFactory.getLogger(TestController.class);

    @GetMapping("/index")
    public String index() {
        String uuid = UUID.randomUUID().toString();
        logger.info("TestController info " + uuid);
        return "hello elk " + uuid;
    }
}

在 resource 下创建log/logback-springxml文件,这里我们主要填写 ip:端口,关于标签则看个人使用情况修改。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>192.168.8.111:5044</destination>
        <!-- 日志输出编码 -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <providers>
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
                <pattern>
                    <pattern>
                        {
                        <!--es索引名称 -->
                        "index":"elk",
                        <!--应用名称 -->
                        "appname":"${spring.application.name}",
                        <!--打印时间 -->
                        "timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}",
                        <!--线程名称 -->
                        "thread": "%thread",
                        <!--日志级别 -->
                        "level": "%level",
                        <!--日志名称 -->
                        "logger_name": "%logger",
                        <!--日志信息 -->
                        "message": "%msg",
                        <!--日志堆栈 -->
                        "stack_trace": "%exception"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="LOGSTASH" />
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>

最后修改 application.yml 文件:

server:
  port: 8080

logging:
  config: classpath:log/logback-spring.xml

查看 es-head

在这里插入图片描述
在这里插入图片描述

查看Kibana

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试:调用接口 http://localhost:8080/index
再次查看 Kibana ,已经显示了在代码中打印的日志:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/920905.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源科学工程技术软件介绍 – EDA工具KLayout

link 今天向各位知友介绍的 KLayout是一款由德国团队开发的开源EDA工具。 KLayout是使用C开发的&#xff0c;用户界面基于Qt。它支持Windows、MacOS和Linux操作系统。安装程序可以从下面的网址下载&#xff1a; https://www.klayout.de/build.html KLayout图形用户界面&…

Linux离线安装Docker命令,简单镜像操作

解压安装包 首先&#xff0c;使用 tar 命令解压 docker-27.3.1.tgz 安装包&#xff1a; tar -zxvf docker-27.3.1.tgz 将二进制文件移动到可执行路径上的目录 接着&#xff0c;将解压出来的 Docker 二进制文件复制到系统的可执行路径&#xff08;通常是 /usr/bin/&#xff09…

Redis中常见的数据类型及其应用场景

五种常见数据类型 Redis中的数据类型指的是 value存储的数据类型&#xff0c;key都是以String类型存储的&#xff0c;value根据场景需要&#xff0c;可以以String、List等类型进行存储。 各数据类型介绍&#xff1a; Redis数据类型对应的底层数据结构 String 类型的应用场景 常…

redis中的set类型及常用命令

集合就是把一些有关联的数据放到一起。与list不同的是&#xff0c;集合中的顺序不重要&#xff0c;变换了元素的顺序&#xff0c;仍是同一个集合。集合中的元素是不能重复的。和list类似&#xff0c;集合中的每个元素&#xff0c;也都是string类型。 关于集合的相关命令 sadd/…

Python的顺序表

一、脑图 二、封装一个顺序表的类 1.构造函数 class SeqList:#显性定义出构造函数def __init__(self,capacity 10):#初始化顺序表 &#xff0c;设置初始容量和已有元素self.capacity capacity #线性表的最大容量self.size 0 #已存储的元素个数self.data [None]*capacity…

OpenCV从入门到精通实战(九)——基于dlib的疲劳监测 ear计算

本文实现Python库d和OpenCV来实现眼部闭合检测&#xff0c;主要用于评估用户是否眨眼。 步骤一&#xff1a;导入必要的库和设置参数 首先&#xff0c;代码导入了必要的Python库&#xff0c;如dlib、OpenCV和scipy。通过argparse设置了输入视频和面部标记预测器的参数。 from…

windows下,用CMake编译qt项目,出现错误By not providing “FindQt5.cmake“...

开发环境&#xff1a;windows10 qt5.14&#xff0c; 编译器msvc2017x64&#xff0c;CMake3.30&#xff1b; 现象&#xff1a; CMakeList文件里&#xff0c;如有find_package(Qt5 COMPONENTS Widgets REQUIRED) target_link_libraries(dis_lib PRIVATE Qt5::Widgets) 用CMak…

基于SpringBoot+Vue的影院管理系统(含演示视频+运行截图+说明文档)

web启动链接地址&#xff1a; http://localhost:8082&#xff08;管理端&#xff09; http://localhost:8081&#xff08;用户端&#xff09; http://localhost:8082&#xff08;员工端&#xff09; 一、项目介绍 基于框架的系统&#xff0c;系统分为用户、员工和管理员三个…

SpringBoot3+Vue3开发图书馆管理系统

1 项目介绍 图书馆管理系统&#xff0c;管理图书、用户、借书、还书、实时监测归还是否逾期&#xff0c;逾期未归还会生成违规记录。违规状态不可借阅图书。需缴纳罚金&#xff0c;消除违规记录。可动态设置图书最多累计借阅数量上限和最长借阅天数上限&#xff0c;当用户满足…

Figure 02迎重大升级!!人形机器人独角兽[Figure AI]商业化加速

11月19日知名人形机器人独角兽公司【Figure AI】发布公司汽车巨头【宝马】最新合作进展&#xff0c;旗下人形机器人Figure 02在生产线上的性能得到了显著提升&#xff0c;机器人组成自主舰队&#xff0c;依托端到端技术&#xff0c;速度提高了400%&#xff0c;执行任务成功率提…

Oracle之Rman非归档模式下的完全恢复

引言 首先Oracle必须处在非归档模式下才能模拟各种情况,Oracle处在非归档模式,做数据库脱机备份,并且rman的参数使用快闪恢复区作为备份文件的存储目录,配置了控制文件的自动备份。 联机全备 示例1:控制文件、数据文件以及重做日志文件丢失的恢复 数据文件以及重做日志…

Android Google登录接入

官方文献&#xff1a; 1、前期准备&#xff1a; https://developers.google.cn/identity/sign-in/android/legacy-start-integrating?hlzh-cnhttps://developers.google.cn/identity/sign-in/android/legacy-start-integrating?hlzh-cn 2、具体开发&#xff1a; 新版 Googl…

Java 同步锁性能的最佳实践:从理论到实践的完整指南

目录 一、同步锁性能分析 &#xff08;一&#xff09;性能验证说明 1. 使用同步锁的代码示例 2. 不使用同步锁的代码示例 3. 结果与讨论 &#xff08;二&#xff09;案例初步优化分析说明 1. 使用AtomicInteger原子类尝试优化分析 2. 对AtomicInteger原子类进一步优化 …

Docker+Nginx | Docker(Nginx) + Docker(fastapi)反向代理

在DockerHub搜 nginx&#xff0c;第一个就是官方镜像库&#xff0c;这里使用1.27.2版本演示 1.下载镜像 docker pull nginx:1.27.2 2.测试运行 docker run --name nginx -p 9090:80 -d nginx:1.27.2 这里绑定了宿主机的9090端口&#xff0c;只要访问宿主机的9090端口&#…

C#编写的日志记录组件 - 开源研究系列文章

以前编写过一个日志记录组件的博文&#xff0c;这次发布一个修改过的完善版本。 1、 项目目录&#xff1b; 2、 源码介绍&#xff1b; 1) 实现&#xff1b; 2) 使用&#xff1b; 后面的参数为级别设置&#xff0c;只有大于这个级别的才进行日志记录&#xff0c;限制了日志记录的…

win10+vs2019+cmake+opencv4.10+opencv_contrib编译记录

win10vs2019cmakeopencv4.10opencv_contrib编译记录 第一章 环境配置 本机环境已经安装好vs2019和cmake。 第二章 下载opencv相关 1.Opencv4.10下载 下载链接&#xff1a;opencv 下载时选择"Sources" 2.opencv_contrib 下载链接&#xff1a;opencv_contrib 第三…

前端:HTML (学习笔记)【1】

一&#xff0c;网络编程的三大基石 1&#xff0c;URL &#xff08;1&#xff09;url —— 统一资源定位符&#xff1a; 网址——整个互联网中可以唯一且准确的确定一个资源的位置。 【项目外】 网址——https://www.baidu.com/ …

2024年亚太地区数学建模大赛A题-复杂场景下水下图像增强技术的研究

复杂场景下水下图像增强技术的研究 对于海洋勘探来说&#xff0c;清晰、高质量的水下图像是深海地形测量和海底资源调查的关键。然而&#xff0c;在复杂的水下环境中&#xff0c;由于光在水中传播过程中的吸收、散射等现象&#xff0c;导致图像质量下降&#xff0c;导致模糊、…

基于SpringBoot的“广场舞团系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“广场舞团系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统首页界面图 社团界面图 社团活…

视频流媒体播放器EasyPlayer.js无插件直播流媒体音视频播放器Android端webview全屏调用无效问题

流媒体播放器的核心技术与发展趋势正在不断推动着行业的变革。未来&#xff0c;随着技术的不断进步和应用场景的不断拓展&#xff0c;流媒体播放器将为用户带来更加便捷、高效、个性化的观看体验。同时&#xff0c;流媒体播放器也会成为数字娱乐产业的重要组成部分&#xff0c;…