filebeat 解析日志 并发送到Elasticsearch

2023-11-15

起先,是出于了解我的网站逐步前行STEP的访问情况而做一个Nginx日志统计分析的功能,首选的就是ELK,但是,由于Logstash占用内存和CPU占有率都不是我的小服务器能承受的,转而将logstash换成filebeat,因为filebeat足够轻量级,我所需要的功能却都能满足:

  1. 收集日志发送到ES
  2. 按指定格式解析日志

我的个人博客逐步前行STEP

第1点是filebeat基本的功能,只要正确安装配置就能生效,在我的实践中,我不想要所有的日志都发送到ES,只要访问我的网站的请求,示例请求:

39.179.50.187 - - [05/Feb/2020:16:10:42 +0800] "GET /csdn_article-98609482 HTTP/1.1" 499 0 "http://www.hezehua.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"

这是标准的nginx日志格式,其中有一个我的网站逐步前行STEP域名http://www.hezehua.net,所以只要匹配这个域名即是我需要的日志,filebeat的include_lines配置可以满足我的需求,将该配置项设置如下:

include_lines: ["hezehua.net"]

即匹配了包含hezehua.net的行。

我的个人博客逐步前行STEP

要注意的是,第2点需求,只有Elasticsearch5.x才能实现,因为elasticsearch5.x开始引入了Ingest Node,使其具有预处理能力,即对存储在 Elasticsearch 里的数据在存储之前进行加工处理,之前的版本没有提供这一功能,在数据存储前做处理只能依赖于logstash,而官方将预处理功能集成到elasticsearch5.x这个功能就命名为Ingest,具有预处理功能的节点称为Ingest Node,要使用预处理功能,先要了解:Pipeline(管道)、Processors(处理器)。

1、pipeline
管道这个概念并不陌生,一般被命名于设计用来在拦截、处理、输出数据的功能,在这里也是一样,pipeline会用于处理通过它的所有数据,输出后就直接入elasticsearch。

2、processor
处理器是用于管道的,pipeline本身不具备处理能力,需要配置processor才能发挥特定的作用,常用的处理器有:

  • append 追加字段或者已有字段追加值
  • convert 转换字段类型
  • date 日期处理
  • foreach 遍历数组对数组元素使用处理器
  • grok 通过正则匹配将文本解析成指定格式
  • join 将数组转化成字符串
  • json 处理成json
  • kv 将k:v型数据解析成一个个字段
  • remove 删除字段
  • rename 重命名
  • set 设置或者新增
  • split 分割字符串
  • sort 数组元素排序
  • trim 消除两端空格
  • lowercase 转小写
  • uppercase 转大写

以上列举的处理器主要是数组、字符串的常用处理,加上字段增、减等,其中最重要的Grok处理器,这个处理器基本可以替代logstash处理日志格式的功能,语法和logstash一样。

要使用elasticsearch的预处理功能,首先需要在es中创建管道,指定的URL为:_ingest/pipelinePUT方式:

curl XPUT http://127.0.0.1:9200/_ingest/pipeline/pipeline-test

{
    "description": "describe pipeline",
    "processors": [
        {
            "grok": {
                "field": "message",
                "patterns": [
                    "%{IP:ip} - %{DATA:user} \\[%{HTTPDATE:date}\\] %{WORD:method} %{DATA:path} (?<http>HTTP/%{NUMBER}) %{NUMBER:code} %{NUMBER:length} %{DATA:referer} %{DATA:user_agent} %{DATA:x_forwarded_for}"
                ]
            }
        }
    ]
}

description字段是一个描述,processors定义了一组应用于该管道的处理器,这样就定义好了一个简单的pipeline了。

我的个人博客逐步前行STEP

将filebeat.yml中,output.elasticsearch下的配置项pipeline设置为上面新建的管道’pipeline-test’即可:

output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["localhost:9200"]
  pipeline: "pipeline-test"

最后,删除registry文件,和filebeat之前生成的索引,再启动filebeat,就可以在es中看到解析成指定字段的日志文档了:

{
	_index: "filebeat-2020.02.04",
	_type: "doc",
	_id: "AXAQe35OpxWsiKaUFgtz",
	_score: 1,
	_source: {
		date: "04/Feb/2020:21:53:54 +0800",
		referer: "http://www.hezehua.net/",
		code: "200",
		offset: 437,
		method: "GET",
		ip: "39.179.50.187",
		input_type: "log",
		length: "169909",
		source: "/usr/logs/blog.access.log",
		message: "39.179.50.187 - - [04/Feb/2020:21:53:54 +0800] "GET /favicon.ico HTTP/1.1" 200 169909 "http://www.hezehua.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"",
		type: "log",
		path: "/favicon.ico",
		@timestamp: "2020-02-04T13:54:48.214Z",
		beat: {
			hostname: "novalocal",
			name: "novalocal",
			version: "5.5.3"
		},
		http: "HTTP/1.1",
		user-agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"
	}
},

我的个人博客逐步前行STEP

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

filebeat 解析日志 并发送到Elasticsearch 的相关文章

  • Elasticsearch 过滤器/计算嵌套字段

    我有带有嵌套字段的文档 如下所示 results id 1234 name asdf id 5678 name jkl ip 1 2 3 4 嵌套字段的映射如下所示 results type nested properties id typ
  • 如何用Python为ElasticSearch创建只读客户端?

    我想从 ES 读取数据 但不想意外向其中写入数据 无索引操作 这只是一种安全措施 以便以后修改查询函数的其他人不允许插入数据 当你说你想要只读客户端时 客户端强调您系统中的同一集群可能有其他客户端 然后阻止整个索引为只读将会阻止所有客户端的
  • Elastic Search 5.x 嵌套多个查询 C#

    我将 C 与这些 nuget 包一起使用
  • 在 ElasticSearch 7+ 中,如何搜索所有文本字段?

    我想在 Elasticsearch 7 3 中存储的文档中搜索单词 我希望在以前版本的 Elasticsearch 上运行的一个示例是 query bool must match all oliver must not should fro
  • 在elasticsearch中过滤facet

    我有一个如下查询 query query query string query s q filter ids values list ids facets destination terms field destination en hot
  • match_none 有什么用?

    我浏览了docs https www elastic co guide en elasticsearch reference current query dsl match all query html query dsl match no
  • 按字段关联 ELK 中的消息

    相关 在ELK中合并日志和查询 https stackoverflow com questions 28429607 combine logs and query in elk 我们正在设置 ELK 并希望在 Kibana 4 中创建可视化
  • Elasticsearch 中的嵌套与对象

    有人可以解释 Elasticsearch 文档中 对象 和 嵌套 字段之间的区别吗 我知道默认情况下字段被定义为对象 我还知道我可以用这样的点访问对象字段 my field name my field title 等 对象的文档 http
  • 如何在logstash.conf文件中创建多个索引?

    我使用以下代码在logstash conf中创建索引 output stdout codec gt rubydebug elasticsearch host gt localhost protocol gt http index gt tr
  • 如何在弹性搜索中生成多个布尔查询的查询

    我想使用 spring 框架在 elasticsearch 中动态生成多个布尔运算的查询 我在elasticsearch中的数据就像 masterID
  • 局部敏感哈希 - Elasticsearch

    有没有允许在 Elasticsearch 上使用 LSH 的插件 如果是的话 您能否指出该位置并告诉我如何使用它 谢谢 编辑 我发现ES使用了MinHash插件 我怎样才能用这个来比较文件呢 查找重复项的最佳设置是什么 有一个Elastic
  • 在弹性搜索中使用 GET/POST 时的不同结果

    我正在通过 Elastic Search Head 插件尝试弹性搜索 当我通过 POST 提交查询时 结果符合预期 但是 当我使用 GET 尝试相同的查询时 我总是会返回索引中的所有值 那么 如何通过 GET 将查询传递到弹性搜索服务器 以
  • Elasticsearch 单个字段的多个分析器

    我使用严格的预定义映射将不同类型的文档存储在单个索引中 它们都有一些字段 例如 body 但我希望在索引时对它们进行稍微不同的分析 例如 对特定文档使用不同的标记过滤器 并在搜索时以相同的方式处理 据我所知 分析器不能按文档指定 我还考虑使
  • ElasticCloud 的 ElasticSearch 身份验证错误?

    我刚刚在 ElasticCloud 上设置了一个新的 ElasticSearch 集群 我正在尝试遵循帮助文档 https cloud elastic co help 它说您可以按如下方式发布文档 curl https
  • Elastic Beanstalk 添加多个 ssl 证书

    我有一个 Docker Django api 应用程序 可以从多个域 abc xyx com 或 def lmn com 调用 我已从 Elastic beanstalk 中的配置控制台成功添加了 abc xyz com 的 ssl 证书
  • NEST 1.0:请参阅 Fiddler 上的请求

    我刚刚更新到 NEST 1 0 我在远程服务器 不是本地主机 上有 Elastic Search 通常我在使用 Fiddler 发送和接收请求时没有任何问题 更新后 bammm 没有检测到任何请求 但我的应用程序发出这些请求没有任何问题 你
  • Elasticsearch Nest 通配符查询(带空格)

    简洁版本 我想使用 Nest 编写一个弹性搜索查询来获取完整的索引项 ContentIndexables在我的例子中作为我的自定义类型 已被索引 该查询受 some string 术语查询的约束 即 String StartsWith 其中
  • Elastic Search 索引经常被删除[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在 google cloud 上对个人项目运行弹性搜索 并将其用作我的应用程序的搜索索引 从最近三天开始 索引就被神秘地删除了 我不知
  • Elasticsearch 通过 id 获取不起作用但文档存在

    我在 elasticsearch 1 2 0 最近从 1 0 1 升级 上看到 ids 的奇怪行为 搜索检索我的文档 显示 id 的正确值 终端 curl myServer 9200 global search q someField so
  • 适用于elasticsearch 7.0.1 和 kibana 7.0.1 的 docker-compose.yml

    我在 Windows 10 上将 Docker Desktop 与 Linux 容器结合使用 并希望通过 docker compose 文件启动最新版本的 elasticsearch 和 kibana 容器 使用 6 2 4 等旧版本时一切

随机推荐

  • kudu clickhouse 添加字段删除字段

    impala 或hive 给指定kudu库中的表添加列 修改列并调整列位置 添加列 alter TABLE fact cpu supply category add columns supplier name string COMMENT
  • C语言—数据类型

    文章目录 1 基本数据类型 2 数组 字符数组和字符串 2 1 数组 2 2 字符数组与字符串 3 枚举类型 4 结构体和共用体 4 1 结构体 4 2 共用体 5 拓展 5 1 结构体内存分配 5 1 1 以结构体中占字节数最大的数据类型
  • IDEA和GIT关于文件中LF和CRLF问题

    问题描述 项目软件安装shell脚本上git仓库管理 但拉取后 上linux运行报错 问题思考 根据描述信息可以查看到 r字样 初步判别为换行符导致 1 将脚本文件移动至notepad 中 通过视图 gt 显示符号 gt 显示所有符号 一顿
  • 【Leetcode】111. 二叉树的最小深度

    题目描述 题解 递归遍历 记录深度 然后贪心地去更新结果 取min 考虑到这里还不够 需要加一层叶节点的判断 必须当前节点是叶子结点才能够做res的更新 否则可能会碰到这种情况 根结点左边没有子树 根结点右边有子树 结果递归下去发现深度是1
  • 轻量级网络:ResNeXt

    目录 insight Method Template Revisiting Simple Neurons Aggregated Transformations Model Capacity Experiments Experiments o
  • NVIDIA TensorRT简介

    一 NVIDIA TensorRT简介 二 NVIDIA TensorRT下载 根据自己硬件配置下载对应版本即可 本文以8 4 1为例 网址 https developer nvidia com nvidia tensorrt downlo
  • 分享一组开关按钮

    先看效果 再看代码
  • 网址备份

    1 搜索网站 http www google com 全球最强大的搜索网站 在语言学习中 它的功能至少包括 搜索新词可用之语境 确认某种搭配或用法是否准确 通过同时输入中文及 English 寻找可能存在的双语介绍 查询文学作品译本 了解某
  • Qt下QString与int 之间相互转换

    QString与int 之前相互转换 1 QString 转int QString str 100 int tmp str toInt 2 int 转QString int tmp 100 QString str QString numbe
  • python爬虫14:总结

    python爬虫14 总结 前言 python实现网络爬虫非常简单 只需要掌握一定的基础知识和一定的库使用技巧即可 本系列目标旨在梳理相关知识点 方便以后复习 申明 本系列所涉及的代码仅用于个人研究与讨论 并不会对网站产生不好影响 目录结构
  • 记linux内核处理bootargs到内核并加载模块时传入参数(module_param_named()等)

    昨晚 一网友问我如何把LCD反转一下输出 顿时不会 只会去看之前的dm3730的linux2 6 32的内核 偶然发现直接设置bootargs的参数到内核也许就可以啦 Linux以内核模块为核心 自动编译如系统后 所以的类似init cal
  • Webpack运行报错 Module parse failed

    自己本地项目运行报错 因为项目中使用package lock json固定了版本 项目中axios使用的0 21 1版本 可以正常运行 当删除package lock json执行npm install 然后axios版本为0 21 4 运
  • matlab filter函数_MATLAB 低通滤波器 low pass filter

    1 lowpass 函数 注意 只有2018年之后的matlab才有lowpass bandpass 函数 lowpass x fpass fs x 一维信号 fpass 截止频率 fs 采样频率 例子 两个频率的信号 一个是50HZ 振幅
  • air硬盘扩容 macbook_「技巧」苹果电脑硬盘拓展的5种方法,你知道吗

    前言 这是官网最新的MacBook Pro 13 提供的前两种配置 9999元起售 差价1500元 一样的外观 一样的处理器和内存 除了硬盘容量之外 其他配置全部相同 为了128G的容量多花1500元钱 值得吗 从成本上来说 是不值得的 同
  • 欧拉角与四元数

    以下文章摘自wiki百科 对于在三维空间里的一个参考系 任何坐标系的取向 都可以用三个欧拉角来表现 参考系又称为全局坐标系 是静止不动的 而局部坐标系则固定于刚体 随着刚体的旋转而旋转 参閲右图 设定 x y z轴为全局坐标系的参考轴 称
  • 软件程序流程图使用规范

    软件程序流程图使用规范 Amorphous 博客园 cnblogs com 目录 一 程序流程图的作用 二 画流程图常用软件 三 流程图中使用的符号 四 流程图采用的常用符号 五 循环流程图的画法 六 程序流程图的高级用法 七 基本结构 八
  • 算法训练day43

    文章目录 1049 最后一块石头的重量 II 求最大重量 思路分析 代码实现 494 目标和 求组合方法数 思路分析 动规方法 代码实现 总结思考 474 一和零 求二维背包的最大物品数 思路分析 代码实现 思考总结 1049 最后一块石头
  • springmvc / /* /img/**等问题

    在配置springmvc的前端控制器 DispatcherServlet的时候有三种配置方式 action 访问以 action结尾 由DispatcherServlet进行解析 第二种 所以访问的地址都由DispatcherServlet
  • 用Vmware和vm tools虚拟机装Linux Ubuntu16 配置anaconda python3环境 安装tensorflow/tflearn

    Authoried by Monana Contact me via hemonan vip 163 com 本教程适合虚拟机 也适合不用虚拟机直接用Linux系统的 0 安装前的准备答疑 1 很多人都会有疑问 我到底在虚拟机里装linux
  • filebeat 解析日志 并发送到Elasticsearch

    起先 是出于了解我的网站逐步前行STEP的访问情况而做一个Nginx日志统计分析的功能 首选的就是ELK 但是 由于Logstash占用内存和CPU占有率都不是我的小服务器能承受的 转而将logstash换成filebeat 因为fileb