ES系列之Logstash实战入门

概述

作为ELK技术栈一员,Logstash用于将数据采集到ES,通过简单配置就能把各种外部数据采集到索引中进行保存,可提高数据采集的效率。

原理

数据源提供的数据进入Logstash的管道后需要经过3个阶段:

  • input:负责抽取数据源的数据,这个过程一般需要包含数据源的连接方式、通信协议和抽取间隔等信息,目的是将原始数据源源不断地接入数据管道。
  • filter:将抽取到数据管道的数据按照业务逻辑的需要进行数据转换,例如添加或删除部分字段、修改部分字段的数据内容等。
  • output:将过滤后的数据写入数据的目的地,在大多数情况下,数据会被写入ES索引,也可把数据写入文件或其他地方。

安装

从官网下载解压即可使用,找到bin目录下的脚本文件,双击即可完成安装。

目录

以版本为例,目录如下:

  • bin:包含各种二进制形式的可执行脚本,如Logstash的启动脚本、插件脚本
  • config:各种配置文件
  • data:Logstash脚本执行时默认的数据目录
  • lib:Logstash运行时的库文件
  • logs:Logstash运行时产生的日志文件
  • logstash-core:包含Logstash的关键组件
  • logstash-core-plugin-api:包含Logstash的插件API
  • modules:包含Logstash拥有的模块文件
  • tools:包含Logstash运行时可用的工具组件
  • vendor:包含Logstash运行时依赖的Ruby环境
  • x-pack:包含Logstash的X-Pack插件扩展内容

配置

logstash.yml

命令行启动会覆盖logstash.yml里的配置:

配置说明
path.data配置Logstash运行时产生的临时数据目录,默认为data目录
pipeline.workers从临时队列中消费数据进行过滤处理的线程数
pipeline.batch.size单个线程能够多从队列中一次性消费的事件数目,默认值125
pipeline.ordered控制数据流是否有序输出,若为talse则不能保证数据有序向外输出;若为true则只启用一个工作线程进行消费,保证数据有序。默认值为auto,只有在工作线程数设置为1时才保证有序
path.config指定启动的数据采集脚本的目录
config.reload.automatic若为true,则自动检查并加載最新的采集脚本,修改采集脚本后可以避免重启Logstash实例;若为talse,则采集脚本修改后需重启Logstash才能生效
queue.type用于设置缓冲队列的类型,默认队列保存在内存中,若设置为persisted则会将队列数据持久化地存储到磁盘上
path.logs配置Logstash运行时产生日志的目录,默认是安装目录中的logs目录
dead_letter_queue.enable配置是否开启死亡消息队列功能,默认不开启。如果开启,则会把处理失败的数据持久化地存储到磁盘上以便将来有机会重新执行

jvm.options

jvm.options文件主要用于调整Logstash的JVM堆内存大小,默认值为1GB。通常这个值应该配置为4GB~8GB,最好不要超过机器物理内存大小的一半。性能调优时,可动态调整此配置并观察数据抽取速度与内存使用率,在两者之间取得平衡。

pipelines.yml

在一个Logstash进程中运行多个数据管道,即同时执行多个采集脚本,有两种方法:

  • pipelines.yml配置文件,指明每个数据管道的配置参数,没有声明的配置,则使用logstash.yml中配置:
- pipeline.id: test
 pipeline.workers: 1
 pipeline.batch.size: 1
 path.config: "a.config"
- pipeline.id: another_test
 queue.type: persisted
 path.config: "/tmp/logstash/*.config"
  1. 在命令行中指定不同的数据目录来执行脚本:
.\bin\logstash -f .\a.conf --path.data=.\data1
.\bin\logstash -f .\b.conf --path.data=.\data2

组件

input

包括如下插件:

  • stdin:表示在命令行接收用户的输入
  • file:读取文件
  • generator:产生指定的或随机的数据流
  • jdbc:从数据库读取数据,需配置JDBC几个要素,如渠道包路径,驱动类全路径名,数据库链接URL(用户名和密码可单独配置)

filter

包括如下插件:

  • grok:使用模式匹配的数据抽取
  • date:从字段中解析时间戳等
  • mutate:
  • geoip:通过来访者的IP能定位其地理位置等信息
  • kv:键值对

output

包括如下插件:

  • stdout:打印输出到控制台。rubydebug是一个编解码器,常用于开发者观察和调试数据管道中的各个字段内容
  • file:输出到文件
  • elasticsearch:存储到ES

除了上面几种,还支持通知类:

  • pagerduty:警报系统工具
  • nagios:开源的网络监视工具
  • zabbix:提供分布式系统监视以及网络监视功能
  • email:告警邮件

在这里插入图片描述

实战

配置文件由输入->过滤->输出三部分组成,每部分都是由插件构成,每个插件负责处理日志的不同过程:

input {
  ...
}
filter {
  ...
}
output {
  ...
}

采集Nginx日志

采集Nginx日志到ES,nginx-log.conf配置文件:

input {
  file {
    path => "D:/nginx-1.16.1/logs/access.log"
    start_position => "beginning"
  }
}
filter {
  Grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
}
output {
  stdout {
    codec => rubydebug
  }
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "nginx-log"
    action => "index"
  }
}

start_position设置为beginning表示第一次从头开始读取日志文件,如果不进行此设置,则默认file-input插件只读取新增的日志记录

Grok插件,将数据流的message字段按照COMBINEDAPACHELOG的格式解析成多个结构化的字段

增量抽取表数据

要实现对数据库表数据的增量抽取,前提条件是表结构要有递增时间字段或自增长主键。每次抽取完数据,Logstash会把最后一条数据的时间或数字写入文件作为抽取标记,下次抽取时只抽取该时间或数字之后的新数据。

实例配置文件jdbc.conf

input {
  jdbc {
    jdbc_driver_library => "D:\\bin\\mysql-connector-j-8.3.0.jar"
    jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://localhost:3305/sakila?serverTimezone=GMT%2B8"
    jdbc_user => "root"
    jdbc_password => "root"
    statement => "SELECT actor_id,first_name,last_name,date_format(last_update, ‘%Y-%m-%d %H:%i:%S’) as last_update from actor where last_update > :sql_last_value"
    record_last_run => true
    use_column_value => true
    tracking_column_type => "timestamp"
    tracking_column => "last_update"
    last_run_metadata_path => "./actor"
    schedule => "* * * * *"
  }
}
filter {
  mutate {
    remove_field => ["@timestamp", "@version"]
  }
  mutate {
    add_field => {
      "whole_name" => "%{first_name}-%{last_name}"
    }
  }
}
output {
  stdout {
    codec => rubydebug
  }
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "actor"
    document_id => "%{actor_id}"
    action => "index"
  }
}

使用mutate过滤器,删除数据流中的两个字段@timestamp和@version,以防止它们出现在索引中。也可以新增字段whole_name表示拼接first_namelast_name

statement里的SQL语句末尾加上where条件,表示只查询last_update字段大于最后一次抽取标记的数据。record_last_run设置为true,表示要保存抽取标记,抽取标记保存在last_run_metadata_pathtracking_column_type设置为timestamp表示抽取标记字段是时间类型的,如果选择自增长数字主键作为抽取标记,则设置为numeric。tracking_column用于指定抽取标记的列名称,use_column_value设置为true表示使用数据的内容作为抽取标记,否则使用最后一次查询的时间作为抽取标记。

加密敏感配置

上面抽取数据库表的配置里含有敏感字段如密码等,Logstash支持加密敏感配置。

执行命令:.\bin\logstash-keystore create。执行成功后,config目录下会生成密钥存储文件logstash.keystore,用于保存将要加密的变量。新建一个加密变量pwd:.\bin\logstash-keystore add pwd,输入数据库的明文密码,即root。更新配置文件:jdbc_password => "${pwd}",取代原先的明文密码。

进阶

上面的实战只能算是入门。

Logstash用{}来定义区域,支持常用数据类型。Logstash的DSL,如区域、注释、数据类型(布尔值、字符串、数值、数组、哈希)、条件判断、字段引用等,是Ruby风格的。

条件语法

在Logstash中可以用条件语法来支持不同条件做不同的处理,这种方式和其他开发语言基本一致。

用于output:

output {
  # Send production errors to pagerduty
  if [loglevel] == "ERROR" and [deployment] == "production" {
    pagerduty {
    ...
    }
  }
}

插件管理

Logstash提供多种多样,四种类型的插件。每种插件都有不同的属性和语法,需要参考官方文档。随Logstash版本升级,插件也在丰富中。插件可作为独立的软件包存在,插件管理器通过bin/logstash-plugin脚本来管理插件的整个生命周期,如:安装、卸载、升级插件:

# 列出插件
bin/logstash-plugin list
bin/logstash-plugin list --verbose
bin/logstash-plugin list '*namefragment*'
bin/logstash-plugin list --group output
# 安装插件
bin/logstash-plugin install logstash-output-kafka
# 更新插件
bin/logstash-plugin update
bin/logstash-plugin update logstash-output-kafka
# 移除插件
bin/logstash-plugin uninstall logstash-output-kafka

插件类型:

  • input
  • filter
  • output
  • codec

codec

编解码插件,主要是为了对事件进行处理改变事件的数据内容,是基本的流过滤器,可作为输入或输出的一部分。

codec可使得Logstash更方便地与其他自定义数据格式的产品共存,如graphite(开源的存储图形化展示的组件)、fluent、netflow、collectd(守护进程,是一种收集系统性能和提供各种存储方式来存储不同值的机制),以及使用msgpack、json等通用数据格式的其他产品。

codec有针对avro、cef、cloudfront、cloudtrail、collectd、compress_spooler、dots、edn、edn_lines、es_bulk、fluent、graphite、gzip_lines、json、json_lines、line、msgpack、multiline、netflow、nmap、oldlogstashjson、plain、rubydebug、s3_plain等多种数据来源的插件,可格式化相应的数据。

常用的rubydebug,使用ruby awesome print库来解析日志格式。

自定义插件

参考

  • Elasticsearch数据搜索与分析实战
  • Elasticsearch技术解析与实战

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库常见理论常见面试题(总结)

一、前言 这里呢,博主会介绍一些平时关于数据库的理论的问题,比如数据库的三级模式两级映射、触发器、范式、存储过程、视图等等概念知识,但是像索引、事务、锁等内容,之前的文章就讲解过了,这里就不作过多的介绍了&am…

Google大模型Bard更名Gemini,现在实力如何?(VS gpt系列)

名人说:一花独放不是春,百花齐放花满园。——《增广贤文》 作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、简要介绍1、Gemini是什么?2、主要特点3、Gemini的版本4、应用潜力5、…

docker容器配置mysql5.7主从复制

介绍 本文将通过docker创建3个mysql数据库容器,实现数据库主从复制功能,三个数据库容器分别为主库mysql-master:3307,从库mysql-slave-01:3308,mysql-slave-02:3309。使用的是mysql5.7版本 1. 拉取mongo镜像 docker pull mysql…

springboot230基于Spring Boot在线远程考试系统的设计与实现

在线远程考试系统设计与实现 摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到…

学不动系列-git-hooks和husky+lintstage

git-hooks 为了保证提交的代码符合规范,可以在上传代码时进行校验。常用husky来协助进行代码提交时的eslint校验。husky是基于git-hooks来实现,在使用husky之前,我们先来研究一下git-hooks。 构建git-hooks测试项目 需要使用git-hooks就需…

网络安全概述(一)

目录 资产保护 资产的类型 资产损失类型 资产保护考虑因素 安全强度、安全代价和侵入可能性的关系 信息安全技术发展 单机系统的信息保密阶段 信息保障阶段 信息保障技术框架IATF PDRR模型 网络攻击类型 阻断攻击、截取攻击、篡改攻击、伪造攻击 被动攻击和主动攻…

【反哺开源】我们计划把“这个”商业化功能贡献给Apache DolphinScheduler

今年,白鲸开源计划将Gitops功能反馈贡献给Apache DolphinScheduler社区,这个功能主要解决了开发、生产环境的同步问题。 在没有这个功能之前,我们只能通过导入导出的方式,以 JSON 文件作为媒介将开发环境的内容同步到生产环境&…

WebSocket介绍与应用

介绍 WebSocket 是基于TCP的一种的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。 HTTP协议和WebSocket协议对比: HTTP是短连接WebSocket是长连接…

K8S中POD的控制器

一、Pod控制器及其功用 Pod控制器,又称之为工作负载(workload),是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试进行重启,当根据重启策略无效&am…

GL绘制自定义线条4_使用OpenGL ES实现钢笔效果

在以前的文章里http://t.csdnimg.cn/TgCtl,我简述了如何使用OpenGL ES实现光滑的粗线条的绘制效果,在闲暇时间我把它再进一步进化,实现了端点长度按照压感大小实现伸缩的逻辑,从而实现了如下的笔锋效果: 书写过程中的效…

python统计分析——逻辑回归

参考资料:用python动手学统计学 逻辑回归即logistic回归。概率分布为二项分布、联系函数为logit函数的广义线性模型叫作logistic回归。解释变量可以有多个,连续型和分类型的解释变量也可以同时存在。 1、logit函数 logit函数的数学式如下,对…

Vue之监测数据的原理(对象)

大家有没有想过,为什么vue可以监测到数据发生改变?其实底层借助了Object.defineProperty,底层有一个Observer的构造函数 让我为大家简单的介绍一下吧! 我用对象为大家演示一下 const vm new Vue({el: "#app",data: {ob…

LNMP架构(搭建论坛+博客)

目录 一、LNMP架构概述 1、LNMP架构的概念 2、LNMP架构的优点 二、编译安装nginx软件 1、准备工作 1.1 关闭防火墙 1.2 安装依赖包 1.3 创建运行nginx用户 1.4 压缩包解压 2、编译与安装 3、添加nginx自启动文件 三、编译安装mysql软件 1、准备工作 1.1 安装mysq…

循环队列的实现

文章目录 循环队列的概念循环队列的实现循环队列的判空和判满链表or数组 循环队列的概念 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓…

网站文章被百度快速收录的工具

百度是中国最主要的搜索引擎之一,对于网站管理员来说,网站文章被百度快速收录是至关重要的,因为这直接影响着文章的曝光和网站的流量。然而,许多网站管理员都会问一个常见的问题:文章百度收录需要几天?在这…

【HTML】HTML基础1(第一个网站!)

目录 软件使用 HTML的基本结构 案例示范 用记事本编写网页 软件使用 注释&#xff1a;<!-- -->中的内容是注释内容&#xff0c;自己写代码的时候可以没有&#xff01; HTML的基本结构 <!DOCTYPE html> <!-- 文档声明&#xff0c;位于文档最前面位置 -->…

STM32 IIC协议基础概念

文章目录 前言一、IIC协议介绍二、IIC硬件框图和程序层次三、IIC协议1.IIC协议通信流程2.IIC的引脚为什么需要加入上拉电阻3.IIC的引脚为什么需要配置为开漏输出 四、STM32 IIC硬件结构总结 前言 本篇文章将带大家学习IIC通信协议的一些基础概念和使用。 一、IIC协议介绍 I2…

国产数据库兼容性认证再下两城,极狐GitLab 国产适配更进一步

近日&#xff0c;极狐GitLab 与两大国产数据库 TDSQL 和人大金仓完成兼容性认证。极狐GitLab 在国产化适配、国产化生态建设上有了进一步的发展。 极狐GitLab 团队分别和 TDSQL 和人大金仓数据库团队做了严格的测试验证&#xff0c;完成了这两大国产数据库和极狐GitLab 企业级一…

面试题JS篇

目录 Js 基本数据类型有哪些Ajax 如何使用如何判断一个数据是 NaN&#xff1f;Js 中 null 与 undefined 区别闭包是什么&#xff1f;有什么特性&#xff1f;对页面会有什么影响JS中模块化的方法Js 中常见的内存泄漏什么是事件冒泡&#xff1f;如何阻止事件冒泡&#xff1f;事件…

服务器git安装python包失败,如何手动下载github项目包并安装到虚拟环境中(简单易懂)

背景&#xff1a; 想要复现一个项目&#xff0c;建立好虚拟环境后&#xff0c;准备安装项目需要的包&#xff0c;故输入命令pip install -r requirements.txt requirements.txt如下图 其他包我都安装成功了&#xff0c;只有最后一个包失败了&#xff0c;是需要服务器git链接…