成都做网站设,天津网站建设制作品牌公司,wordpress中的类,seo引擎优化软件概述
作为ELK技术栈一员#xff0c;Logstash用于将数据采集到ES#xff0c;通过简单配置就能把各种外部数据采集到索引中进行保存#xff0c;可提高数据采集的效率。
原理
数据源提供的数据进入Logstash的管道后需要经过3个阶段#xff1a;
input#xff1a;负责抽取数…概述
作为ELK技术栈一员Logstash用于将数据采集到ES通过简单配置就能把各种外部数据采集到索引中进行保存可提高数据采集的效率。
原理
数据源提供的数据进入Logstash的管道后需要经过3个阶段
input负责抽取数据源的数据这个过程一般需要包含数据源的连接方式、通信协议和抽取间隔等信息目的是将原始数据源源不断地接入数据管道。filter将抽取到数据管道的数据按照业务逻辑的需要进行数据转换例如添加或删除部分字段、修改部分字段的数据内容等。output将过滤后的数据写入数据的目的地在大多数情况下数据会被写入ES索引也可把数据写入文件或其他地方。
安装
从官网下载解压即可使用找到bin目录下的脚本文件双击即可完成安装。
目录
以版本为例目录如下
bin包含各种二进制形式的可执行脚本如Logstash的启动脚本、插件脚本config各种配置文件dataLogstash脚本执行时默认的数据目录libLogstash运行时的库文件logsLogstash运行时产生的日志文件logstash-core包含Logstash的关键组件logstash-core-plugin-api包含Logstash的插件APImodules包含Logstash拥有的模块文件tools包含Logstash运行时可用的工具组件vendor包含Logstash运行时依赖的Ruby环境x-pack包含Logstash的X-Pack插件扩展内容
配置
logstash.yml
命令行启动会覆盖logstash.yml里的配置
配置说明path.data配置Logstash运行时产生的临时数据目录默认为data目录pipeline.workers从临时队列中消费数据进行过滤处理的线程数pipeline.batch.size单个线程能够多从队列中一次性消费的事件数目默认值125pipeline.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。通常这个值应该配置为4GB8GB最好不要超过机器物理内存大小的一半。性能调优时可动态调整此配置并观察数据抽取速度与内存使用率在两者之间取得平衡。
pipelines.yml
在一个Logstash进程中运行多个数据管道即同时执行多个采集脚本有两种方法
pipelines.yml配置文件指明每个数据管道的配置参数没有声明的配置则使用logstash.yml中配置
- pipeline.id: testpipeline.workers: 1pipeline.batch.size: 1path.config: a.config
- pipeline.id: another_testqueue.type: persistedpath.config: /tmp/logstash/*.config在命令行中指定不同的数据目录来执行脚本
.\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从字段中解析时间戳等mutategeoip通过来访者的IP能定位其地理位置等信息kv键值对
output
包括如下插件
stdout打印输出到控制台。rubydebug是一个编解码器常用于开发者观察和调试数据管道中的各个字段内容file输出到文件elasticsearch存储到ES
除了上面几种还支持通知类
pagerduty警报系统工具nagios开源的网络监视工具zabbix提供分布式系统监视以及网络监视功能email告警邮件 实战
配置文件由输入-过滤-输出三部分组成每部分都是由插件构成每个插件负责处理日志的不同过程
input {...
}
filter {...
}
output {...
}采集Nginx日志
采集Nginx日志到ESnginx-log.conf配置文件
input {file {path D:/nginx-1.16.1/logs/access.logstart_position beginning}
}
filter {Grok {match { message %{COMBINEDAPACHELOG} }}
}
output {stdout {codec rubydebug}elasticsearch {hosts [http://localhost:9200]index nginx-logaction 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.jarjdbc_driver_class com.mysql.cj.jdbc.Driverjdbc_connection_string jdbc:mysql://localhost:3305/sakila?serverTimezoneGMT%2B8jdbc_user rootjdbc_password rootstatement 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_valuerecord_last_run trueuse_column_value truetracking_column_type timestamptracking_column last_updatelast_run_metadata_path ./actorschedule * * * * *}
}
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 actordocument_id %{actor_id}action index}
}使用mutate过滤器删除数据流中的两个字段timestamp和version以防止它们出现在索引中。也可以新增字段whole_name表示拼接first_name和last_name。
statement里的SQL语句末尾加上where条件表示只查询last_update字段大于最后一次抽取标记的数据。record_last_run设置为true表示要保存抽取标记抽取标记保存在last_run_metadata_path。tracking_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 pagerdutyif [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插件类型
inputfilteroutputcodec
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技术解析与实战