sudo rm /var/lib/dpkg/lock*
sudo dpkg --configure -a
apt update
tail -f /var/log/car.log
1.1、项目概述
海量的业务应用,也带来了海量的日志数据,给业务应用的运维带来了新的挑战。例如,我们常用的网约车应用,单个平台的日订单数量可以达到上亿条,产生各种类型的日志数据,像用户业务方面会产生交易日志、评价日志、投诉日志等;运营业务方面会产生工单日志、账单日志、用户操作日志等;支撑业务运行方面会产生系统日志、安全日志等等。
当系统发生故障,或者业务出现异常时,运维工程师需要登录到日志所在的服务器上,使用vim、sed、grep等工具进入日志文件中查找故障原因。在没有日志收集、分析、可视化工具的情况下,日志的查找,问题的分析、定位是一个非常繁琐的工作,尤其是目前使用虚拟机或容器实现业务应用的分布式部署,运维管理员需要深入到每一个虚拟机和容器中,进行日志的查找、分析和诊断,工作量和工作难度可想而知。
为解决这些问题,业界已经有了较多的成熟产品和解决方案,像简单的Syslog-ng、Rsyslog,已经商业化的Splunk,还有开源的Scribe、Fluent等等。
但是目前使用热度最高的还是ELKF的组合。ELKF是Elasticsearch、Logstash、Kibana和FileBeat的首字母简称,提供分布式的实时日志搜集和分析的监控,为运维人员提供数据查找、服务诊断、数据分析的一站式日志收集、查找、分析解决方案。
1.1.1、项目简介
首先介绍Elasticsearch、Kibana、Logstash和Filebeat的技术知识 。其次,介绍了Elasticsearch、Kibana、Kafka、Logstash和Filebeat的安装部署方法 ,并演示了在两个节点上分别部署Elasticsearch、Kibana、Kafka、Logstash和Filebeat软件和依赖软件。最后,案例使用Python代码模拟网约车平台的日志数据,使用Filebeat收集日志数据,使用kafka将日志数据流转到Logstash中进行初步的数据过滤和清洗,使用ElasticSearch存储过滤后的日志数据,并且使用Kibana对日志数据从平台约车评价、地域约车、用户群体和网约车平台数字化运营等不同角度进行数据分析。实现了日志的统一收集、过滤、分析、展示的过程。
本项目适合初学者学习搭建ELKF架构以及该架构的工作流程,也适合运维工程师使用本章节提供的方法,解决生产环境中日志管理的问题。
1.1.2、项目适用对象
1.1.3、项目时间安排
1.1.4、项目环境要求
g&pos_id=img-9fTMyybz-1705674811606)
1.1.5、项目架构及流程
1.1.6、项目技术知识
(1)ELK Stack
(2)Filebeat轻量型日志收集器
Filebeat隶属于Beats,是使用Go语言实现的轻量级日志收集器,也是Elastic stack里面的一员。FileBeat是一个没有任何依赖的二进制文件,且占用资源极少,重构了Logstash采集器源码,根据配置将对应位置的日志进行读取,并将它们发送到Logstash或Elasticsearch等。Filebeat可靠性强,能够保证日志至少会上报一次,如果出现中断,能够在恢复正常后,从中断前停止的位置继续开始,不错过任何检测信号。
Filebeat的工作流程如下图所示:当Filebeat启动时,它同时会启动一个或者多个查找器(prospector)用于检测指定目录或者文件。对于存在查找器的日志文件,FIlebeat 会启动收集进程(harvester)。每一个进程都能够为新内容读取单个日志文件,并将数据发送到后台处理程序(Spooler)中,后台处理程序负责将多个进程中的数据进行聚合,最后发送聚合的数据到指定的目的地。
(3)Logstash日志分析过滤工具
Logstash作为一款功能强大的数据处理工具,能够从许多不同的来源采集数据并转换数据,再将其发送到指定位置,不会受到格式或者复杂度的影响。
Logstash事件处理过程包括三个阶段:输入(Inputs)、过滤(Filters)、输出(Outputs)。在输入阶段,Logstash从数据源处采集数据,在过滤阶段根据要求对数据进行修改,在输出阶段把数据写入指定位置,通常用于日志分析过滤、应用日志、webserver日志、错误日志等。
(4)Elasticsearch分布式日志搜索引擎
Lucene是用于全文检索和搜寻的开源式库,提供了一个高性能、全功能的应用式接口,用来做全文搜索引擎。但Lucene使用时繁琐、复杂,于是出现了Elasticsearch,它基于Java语言编写,对Lucene 进行了一层封装,提供了RESTful web接口让全文检索变得简单。
Elasticsearch是面向文档的(document oriented),这意味着它可以存储整个对象或文档。然而它不仅仅是存储,还会索引每个文档的内容使之可以被搜索。能够对文档(并不是成行成列的数据)进行索引、搜索、排序和过滤操作。
(5)Kibana日志汇总、分析和搜索展示系统
(6)Kafka分布式消息系统
Kafka是一款高吞吐量的分布式发布、订阅消息引擎系统,是Apache基金会顶级开源项目之一,使用Scala和Java编程语言编写。Kafka可以实现不同系统之间消息传递,实现松耦合的异步数据处理。通俗来讲,就是A系统将消息发送给Kafka,B系统再从Kafka读取A系统发送的消息,Kafka从中起到一个消息传递的桥梁作用。Kafka两种运行模式,分别是:点对点传输和发布订阅传输。
1.2、项目环境部署
grok插件
grok插件是Logstash最重要的插件之一,用于非结构化数据解析为结构化和可查询的数据。即将一个key对应的一长串非结构化的value,转成多个结构化的key-value。
从数据分析的角度:非结构化数据不便于检索、统计、分析。
非结构化数据变成结构化数据后才有检索、统计、分析的价值。
mutate数据修改插件
提供了丰富的基础类型数据处理能力,可以重命名、删除、替换和修改事件中的字段。
mutate数据修改插件
常用的配置选项 | |
---|---|
add_field | 向事件添加新字段,也可以添加多个字段 |
remove_field | 从事件中删除任意字段 |
add_tag | 向事件中添加任意标签,在tag字段中添加一段自定义的内容,当tag字段中超过一个内容的时候会变成数组 |
remove_tag | 从事件中删除标签(如果存在) |
convert | 将字段值转换为另一种数据结构 |
id | 向现场事件添加唯一的ID |
lowercase | 将字符串字段转换为其小写形式 |
replace | 用新值替换字段 |
strip | 删除开头和结尾的空格 |
uppercase | 将字符串字段转换为其小写形式 |
update | 用新值更新现有字段 |
rename | 重命名事件中的字段 |
gsub | 通过正则表达式替换字段中匹配到的值 |
merge | 合并数组或hash事件 |
split | 通过指定的分隔符分割字段中的字符串为数组 |
multiline
java错误日志一般都是一条日志很多行的,会把堆栈信息打印出来,当经过logstash解析后,每一行都会当做一条记录存放在ES,那这种情况肯定是需要处理的。这里就需要使用multiline插件,对属于同一条日志的记录进行拼接。
(4)Elasticsearch分布式日志搜索引擎
提供了丰富的基础类型数据处理能力。可以重命名
Lucene是用于全文检索和搜寻的开源式库,提供了一个高性能、全功能的应用式接口,用来做全文搜索引擎。但Lucene使用时繁琐、复杂,于是出现了Elasticsearch,它基于Java语言编写,对Lucene 进行了一层封装,提供了RESTful web接口让全文检索变得简单。
Elasticsearch是面向文档的(document oriented),这意味着它可以存储整个对象或文档。然而它不仅仅是存储,还会索引每个文档的内容使之可以被搜索。能够对文档(并不是成行成列的数据)进行索引、搜索、排序和过滤操作。
(1)Index索引
(2)Type类型
(3)Filed字段
Filed字段相当于数据表的字段,将文档数据根据不同属性进行分类标识。
(4)Mapping映射
Mapping是对处理数据的方式和规则做一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等等。通过建立映射,可以有效提高数据处理的性能,相当于为结构化数据表添加主键、外键的操作。
(5)Document文档
文档是能够被索引的基础信息单元,如一个产品文档、一个订单文档。文档为JSON格式,JSON是互联网数据交互格式。在一个index/type里面,可以存储任意多的文档。需要注意的是,虽然文档存在于一个索引中,必须赋予文档一个索引的type。插入索引库以文档为单位,类比与数据库中的一行数据。
(6)Cluster集群
集群是由一个或者多个节点组织在一起,一起持有数据并提供索引、搜索功能。一个集群的默认标识为"elasticsearch",是唯一的名字标识。
(7)Node节点
ElasticSearch是分布式的架构,多个实例协同工作、存储数据、参与索引和检索。一个ElasticSearch的实例成为一个Node节点。虽然每台服务器能够运行多个ElasticSearch实例,但建议生产环境中一台服务器运行一个实例。
(8)Shards&Replicas分片和复制
一个索引能够存储远远超过单个结点硬件限制的数据量,这是因为Elasticsearch能够将索引划分成多份,称之为分片。创建索引时,可以指定分片的数量。每一分片也是一个独立的"索引",可以将其置于集群中的任何节点上。
由于网络和云的环境,随时存在失败的可能性。例如,某个分片、节点突然处于离线状态或异常消失了,需要为分片创建一份或多份拷贝,建立故障转移机制,该机制叫做复制分配,简称分片。
Elasticsearch&Kibana安装
java安装成功
vi+路径
shift+g+g进入最低端
摁i,左下角出现insert
创建topic
模仿生产消息
模拟消费消息
认真学习正则表达式
tail -f /var/log/car.log
es索引与mysql索引的区别
正排索引(forward index):正排索引也称为"前向索引"。它是创建倒排索引的基础,通过 **文档到关键字(doc->word)**的映射。以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。
(1)LocalId字段(表中简称"Lid"):表示一个文档的局部编号。
(2)WordId字段:表示文档分词后的编号,也可称为"索引词编号"。
(3)NHits字段:表示某个索引词在文档中出现的次数。
(4)HitList变长字段:表示某个索引词在文档中出现的位置,即相对于正文的偏移量。
倒排索引 ,一般也被称为反向索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。
ES 倒排索引包含两个部分:单词词典和倒排列表
倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息及频率(作关联性算分),每条记录称为一个**倒排项(**Posting)。
倒排所有主要的作用就是召回,正排索引的作用主要是排序(计算分数),聚合等操作,获取dataid对应的detail信息