ELK介绍使用,从大数据开发语言到AIDL使用与原理讲解

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文

	{"title":"iphone4","desc":"iPhone 4屏幕采用LED屏幕"}

2. 更新,删除,新增

POST /phone_index/_doc/_bulk
{“update”:{“_id”:“1”}}
{“doc”:{“title”:“小米”}}
{“delete”:{“_id”:2}}
{“index”:{“_id”:3}}
{“title”:“荣耀手机”,“desc”:“LED屏幕。。。。”, “price”:900}


### 5. Elasticsearch 复杂查询




| 命令 | 含义 |
| --- | --- |
| match\_all | 查询所有,返回索引中的全部文档 |
| term | 关键字,用来使用关键词查询 |
| range | 范围查询,用来指定查询指定范围内的文档 |
| prefix | 前缀查询,用来检索含有指定前缀的关键词的相关文档 |
| wildcard | 通配符查询, ? 用来匹配一个任意字符 \* 用来匹配多个任意字符 |
| ids | 多id查询, 值为数组类型,用来根据一组id获取多个对应的文档 |
| fuzzy | 模糊查询含有指定关键字的文档 |
| multi\_match | 多字段查询 |
| highlight | 高亮查询,符合条件的文档中的关键词高亮 |
| size | 定查询结果中返回指定条数。 默认返回值10条 |
| from | 指定起始返回位置,和size关键字连用可实现分页效果 |
| sort | 指定字段排序 |
| \_source | 返回指定字段,在数组中用来指定展示那些字段 |


1. match\_all 查询所有



GET /phone_index/_search
{
“query”: {
“match_all”: {}
}
}


2. range 范围查询



GET /phone_index/_search
{
“query”: {
“range”: {
“price”: {
“gte”: 1400, // 大于等于
“lte”: 9999 // 小于等于
}
}
}
}


3. wildcard 通配符查询



> 
> Wildcard 查询是一种基于通配符的查询,它使用单个字符(?)代表一个字符,使用星号(\*)代表零个或多个字符。Wildcard 查询可用于对单个词执行模糊匹配,也可以用于对短语进行模糊匹配。它可以在搜索中用于查找某些词汇的变体或拼写错误的单词。
> 
> 
> 



GET /phone_index/_search
{
“query”: {
“wildcard”: {
“desc”: “hua*”
}
}
}


4. fuzzy 模糊查询



> 
> 注意:
> 
> 
> * fuzzy 模糊查询 最大模糊错误 必须在0-2之间
> * 搜索关键词长度为 2 不允许存在模糊
> * 搜索关键词长度为3-5 允许一次模糊
> * 搜索关键词长度大于5 允许最大2模糊
> 
> 
> 



GET /phone_index/_search
{
“query”: {
“fuzzy”: {
“desc”: {
“value”: “hua”
}
}
}
}


5. highlight 高亮查询



POST /phone_index/_search
{
“query”: {
“match”: {
“title”: “huawei”
}
},
“highlight”: {
“fields”: {
“*”: {}
},
“pre_tags”: “”,
“post_tags”: “
”,
“fragment_size”: 10
}
}


## 三、LogStash


[LogStash参考,想要深度了解LogStash的可以看一看]( )


### 1. LogStash简介


gstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地进行存储。任何事件类型都可以加入分析,通过输入、过滤器和输出插件进行转换。与此同时,还提供了很多原生编解码工具简化消息处理。Logstash通过海量数据处理和多种多样的数据格式支持延伸了我们对数据的洞察力。  
 `LogStash工作原理:`  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/cf90bbaa50d14e5fbac701e91a3986ed.png)


1. **输入,以下是常见得输入内容**


* file:从文件系统上的文件读取,与UNIX命令非常相似 tail -0F
* syslog:在已知端口上侦听syslog消息进行解析
* redis:使用redis通道和redis列表从redis服务器读取。Redis通常用作集中式Logstash安装中的“代理”,该安装将Logstash事件从远程Logstash“托运人”排队。
* beats:处理 Beats发送的事件,beats包括filebeat、packetbeat、winlogbeat。


2. **过滤,以下是常见得过滤器**


* grok:解析并构造任意文本。Grok是目前Logstash中将非结构化日志数据解析为结构化和可查询内容的最佳方式。Logstash内置了120种模式,您很可能会找到满足您需求的模式!
* mutate:对事件字段执行常规转换。您可以重命名,删除,替换和修改事件中的字段。
* drop:完全删除事件,例如调试事件。
* clone:制作事件的副本,可能添加或删除字段。
* geoip:添加有关IP地址的地理位置的信息(也在Kibana中显示惊人的图表!)


3. **输出,以下是常见得输出内容**


* elasticsearch:将事件数据发送给Elasticsearch。如果您计划以高效,方便且易于查询的格式保存数据… Elasticsearch是您的最佳选择
* file:将事件数据写入磁盘上的文件。
* graphite:将事件数据发送到graphite,这是一种用于存储和绘制指标的流行开源工具。http://graphite.readthedocs.io/en/latest/
* statsd:将事件数据发送到statsd,这是一种“侦听统计信息,如计数器和定时器,通过UDP发送并将聚合发送到一个或多个可插入后端服务”的服务。如果您已经在使用statsd,这可能对您有用!


4. **编解码器**  
 编解码器基本上是流过滤器,可以作为输入或输出的一部分运行。使用编解码器可以轻松地将消息传输与序列化过程分开。流行的编解码器包括json, multiline等。  
 json:以JSON格式编码或解码数据。  
 multiline:将多行文本事件(例如java异常和堆栈跟踪消息)合并到一个事件中


### 2. LogStash安装


[docker安装ES、LogStash、Kibana]( )


## 四、kibana


### 1. kibana简介


1. Kibana提供了一系列交互式的可视化组件,包括图表、表格、地图、仪表盘等,用户可以通过简单的拖拽和点击操作,将Elasticsearch中数据转化为易于理解和分析的图形化展示。
2. Kibana还支持自定义查询和过滤器,用户可以根据自己的需求对Elasticsearch中数据进行深入挖掘和分析。Kibana还提供了一些其他的功能,例如实时监控、警报、报告等;


### 2. Kibana安装


[docker安装ES、LogStash、Kibana]( )


## 五、ELK监控项目,收集项目日志


### 1. springboot集成LogStash


1. maven坐标



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

2. application.yml



server:
port: 80 #tomcat端口
servlet:
context-path: /


3. logback.xml



<?xml version="1.0" encoding="UTF-8"?>
<springProperty scope="context" name="springAppName" source="spring.application.name"/>

<!-- 日志在工程中的输出位置 -->
<property name="LOG\_FILE" value="${BUILD\_FOLDER:-build}/${springAppName}"/>

<!-- 控制台的日志输出样式 -->
<property name="CONSOLE\_LOG\_PATTERN"
          value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG\_LEVEL\_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %m%n${LOG\_EXCEPTION\_CONVERSION\_WORD:-%wEx}}"/>

<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
    </filter>
    <!-- 日志输出编码 -->
    <encoder>
        <pattern>${CONSOLE\_LOG\_PATTERN}</pattern>
        <charset>utf8</charset>
    </encoder>
</appender>

<!-- logstash远程日志配置-->
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <destination>192.168.128.23:4560</destination>
    <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>

<!-- 日志输出级别 -->
<root level="DEBUG">
    <appender-ref ref="console"/>
    <appender-ref ref="logstash"/>
</root>

### 2. 启动项目,监控项目运行


`提示:按照以下步骤进行设置`


1. 访问kibana,点击 Stack Management  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f3c80404529b4f2896393091dba50ee3.png)
2. 点击 Index Patterns  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/2db14a0da1eb4d378e385ce31ed1be91.png)
3. 点击 Create Index Patterns  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/9e0c14043e3f416fb6d04b7f45b87673.png)
4. 设置索引模式名,关联索引,点击 Next step  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/88aa894cb4834bd9be266116f15d42d9.png)
5. 选择时间字段, 点击 Create Index Patterns  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/eb80c4c1a4f441d9bf23cbb8887e86aa.png)
6. 设置好的索引模式如下  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b74f97f6fcca44298f5ae941da28c484.png)
7. 点击 Discover ,进行项目监控  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b922d266745745868ec1b1b87d4b37d8.png)
8. 监控项目运行情况  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/49a31ff3d90448c1ae9c15760fe1592e.png)


## 六、搭建ELK日志系统demo(提供搭建思路)


1. maven



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

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

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

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.16</version>
        <scope>compile</scope>
    </dependency>

</dependencies>

2. application.yml



server:
port: 8081 #tomcat端口
servlet:
context-path: /
spring:
elasticsearch:
rest:
uris: XXX.XXX.XXX.XXX:9200


3. pojo(这个很重要)



import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.util.Date;

/**
* ELK日志实体类
*/
@Data
//指定索引和主分片/副分片的数量
@Document(indexName = “elk_log”, shards = 1, replicas = 1)
public class ElkLog {
@Id
private String id;

@Field(type = FieldType.Integer)
private Integer port;

@Field(type = FieldType.Keyword)
private String host;

@Field(type = FieldType.Text)
private String message;

@Field(name = "@version", type = FieldType.Keyword)
private String version;
//时间转换
@Field(name = "@timestamp", type = FieldType.Date, format = DateFormat.date_time)
private Date timestamp;

}


4. controller



import com.elk.pojo.ElkLog;
import com.elk.service.ElkLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping(“/elkLog”)
public class ElkLogController {
@Autowired
private ElkLogService elkLogService;

/\*\*

* 分页查询日志
*
* @return
*/
@RequestMapping(“/selectListByPage”)
public List selectListByPage() {
return elkLogService.selectListByPage(1, 1000, 10);
}
}


5. service



import com.elk.pojo.ElkLog;
import java.util.List;

public interface ElkLogService {

//分页查询日志
List<ElkLog> selectListByPage(Integer page, Integer pagSize, Integer time);

}


6. serviceimpl



import com.elk.pojo.ElkLog;
import com.elk.service.ElkLogService;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.Query;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

@Service
public class ElkLogServiceImpl implements ElkLogService {

@Autowired
private ElasticsearchRestTemplate elasticsearchTemplate;

/\*\*

* 分页查询日志
*

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

ervice;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

@Service
public class ElkLogServiceImpl implements ElkLogService {

@Autowired
private ElasticsearchRestTemplate elasticsearchTemplate;

/\*\*

* 分页查询日志
*

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
[外链图片转存中…(img-N8vmPTVF-1713282290212)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值