ELK 线上事故处理:Filebeat 如何跳过积压日志
引言在维护 ELK (Elasticsearch, Logstash, Kibana) 日志系统时,一个常见的线上事故是下游的 Elasticsearch 因磁盘空间耗尽而无法接收新的日志。这会导致上游的 Filebeat 和 Logstash 出现数据积压。当磁盘问题解决后,我们通常不希望重新处理这些积压的、可能已经失去时效性的日志,而是希望从当前时间点开始恢复日志采集。本文将详细介绍如何处理此类事故,核心在于让 Filebeat 跳过积压的日志。 事故场景:Elasticsearch 磁盘写满导致日志积压问题描述: 日志系统链路为 Filebeat -> Logstash -> Elasticsearch。Elasticsearch 因磁盘满了,导致服务中断两小时。现在磁盘空间已清理,服务恢复,但 Filebeat 开始从两小时前中断的位置重新发送日志。我们希望丢弃这两个小时的积压日志,直接从当前时间开始采集。 核心解决方案:重置 Filebeat 的读取位置问题的关键在于 Filebeat 会持久化记录每个日志文件的读取进度(offset)。即使下游服务中断,F...
ELK 配置 SSL【Docker 下操作】
介绍Elasticsearch 程序中提供 elasticsearch-certutil 命令来简化生成证书的过程。 该命令共有 3 种模式: CA 模式:用于生成一个新的证书颁发机构 CERT 模式:用于生成 X.509 证书和私钥 CSR 模式:用于生成证书签名请求,该请求指向受信任的证书颁发机构以获取签名的证书。签名证书必须为 PEM 或 PKCS#12 格式,才能与 Elasticsearch 安全功能一起使用 生成证书certutil 官方文档 如果集群部署,想为每个 node 都配置 SSL,就改 instance.yml 和 extra_hosts 参考:https://www.elastic.co/cn/blog/configuring-ssl-tls-and-https-to-secure-elasticsearch-kibana-beats-and-logstash 注意:证书位置必须写绝对路径 新建 instance.yml 以创建各容器的自签名证书123456789# name会对应到生成证书文件的路径名称# dns可以多个,对应其匹配域名in...
Elasticsearch 之缓存
转自:https://www.jianshu.com/p/1ec202148189 Elasticsearch 包含三个类型的缓存,分别为: Node Query Cache 、 Shard Request Cache 、 Fielddata Cache。 Node Query Cache作用域Query Cache是Node级别的,被所有shard共享。 早期版本也叫做为Filter Cache,顾名思义,它的作用是对过滤器的执行结果进行缓存。 Query Cache缓存的是压缩过的bitset,对应满足Query条件的docID列表。添加cache的时候,会注册一个回调,如果Segment被合并或者删除,那么就会被移除缓存 简单来看可以这样理解,一个ES的查询会先被parse 成一系列Lucene 的phrase,这些phrases 中的filter语句,如果对于查询条件是一样的时候,其实结果集是已定的,那么这些phrase 其实就是可以存放在一个地方当做cache用,这个就是 query cache。 配置参数既然是缓存,肯定会对数量和内存有限制。通过_nodes/stat...
Elasticsearch:Snapshot 备份与恢复
SnapshotElasticsearch文档里对于snapshot有如下描述: 1The index snapshot process is incremental. In the process of making the index snapshot Elasticsearch analyses the list of the index files that are already stored in the repository and copies only files that were created or changed since the last snapshot. 这里说snapshot是增量备份的,每次snapshot,Es会分析index文件,并且只备份增量部分。 snapshot 是增量备份,对未发生变化的 index 重复备份几乎没有资源消耗。 删除某个 snapshot 不会对其它 snapshot 产生影响。 操作建仓 ES是通过快照的方式来实现数据备份,并且是以增量的方式,所以一般第一次做的话会花费较长的时间。为了做快照,那么就需要注册...
记录 ES 使用分页查询的几种方式
摘自:https://cloud.tencent.com/developer/article/2110964 ES 支持的三种分页查询方式 From + Size 查询 Search After 查询 Scroll 遍历查询 「说明:」 官方已经不再推荐采用Scroll API进行深度分页。如果遇到超过 10000 的深度分页,推荐采用search_after + PIT。 官方文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/7.14/paginate-search-results.html。 分布式系统中的深度分页问题为什么分布式存储系统中对深度分页支持都不怎么友好呢? 首先我们看一下分布式存储系统中分页查询的过程。 假设在一个有 4 个主分片的索引中搜索,每页返回10条记录。 当我们请求结果的第1页(结果从 1 到 10 ),每一个分片产生前 10 的结果,并且返回给 协调节点 ,协调节点对 40 个结果排序得到全部结果的前 10 个。 当我们请求第 99 页(结果从 990 到 10...
Elasticsearch 7.x 白金版破解记录
背景因为需要将 ES 接入 LDAP 认证,而该功能属于收费的白金版特性,所以选择破解白金版 License。 原理license 中有一个 signature 字段,ES 会根据该字段判断 License 是否被篡改。只要绕过这个校验逻辑,就可以任意修改 License 内容,从而激活白金版。 以下示例基于官方 ES Docker 镜像 7.14.0 版本,原则上支持任意版本破解。 破解流程下载对应 Elasticsearch 源文件地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch 下载对应版本后,需要进行编译操作,环境使用 WSL + Windows,下载 Windows 或 Linux 版本均可。 解压文件解压到 D:\elasticsearch-7.14.0,主要修改的 jar 包为:D:/elasticsearch-7.14.0/modules/x-pack-core/x-pack-core-7.14.0.jar 反编译提取源文件使用 Luyten 反编译 jar 包内的 clas...
分词搜索需求整理
背景 项目使用nodejs开发 数据使用nodejieba+pinyin进行分词处理 现需要将这里的逻辑放到es处理 目标 搜索框搜索的内容包含了三个字段: 品牌, 主机厂, 车型, 用于搜索的search_key字段使用${品牌} ${主机厂} ${车型}格式存储数据 全中文关键词查询: 一汽奥迪 -> 奥迪 一汽大众(奥迪) 100 全英文(拼音)或者英文(拼音)加数字: cg k1 -> 成功 成功汽车 K1 中文带英文(拼音)或者数字: 福特进口 bir -> 福特 福特(进口) Thunderbird [雷鸟] 安装分词器(ik,pinyin) 参考站内es中的各种分词器 配置字典表及热更新 参考站内ik分词器自定义词库热更新 keyword.dic 123恒润荣放... 索引配置创建索引配置如下: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950...
IK 分词器自定义词库热更新
官方热更新 IK 分词使用方法目前该插件支持热更新 IK 分词,通过上文在 IK 配置文件中提到的如下配置 1234 <!--用户可以在这里配置远程扩展字典 --><entry key="remote_ext_dict">location</entry> <!--用户可以在这里配置远程扩展停止词字典--><entry key="remote_ext_stopwords">location</entry> 其中 location 是指一个 url,比如 http://yoursite.com/getCustomDict,该请求只需满足以下两点即可完成分词热更新。 该 http 请求需要返回两个头部(header),一个是 Last-Modified,一个是 ETag,这两者都是字符串类型,只要有一个发生变化,该插件就会去抓取新的分词进而更新词库。 该 http 请求返回的内容格式是一行一个分词,换行符用 \n 即可。 满足上面两点要求就可以实现热更新分词了,不需要重...
minimum_should_match 最低匹配度详解
minimum_should_match 顾名思义:最低匹配度,即 should 子句在倒排索引中最低的匹配个数。 1. minimum_should_match 的使用1.1 数据准备1234567891011121314151617181920212223242526# 创建索引PUT test_match# 创建映射PUT test_match/_mapping{ "properties":{ "price":{ "type":"double" }, "name":{ "type":"text" } }}# 批量导入数据PUT _bulk{"create":{"_index":"test_match","_type&q...
Elasticsearch UNASSIGNED 分片问题排查与解决
背景启动 ES 后发现查询报错,且存在 Unassigned 分片状态。 分析问题检查分片状态(_cluster/allocation/explain)错误信息:cannot allocate because a previous copy of the primary shard existed but can no longer be found on the nodes in the cluster 12345678910111213141516171819202122232425262728293031[user_es@VM_113_96_centos elasticsearch-7.9.3]$ curl -XGET "http://localhost:9200/_cluster/allocation/explain/?pretty"{ "index" : ".kibana_task_manager_1", "shard" : 0, "primary"...
