ELK日志收集分析工具解析

news/2025/10/31 17:38:13/文章来源:https://www.cnblogs.com/chengshaoting/p/19180776

@

目录
    • 1、工作当中日志的重要性
    • 2、日志收集的工具有那些
      • Solr与es的对比与选型
        • ElasticSearch vs Solr总结
    • 3、elk简单介绍
    • 4、倒排查询原理
    • 5、数据的分类
    • 6、es用户场景
      • Elasticsearch简介
    • 7、部署es的方法
    • 8、和es交互的方式
      • 8.1、了解概念
      • ES常用的数据类型可分为3大类
  • 核心数据类型
      • 8.2、使用命令行的方式和es交互
      • 8.3、使用插件head和es交互
      • 8.4、使用nodejs方式来部署head插件

1、工作当中日志的重要性

1、分析日志来判断系统运行的状态是否正常
2、分析日志来判断程序是否有bug存在
3、分析日志来监控web服务器的流量,页面的响应时间超过1s
4、分析日志来优化数据库的慢查询语句
5、根据用户访问情况针对业务侧进行不断完善
。。。。

2、日志收集的工具有那些

1、日志易(收费)
2、splunk(国外的软件,按流量收费)
3、elk/efk工具
elasticsearch+logstash+kibana  elk
elasticsearch+filebeat+kibana  efk
4、Solr
Solr与es的对比与选型

在底层应用都是属于Lucene,在应用范围上包括淘宝电商、百度、github等,
Solr是Apach基金会下的一个顶级的开源项目,采用java开发,,他是基于Lucene的全文搜索服务器,Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置,可拓展,并对索引进行了优化
Solr可以独立运行,运行在etty、Tomcat等这些Servlet容器中,Solr索引的实现方法很简单,用POST方法向Solr服务器发送一个描述Field及其内容的XML文档,Solr根据xml文档添加、删除、更新索引。 Solr搜索只需要发送HTTP GET请求,然后对Solr返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。
Solr是基于lucene开发企业级搜索服务器,实际上就是封装了lucene。
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的APl接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的文件,生成索引;也可以通过提出查找请求,并得到返回结果。

索引速度:
如果单纯对已有数据进行搜索solr更快,
在这里插入图片描述
致命弱点: 实时建立索引会产生io阻塞,查询性能是es的1/5

在这里插入图片描述

随着数据量加大 Solr的搜索速度越来越低
在这里插入图片描述

ElasticSearch vs Solr总结

1、es基本是开箱即用(解压就可以用!) ,非常简单。Solr安装略微复杂一丢丢!
2、Solr 利用Zookeeper进行分布式管理,而Elasticsearch自身带有分布式协调管理功能。
3、Solr 支持更多格式的数据,比如JSON、XML、 CSV ,而Elasticsearch仅支持json文件格式。
4、Solr 官方提供的功能更多,而Elasticsearch本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友好支撑
5、Solr 查询快,但更新索引时慢(即插入删除慢) , 用于电商等查询多的应用;
●ES建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索。
●Solr 是传统搜索应用的有力解决方案,但Elasticsearch 更适用于新兴的实时搜索应用。
6、Solr比较成熟,有一个更大,更成熟的用户、开发和贡献者社区,Elasticsearch相对开发维护者较少,更新太快,学习使用成本较高。

3、elk简单介绍

1、elasticsearch 端口号:9200 9300非关系型的数据库功能:存储数据,分析数据,搜索数据发展史:使用java语言,在luncen的基础上做二次封装,提供restful接口搜索的原理:倒排索引特点:水平扩展方便、提供高可用、分布式存储、使用简单
2、logstash/filebeatlogstash功能:收集日志,中转站filebeat功能:专门收集日志
3、kibana 端口号: 5601功能:做数据的展示(图形、饼状图、表格、浮动云图形)

4、倒排查询原理

1、把信息存储es数据库,分成一个一个的词语
2、根据搜索的内容,进行匹配,匹配上的语句权重加一
3、把匹配到的内存,推送给用户

5、数据的分类

1、关系型的数据库mysql 、oracle 、sql-server。。
2、非关系型的数据库es、redis、mongodb

关系的定义:
关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织

  1. 性能
    NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
  2. 可扩展性
    同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

6、es用户场景

1、电商平台
2、高亮显示
3、数据的分析(elk)
Elasticsearch简介

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch 是一个分布式的、开源的搜索分析引擎,支持各种数据类型,包括文本、数字、地理、结构化、非结构化。

Elasticsearch 是基于 Apache Lucene 的。

Elasticsearch 因其简单的 REST API、分布式特性、可塑、可扩展而闻名。

Elasticsearch 是 Elastic 产品栈的核心,Elastic 产品栈是个开源工具集合,用于数据接收、存储、分析、可视化

  • 文档搜索结合ElasticSearch高亮显示,输入实时搜索(search-asyour-type)和纠错(did-you-main)显示
  • 英国卫报结合ElasticSearch结合用户日志和社交网络数据给用户实时反馈
  • Github使用ElasticSearch检索1300亿行代码

7、部署es的方法

1、源码的方式:特点:安装之后的路径统一,需要手动写启动脚本
2、rpm的方式:特点:安装之后路径分散,不需要手动写启动脚本
3、docker的方式:特点:会使用docker,专人来维护

部署es的流程

1、安装jdk环境
mkdir /opt/es-software
cd /opt/es-software
rpm -ivh jdk-8u102-linux-x64.rpm
java -version
2、安装elasticsearch
rpm -ivh elasticsearch-6.6.0.rpm
rpm -qc elasticsearch
3、简单介绍安装后的文件的作用
/etc/elasticsearch/elasticsearch.yml#es的主要配置文件
/etc/elasticsearch/jvm.options      #配置jvm虚拟机的内存信息
/etc/sysconfig/elasticsearch        #配置相关系统变量
/usr/lib/sysctl.d/elasticsearch.conf#配置相关系统变量
/usr/lib/systemd/system/elasticsearch.service#es的服务程序
4、修改es的主配置文件
[root@es01 elasticsearch]# grep -Ev '^$|#' /etc/elasticsearch/elasticsearch.yml 
23:node.name: gaoxu01
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
43:bootstrap.memory_lock: true
network.host: 10.0.0.240
http.port: 9200
5、服务启动后有报错tail  -f  /var/log/elasticsearch/elasticsearch.log[2020-04-08T13:29:53,773][ERROR][o.e.b.Bootstrap          ] [gaoxu01] node validation exception
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
#解决方法
官网地址: https://www.elastic.co/guide/en/elasticsearch/reference/6.6/index.html  memory_lock_check
systemctl edit elasticsearch[Service]
LimitMEMLOCK=infinity
#重新载入
systemctl daemon-reload
#重新es服务
systemctl restart elasicsearch
#查询端口
netstat -lntup
ss -lnt
#命令行的方式检查
curl http://10.0.0.240:9200
curl http://localhost:9200

8、和es交互的方式

8.1、了解概念
1、索引:相当于在mysql当中创建一个数据库(database)
2、类型:相当于数据库当中的一张表(table)
3、docs:表中字段信息
ES常用的数据类型可分为3大类
  • 核心数据类型
  • 复杂数据类型
  • 专业数据类型

核心数据类型

(1)字符串

  • text 属于全量索引,搜索时会自动使用分词器进⾏分词再匹配
  • keyword 不分词,搜索时需要匹配完整的值

(2)数值型

  • 整型: byte,short,integer,long
  • 浮点型: float, half_float, scaled_float,double

(3)日期类型

  • date

json没有date类型,插入|更新文档|字段时怎么表示date类型?

#mapping,将字段类型设置为date
"type" : "date" #插入|更新此字段的值时,有3种表示方式#使用固定格式的字符串
"2020-04-18"、"2020/04/18 09:00:00"   #值使用长整型的时间戳,1970-01-01 00:00:00,s
1610350870    #值使用长整型的时间戳,ms
1641886870000

(4)范围型

integer_range, long_range, float_range,double_range,date_range

比如招聘要求年龄在[20, 40]上,mapping:

age_limit :{"type" : "integer_range"
}

插入|更新文档|字段时,值写成json对象的形式:

"age_limit" : {"gte" : 20,"lte" : 40
}

https://www.cnblogs.com/chy18883701161/archive/2020/04/18/12723658.html

8.2、使用命令行的方式和es交互
常用的方法
PUT\POST\DELETE\GET
1、创建一个索引
curl -XPUT http://10.0.0.240:9200/gaoxu
2、往这个索引里面写入一条数据
curl -XPUT '10.0.0.211:9200/gaoxu/student/1?pretty' -H 'Content-Type: application/json' -d'
{"first_name" : "zhang","last_name": "san","age" : 28,"about" : "I love to go rock climbing", "interests": [ "sports" ]
}'##  内容解析
本质es属于数据库, gaoxu为数据库库名(索引),student为一张表(类型)
1 :指定一个唯一id号
pretty:固定格式
-H: 头信息
-d: 数据内容##  索引有多少索引:
curl http://localhost:9200/_cat/indices?v
根据索引往下查询type类型curl -XGET http://localhost:9200/uccaut根据type类型往下细分具体查找curl -XGET http://localhost:9200/uccaut/customcurl -XGET http://localhost:9200/uccaut/commodity/10089?pretty
3、写第二条数据
curl -XPUT  '10.0.0.240:9200/gaoxu/student/2?pretty' -H 'Content-Type: application/json' -d' {
"first_name": "li",
"last_name" : "si",
"age" : 32,
"about" : "I like to collect rock albums", 
"interests": [ "music" ]
}'
4、随机生成一个id,写入数据
curl -XPOST  '10.0.0.240:9200/gaoxu/student/?pretty' -H 'Content-Type: application/json' -d' {
"first_name": "li", 
"last_name" : "mingming",
"age" : 45,
"about": "I like to swime", 
"interests": [ "reading" ]
}'
5、查询指定id为1的数据信息
curl -XGET  '10.0.0.240:9200/gaoxu/student/1?pretty'
6、查询指定索引的所有数据
curl -XGET  '10.0.0.240:9200/gaoxu/_search/?pretty'
7、删除指定id为1的数据
curl -XDELETE  '10.0.0.240:9200/gaoxu/student/1?pretty'
8、删除指定索引里面所有的数据,包括索引本身
curl -XDELETE '10.0.0.240:9200/gaoxu/?pretty'
8.3、使用插件head和es交互
#部署head插件有多种方法
1、nodejs npm
2、谷歌自带的head插件
3、docker的方式来部署
通过head插件写入数据
1、创建一个索引
http://10.0.0.240:9200/gaoxu  PUT
2、插入数据:
http://10.0.0.240:9200/gaoxu/student/1  PUT
{"first_name":"lao","last_name":"wang","age":25,"about":"I love to go rock climbing","interests":["sports"]
}
3、插入第二条数据:
http://10.0.0.240:9200/gaoxu/student/2  PUT
{"first_name":"wang","last_name":"wu","age":27,"about":"I love to go rock climbing","interests":["music"]
}
4、不指定id号随机插入一条数据:
put不支持随机分配id号,post支持随机分配id号
http://10.0.0.240:9200/gaoxu/student/  POST 
{"first_name":"zhao","last_name":"liu","age":29,"about":"I love to go rock climbing","interests":["eatting"]
}
5、查询指定id号的数据信息:
http://10.0.0.240:9200/gaoxu/student/1 GET
6、查询指定索引所有数据信息:
http://10.0.0.240:9200/gaoxu/_search GET
7、删除指定的数据:
http://10.0.0.240:9200/gaoxu/student/1 DELETE
8、删除指定索引里面的数据:
http://10.0.0.240:9200/gaoxu/  DELETE
8.4、使用nodejs方式来部署head插件
1、安装epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2、安装 nodejs  npm
yum install nodejs npm openssl screen -y#配置nodejs环境
3、安装组件
npm install -g cnpm --registry=https://registry.npm.taobao.org 4、克隆代码
官网https://github.com/mobz/elasticsearch-head
cd /opt/
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head/
cnpm install
screen -S es-head
cnpm run start
Ctrl+A+D
5、修改es配置文件最下面加入下面内容
vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
#重启es服务
systemctl restart elasticsearch
6、出现node版本不兼容
cd /opt/es-software
tar xf node-v12.13.0-linux-x64.tar.xz -C /opt
ln -s /opt/node-v12.13.0-linux-x64 /opt/node
#添加环境变量
vim /etc/profile
export PATH=/opt/node/bin:$PATH
#把环境变更生效
source /etc/profile
#重新安装
cnpm install

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ansible的硬件巡检脚本

使用场景: 公司内部服务器用的是云厂商的, 一般在交付使用前会给一个配置清单 但是真正的配置还需要运维部门的人员去检查一下 每批交付使用的主机少则十几台 多则几十台 将配置的结果做成表格导进execl 我相信没有…

2025年vr虚拟体验馆制造企业权威推荐榜单:vr虚拟体验馆/vr体验馆设备/vr设备体验馆源头厂家精选

VR虚拟体验馆作为沉浸式娱乐与教育的重要载体,正随着全球虚拟现实技术的成熟而快速增长。据行业数据显示,2025年中国VR产业规模预计突破1000亿元,其中体验馆相关设备与内容市场占比约30%,年增长率稳定在15%以上。V…

【251031】CF2155 Div.2 vp 总结

题目梗概题目编号 题目名称 题目链接A El fucho LinkB Abrahams Great Escape LinkC The Ancient Wizards Capes LinkD Batteries LinkE Mimo & Yuyu LinkF Juans Colorful Tree Link给的都是 VJ 的链接,带翻译。…

nmap简单用例

@目录下载对目标主机的所有端口扫描对目标主机指定端口进行扫描扫描内网整个网段主机nmap是一个端口扫描工具 与telnet不同的是 它可以扫描指定主机的所有开放端口(内网) 多一个工具就多一份快乐 下面来介绍一些基…

新能源汽车焊接智能节气阀

在新能源汽车产业迅猛发展的浪潮中,制造工艺的优劣直接关系到车辆的性能、安全与市场竞争力。焊接,作为新能源汽车生产流程里的关键一环,无论是构建车身框架,还是连接电池模组,其质量的好坏都起着决定性作用。而在…

数仓分层介绍

@目录数仓分层的意义是什么?常见的数据分层ODS层: 源数据层DW层: 数据仓库层(也叫作集团数据中心)DA(app)层: 数据应用层更加细分的数仓分层方案1 ODS数据源2 DW数据仓库2.1 DWD明细层:2.2 DWB基础数据层:2.3 DWS服…

2025年单向平衡阀批发厂家权威推荐榜单:双向电磁阀/旋挖机多路阀/电磁阀线圈源头厂家精选

在工业流体控制领域,单向平衡阀作为关键控制元件,其市场规模持续扩大,2024年全球市场份额已突破320亿元,预计2025年将保持8%-10%的稳健增长。 单向平衡阀凭借其精确的流量控制、稳定的压力平衡和可靠的反向截止特性…

互信脚本使用

yum install -y expect ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa export mypass=123456name=(node1 node2 node3 node4) for i in ${name[@]};do expect -c " spawn ssh-copy-id -i /root/.ssh/i…

如何查看软件包名

1、输出当前手机上的全部app包名 首先都需要连击上手机,手机上打开开发者模式,cmd中输入adb devices查看当前手机连接状态 输出device就说明手机连接成功了,device前面就是连接的这个手机的设备号 adb shell pm lis…

数学求和公式c++ - miao

1. 等差数列求和 // 首项a1,末项an,项数n ll arithmetic_sum(ll a1, ll an, ll n) {return n * (a1 + an) / 2; }// 首项a1,公差d,项数n ll arithmetic_sum(ll a1, ll d, ll n) {return n * a1 + n * (n - 1) / 2 …

李宏毅机器学习笔记16 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

通过编写systemctl来控制二进制部署的MySQL服务

自己给自己看的 其他人做为参考[root@node1 ~]# vim /usr/lib/systemd/system/mysqld.service [Unit] Description=MySQL Documentation=https://www.mysql.com/cn/ # 依赖服务,仅当依赖的服务启动之后再启动自定义…

无法定位程序输入点于kernel32.dll?详解原因与5种有效修复方案

运行程序时弹出“无法定位程序输入点于动态链接库 KERNEL32.dll 上”的错误提示?这是 Windows 系统常见的兼容性或系统文件异常问题。本文从原理、成因到具体解决步骤,带你逐步排查问题源头,并提供 5 种可行方案(含…

普法学习: 劳动关系的认定

@目录1 什么是劳动关系1.2 劳动关系的认定标准1.3 从属性标准也是认定劳动关系的一种2. 案例2.1 案例摘要2.2 案例简述 1 什么是劳动关系[1]劳动关系是劳动者与用人单位之间实现社会化劳动的过程中产生的社会关系,对劳…

Python 类继承 _ 老鼠的儿子会打洞

Python 类继承 _ 老鼠的儿子会打洞class Employee: def __init__(self, name, id): self.name = name self.id = id def print_info(self): print(f"员工名字:{self.name},工号:{sel…

C++ 中的 Meyer‘s Singleton

目录1. 什么是 Singleton 模式?2. 传统的 Singleton 实现及其问题3. Meyer‘s Singleton:现代而优雅的解决方案实现代码4. Meyer’s Singleton 的工作原理与关键特性5. 使用方法6. 优点7. 潜在缺点与注意事项总结全局…

java 比较数组数据大小

三目运算方式 public class 比较数组大小 {public static void main(String[] args) {int[] arr ={5,15,20,25,1000};for (int i = 0; i < arr.length-1; i++) { // System.out.println(Arrays.toStri…

lua+nginx用户鉴权脚本--get方法

需求: 一个应用暴露在外网,对登录用户做鉴权,相当于白名单用户. 原理: 用户在应用首页登录的时候会有get请求,在请求头中会有一串加密的base64字符串,经过jwt在线解码之后可以看到令牌过期时间,用户名以及其他信息,通过…

2025 年算法备案咨询服务公司最新推荐榜,技术实力与合规能力双维度权威测评解析

引言 2025 年算法备案进入 “双轨监管深化期”,《生成式人工智能服务管理暂行办法》等新规实施后,企业备案材料增至 8 项核心模块,双级审核流程使平均备案周期延长 40% 以上,合规难度显著提升。为精准筛选优质服务…

windows系统生成当日的时间戳文件脚本

@ECHO OFF echo.>"%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%-%time:~3,2%-%time:~6,2%.txt"生成的格式 2022-11-13 15:11:23.txt 用法 新建一个bat文件 把内容拷贝进去即可 用途:我的日报一般在电…