方案图网站,自定义wordpress后台,织梦cms 做视频网站,做网站个网站要多少钱一、ELK 是什么#xff1f;
ELK 实际上是三个工具的集合#xff0c;Elasticsearch Logstash Kibana#xff0c;这三个工具组合形成了一套实用、易用的监控架构#xff0c;很多公司利用它来搭建可视化的海量日志分析平台。 ElasticSearch ElasticSearch 是一个基于 Lucen…一、ELK 是什么
ELK 实际上是三个工具的集合Elasticsearch Logstash Kibana这三个工具组合形成了一套实用、易用的监控架构很多公司利用它来搭建可视化的海量日志分析平台。 ElasticSearch ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎基于 RESTful web 接口。Elasticsearch 是用 Java 开发的并作为 Apache 许可条款下的开放源码发布是当前流行的企业级搜索引擎。设计用于云计算中能够达到实时搜索稳定可靠快速安装使用方便。 Logstash Logstash 是一个用于管理日志和事件的工具你可以用它去收集日志、转换日志、解析日志并将他们作为数据提供给其它模块调用例如搜索、存储等。 Kibana Kibana 是一个优秀的前端日志展示框架它可以非常详细的将日志转化为各种图表为用户提供强大的数据可视化支持。
二、ELK 有何优势 强大的搜索功能elasticsearch 可以以分布式搜索的方式快速检索而且支持 DSL 的语法来进行搜索简单的说就是通过类似配置的语言快速筛选数据。 完美的展示功能可以展示非常详细的图表信息而且可以定制展示内容将数据可视化发挥的淋漓尽致。 分布式功能能够解决大型集群运维工作很多问题包括监控、预警、日志收集解析等。
三、ELK 一般用来做啥
ELK 组件在海量日志系统的运维中可用于解决 分布式日志数据集中式查询和管理 系统监控包含系统硬件和应用各个组件的监控 故障排查 安全信息和事件管理 报表功能
ELK 组件在大数据运维系统中主要可解决的问题如下 日志查询问题排查上线检查 服务器监控应用监控错误报警Bug 管理 性能分析用户行为分析安全漏洞分析时间管理
四、ELK 搭建
1、版本介绍
这里笔者采用 win11 进行搭建其余版本如下
elasticsearch-7.12.0
kibana-7.12.0-windows-x86_64
logstash-7.12.0-windows-x86_64
最后奉上网址下载中心 - Elastic 中文社区 (elasticsearch.cn)
看清楚喽是 windows 下版本要一致
2、启动 elasticsearch
ok下载解压之后开始我们的文件配置首先打开我们的 elasticsearch 文件夹进入 config 文件夹编辑 elasticsearch.yml 文件在文件中引入
cluster.name: my-application #集群名类似于数据库名
path.data: D:/log #数据目录
path.logs: D:/log #日志目录
node.name: node-1
node.attr.rack: r1
cluster.initial_master_nodes: node-1
node.master: true
node.data: true
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.compression: true
transport.tcp.compress: true
indices.query.bool.max_clause_count: 10240
xpack.watcher.execution.default_throttle_period: 1s
http.cors.enabled: true
http.cors.allow-origin: *保存配置后启动 ElasticSearch进入 bin 目录elasticsearch.bat 启动成功打开浏览器访问http://127.0.0.1:9200出现下面界面说明 ElasticSearch 启动成功 3、安装 elasticsearch-head 插件
安装 elasticsearch-head 插件这是 elasticsearch 的一个 web 端管理插件通过管理插件可以查看 ElsasticSearch 的客户端工具由 node.js 构建的前端工程。git 地址https://github.com/mobz/elasticsearch-head 。拉去过慢可以使用 gitclone 进行拉取 https://gitclone.com/github.com/mobz/elasticsearch-head
拉取成功后可以使用进入使用 vscode 打开或者其他编译器打开终端
npm install
npm run start
这里 npm install 可能会有一个包 npm install 时 phantomjs 包下载不下来单独下载就可以批量下载时
npm install phantomjs2.1.1 --ignore-scripts
然后再重复上述操作即可启动之后访问 http://localhost:9100界面如下 4、启动 logstash
进入 logstash/config 中新建配置文件 logstash.conf, 内容如下
input {file {type logstash//path用来指定要加载到logstash中的文件目录path [D:/logs/*/error/*.log,D:/logs/*/warn/*.log,D:/logs/*/info/*.log]start_position beginning}
}
output {elasticsearch {hosts [127.0.0.1:9200]//index用来指定在es中自动创建的索引库index logstash-%{YYYY.MM.dd}}stdout {//以JSON的形式传输到es中codec json_lines}
}启动 logstash, 进入 logstash/bin 执行.\logstash.bat -f …/config/logstash.conf
以下界面就是启动成功了 5、启动 Kibana
进入 Kibana 下 config 下的 kibana.yml 修改为
server.port: 5601
server.host: 127.0.0.1
elasticsearch.hosts: [http://localhost:9200]
xpack.encryptedSavedObjects.encryptionKey: encryptedSavedObjects12345678909876543210
xpack.security.encryptionKey: encryptionKeysecurity12345678909876543210
xpack.reporting.encryptionKey: encryptionKeyreporting12345678909876543210
xpack.reporting.capture.browser.chromium.disableSandbox: true启动 Kibana进入 Kibana/bin 执行kibana.bat打开浏览器访问 http://localhost:5601/ 五、与 springboot 集成
引入依赖 !--logstash--dependencygroupIdnet.logstash.logback/groupIdartifactIdlogstash-logback-encoder/artifactIdversion5.3/version/dependency!--web--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependencyyml 配置文件中写入
spring.application.namemyElkserver.port 8081在 resource 下创建 logback-spring.xml 文件内容如下
?xml version1.0 encodingUTF-8?
configurationproperty nameLOG_CONTEXT_NAME valuelog/!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--property nameLOG_HOME valueD:/logs /!-- 定义日志上下文的名称 --contextName${LOG_CONTEXT_NAME}/contextName!-- 控制台输出 --!--appender nameSTDOUT classch.qos.logback.core.ConsoleAppenderencoder classch.qos.logback.classic.encoder.PatternLayoutEncoderlt;!ndash;格式化输出%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符ndash;gt;pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n/patterncharsetutf-8/charset/encoderfilter classch.qos.logback.classic.filter.ThresholdFilterlevelINFO/level/filter/appender--!-- 彩色日志依赖的渲染类 --conversionRule conversionWordclr converterClassorg.springframework.boot.logging.logback.ColorConverter /conversionRule conversionWordwex converterClassorg.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter /conversionRule conversionWordwEx converterClassorg.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter /!-- 彩色日志格式 --property nameCONSOLE_LOG_PATTERN value${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}/!--1. 输出到控制台--appender nameSTDOUT classch.qos.logback.core.ConsoleAppender!--此日志appender是为开发使用只配置最底级别控制台输出的日志级别是大于或等于此级别的日志信息--filter classch.qos.logback.classic.filter.ThresholdFilterlevelINFO/level/filterencoderPattern${CONSOLE_LOG_PATTERN}/Pattern!-- 设置字符集 --charsetUTF-8/charset/encoder/appender!--info日志统一输出到这里--appender namefile.info classch.qos.logback.core.rolling.RollingFileAppenderPrudenttrue/PrudentrollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy!--日志文件输出的文件名按小时生成--FileNamePattern${LOG_HOME}/%d{yyyy-MM-dd}/info/info.%d{yyyy-MM-dd-HH}.%i.log/FileNamePattern!--日志文件保留天数--MaxHistory30/MaxHistorytimeBasedFileNamingAndTriggeringPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedFNATP!-- 除按日志记录之外还配置了日志文件不能超过10M(默认)若超过10M日志文件会以索引0开始 --maxFileSize10MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy/rollingPolicyencoder classch.qos.logback.classic.encoder.PatternLayoutEncoder!--格式化输出%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度 %method 方法名 %L 行数 %msg日志消息%n是换行符--pattern %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n/patterncharsetutf-8/charset/encoder!-- 此日志文件只记录info级别的 --filter classch.qos.logback.classic.filter.LevelFilterlevelINFO/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!--错误日志统一输出到这里--appender namefile.error classch.qos.logback.core.rolling.RollingFileAppenderPrudenttrue/PrudentrollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy!--日志文件输出的文件名按天生成--FileNamePattern${LOG_HOME}/%d{yyyy-MM-dd}/error/error.%d{yyyy-MM-dd}.%i.log/FileNamePattern!--日志文件保留天数--MaxHistory30/MaxHistorytimeBasedFileNamingAndTriggeringPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedFNATP!-- 除按日志记录之外还配置了日志文件不能超过10M(默认)若超过10M日志文件会以索引0开始 --maxFileSize10MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy/rollingPolicyencoder classch.qos.logback.classic.encoder.PatternLayoutEncoder!--格式化输出%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度 %method 方法名 %L 行数 %msg日志消息%n是换行符--pattern %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n/patterncharsetutf-8/charset/encoder!-- 此日志文件只记录error级别的 --filter classch.qos.logback.classic.filter.LevelFilterlevelERROR/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!--warn日志统一输出到这里--appender namefile.warn classch.qos.logback.core.rolling.RollingFileAppenderPrudenttrue/PrudentrollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyFileNamePattern${LOG_HOME}/%d{yyyy-MM-dd}/warn/warn.%d{yyyy-MM-dd}.%i.log/FileNamePattern!--日志文件保留天数--MaxHistory30/MaxHistorytimeBasedFileNamingAndTriggeringPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedFNATP!-- 除按日志记录之外还配置了日志文件不能超过10M(默认)若超过10M日志文件会以索引0开始 --maxFileSize10MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy/rollingPolicyencoder classch.qos.logback.classic.encoder.PatternLayoutEncoder!--格式化输出%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度 %method 方法名 %L 行数 %msg日志消息%n是换行符--pattern %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n/patterncharsetutf-8/charset/encoder!-- 此日志文件只记录warn级别的 --filter classch.qos.logback.classic.filter.LevelFilterlevelWARN/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!--输出到logstash的appender--appender nameLOGSTASH classnet.logstash.logback.appender.LogstashTcpSocketAppender!--可以访问的logstash日志收集端口--destination127.0.0.1:4560/destinationencoder charsetUTF-8 classnet.logstash.logback.encoder.LogstashEncoder//appender!-- 日志输出级别 --root levelDEBUGappender-ref refSTDOUT /appender-ref reffile.error /appender-ref reffile.info /appender-ref reffile.warn /appender-ref refLOGSTASH//root/configuration
ok接下来创建测试类
package com.example.myelk.controller;import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;Slf4j
RestController
RequestMapping(/test)
public class TestController {GetMapping(/success)public String test (){log.info(###test:{}, new Date());return success;}}
访问接口后在 Kibana 中创建索引 logstash-*, 时间选择 I dont want to use te time filter 就行
点击 create index pattern 即可创建成功
创建成功之后可以选择上方搜索框搜索 Discover, 可以选择 table 或者 json
IDEA 中控制台打印的原日志内容是下面内容。Logstash 作用就是把下面内容转换为上面 Elasticsearch 存储的内容。在中间做了数据格式转换收集数据放入 Elasticsearch 中的工作。