ELK到底是什么?
一、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 in
bnpm install
npm run start
zhe 这里npm install k可能会有一个包npm install时 phantomjs包下载不下来,单独下载就可以批量下载时,
npm install phantomjs@2.1.1 --ignore-scripts
然后再重复上述操作即可,启动之后,访问http://localhost:9100,界面如下:
4、启动logstash
进入logstash/config中新建配置文件logstash.conf,内容如下:
input {
file {
type => "nginx_access"
path => "d:/elk/logs/logstash.log"
}
}
output {
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "access-%{+YYYY.MM.dd}"
}
stdout {
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-->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.3</version>
</dependency>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
yml配置文件中写入
spring.application.name=myElk
server.port = 8081
在resource下创建logback-spring.xml文件,内容如下:
<?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="mall-admin"/>
<!--日志文件保存路径-->
<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">
<file>d:\elk\logs\logstash.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- <fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>-->
<fileNamePattern>d:\elk\logs\logstash.%d{yyyy-MM-dd}.%d.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>127.0.0.1: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>
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中创建索引access-*,时间选择 I dont want to use te time filter就行
点击create index pattern即可创建成功
创建成功之后,可以选择上方搜索框,搜索Discover,可以选择table或者json
IDEA 中控制台打印的原日志内容是下面内容。Logstash 作用就是把下面内容转换为上面Elasticsearch 存储的内容。在中间做了数据格式转换,收集数据放入 Elasticsearch 中的工作。